Fortran Coder

标题: 函数参数PV(NCM,*)问题 [打印本页]

作者: ssy    时间: 2023-3-19 10:34
标题: 函数参数PV(NCM,*)问题
本帖最后由 kyra 于 2023-3-23 08:18 编辑

SUBROUTINE INTERP(BUF,T,NCF,NCM,NA,IFL,PV)
1, DOUBLE PRECISION BUF(NCF,NCM,*),PV(NCM,*)
这样的函数参数如果是数组,是需要在内部定义一下大小吗
如果是double 或者int这类就不需要
可以这样理解吗
2,INTERP(BUF(IPT(1,11)),T,IPT(2,11),3,IPT(3,11),2,PVSUN)
函数调用时是这样
BUF(IPT(1,11)) 这是什么意思呢
IPT(3,11),IPT(2,11)表示的意思是数组中【3,11】,【2,11】位置的数据嘛
救助大佬解答一下



作者: kyra    时间: 2023-3-19 17:54
本帖最后由 kyra 于 2023-3-19 17:57 编辑

1. 需要在函数里定义一下,给出第一第二维的大小,第三个维度可以不给出。DOUBLE PRECISION BUF(NCF,NCM,*),PV(NCM,*) 这句代码就是在做这个事情。
这种传递数组的方式叫“假定大小”,其最后一个维度的大小假定,说白了就是放任不管,数组越界了也不管。
这是非常危险的,不推荐采用这种方式。

和数据的类型(double或者int)无关,无论什么类型,都是同样的规律。

2. 是的。
但由于Fortran传递的是地址,所以尽管从IPT(1,11)开始传递,其后的数据,也可以被子程序interp访问到。
这种也是很危险的用法,现代Fortran代码是不会这样的。

现代代码,一般都用 Module + 假定形状传递数组。也就是类似 DOUBLE PRECISION BUF(:,:,:),PV(NCM,:) 这样的写法。
详情你可以看 http://fcode.cn/guide-103-1.html






欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2