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"

Respuestas a la pregunta(1)

Su respuesta a la pregunta