Wie kann ich ein Python-Modul aus einem Fortran-Programm mit f2py erstellen?
Frage
Ich versuche, einige SMPS-Dateien mit Python zu lesen, und fand eine Fortran-Implementierung, so dass ich dachte, ich würde ein Schuss f2py. Das Problem ist, dass ich keine Erfahrung mit Fortran haben.
Ich habe erfolgreich gfortran und f2py auf meiner Linux-Box installiert und lief das Beispiel auf Thew f2py Seite, aber ich habe einige Probleme kompilieren und das große Programm ausgeführt wird. Es gibt zwei Dateien, eine mit einem Dateileser-Wrapper und eine mit allen Logik. Sie scheinen einander zu nennen, aber wenn ich kompilieren und verknüpfen oder versuchen f2py, bekomme ich Fehler, dass sie irgendwie nicht zueinander finden können:
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
Ich habe auch versucht, den Namen zu ändern, aber FILE_WRAPPER.F das hat nicht geholfen.
Mit f2py fand ich heraus, dass ich einen Kommentar enthalten musste, um es frei Format und gespeichert diese als neue Datei und versuchte zu übernehmen:
f2py -c -m smpsread smpsread.f90
Ich bekomme eine Menge von Produktion und Warnungen, aber der Fehler scheint dies zu sein:
getctype: No C-type found in "{'typespec': 'type', 'attrspec': ['allocatable'], 'typename': 'node', 'dimension': [':']}", assuming void.
Die Fortran 90 SPMs Leser finden Sie hier .
Jede Hilfe oder Anregungen geschätzt.
Lösung
Ich würde vorschlagen, insgesamt das Fortran Geschäft zu überspringen.
http://myweb.dal.ca/gassmann/smps2.htm
Die MPS Satzaufbau hier beschrieben wird, und sieht relativ einfach auseinander nimmt in Python.
http://myweb.dal.ca/gassmann/smps2.htm#CoreMPSline
Sie werden entsprechende Python-Klassen definieren müssen (oder namedtuples) für alle die ohnehin Daten.
Ich glaube nicht, das Fortran hilft.