fortran变量值是通过我在python中调用fortran模块继承的

时间:2019-05-17 03:21:34

标签: python fortran f2py

我使用f2py封装了一个fortran代码,并在python代码中两次调用了该模块。但是fortran代码中的某些变量值似乎是在这两个调用之间继承的。

我知道fortran变量声明只会执行一次。但是,为什么要在两次模块调用之间保存变量值?每当我在python中调用它时,有什么方法可以重置fortran模块吗?

这是一个测试代码,实际的fortran代码要复杂得多,因此我可能无法简单地清除一些变量。

fortran代码:

subroutine test
integer::aa=1
write(*,*) aa
aa=aa+1
end subroutine test

python代码:

import test
test.test()
test.test()

输出将是:

1
2

预期输出应为:

1
1

我不能简单地使用

integer::a
a=1

由于实际的fortran代码中子例程太多,因此很难检查每个变量声明。因此,我想知道是否有更明智的方法来解决此问题。


编辑: 到目前为止的评论摘要:

  1. python将fortran模块作为库导入,它将在两次调用之间保留在内存中。尚未报告有用的“重新加载”方法。

  2. fortran具有前面提到的隐式保存问题。 cs.rpi.edu/~szymansk/OOF90/bugs.html这是@ Oo.oO

  3. 提供的有用链接

关于在并行计算中使用fortran模块有一个新的相关问题。如@Pierre de Buyl所述,通过f2py生成的模块不是线程安全的。我是python的新手,想知道它是否能够在python的“ multiprocessing”中使用该模块。 (如果这个问题不相关,我将其删除。)


EDIT2: 最近,我尝试使用“数据”命令分配值。而且我发现它具有与前面提到的相同的隐式保存问题。

integer::a
data a/1/
a=a+1
write(*,*) a

结果:

2
3

过去常常认为问题只是在诸如“ integer :: a = 1”之类的命令中出现。

0 个答案:

没有答案