Error en la declaración de tipo derivado: la variable en (1) en este contexto debe ser constante
Tengo un tipo derivado declarado en un módulo como este:
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
En la compilación me sale este error:
Error: Variable 'nrx' at (1) in this context must be constant
¿Cuál es el significado de "debe ser una constante"; ¿debería ser inmutable durante la compilación, es decir, como un PARÁMETRO?
Pero hay otro problema, no puedo declarar PARÁMETROS dentro de los tipos derivados. ¿Cómo lidiar con este error? ¿Mover estos objetos fuera del tipo derivado y hacerlos PARÁMETROS, sería la única opción?
Lo más importante es que deseo entender por qué sucede esto.
Estaba compilando usando gfortran:gfortran -Wall -c "dmotifs.f90"