我的代码有两个Python函数,run()和dudt(u,t,…)。run调用一个C函数odepack_odeint,它调用Fortran子例程LSODA,后者调用另一个C函数ode_function,后者调用dudt。如果dudt中有错误,可以使用PyErr_Print()由ode_函数打印它,但我不知道如何告诉代码停止执行。我试过了
PyErr_Print()
PyErr_SetString(errobj, message)
在ode_函数中,但是代码segfaults。据我所知,接下来要做的是让ode_函数返回NULL或-1或其他值。然而,LSODA期望ode_函数无效。在
这是一个修补程序的尝试scipy.integrate.odeint,基于我之前问过的this question。在
pvon this Github issue for Scipy解释了问题所在。简而言之,C中的setjump()和longjump()原则上可以做到这一点,但这很容易出错,特别是不具有线程安全性。这可能在其他类似的应用程序中使用,但是使用f2py通常是让Fortran代码与Python通信的更好的方法。在
相关问题 更多 >
编程相关推荐