F2py 不喜欢子例程中的显式形状数组



我正在尝试使用f2py从一些Fortran代码编译python模块。该代码使用ifort编译良好,但使用f2py时会出现错误。这是代码(它在两个文件上):

gdat.f90:

MODULE GDAT
PUBLIC
INTEGER :: NX, NY
END MODULE GDAT

第90部分:

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/unitledmodule.c:180:错误:'nx'未声明(首次在此函数中使用)

这似乎是明确成形的阵列CCD_ 3的定义的问题。就像我说的,它在ifort上编译得很好。

我知道这是一段简单的代码,可以用另一种方式编写,但这只是我写的一篇测试文章:我实际上正在尝试编译一组更大的fortran模块,这些模块中有很多这样的显式数组定义(使用中央模块中的变量来定义边界),所以我真的很想让它发挥作用,而不是重写其他代码!

据我所知,您有一个问题,数组的大小必须通过ALLOCATABLE是动态的,或者已经用数值常量或参数固定。

在您的情况下,变量nxny既不是设置的,也不是参数。如果您想将两个文件分别编译成模块(使用ifort而不是f2py),它也应该抱怨。

尝试通过创建签名文件

f2py -m pythmod -h signature.pyf gdat.f90 part.f90

然后将其与一起使用

f2py -c signature.pyf gdat.f90 part.f90 .

这将创建文件pythmod.so.

最新更新