小编Pie*_*rre的帖子

使用 Fortran 可分配数组时如何模拟等效性

我在 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 内部函数,但我不知道如何在这里使用它们。

您能否举例说明如何模仿我需要的这种等效机制?

arrays fortran pointers transfer equivalence

6
推荐指数
1
解决办法
167
查看次数

标签 统计

arrays ×1

equivalence ×1

fortran ×1

pointers ×1

transfer ×1