3

を使用して、いくつかの Fortran コードから python モジュールをコンパイルしようとしていますf2py。コードは ifort で問題なくコンパイルされますが、f2py を使用するとエラーが発生します。コードは次のとおりです (2 つのファイルにまたがっています)。

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 が定義されていないというエラーが表示されます。 /src.linux-x86_64-2.7/untitledmodule.c:180: エラー: 'nx' 宣言されていません (この関数で最初に使用)

明示的に整形された配列の定義に問題があるようARRです。私が言うように、それはifortでうまくコンパイルされます。

これが単純なコードであり、別の方法で記述できることはわかっていますが、これは私が書いた単なるテスト ピースです。 (中央モジュールの変数を使用して境界を定義します)、この他のコードを書き直すのではなく、これを機能させたいと思います!

4

2 に答える 2

1

私がこれを理解している限り、配列のサイズはALLOCATABLE数値定数またはパラメーターを介して動的にするか、既に固定する必要があるという問題があります。

あなたの場合、変数nxnyは設定でもパラメーターでもありません。また、2 つのファイルを別々にモジュールにコンパイルしたい場合 ( 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 に答える