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

时间:2014-07-30 16:41:22

标签: 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
    close(1)
END FUNCTION  f

当我做的时候

print *, f(0.1d+0)

在主程序中,我收到以下错误消息:

Fortran runtime error: Bad real number in item 1 of list input

感谢您的帮助! 干杯

1 个答案:

答案 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