在下面的子例程中,我想传递一个名为str
的字符串变量。如果它是'poly'
,'gaus'
,'slat'
,则它具有预定义的动作(fval =
见代码以下)。我想让用户指定一个函数来使用并将其作为字符串变量传递。在Fortran子程序中传递字符串以执行
也就是说......
如果str = '3*cos(i*t)'
,那么我想有fval
等于3*cos(i*t)
。如何让Fortran将输入的字符串解释为由Fortran执行的命令?
subroutine f(fval, i, t, str)
implicit none
integer, parameter :: ikind = selected_int_kind(8)
integer, parameter :: dbl = selected_real_kind(15,307)
integer(kind = ikind) :: i
real(kind = dbl) :: fval, t
character str*100
if(str .eq. 'poly') then
fval = t**i
elseif(str .eq. 'slat') then
fval = exp(-i*t)
elseif(str .eq. 'gaus') then
fval = exp(-i*t*t)
else
fval = ???
endif
end subroutine
我会建议使用Lua,它很容易在Fortran应用程序中编译并可用于评估字符串。也许https://bitbucket.org/haraldkl/aotus/overview可能会给你一个想法如何做到这一点。 – haraldkl
我不认为选项一会工作。这就是问题所在的“定义其他地方”。我希望这适用于任何函数作为字符串输入。至于你的第二选择 - 我认为这可能正是我所期待的! – drjrm3