我有一个在需要时从 python 调用的 fortran 代码。有时在 fortran 计算中会产生错误,并使用命令 STOP 进行处理,该命令会完全停止 fortran 和 python 代码。但是,我需要 python 才能继续运行。是否有任何其他命令停止 fortran 代码不会影响 python?
问问题
161 次
1 回答
3
在您的情况下,我将使用一些状态变量,并且return
对于子例程,这看起来像
subroutine mySqrt(number, res, stat)
implicit none
real,intent(in) :: number
real,intent(out) :: res
integer,intent(out) :: stat
if ( number < 0.e0 ) then
stat = -1 ! Some arbitrary number
return ! Exit
endif
res = sqrt(number)
stat = 0
end subroutine
对于函数,这有点困难,但你可以通过全局(模块)变量来解决这个问题,但这不是线程安全的(在这个版本中):
module test
integer,private :: lastSuccess
contains
function mySqrt(number)
implicit none
real,intent(in) :: number
real :: mySqrt
if ( number < 0.e0 ) then
lastSuccess = -1 ! Some arbitrary number
mySqrt = 0. ! Set some values s.t. the function returns something
return ! Exit
endif
mySqrt = sqrt(number)
lastSuccess = 0
end function
function checkRes()
implicit none
integer :: checkRes
checkRes = lastSuccess
end function
end module test
这样,您首先评估函数,然后可以检查它是否成功。不需要stop
。您甚至可以使用不同的错误代码。
另一种方法(没有内部变量)是设置不合理的结果(比如这里的负数),并在你的 Python 代码中检查它。
于 2013-10-18T14:44:08.783 回答