изменение размеров массива в fortran

В основном есть два способа передать массивы подпрограмме в 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

где вам нужен явный интерфейс для второго, обычно с использованием модуля.

Из FORTRAN77 , Я привык к первому варианту и читал, что он также наиболее эффективен, если вы передаете весь массив.

Хорошая вещь с явной формой заключается в том, что я также могу вызывать подпрограмму и рассматривать массив как вектор вместо матрицы:

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

Я подумал, есть ли хороший способ делать такие вещи, используя второй интерфейс предполагаемой формы, без его копирования.

14
задан steabert 23 March 2011 в 13:33
поделиться