我有一个Fortran 90子程序,它将函数作为参数,并且我想将该函数的修改版本传递到另一个子程序中。我希望程序看起来像这样:
subroutine foo(f, ...)
real :: pt(2), dir(2)
interface
function f(x) result(y)
real, intent(in) :: x(2)
real :: y
end function f
end interface
pt = ...
dir = ...
!! Somehow create g(x) = f(pt + x*dir)
call bar(g)
end subroutine foo
subroutine bar(g)
interface
function g(x) result(y)
real, intent(in) :: x
real :: y
end function g
end interface
!! Do stuff with g
end subroutine bar
当'g'只需要使用普通变量而不是函数时,我已经成功地做到了类似的事情。在这种情况下,我将其作为全局函数使用,使用全局变量,并在'foo'中分配给这些全局变量。然而,我找不到将'f'变成全局的方法,或将其分配给全局函数。
有人有任何想法如何做到这一点吗?解决方案可以尽可能地hacky。