2 つの引数を持つサブルーチン (最小化用) を作成しようとしています。
x
任意の長さの配列f
その長さの配列を取り、スカラーを返す関数
モジュールの例:
module foo
contains
subroutine solve(x, f)
real, dimension(:), intent(inout) :: x
interface
real pure function f(y)
import x
real, dimension(size(x)), intent(in) :: y
end function
end interface
print *, x
print *, f(x)
end subroutine
end module
そしてテストプログラム:
use foo
real, dimension(2) :: x = [1.0, 2.0]
call solve(x, g)
contains
real pure function g(y)
real, dimension(2), intent(in) :: y
g = sum(y)
end function
end
gfortran は以下で失敗します:
call solve(x, g)
1
Error: Interface mismatch in dummy procedure 'f' at (1): Shape mismatch in dimension 1 of argument 'y'
変更すると、正常にsize(x) => 2
コンパイル (および実行) されます。変更しても問題なく動作します : => 2
。しかし、これらのソリューションのどちらも、私が望むものを得ることができません。
どうすればこれを達成できるかについてのアイデアはありますか?