传递字符串以在Fortran子例程中执行

时间:2011-09-06 22:18:15

标签: string fortran fortran90 subroutine

在下面的子例程中,我想传递一个名为str的字符串变量。如果是'poly''gaus''slat',则它具有预定义的操作(fval = ,请参阅下面的代码)。我想让用户指定一个要使用的函数,并将其作为字符串变量传递。

那是......

如果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

2 个答案:

答案 0 :(得分:2)

你不能。不容易但是你可以做两件事:

答案 1 :(得分:-4)

实际上,这很简单

subroutine f(fval, i, t, str) ... character(len=*), intent(in) :: str ... end subroutine

诀窍是使用intent(in)修饰符定义“未知长度”BUT的虚拟字符串参数。