f2py不喜欢子程序中的显式整形数组
我正在尝试使用f2py
从一些Fortran代码编译python模块。 该代码与ifort编译良好,但在使用f2py时抛出错误。 这里是代码(它是两个文件):
gdat.f90:
MODULE GDAT
PUBLIC
INTEGER :: NX, NY
END MODULE GDAT
part.f90:
SUBROUTINE PART(ARR)
USE GDAT, ONLY: NX, NY
INTEGER, INTENT(IN) :: ARR(NX,NY)
PRINT*, ARR
END SUBROUTINE PART
我使用f2py -c gdat.f90 part.f90 -m part
编译,但是我得到关于nx和ny未被定义的错误,例如:/var/tmp/tmp2hzU6s/src.linux-x86_64-2.7/untitledmodule.c:在函数'f2py_rout_untitled_part'中:/var/tmp/tmp2hzU6s/src.linux-x86_64-2.7/untitledmodule.c:180:错误:'nx'未声明(首次在此函数中使用)
这似乎是明确定形阵列ARR
的定义的问题。 就像我说的,它在ifort上编译得很好。
我知道这是一段简单的代码,可以用另一种方式编写,但这只是我写的一篇测试文章:我实际上正在尝试编译一个更大的一组Fortran模块,这些模块中有很多显式数组定义(使用来自中央模块的变量来定义边界),所以我真的希望得到这个工作,而不是重写这个其他代码!
据我所知,你有问题,数组的大小必须通过ALLOCATABLE
动态变化或已经用数字常量或参数修复。
在你的情况下,变量nx
和ny
既没有设置也没有参数。 如果你想将你的两个文件分别编译成模块(使用ifort
而不是f2py
),它也应该抱怨。
尝试通过创建签名文件
f2py -m pythmod -h signature.pyf gdat.f90 part.f90
然后与它一起使用
f2py -c signature.pyf gdat.f90 part.f90 .
这将创建文件pythmod.so。
链接地址: http://www.djcxy.com/p/96135.html上一篇: f2py doesn't like explicit shaped array in subroutine
下一篇: Problems with f2py: undefined references to module in subroutine