2013-11-14 61 views
0

我正在研究一个项目,其中第一维,第二维和第三维中的数量相同,但第四维中的大小可能有所不同。我想通过构造一个连接这些数组的指针将这些数组分组。包含多个阵列的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,其将被传递给子程序在这个阵列上执行fft。

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

这在Fortran中可能吗?

回答

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语言有任何形式的动态内存分配,这样的前一个阵列到规则的他们,所有的结果得到的是瓜分了在常见的用法。

0

在旧时代,您可以将它们放置在通信区块中并按照假定的大小传递第一个区块。序列关联规则使其工作。这只有在尺寸固定的情况下才有效。

请注意:请不要因为您不喜欢旧程序而降低服务效果,但请确保它不起作用。

+0

好的,我不会让你失望的,但你只是给一个小孩子递了一把剃须刀。因为当我还是一个年轻人时,这是可以接受的,这并不是我今天引以为豪的事情。 –