FORTRAN指针包含多个数组

时间:2013-11-14 23:35:26

标签: arrays pointers fortran

我正在开展一个项目,我在第一,第二和第三维度上有许多相同大小的数组,尽管第四维的大小可能会有所不同。

我想通过构造一个连接这些数组的指针来对这些数组进行分组。

为了使这不那么抽象,假设我有2个数组:

A (size: N1 x N2 x N3 x N4a)
B (size: N1 x N2 x N3 x N4b)

在项目的早期版本中,这些数组被复制到大小为N1 x N2 x N3 x (N4a + N4b)的数组C,然后传递给子程序以在此数组上执行ffts。

我想避免这种复制操作并构造一个指针p,它将包含与先前版本中的数组C相同的数据,但没有显式复制和额外的内存分配。

Fortran有可能吗?

2 个答案:

答案 0 :(得分:1)

没有。指针不能同时指向两个独立的对象。

根据您的情况,可能可行的是从维度(N1,N2,N3,N4a + N4b)的数组开始,然后使A和B关联(指针,存储或参数)到相关的这个初始大阵列的某些部分。

REAL, TARGET :: c(N1,N2,N3,N4a+N4b)
REAL, POINTER :: a(:,:,:,:)
REAL, POINTER :: b(:,:,:,:)

a => c(:,:,:,:n4a)
b => c(:,:,:,n4a+1:)
! Go forth and do things with a and b.

! Then later do things with c.

在黑暗时期,在Fortran拥有任何类型的动态内存分配之前,这种单阵列到规则的所有内容然后被分解出来是常用的。

答案 1 :(得分:0)

在过去,你会把它们放在一个commn块中,并按照假设的大小传递第一个。序列关联规则使其有效。只有在尺寸固定的情况下,这才有效。

注意:请不要仅因为您不喜欢旧程序而进行downvote,而是表明它不起作用。