【发布时间】:2015-07-03 22:03:30
【问题描述】:
我有一个子程序(最小的例子)
subroutine treatfunction(f,input,output)
external, real::f
real, intent(in):: input
real, intent(out):: output
output = f(input) + f(1.0) ! i.e. f has only one argument
end subroutine
一个有两个参数的函数
real function fun(x,a)
real,intent(in)::x,a
现在对于在运行时固定的给定a,我想将fun 传递给treatfunction。所以理想情况下,我想调用类似
call treatfunction(fun(:,a=a0), input=myinput, output=myoutput)
使用gfortran-5 支持的 Fortran2003 功能,最优雅的方法是什么?
当然,我可以在treatfunction 中插入一个可选的虚拟参数a 并使用f(x) 或f(x,a) 调用f,具体取决于子例程主体中的present(a)。但是改变子程序并不优雅。
【问题讨论】:
-
您可以使用带有一个参数的包装函数来执行此操作,然后进一步调用。比如在stackoverflow.com/q/9982657.
-
是的,我还记得 thar 过去有类似的东西,但很难找到。