resueltos programación problemas matriz matrices funciones ejemplo dinamica arreglos allocate arrays fortran subroutine

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.