F2PY,子例程具有回调参数和assumedshape数组参数

2024-10-01 19:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

用fortam的F2PY函数来包装函数。这会导致错误。我使用的是GNU Fortran(GCC)4.8.5 20150623(Red Hat 4.8.5-11)和F2PY版本2和Scientific Linux7.3。在

一个最小的例子是文件'callback.f90':

!file callback.f90 
subroutine sub(arr,func)
implicit none
  integer,intent(in),dimension(:) :: arr
  external func
  integer :: func
  integer :: i

  i = arr(1)
  print *, func(i)
end subroutine sub  

我用

^{pr2}$

这将导致以下错误(翻译自德语):

gfortran:f77: /usr/tmp/tmpsADmTS/src.linux-x86_64-2.7/pymod-f2pywrappers.f
/usr/tmp/tmpsADmTS/src.linux-x86_64-2.7/pymod-f2pywrappers.f:6.19:

            use sub__user__routines                                 
               1
Error: Module file »sub__user__routines.mod« at (1) can't be opened
       for reading: File not found

但是,如果arr不是假定的形状,而是固定的大小,那么这种方法非常有效。使用假定形状数组的F2PY对我来说也很好,只要不涉及回调参数,因此问题似乎是这两者之间的某种交互,我无法理解。在


Tags: 函数srclinuxusr错误callbackintegertmp
1条回答
网友
1楼 · 发布于 2024-10-01 19:19:30

大多数(all?)使用描述符(有时称为dope vectors)实现假定的形状数组伪参数Fortran编译器。这意味着在您的例子中subroutine sub的第一个参数(arr)不仅仅是数组的地址。它是一个包含数组数据地址以及数组边界信息的结构的地址。我不熟悉F2PY的内部工作原理,但也许它不支持描述符参数?(by描述符参数的其他示例是具有指针或可分配属性的参数。)

相关问题 更多 >

    热门问题