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

作者: silverair (木柵福山雅治)   2019-11-25 18:19:00
最近在把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
感謝各位大神。
作者: fragmentwing (片翼碎夢)   2019-11-26 00:55:00
老實說我看不太懂你的程式碼1不過我記得是有很奇耙的技巧會故意少輸入東西來跑但問題是 我記得那個案例是用項在順序上跑的差異來進行操作 而不是針對同一項內的陣列進行操作還有 你的N怎麼從陣列變成整數了這不是不會給過嗎?它不是對到INGT(IST2, 1)這一項嗎?阿哩 好像找到了 我拍一下http://i.imgur.com/8oUs7kH.jpghttp://i.imgur.com/3lTyH84.jpghttp://i.imgur.com/6bhNAPF.jpg好像是這個?雖然書上說很常用,不過我沒用過,這樣交接起來會有麻煩吧w我都手動寫程式碼來降維的
作者: youlieme (仙女吃檳榔)   2019-11-26 14:05:00
fortran傳的只是reference 裡面的資料排列如果清楚陣列不需要一樣大 他會從GT(1,1,ist2)這個位址開始往後取MAXD*2的記憶體當作FT我不知道你的GT是什麼資料 但看起來會是成對或可能是兩兩一組 subroutine只判斷奇數值是否=>T而已
作者: blc (Anemos)   2019-11-26 15:15:00
fortran的陣列在記憶體中是連續的,所以可以從陣列第一個元素跟陣列大小得到整個陣列。就像C的指標那樣。優點是會快很多(以前),現在編譯器最佳化不知道
作者: fragmentwing (片翼碎夢)   2019-11-30 14:44:00
收到推另外我果然還需要精進阿......
作者: blc (Anemos)   2019-12-01 22:57:00
晚了,我也有收到,感謝。

Links booklink

Contact Us: admin [ a t ] ucptt.com