2013-11-14 60 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

好的,我不會讓你失望的,但你只是給一個小孩子遞了一把剃鬚刀。因爲當我還是一個年輕人時,這是可以接受的,這並不是我今天引以爲豪的事情。 –