Ich kenne und habe f2py2e verwendet , um alten Fortran 77-Code zu verpacken, aber ich verstehe, dass es mit neuerem Fortran 95-Code nicht funktioniert. Ich habe recherchiert, was ich verwenden soll, und bin auf fwrap und G3 f2py gestoßen, von denen keine eine Erklärung für ihren aktuellen Status oder ihre Verwendung zu geben scheint (über die grundlegende Verwendung hinaus).
Ich habe auch gesehen, dass die Version von f2py die Option hat, f2py der dritten Generation zu verwenden, aber es wird als nicht funktionsfähig kommentiert. Aus diesem Grund weiß ich nicht, welches Projekt ich für ein Uni-Projekt verwenden soll. Welchen sollte ich für neuen Code verwenden?
PS Dies ist im Grunde die gleiche Frage wie https://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python . Es wurde vorgeschlagen, hier nachzufragen, um bessere Antworten zu erhalten .
Antworten:
Sie können das in Python integrierte ctypes- Modul wie auf fortran90.org beschrieben verwenden . Es ist ziemlich einfach und erfordert keine externen Abhängigkeiten. Auch der ndpointer arg Typ Helfer ist sehr handlich.
quelle
Ich persönlich benutze f2py dafür. Der Fortran, den ich für f2py schreibe, ist jedoch kein wirklich moderner Fortran, sondern ein Freiform-F90 mit Modulen. Ich verwende keine angenommenen Formen oder benutzerdefinierten Typen. Diese Methode funktioniert bei mir immer noch sehr gut.
Es gibt eine Ressource, die ich bezüglich der Verwendung von C als Teil des Wrappings teilen möchte. Der Rest dieser Seite ist ebenfalls zu empfehlen.
quelle
cython
Befehl eine .pyx-Datei kompilieren und die Überlappung zwischen dem Ändern meines Fortran-Codes oder Python-Codes und der schnellen Ausführung verringern kann.Die Dokumentation von f2py ist wirklich nicht so toll. Ich bin gerade dabei, meine eigenen Projekte von f2py nach Cython zu verlagern . Obwohl Cython zum Umbrechen von C-Code verwendet werden kann, stellte ich fest, dass es am nützlichsten ist, um neuen Hochleistungscode zu erstellen. Wenn Sie beabsichtigen, neuen Fortran-Code zu schreiben, ihn zu umbrechen und in Python aufzurufen, empfehle ich, stattdessen Cython zu verwenden. Auf diese Weise können Sie Python-Code schreiben und bei Leistungsengpässen diesen mit geringfügigen Änderungen an Cython übertragen.
quelle
f90wrap baut auf f2py auf und generiert automatisch die Python-Wrapper für die zugrunde liegende Fortran-Codebasis, einschließlich des Zugriffs auf abgeleitete Typen. Eine Reihe von einfachen Beispielen zeigt, wie es funktioniert.
quelle
Du könntest FortWrap benutzen , um dich auf halbem Weg dorthin zu bringen. Dadurch wird eine C ++ - Schnittstelle zu Ihrem Fortran-Code erstellt, die dann mit SWIG umschlossen werden kann , um eine Python-Schnittstelle zu erhalten. Wir tun dies auf einer ziemlich großen Basis von Fortran-Code und es funktioniert ziemlich gut (FortWrap wurde von einem Mitglied unseres Teams für genau diesen Zweck entwickelt).
quelle
fwrap
zielt speziell auf Fortran90 / 95 ab und verwendet einen Teil des gleichen Software-Stacks wief2py
.quelle
f2py
bei F90. Es hat auch eine sehr niedrige Eintrittsbarriere. Ich war froh, es gefunden zu haben.f2py
unterstützt moderne fortran (vermutet geformte Arrays und so), siehe ein BeispielskriptFür Experimente mit fortran-Code würde ich auch IPython magic empfehlen , das einfach zu installieren und sehr praktisch ist (es basiert auch auf f2py).
quelle
Hier ist eine Liste von Fortran-Wrappern für Python:
https://github.com/mgaitan/fortran_magic/issues/4
quelle