arrays - programación - FORTRAN-matriz asignable en subrutina
matriz dinamica fortran (3)
El argumento ficticio de locs es asignable y tiene el atributo INTENT (IN) - el atributo de intención aquí indica que el procedimiento de llamada proporciona información a la subrutina.
Una consecuencia del atributo INTENT (IN) es que no puede cambiar el estado (o valor) de asignación de locs
. Su declaración ALLOCATE está intentando hacer justamente eso.
Estoy tratando de usar una matriz asignable en una subrutina, pero el compilador se queja de que
Error: Dummy argument ''locs'' with INTENT(IN) in variable definition context (ALLOCATE object) at (1)
Lo único que pude encontrar fue que se supone que debo usar una interfaz explícita, lo cual estoy haciendo. Aquí el código relevante para la subrutina:
RECURSIVE SUBROUTINE together(locs, LL, RL)
INTEGER, DIMENSION(:,:), ALLOCATABLE, INTENT(IN) :: locs
INTEGER, INTENT(IN) :: LL, RL
ALLOCATE(locs(LL,RL))
END SUBROUTINE together
El mensaje de error del compilador es uno descriptivo del problema. Con INTENT(IN)
está diciendo que el objeto no cambiará, pero luego intentará ALLOCATE
.
Sí, se requerirá una interfaz explícita para la llamada, pero ese no es el problema.
La norma Fortran 2008 dice en la sección 5.3.10 que
Un objeto nonpointer con el atributo INTENT (IN) no debe aparecer en un contexto de denición variable
La asignación es uno de esos contextos: sección 16.6.7, punto (11).
Intente asignar su matriz en su programa principal, y luego cuando se locs
en su subrutina, use INTENT(INOUT)
para decirle al compilador que también desea cambiar los contenidos de su matriz.