cambiando dimensiones de matriz en fortran

Existen básicamente dos formas de pasar matrices a una subrutina en Fortran 90/95:

PROGRAM ARRAY
INTEGER, ALLOCATABLE :: A(:,:)
INTEGER :: N
ALLOCATE(A(N,N))
CALL ARRAY_EXPLICIT(A,N)
! or
CALL ARRAY_ASSUMED(A)
END PROGRAM ARRAY

SUBROUTINE ARRAY_EXPLICIT(A,N)
INTEGER :: N
INTEGER :: A(N,N)
! bla bla
END SUBROUTINE ARRAY_EXPLICIT

SUBROUTINE ARRAY_ASSUMED(A)
INTEGER, ALLOCATABLE :: A(:,:)
N=SIZE(A,1)
! bla bla
END SUBROUTINE ARRAY_ASSUMED

donde necesita una interfaz explícita para el segundo, generalmente mediante el uso de un módulo.

Desde FORTRAN77, estoy acostumbrado a la primera alternativa, y leí que esta también es la más eficiente si pasa toda la matriz.

Lo bueno de la forma explícita es que también puedo llamar a una subrutina y tratar la matriz como un vector en lugar de una matriz:

SUBROUTINE ARRAY_EXPLICIT(A,N)
INTEGER :: N
INTEGER :: A(N**2)
! bla bla
END SUBROUTINE ARRAY_EXPLICIT

e preguntaba si hay una buena manera de hacer ese tipo de cosas usando la segunda interfaz de forma supuesta, sin copiarla.

Respuestas a la pregunta(6)

Su respuesta a la pregunta