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


27

我知道,并且已经使用f2py2e封装了一些旧的Fortran 77代码,但是我的理解是它不适用于更新的Fortran 95代码。我研究了我应该使用的东西,并且碰到了fwrap和G3 f2py,它们似乎都没有给出关于它们当前状态或使用方式的任何解释(除了基本用法之外)。

我还看到f2py版本可以选择使用第三代f2py,但是它被评论为不起作用。鉴于此,我不知道应该为uni项目使用哪个项目。我应该为新代码使用哪一个?

PS这基本上是与/programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python相同的问题,建议在这里提问可能会提供更好的答案。


2
“现代Fortran”
meawoppl

Answers:


19

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


8
那就对了。或者使用Cython代替fortran90.org页面上描述的ctypes。
昂德里杰·塞蒂克

@OndřejČertík,绝佳的网站!有在互联网上的现代Fortran的一些宝贵的资源,但是这绝对是我的最爱之一与fortranwiki.org一起
astrojuanlu

6

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

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


1
2015年更新:相当长一段时间以来,我所有的Fortran接口都是通过Cython和iso_c_binding实现的。这样可以使Fortran代码本身保持现代化,同时仅向Cython / C公开真正需要的内容。
AlexE 2015年

2016年更新:与使用cython命令编译.pyx文件,减少更改fortran代码或python代码与快速使一切正常工作之间的重叠相比,iso_c_binding选项现在变得更容易。
cbcoutinho

5

f2py的文档确实不是很好。我正在将自己的项目从f2py移到Cython的过程中。尽管Cython可用于包装C代码,但我发现它对于创建新的高性能代码最有用。如果您打算编写新的Fortran代码,将其包装并在Python中调用,则建议您改用Cython。这样,您就可以编写Python代码,并且如果存在性能瓶颈,则只需进行少量修改就可以将其转移到Cython。


因此,不是使用Fortran,而是将Cython用于较慢的代码位?
James Tocknell,2012年

2
究竟!我发现它容易得多,因为您的Cython代码可以自然地与Python对象和Numpy数组进行交互(而无需额外的转换层)。如果要使用自己的数据结构,这特别有用。让f2py中的Python类用于Fortran或C并不是一件容易的事。
Leo Uieda 2012年

3

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


2

您可以使用FortWrap将您带到一半。这将为您的Fortran代码创建一个C ++接口,然后可以将其与SWIG封装在一起以获得Python接口。我们在相当大的Fortran代码基础上执行此操作,并且效果很好(实际上,FortWrap是由我们团队的成员为此目的而开发的)。


1

fwrap专门针对Fortran90 / 95并使用与相同的软件栈f2py


3
最后提交到该项目的GitHub库是2010年年底
杰夫Oxberry

1
虽然我同意这令人沮丧,但我仍然取得了不错的成功。开箱即用,比f2pyF90 更具功能性。它还具有非常低的进入门槛。我很高兴找到它。
MRocklin

1

f2py支持现代的fortran(假定形状的数组等),请参见示例脚本

另外,对于使用fortran代码的实验,我建议使用IPython magic,它易于安装且非常方便(它也依赖于f2py)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.