[问题] 传入副程式阵列维度不同? 悬赏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