对于一篇学术论文,作者提供了他们的结果代码,所以我试图运行他们的代码。编译时,会出现一个错误,指出函数不能用作参数。下面我提供了错误似乎指出的代码的相关部分(特别是消息是:"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或任何编程,并想知道某人是否可以提供建议。
答案 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就足够了)。