Question

I have a fortran code called from python whenever it is needed. Sometimes an error is produced in the fortran computations and it is handled with the command STOP, which completely stops both fortran and python codes. However, I need python to continue running. Is there any other command that stopping the fortran code does not affect python?

Was it helpful?

Solution

In your case I would use some status variables and return, for subroutines this would look like

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

For functions this is a little difficult, but you could solve this by global (module) variables, but this is not thread-safe (in this version):

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

This way, you first evaluate the function, and then can check whether it succeeded, or not. No stop required. You could even work with different error codes.

Another way (without internal variables) would be to set implausible results (like a negative number here), and check for that in your Python code.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top