Fortran モジュールでグローバル定数を操作しているときに、f2py の奇妙な動作を発見しました。
次のようなファイルtest.f90があるとしましょう
module test1
real, parameter :: a = 12345.
end module test1
module test2
real*8, parameter :: a = 6789.
end module test2
これを f2py でラップすると、
f2py -c -m mymod test.f90
そして走っている
python -c "import mymod as m; print m.test1.a; print m.test2.a"
私は得る
12345.0
6789.0
これはあなたが期待するものです。real ステートメントと real*8 ステートメントはどちらも同じように動作します。
私の実際のプロジェクトでは、倍精度の明示的な使用を指定して、コンパイラ フラグを使用して Fortran コードをコンパイルする必要があります。Fortran では、これで問題なく動作します。上記のコードを次のようにコンパイルすると
f2py --f90flags="-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8" -c -m mymod test.f90
私は結果として得ます
python -c "import mymod as m; print m.test1.a; print m.test2.a"
0.0
6789.0
これは実際には奇妙です。最初のケースではグローバル変数は初期化されず、値はゼロです。これはバグですか、それとも f2py で倍精度の明示的な処理を指定する別の方法がありますか?