Fortran 需要读取文件并将其内容分配给函数

Fortran 需要读取文件并将其内容分配给函数,fortran,fortran90,Fortran,Fortran90,我是Fortran 90和堆栈溢出的新手,我有一个简单的问题(我想)。 我有一个名为Eq1的文件,其中包含以下Fortran数学表达式: x**2 目标是从文件中输入此表达式,并在fortran内部的函数中使用它。我试过以下方法 REAL FUNCTION f(x) IMPLICIT NONE REAL (kind =8), INTENT(IN) :: x open(1,file = 'Eq1',status='old') read(1,*) f

我是Fortran 90和堆栈溢出的新手,我有一个简单的问题(我想)。
我有一个名为Eq1的文件,其中包含以下Fortran数学表达式:

x**2

目标是从文件中输入此表达式,并在fortran内部的函数中使用它。我试过以下方法

REAL FUNCTION  f(x)
    IMPLICIT  NONE
    REAL (kind =8), INTENT(IN) :: x

    open(1,file = 'Eq1',status='old')
        read(1,*) f
    close(1)
END FUNCTION  f
当我这么做的时候

print *, f(0.1d+0)
在主程序中,我收到以下错误消息:

Fortran runtime error: Bad real number in item 1 of list input
谢谢你的帮助!
Cheers

Fortran不像某些脚本语言(如Python)那样具有字符串求值功能

您必须将自己的字符串写入表达式解析器,这不是一项简单的任务

一个简单的解决方法是使用调用Python并使用其输出:

REAL FUNCTION  f(x)
    IMPLICIT  NONE
    REAL (kind =8), INTENT(IN) :: x
    CHARACTER(LEN=200) EXP
    CHARACTER(LEN=400) CMD
    open(1,file = 'Eq1',status='old')
        read(1,*) exp
    close(1)
    WRITE(CMD, "(A,f14.7, A, A, A)") 'python -c "x=',x,';print ',trim(exp), '" > out.txt'
    CALL system(CMD)
    open(2,file = 'out.txt',status='old')
        read(2,*) f
    close(2)
END FUNCTION  f

program calc
  implicit none
  real f
  print *, f(0.1d+0)      
  print *, f(2.0d+0)
  print *, f(3.0d+0)
  print *, f(4.0d+0)
end program calc
输出:

9.9999998E-03
4.000000
9.000000
16.00000

好的,我可以告诉你这个错误是从哪里来的-你的函数被定义为实函数(这意味着
f
是实函数),但是你试图读入字符。要从文件中获取文本,您需要定义一个字符串并读入其中。尽管如此,我认为您正在尝试做的事情一点也不琐碎,我将把它留给其他人来决定是否可能。您所拥有的并不是一个简单的问题。您似乎想要解析字符串并从中提取函数。你当然可以用Fortran来做这件事,但是你必须更加努力地工作。与大多数编译语言一样,Fortran不会将字符串转换为代码。对于新手来说,这是一项相当困难的任务。包含“eval()”的语言更适合这些操作。