用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对我来说也很好,只要不涉及回调参数,因此问题似乎是这两者之间的某种交互,我无法理解。在
大多数(all?)使用描述符(有时称为dope vectors)实现假定的形状数组伪参数Fortran编译器。这意味着在您的例子中subroutine sub的第一个参数(arr)不仅仅是数组的地址。它是一个包含数组数据地址以及数组边界信息的结构的地址。我不熟悉F2PY的内部工作原理,但也许它不支持描述符参数?(by描述符参数的其他示例是具有指针或可分配属性的参数。)
相关问题 更多 >
编程相关推荐