Fortran 需要读取文件并将其内容分配给函数
我是Fortran 90和堆栈溢出的新手,我有一个简单的问题(我想)。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
我有一个名为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
谢谢你的帮助!
CheersFortran不像某些脚本语言(如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()”的语言更适合这些操作。