我应该使用哪个包来用 Python 包装现代 Fortran 代码?

计算科学 Python 正则
2021-12-21 20:28:23

我知道并使用f2py2e来包装一些旧的 Fortran 77 代码,但我的理解是它不适用于较新的 Fortran 95 代码。我研究了我应该使用什么,并且遇到了 fwrap 和 G3 f2py,它们似乎都没有对它们的当前状态或如何使用它们(超出基本用法)给出任何解释。

我也看到f2py的版本有使用第三代f2py的选项,但被评论为没有功能。鉴于此,我不知道应该将哪个项目用于 uni 项目。我应该将哪一个用于新代码?

PS这基本上与https://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python相同的问题,建议在这里提问可能会给出更好的答案.

4个回答

您可以使用fortran90.org上描述的 Python 内置ctypes模块。它非常简单,不需要任何外部依赖项。此外,ndpointer arg 类型帮助器非常方便。

我个人为此使用 f2py。但是,我为 f2py 编写的 Fortran 并不是真正的现代 Fortran,而是带有模块的自由格式 F90。我不使用假定的形状或自定义类型。这种方法对我来说仍然很有效。

关于使用 C 作为包装的一部分,我想分享一个资源。本页的其余部分也值得推荐。

f2py 的文档真的不是很好。我正在将自己的项目从 f2py 转移到Cython尽管 Cython 可用于包装 C 代码,但我发现它对于创建新的高性能代码最有用。如果您的意图是编写新的 Fortran 代码、包装它并在 Python 中调用它,我建议您改用 Cython。这样您就可以编写 Python 代码,如果存在性能瓶颈,您只需稍作修改即可将其转移到 Cython。

f90wrap建立在 f2py 之上,并自动为底层 Fortran 代码库生成 Python 包装器,包括对派生类型的访问。一组简单的例子展示了它是如何工作的。