我正在开展一个项目,其中数值模拟程序的结果将被优化以适应测量的行为。我编写了一些自由形式的Fortran例程来提取特定数据并执行一些初步计算,这些工作正常。出于优化目的,我计划使用此处提供的本地搜索算法:http://mat.uc.pt/~zhang/software.html#bobyqa
我将一些参数(如维度和参数向量)传递给Fortran 77例程,问题是,传输的参数数组不会到达另一端。只有第一个元素才会显示在维度为1的数组中。
我在How to use Fortran 77 subroutines in Fortran 90/95?中找到了一些有用的答案,并尝试在模块中包含所有77个代码,但我仍然没有完成它。 显式接口有助于将所有变量都放入level1 f77子例程中,但是当将东西传递给另一个(level2)时,假设要构造假定的大小数组,则生成一维数组。
我首先使用ifort -c -fixed(并尝试-f77rtl)编译f77代码,然后使用f90并将它们全部链接在一起。
为什么假设的大小数组没有正确生成?供应商提供的测试程序运行良好!
如何在不使用显式接口的情况下以定义的方式传递所有需要的数据?或者有没有办法定义合适的接口?
这里有一些示例代码:
program main_f90
use types
implicit none
real(dp) :: array(N)
interface
subroutine sub77_level1(array)
implicit real*8 (a-h,o-z)
real*8, intent(inout) :: array
dimension array(:)
end subroutine
end interface
[...fill array...]
call sub77_level1(array)
end
subroutine sub77_level1(array)
implicit real*8 (a-h,o-z)
integer i1, i2, i3, i4
dimension array(:)
[...modify array...]
call sub77_level2(array(i1), array(i2), array(i3), i4)
return
end
subroutine sub77_level2(array_1, array_2, array_3, i4)
implicit real*8 (a-h,o-z)
dimension array_1(*) array_2(*) array_3( i4, * )
[...modify...]
call sub_f90( <some other arrays, intent(in / out)> )
return
end