python-在许多扩展模块之间使用F2PY共享Fortran 90模块数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-在许多扩展模块之间使用F2PY共享Fortran 90模块数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1618字,纯文字阅读大概需要3分钟。
内容图文
![python-在许多扩展模块之间使用F2PY共享Fortran 90模块数据](/upload/InfoBanner/zyjiaocheng/669/568a1e1c18894c3181b54196f77dbea5.jpg)
我想在许多自编译的F2PY扩展模块之间共享位于Fortran 90模块中的数据. F2PY的文档说这不可能,因为Python通常是如何导入共享库的.
F2PY generates wrappers to common blocks defined in a routine
signature block. Common blocks are visible by all Fortran codes linked
with the current extension module, but not to other extension modules
(this restriction is due to how Python imports shared libraries).[…]
The F2PY interface to Fortran 90 module data is similar to Fortran 77
common blocks.
由于这个事实,我必须使用大约100个嵌套的Fortran 90子例程,因此我需要在它们之间共享数据.有什么建议可以实现吗?
我考虑过将每个变量作为参数传递给每个子例程,然后再返回变量,但这听起来有点不对劲.
解决方法:
尽管只是一种反复试验的方法,但是如何将变量模块和所有子例程放入一个文件中并使用f2py(* 1)进行编译?例如…
mytest.f90:
include "vars.f90"
include "sub1.f90"
include "sub2.f90"
vars.f90:
module vars
integer :: n = 100
end
sub1.f90:
subroutine sub1
use vars, only: n
implicit none
print *, "sub1: n = ", n
end
sub2.f90:
subroutine sub2
use vars, only: n
implicit none
print *, "sub2: n = ", n
print *, "adding 1 to n"
n = n + 1
print *, "n = ", n
end
编译:
f2py -c -m mytest mytest.f90
测试:
$/usr/local/bin/python3
>>> import mytest
>>> mytest.vars.n
array(100, dtype=int32)
>>> mytest.sub1()
sub1: n = 100
>>> mytest.sub2()
sub2: n = 100
adding 1 to n
n = 101
>>> mytest.sub2()
sub2: n = 101
adding 1 to n
n = 102
>>> mytest.vars.n = 777
>>> mytest.sub2()
sub2: n = 777
adding 1 to n
n = 778
(* 1)在上述情况下,只需将所有文件名赋予f2py就足够了,例如,
$f2py -c -m mytest vars.f90 sub1.f90 sub2.f90
内容总结
以上是互联网集市为您收集整理的python-在许多扩展模块之间使用F2PY共享Fortran 90模块数据全部内容,希望文章能够帮你解决python-在许多扩展模块之间使用F2PY共享Fortran 90模块数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。