En Fortran 90, ¿las dimensiones de la matriz deben declararse de antemano?
¿Es necesario declarar las dimensiones de la matriz antes que cualquier otro código? Por ejemplo, he escrito el siguiente código de ejemplo simplificado:
PROGRAM mytest
IMPLICIT NONE
INTEGER :: i, j, k, mysum
! Let array c be a k-by-k**2 array
! Determine k within the program by some means...for example,
mysum=0
DO i=1, 3
mysum=mysum+1
END DO
k=mysum
REAL, DIMENSION(k, k**2) :: c
WRITE(*,*) "k=", k
WRITE(*,*) "k**2=", k**2
WRITE(*,*)
DO i=1,size(c,1)
WRITE(*,"(100(3X,F3.1))") (c(i,j), j=1,size(c,2))
END DO
END PROGRAM mytest
El punto que estoy tratando de hacer es que me gustaría crear una matrizc
es decirk
-pork**2
de tamaño yk
solo está determinado por otros cálculos dentro del código; @k
no se conoce desde el principio.
Pero, el código anterior me da el siguiente mensaje de error en tiempo de compilación:
mytest.f90:13.31:
REAL, DIMENSION(k, k**2) :: c
1
Error: Unexpected data declaration statement at (1)
where línea 13 en mi código es la línea donde finalmente declaroc
: REAL, DIMENSION(k, k**2) :: c
.
Por otro lado, si en cambio declarok
y especifique sus dimensiones por adelantado,
PROGRAM mytest
IMPLICIT NONE
INTEGER :: i, j, k, mysum
REAL, DIMENSION(3,9) :: c
! Let array c be a k-by-k**2 array
! Determine k within the program by some means...for example,
mysum=0
DO i=1, 3
mysum=mysum+1
END DO
k=mysum
WRITE(*,*) "k=", k
WRITE(*,*) "k**2=", k**2
WRITE(*,*)
DO i=1,size(c,1)
WRITE(*,"(100(3X,F3.1))") (c(i,j), j=1,size(c,2))
END DO
END PROGRAM mytest
Obtengo la salida correcta:
k= 3
k**2= 9
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
Pero, como no sék
de antemano, no puedo hacer exactamente esto en mi código real. ¿Hay alguna forma de "declarar" la matrizc
inicialmente, sin especificar sus dimensiones, y luego especificar las dimensiones una vez que el valor dek
¿es conocida