微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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 举报,一经查实,本站将立刻删除。