前言存儲多維陣列
的Fortran程序,我正在寫應處理取決於ndims
1D,2D和3D的問題,它可以是1,2或3並從輸入文件中讀取。
在這些情況下的量/所關注IES可以(一個可以被命名爲phi
)存儲在數組
-
秩
- ,
- 或在等級陣列3(
ALLOCATABLE(:,:,:)
,第三維在2D中等於1或者第二和第三維在1D中等於1);
dims
(
ALLOCATABLE(:)
或
ALLOCATABLE(:,:)
或
ALLOCATABLE(:,:,:)
)的
這兩種情況在this answer都有很好的解釋。第一種方法對我來說似乎更加優雅,但在下面我假設第二種方法,這絕對簡單。
這些量必須由幾個子程序上進行操作(如mysub
)沿ndims
尺寸(沿「鉛筆」應該給圖形的想法),所以我應該叫像
SELECT CASE (ndims)
! 3D case
CASE (3)
DO j = ...
DO k = ...
CALL mysub(phi(:,j,k))
END DO
END DO
DO i = ...
DO k = ...
CALL mysub(phi(i,:,k))
END DO
END DO
DO i = ...
DO j = ...
CALL mysub(phi(i,j,:))
END DO
END DO
! 2D case
CASE (2)
DO j = ...
DO k = ...
CALL mysub(phi(:,j,1))
END DO
END DO
DO i = ...
DO k = ...
CALL mysub(phi(i,:,1))
END DO
END DO
! 1D case
CASE (1)
DO j = ...
DO k = ...
CALL mysub(phi(:,1,1))
END DO
END DO
END SELECT
實際問題
任何人都可以建議我(或幫助我設計!)一種不同的存儲方式phi
(可能涉及派生數據類型?),以便我可以摺疊前面的代碼如下?
DO id = 1, ndims
CALL mysub2(phi,id)
END DO
(這裏作用mysub
的地方。)
所以,問題是我應該如何存儲披,這樣我就可以用第二個替代第一碼?
也許我可以回到前言,並決定按照1點,在這種情況下會更容易編寫一個通用的接口。我認爲,這只是一種「隱藏」SELECT CASE
會做什麼的方法。哪兩個(SELECT CASE
/通用INTERFACE
)會更有效率?
這些是面對這個問題只有兩個辦法?
這正在成爲一種常見的東西。最近問昨天 - http://stackoverflow.com/questions/38058080/fortran-choosing-the-rank-of-an-allocatable-array。 –
問題有明顯的關聯,但這個問題的答案不會回答這個:這個問題,如果我理解正確的,是關於如何選擇一個數組的等級;我的問題更多地是關於「編寫不依賴於其所操作陣列的等級的代碼的最佳方式」。 –