2
我有一个很大的数组,数组非常大,我必须使用“allocatable”并在fortran中进行分配。例如,Fortran 90:可分配数组不能出现在“EQUIVALENCE”中
complex(8),allocatalbe :: E0(:, :, :)
allocate(E0(1000,1000,1000))
我需要在我们的代码到所述阵列的形式变换从E0(1000,1000,1000)
到E1(1000*1000,1000)
,即,变换的三维数组E0(M,N,L
)成其相应的二维E1(M*N,L)
。 但是,由于其“可分配”,我无法使用语句:Equivalence (E0,E1)
。 由于内存有限,我不想定义或分配另一个阵列,例如E1(M*N,L)
。
有没有人有办法实现:Equivalence(E0,E1)
?
谢谢!你使用内部函数RESHAPE。看起来有点复杂,特别是它需要动态分配两个数组:E(M,N,L)和E(M * N,L)。整数(4),可分配,维数(:,:,:) :: E01 integer(4),allocatable,dimension(:,:) :: E02 分配(E01(M,N,L)) 分配(E02(M * N,L)) !定义E01(M,N,L) E02 =重塑(E01,(/ M * N,L /)) 但是,我希望E01和E02共享相同的内存。即等同性(E01,E02)。它们在计算机内存中完全一样。你有另一种方法吗? – Micheal
重整内在函数仅用于示例代码中以定义(给出值)示例数组“a”。它不用于改变该数组的形状。您可以将该''a = ...''语句更改为您选择的任何其他语句来定义''a''(例如,如果您想要''a = 0'')。具有不同等级的数组是“重映射”过程的“b”伪参数。实际参数'a''具有三级,虚拟参数''b''具有二级。两个参数的存储在大多数Fortran处理器上都是相同的。 – IanH