3

我有一个在需要时从 python 调用的 fortran 代码。有时在 fortran 计算中会产生错误,并使用命令 STOP 进行处理,该命令会完全停止 fortran 和 python 代码。但是,我需要 python 才能继续运行。是否有任何其他命令停止 fortran 代码不会影响 python?

4

1 回答 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 回答