如果这是一个微不足道的问题,我很抱歉.我的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
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为num它不是常数.重要的是要知道我传递的数组大小是多少.
编辑:我正在使用f95编译器.
Edit2:我没有运气就尝试过High Performance Mark的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
输出应该是两行,其中写入10和10.相反,我得到了这个:
/scpc:niels: #$ f95 err.f
/scpc:niels: #$ ./a.out
0
10
/scpc:niels: #$
Run Code Online (Sandbox Code Playgroud)
Hig*_*ark 11
Fortran数组'知道'它们有多长,你不应该将数组及其长度作为不同的参数传递.(除非,就是说,你正在使用旧的Fortran代码.)今天你会写这样的东西
function test(arr)
real, dimension(:), intent(in) :: arr
...
integer :: arrsize
...
arrsize = size(arr)
...
Run Code Online (Sandbox Code Playgroud)
如果必须与传递数组大小的旧代码接口,则可以进行这样的调用
call old_fortran_subr(array, size(array, 1), other_arguments)
Run Code Online (Sandbox Code Playgroud)
哦,在我写作的时候,common在你从头开始编写的任何代码中都没有任何关系,这是70年代及以前的一个(正确的)弃用功能.而是使用模块变量.
| 归档时间: |
|
| 查看次数: |
13086 次 |
| 最近记录: |