在 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 中双精度的显式处理?