【发布时间】:2017-12-26 10:38:09
【问题描述】:
我正在尝试使用 F2PY 包装一个 fortran 子例程,该例程将一个函数和一个假定形状的数组作为参数。这会导致错误。我正在使用带有 Scientific Linux 7.3 的 GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11) 和 F2PY 版本 2。
一个最小的例子是文件'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
我将它包装在终端中
f2py -m pymod -h sign.pyf callback.f90
f2py -c sign.pyf callback.f90
这会导致以下错误(翻译自德语):
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 对我来说也可以正常工作,只要不涉及回调参数,因此问题似乎是这两者之间的某种交互,我无法弄清楚。
【问题讨论】:
-
看看这个最近的问题,如果它是相关的stackoverflow.com/questions/44073679/…尝试在这个网站上搜索更多。不幸的是,f2py 在这方面并不理想。
-
@VladimirF:谢谢,虽然我不认为这是相关的,因为我的错误只发生在同时使用回调参数和假定形状数组时。
-
您是否尝试改用
dimension(*)?
标签: python arrays callback fortran f2py