我有一个将函数作为参数的 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”设为全局或将其分配给全局函数的方法。
有人对如何做到这一点有任何想法吗?解决方案可以随心所欲。