【问题标题】:How do I create a python module from a fortran program with f2py?如何使用 f2py 从 fortran 程序创建 python 模块?
【发布时间】:2010-03-17 13:04:12
【问题描述】:

我正在尝试使用 python 读取一些 smps 文件,并找到了一个 fortran 实现,所以我想我会给 f2py 一个机会。问题是我没有使用 fortran 的经验。

我已经在我的 Linux 机器上成功安装了 gfortran 和 f2py,并在 f2py 页面上运行了示例,但是我在编译和运行大程序时遇到了一些麻烦。有两个文件,一个带有文件阅读器包装器,一个带有所有逻辑。他们似乎互相调用,但是当我编译和链接或尝试 f2py 时,我得到了他们以某种方式找不到对方的错误:

f95 -c FILEWR~1.F
f95 -c SMPSREAD.F90 
f95 -o smpsread SMPSREAD.o FILEWR~1.o 

FILEWR~1.o In function `file_wrapper_'
FILEWR~1.F(.text+0x3d) undefined reference to `chopen_'
usrlibgcci486-linux-gnu4.4.1libgfortranbegin.a(fmain.o) In function `main'
(.text+0x27) undefined reference to `MAIN__'
collect2 ld returned 1 exit status  

我也尝试将名称更改为 FILE_WRAPPER.F 但没有帮助。

在使用 f2py 时,我发现我必须添加注释才能使其接受免费格式,并将其保存为新文件并尝试:

f2py -c -m smpsread smpsread.f90

我得到了很多输出和警告,但错误似乎是这个:

getctype: No C-type found in "{'typespec': 'type', 'attrspec': ['allocatable'],  'typename': 'node', 'dimension': [':']}", assuming void.

fortran 90 spms reader can be found here

任何帮助或建议表示赞赏。

【问题讨论】:

    标签: python fortran f2py


    【解决方案1】:

    我建议完全跳过 fortran 业务。

    http://myweb.dal.ca/gassmann/smps2.htm

    此处描述了 MPS 记录布局,并且在 Python 中看起来相对容易区分。

    http://myweb.dal.ca/gassmann/smps2.htm#CoreMPSline

    无论如何,您都必须为所有数据定义适当的 Python 类(或命名元组)。

    我认为 Fortran 没有帮助。

    【讨论】:

    • 好点。 MPS 格式还不错,我已经或多或少地确定了这一点,麻烦从随机扩展开始,其中您可能有许多嵌入式 MPS 规范。我的印象是我会从 fortran 中获取数据结构,在 python 中立即可读,但这可能是我的误解。
    • @Lars Hellemo:Fortran 完全不同(我曾经是一名 Fortran 程序员。)作为 Python 结构,自动翻译不会很聪明。一个工具充其量只能从 Fortran 代码创建命名元组的列表。
    • 你能改写这个问题的标题吗?它具有误导性,因为该线程仅包含有关您的特定问题的信息,与 f2py 无关
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多