如何从用Python编写的FORTRAN访问函数?

时间:2010-03-01 16:20:46

标签: python object compilation fortran

有没有办法在FORTRAN中使用python函数?我得到了一个包含一些函数的python脚本,我需要从FORTRAN代码访问这个函数。

我见过'f2py'允许从Python访问FORTRAN子程序,py2exe将python脚本编译成可执行文件。那'py2f'还有什么吗?可以将Python脚本编译为目标文件吗?然后我可以将它与FORTRAN代码链接起来。

例如,将'mypython_func.py'视为包含函数的Python脚本,将'mainfortran.f'视为调用Python函数的主程序FORTRAN代码。我想要:  从'mypython_func.py'编译到'mypython_func.o',从'mainfortran.f'编译到'mainfortran.o'(>> gfortran -c mainfortran.f),然后链接这些文件(>> gfortran -c mainfortran.o mypython_func.o -o myexec.exe)。这样的事情可能吗?

感谢您的时间和帮助。

文斯

2 个答案:

答案 0 :(得分:6)

不要浪费大量时间进行编译和翻译。这样做。

  1. Fortran Part 1程序为Python编写了一个文件。写到标准输出。叫这个F1

  2. Python读取文件,进行Python计算,将响应写入Fortran文件。叫这个P.

  3. Fortran Part 2程序从stdin中读取一些东西。这些是Python计算的结果。

  4. 连接他们

    F1 | python p.py | F2
    

    您不会重新编译任何内容。另请注意,所有三个并发运行,这可能是一个相当大的加速。

    Python的中间位应该是这样的。

    import sys
    import my_python_module
    for line in sys.stdin:
        x, y, p, q = map( float, line.split() )
        print ("%8.3f"*6) % ( x, y, z, p, q, my_python_module.some_function( x, y, p, q ) )
    

    围绕函数的简单包装器,它读取stdin并以Fortran友好的格式写入stdout。

答案 1 :(得分:4)

@ S.Lott的解决方案是要走的路。但要回答你的问题---是的,可以从Fortran调用Python。我首先使用Cython的C API公开Python,然后使用iso_c_binding模块为这些C函数创建Fortran接口,最后从Fortran调用它。它是非常重量级的,并且在大多数实际问题中都不值得(使用管道方法),但它是可行的(它适用于我)。