繁体   English   中英

f2py不喜欢子程序中的显式形状数组

[英]f2py doesn't like explicit shaped array in subroutine

我试图使用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_pa​​rt'中:/var/tmp/tmp2hzU6s/src.linux-x86_64-2.7/untitledmodule.c:180:错误:'nx'undeclared(首次在此函数中使用)

这似乎是明确形状的阵列ARR的定义的问题。 就像我说的,它在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM