如何在f2py中将多维函数作为参数传递?

问题描述

我想从python调用一个fortran子例程,在这里我想将一个函数传递给具有数组作为输入和输出的子例程。第一步,我将在一个非常简单的示例上进行尝试,但似乎无法使它正常工作。 F2py在使用此回调函数时似乎有问题。这是我的

subroutine foo(B,A,f,n)
  integer,parameter :: dp=kind(0.d0)

  integer,intent(in)  :: n
  real(dp),intent(out) :: B(n)
  real(dp),intent(in)  :: A(n)

  external f

  interface
      function f(arr) result(res)
        integer,parameter :: dp=kind(0.d0)

        real(dp),intent(in) :: arr(:)
        real(dp)             :: res(size(arr))
      end function 
  end interface

  B = f(A)
end subroutine 

python回调函数可能看起来像这样:

def f(x):
    return np.array([2*x[1],x[0]*x[1]])

当前我遇到错误capi_return is NULL Call-back cb_func_in_foo__user__routines Failed.

编辑:发现对回调f使用子例程而不是函数可以解决此问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)