【发布时间】:2021-07-19 08:59:05
【问题描述】:
如果这是一个微不足道的问题,我很抱歉。我的fortran-fu很差。
在 Fortran 中有没有办法传递数组长度?使用common(据我所知,它相当于global)也是一种选择。我想要的是在主程序中调用带有数组的函数。例如(这是输入的,不是从任何地方复制粘贴的)
program prog
integer num
double precision x(num),v
double precision test
....
v=test(x,num)
....
function test(x,num)
double precision test
integer num
double precision x(num)
test=0.0d0
....
return
end
这不会编译,因为num 不是常量。重要的是要知道我传递的数组大小是多少。
编辑:我使用的是 GNU Fortran 95 编译器。
Edit2:我尝试了高性能标记的解决方案,但没有运气:
program prog
integer v
parameter (v=10)
double precision x(v),test,k
k=test(x)
write (*,*) size(x)
stop
end
function test(x)
double precision, dimension(:),intent(in) :: x
double precision test
write (*,*) size(x)
test = 0.0d0
return
end
输出应该是写入 10 的两行。相反,我得到了这个:
/scpc:niels: #$ f95 err.f
/scpc:niels: #$ ./a.out
0
10
/scpc:niels: #$
【问题讨论】:
-
常见块之外的另一种样式。没有理由在“结束”之前使用“停止”或“返回”。
double precision应该避免并改为real(rp),其中rp可能是rp=kind(1d.0),或者您使用selected_real_kind。另外,缩进旅游代码! -
@VladimirF 谢谢你们的cmets。我使用与 Emacs 相同的缩进。作为您的其他四个 cmets,我正在更新我的 adivsor 代码并且我的 fortran-fu 很低。我怀疑如果我尝试这样做的话,我会造成更多的伤害。