事情如下:
首先,我在内存中分配了一个数组
Real,Allocatable,Target :: Array1D(3)
Array=(/ 3, 7, 0,/)
然后,我想将指针数组指向已分配的数组。
Real,Pointer :: Array3D(:,:,:)
Allocate(Array3D(10,10,10))
例如,我希望(5,5,5)
的元素Array3D
指向(3)
的元素Array1D
。有人可能会认为下一个命令会起作用,并会指出我在0
中评估的值Array3D(5,5,5)
,
Array3D(5,5,5)=>Array1D(3)
但它不起作用,因为FORTRAN认为我指向整个阵列并告诉我它不可能因为它们没有相同的大小
顺便说一句,我使用派生类型实现了几乎相同:
Type varArray3D_p
Real,Pointer :: value
end Type varArray3D_p
Type(varArray3D_p),allocatable :: Array3D_p(:,:,:)
Allocate(Array3D(10,10,10))
有了这个,我现在可以轻松地指出value
Array3D_p(5,5,5)%value=>Array1D(3)
但是,我需要将我的数据指向一个指针数组,这是第一种方式。我认为Array3D
和Array3D_d
几乎使用相同的空间,但我不知道如何将指针转移到我的目的。
编辑:Array3D_p
符合我的目的,因为它将一个巨大的3D数组指向一个只有少量元素的一维数组。但我也希望将其表示为一系列指针,以利用PETSc
的优势函数,这些函数需要一系列指针来管理信息。