我在 Fortran 例程中有 3 个可分配的一维数组,VX(:)、VY(:)、VZ(:),它们都具有相同的大小。
我需要将它们聚合在一个名为 VARXYZ 的二维数组中,并将其发送到修改“矩阵”的例程。下面的代码可以工作,但会强制将内存大小加倍。
SUBROUTINE TEST(VX,VY,VZ)
REAL(8), INTENT(INOUT), DIMENSION(:) :: VX,VY,VZ ! They've been allocated with size N in the main
REAL(8), ALLOCATABLE, DIMENSION(:,:) :: VARXYZ ! The 'matrix'
ALLOCATE(VARXYZ(3,N))
VARXYZ(1,:)=VX(:)
VARXYZ(2,:)=VY(:)
VARXYZ(3,:)=VZ(:)
CALL CHANGE_MATRIX(VARXYZ)
VX(:)=VARXYZ(1,:)
VY(:)=VARXYZ(2,:)
VZ(:)=VARXYZ(3,:)
...
Run Code Online (Sandbox Code Playgroud)
为了避免“双重分配”,我的第一个错误反应是在一维数组和矩阵的 3 个“列”之间使用 EQUIVALENCE,但显然这是不允许的。
经过一番阅读后,我看到有人推荐使用指针和 TRANSFER 内部函数,但我不知道如何在这里使用它们。
您能否举例说明如何模仿我需要的这种等效机制?