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 に答える