我是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
感谢您的帮助! 干杯
答案 0 :(得分:3)
Fortran没有像某些脚本语言那样的字符串评估功能,例如Python的eval()。
您必须将自己的字符串写入表达式解析器,这不是一项简单的任务。
一个简单的解决方法是使用eval()调用Python的SYSTEM并使用它的输出:
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