Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Fortran子例程中传递要执行的字符串_String_Fortran_Fortran90_Subroutine - Fatal编程技术网

String 在Fortran子例程中传递要执行的字符串

String 在Fortran子例程中传递要执行的字符串,string,fortran,fortran90,subroutine,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

在下面的子例程中,我想传递一个名为
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

你不能。不容易。不过,您可以做两件事:

  • 首先,可以使用函数指针。这里有一个简单的例子-其思想是您可以传递在别处定义的函数名。这可能足以解决你的问题

  • 您可以调用一个库来解析字符串并计算表达式。我对fortran一无所知,但您的fortran编译器可能支持调用c例程。对于gfortran(可能还有其他的),这看起来是可行的-(示例fortran代码位于)


    • 你不能。不容易。不过,您可以做两件事:

      • 首先,可以使用函数指针。这里有一个简单的例子-其思想是您可以传递在别处定义的函数名。这可能足以解决你的问题

      • 您可以调用一个库来解析字符串并计算表达式。我对fortran一无所知,但您的fortran编译器可能支持调用c例程。对于gfortran(可能还有其他的),这看起来是可行的-(示例fortran代码位于)


      • 实际上,这很简单

        子程序f(fval,i,t,str)
        ...
        字符(len=*),意图(in)::str
        ...
        结束子程序
        


        诀窍是将伪字符串参数定义为“长度未知”,但使用
        intent(in)
        修饰符

        实际上,这很简单

        子程序f(fval,i,t,str)
        ...
        字符(len=*),意图(in)::str
        ...
        结束子程序
        


        诀窍是将伪字符串参数定义为“长度未知”,但使用
        intent(in)
        修饰符

        我建议使用Lua,它很容易在Fortran应用程序中编译,可以用来计算字符串。也许会给你一个想法,如何做到这一点。我认为第一种方法行不通。问题在于“在别处定义”。我希望这适用于任何作为字符串输入的函数。至于你的第二个选择——我想这正是我想要的!我建议使用Lua,它很容易在Fortran应用程序中编译,可以用来计算字符串。也许会给你一个想法,如何做到这一点。我认为第一种方法行不通。问题在于“在别处定义”。我希望这适用于任何作为字符串输入的函数。至于你的第二个选择——我想这正是我想要的!我认为,对这个问题的进一步关注将表明,这不是一个答案。这个问题要求解决解析字符串以获取其包含的数学表达式的问题。我认为对这个问题的进一步关注将表明这不是一个答案。该问题要求解决解析字符串中包含的数学表达式的问题。