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

Respuestas a la pregunta(1)

Su respuesta a la pregunta