関数を引数として取るFortran90サブルーチンがあり、その関数の変更バージョンを別のサブルーチンに渡したいと思います。プログラムを次のようにしたいと思います。
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」をグローバルにする方法、またはグローバル関数に割り当てる方法が見つかりません。
誰かがこれを行う方法について何かアイデアがありますか?解決策はあなたが望むようにハッキーにすることができます。