У меня есть производный тип, объявленный в таком модуле:
MODULE dmotifs
TYPE :: PRM
INTEGER, PRIVATE :: nsp=4,nrx=8,maxprx=4
REAL, PRIVATE :: cref=1e-6,tref=1
REAL, DIMENSION(nrx,maxprx) :: k
REAL :: input
END TYPE PRM
CONTAINS
SUBROUTINE unreg(y,param,r,s)
TYPE(PRM), INTENT(IN) :: param
REAL, DIMENSION(param%nsp), INTENT(IN) :: y
INTEGER, DIMENSION(param%nsp,param%nrx), INTENT(OUT) :: s=0
REAL, DIMENSION(param%nrx,1), INTENT(OUT) :: r=0
REAL :: mOut, mCtrl, pOut, pCtrl
mOut=y(ind_mOut)
mCtrl=y(ind_mCtrl)
pOut=y(ind_pOut)
pCtrl=y(ind_pCtrl)
! <some operations on "r" and "s">
RETURN
END SUBROUTINE unreg
END MODULE dmotifs
При компиляции я получаю эту ошибку:
Error: Variable 'nrx' at (1) in this context must be constant
Что означает выражение «должно быть константой»; должен ли он быть неизменным во время компиляции, т.е. как ПАРАМЕТР?
Но есть еще одна проблема: я не могу объявлять ПАРАМЕТРЫ в производных типах. Как бороться с этой ошибкой? Будет ли удаление этих объектов из производного типа и превращение их в ПАРАМЕТРЫ единственным вариантом?
Самое главное, я хочу понять, почему это происходит.
Я компилировал с помощью gfortran: gfortran -Wall -c "dmotifs.f90"
nrx
. - person Vladimir F   schedule 12.02.2015