3

我正在尝试使用f2py. 该代码使用 ifort 编译得很好,但在使用 f2py 时会抛出错误。这是代码(它超过两个文件):

gdat.f90:

  MODULE GDAT
  PUBLIC

  INTEGER :: NX, NY

  END MODULE GDAT

部分.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: In function 'f2py_rout_untitled_pa​​rt': /var/tmp/tmp2hzU6s /src.linux-x86_64-2.7/untitledmodule.c:180: error: 'nx' undeclared (第一次在这个函数中使用)

显式数组的定义似乎有问题ARR。就像我说的,它在 ifort 上编译得很好。

我知道这是一段简单的代码,可以用另一种方式编写,但这只是我写的一个测试片:我实际上是在尝试编译一个更大的 fortran 模块集,这些模块在(使用来自中央模块的变量来定义边界),所以我真的很想让它工作而不是重写其他代码!

4

2 回答 2

1

据我了解,您遇到的问题是,数组的大小必须是动态的,ALLOCATABLE或者已经通过数值常量或参数固定。

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

于 2013-04-04T08:06:15.100 回答
0

尝试通过创建签名文件

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

然后使用它

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

这将创建文件pythmod.so

于 2017-07-20T16:01:04.387 回答