作为fortran 90中的参数

时间:2014-06-02 10:36:23

标签: fortran fortran90

对于一篇学术论文,作者提供了他们的结果代码,所以我试图运行他们的代码。编译时,会出现一个错误,指出函数不能用作参数。下面我提供了错误似乎指出的代码的相关部分(特别是消息是:"error 997 - An internal FUNCTION, such as FOC, cannot be used as an actual argument")。

.........

 function foc(ain)
    implicit none
    real*8:: ain, foc

    foc =  plterm+meru(ain,i)-upap(n,ain,i)
  end function foc

...........

  yy1 = zbrent(foc,a(np-1),yexp,errrel)

其中zbrent是主程序调用的子程序。如有必要,我可以附上整个代码。

FUNCTION zbrent (func,x1,x2,tol)
  implicit none
  real(8), external:: func
  real(8), intent(in):: x1,x2,tol

END FUNCTION zbrent

我不熟悉Fortran或任何编程,并想知道某人是否可以提供建议。

1 个答案:

答案 0 :(得分:2)

密钥在错误消息中:

An internal FUNCTION, such as FOC, cannot be used as an actual argument

您的函数foc显然是一个内部函数。它放在主程序中的单词contains之后或其他程序中。

禁止在Fortran 2003及更早版本中将内部过程作为参数传递。 Fortran 2008放宽了这一点。

将该功能放入模块中即可。外部的一个也适用于这种情况,但我不推荐那么多(这意味着只需将foc移到一切之外)。

或者使用为此实现Fortran 2008规则的编译器(最近版本的gfortran就足够了)。