我在fortran 77中有第三部分代码,并且我在fortran 90中编写了一个子程序,我想与此代码进行交互。我发现变量没有从一个子程序正确传递到另一个子程序。我认为原因是两个程序中双精度的定义不兼容。
我希望返回到f77的变量是double precision
。我应该在f90中使用哪个真正的定义?我正在使用selected_real_kind(p=15,r=307)
编辑:
我已在f90中将声明更改为double precision
,并且我已验证double precision
变量已正确传递。当我将可分配数组从f90传递到f77
最初在代码f77中分配数组。然后我在f90中分配一些可分配的数组,然后将它们传递给f77,但这不起作用
f77代码:
program oldprog
double precision da(100)
call sub(da)
end
subroutine sub(da)
double precision da(*)
call mynewsub(da)
end
f90代码:
subroutine mynewsub(da)
implicit none
double precision, allocatable:: da(:)
allocate(da(100))
da = 1.0
end subroutine mynewsub
我想跳过mynewsub中的分配,但后来我得到了SIGSEGV
答案 0 :(得分:1)
您的mynewsub
接受数组为可分配参数。
这需要Fortran 95中的显式接口,并且在Fortran 90中是不可能的,甚至没有谈到根本没有allocatable
的FORTRAN 77。
你不能这样做。
在您的主程序中
program oldprog
double precision da(100)
数组是静态的。它不能以任何方式在任何版本的Fortran中重新分配,它永远是固定的。
你应该考虑让它可以在任何地方分配代码更新到Fortran 95的相关部分。