run() と dudt(u, t, ...) という 2 つの Python 関数を含むコードがあります。run は、C 関数 odepack_odeint を呼び出します。これは、Fortran サブルーチン LSODA を呼び出します。LSODA は、dudt を呼び出す別の C 関数 ode_function を呼び出します。dudt にエラーがある場合、PyErr_Print() を使用して ode_function で出力できますが、コードに実行を停止するように指示する方法がわかりません。私は試した、
PyErr_Print()
PyErr_SetString(errobj, message)
ode_function で、しかし、コード segfaults。私が理解しているように、次に起こることは、ode_function が NULL か -1 か何かを返すことです。ただし、LSODA は ode_function が void であることを想定しています。
これは、私が以前に尋ねたこの質問に基づいて、scipy.integrate.odeint にパッチを適用する試みです。