2010-03-17 50 views
3

我想用python读取一些smps文件,并发现fortran实现,所以我想我会给f2py一个镜头。问题是我没有Fortran的经验。如何使用f2py从fortran程序创建python模块?

我已经在我的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

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

回答

0

我建议完全跳过fortran业务。

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

的MPS记录布局如下描述,看起来比较简单的用Python挑开。

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

你必须反正所有的数据定义相应的Python类(或namedtuples)。

我不认为Fortran有帮助。

+0

好点。 MPS格式并不算太差,我已经或多或少已经钉住了,麻烦始于随机扩展,其中包含许多嵌入式MPS规范的可能性。 我得到了印象,我将从python中立即读取fortran的数据结构,但这可能是我的一个误解。 – Lars 2010-03-17 14:58:09

+0

@Lars Hellemo:Fortran非常不同(我曾经是一位Fortran程序员)。自动化翻译作为Python结构不会很聪明。最好的一个工具可以从Fortran代码创建命名元组列表。 – 2010-03-17 15:41:51

+0

你能改写这个问题的标题吗?这是误导,因为此线程只包含有关您的具体问题的信息,并且与f2py无关 – 2010-11-01 16:02:09

相关问题