Fortran で関数ポインタを使用することは可能ですか? 現在、次のような行を含むコードがあります。
subroutine flag(iflag,a,b)
integer n, a, b, ii, iflag
do ii = 1, n
if (iflag.eq.0) a+b
else a-b
end do
return
end
変数 "n" は非常に大きな値を持っているため、このコードを実行するには、"if" コマンドで多くの時間を無駄にしているように感じます。コードで次のようなことを行うように、関数ポインターのようなものを書くことは可能ですか (それが何を意味するのかわかりません)。
subroutine flag(iflag,a,b)
*depending on the iflag the subroutine flag is automatically
precompiled to call either flag_plus or flag_minus*
return
end
subroutine flag_plus(a,b)
integer n, a, b, ii
do ii = 1, n
a+b
end do
return
end
subroutine flag_minus(a,b)
integer n, a, b, ii
do ii = 1, n
a-b
end do
return
end
可能であれば、「if」ループを回避することで多くの時間を節約できます。このようなことはリモートで可能ですか?