[問題] 傳入副程式陣列維度不同? 懸賞1000P...

看板Fortran作者 (那真是太諷刺了紹安)時間4年前 (2019/11/25 18:19), 4年前編輯推噓7(7019)
留言26則, 3人參與, 4年前最新討論串1/1
最近在把fortran90改成C 但本身不是學f90,網路上資料能找到的也有限... 最近碰到一個奇怪的問題, CALL GATEOPEN(QU, HO, INGT(IST2, 1), GT(1, 1, IST2), MDC_GT); 這邊的GT應該是一個三維陣列中取出來的REAL值 但是在GATEOPEN這個subroutine中 SUBROUTINE GATEOPEN( T,F,N,FT,MAXD ) ..... INTEGER, INTENT(IN) :: N,MAXD REAL(SP), INTENT(IN) :: T,FT(MAXD,2) ... 我實在是看不懂為何這邊會變成FT(MAXD,2) 後面使用也是變成二維陣列的形式 DO I = 1, N IF( T <= FT(I,1) ) THEN F = FT(I,2) RETURN END IF END DO 求解...懸賞1000P 感謝各位大神。 -- 我的意中人是個蓋世英雄,有一天他會踩著七色的雲彩來娶我 我猜中了前頭,可是我猜不著這結局。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.124.44.60 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1574677143.A.D89.html

11/26 00:55, 4年前 , 1F
老實說我看不太懂你的程式碼
11/26 00:55, 1F
這是project在用的軟體的其中一部分,我的任務是轉成C 所以基本上這個Code應該是沒問題

11/26 00:57, 4年前 , 2F
1不過我記得是有很奇耙的技巧
11/26 00:57, 2F

11/26 00:57, 4年前 , 3F
會故意少輸入東西來跑
11/26 00:57, 3F

11/26 01:00, 4年前 , 4F
但問題是 我記得那個案例是用項在順序上跑的差異
11/26 01:00, 4F

11/26 01:00, 4年前 , 5F
來進行操作 而不是針對同一項內的陣列進行操作
11/26 01:00, 5F

11/26 01:04, 4年前 , 6F
還有 你的N怎麼從陣列變成整數了
11/26 01:04, 6F

11/26 01:04, 4年前 , 7F
這不是不會給過嗎?
11/26 01:04, 7F

11/26 01:05, 4年前 , 8F
它不是對到INGT(IST2, 1)這一項嗎?
11/26 01:05, 8F
我的理解是INGT(IST2, 1) 應該等於C語言的INGT[IST2][0]吧 INGT是一個儲存int的二維陣列 已經在其他地方宣告過了@@ 所以進到副程式應該是整數沒錯啊 GT則是一個儲存real的三維陣列, GT(1, 1, IST2)取出來應該是一個real數,可是進到副程式他怎麼宣告成陣列

11/26 01:11, 4年前 , 9F
阿哩 好像找到了 我拍一下
11/26 01:11, 9F

11/26 01:12, 4年前 , 10F

11/26 01:13, 4年前 , 11F

11/26 01:14, 4年前 , 12F

11/26 01:15, 4年前 , 13F
好像是這個?雖然書上說很常用,不過我沒用過,這樣
11/26 01:15, 13F

11/26 01:15, 4年前 , 14F
交接起來會有麻煩吧w
11/26 01:15, 14F

11/26 01:21, 4年前 , 15F
我都手動寫程式碼來降維的
11/26 01:21, 15F
感謝大大

11/26 14:05, 4年前 , 16F
fortran傳的只是reference 裡面的資料排列如果清楚
11/26 14:05, 16F

11/26 14:05, 4年前 , 17F
陣列不需要一樣大 他會從GT(1,1,ist2)這個位址開始
11/26 14:05, 17F

11/26 14:05, 4年前 , 18F
往後取MAXD*2的記憶體當作FT
11/26 14:05, 18F

11/26 14:05, 4年前 , 19F
我不知道你的GT是什麼資料 但看起來會是成對或可能
11/26 14:05, 19F

11/26 14:05, 4年前 , 20F
是兩兩一組 subroutine只判斷奇數值是否=>T而已
11/26 14:05, 20F
好的我研究一下,看起來可能是這個問題

11/26 15:15, 4年前 , 21F
fortran的陣列在記憶體中是連續的,所以可以從陣列第一個
11/26 15:15, 21F

11/26 15:16, 4年前 , 22F
元素跟陣列大小得到整個陣列。就像C的指標那樣。
11/26 15:16, 22F

11/26 15:55, 4年前 , 23F
優點是會快很多(以前),現在編譯器最佳化不知道
11/26 15:55, 23F
原來如此,感謝大大 ※ 編輯: silverair (220.141.70.95 臺灣), 11/26/2019 22:49:06

11/30 14:44, 4年前 , 24F
收到推
11/30 14:44, 24F

11/30 14:44, 4年前 , 25F
另外我果然還需要精進阿......
11/30 14:44, 25F

12/01 22:57, 4年前 , 26F
晚了,我也有收到,感謝。
12/01 22:57, 26F
文章代碼(AID): #1TswgNs9 (Fortran)
文章代碼(AID): #1TswgNs9 (Fortran)