¿Qué paquete debo usar para envolver el código Modern Fortran con Python?


27

Sé y he usado f2py2e para envolver un código Fortran 77 antiguo, pero entiendo que no funciona con el código Fortran 95 más nuevo. He investigado qué debo usar, y he encontrado fwrap y G3 f2py, ninguno de los cuales parece dar una explicación de su estado actual o cómo usarlos (más allá del uso básico).

También he visto que la versión de f2py tiene la opción de usar la f2py de tercera generación, pero se comenta que no es funcional. Dado esto, no sé qué proyecto debo usar para un proyecto uni. ¿Cuál debo usar para el nuevo código?

PD Esta es básicamente la misma pregunta que /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python , se sugirió que preguntar aquí podría dar mejores respuestas .


2
"Modern Fortran"
meawoppl

Respuestas:


19

Puede usar el módulo de tipos incorporados de Python como se describe en fortran90.org . Es bastante sencillo y no requiere dependencias externas. Además, el ndpointer arg type helper es muy útil.


8
Está bien. O use Cython en lugar de ctypes como se describe en la página fortran90.org.
Ondřej Čertík

@ OndřejČertík, ¡gran sitio web! Hay pocos recursos valiosos en Fortran moderno en Internet, pero este es definitivamente uno de mis favoritos junto con fortranwiki.org
astrojuanlu

6

Yo personalmente uso f2py para esto. Sin embargo, el Fortran que escribo para f2py no es un Fortran realmente moderno, sino un F90 de forma libre con módulos. No uso formas asumidas o tipos personalizados. Este método todavía funciona muy bien para mí.

Hay un recurso que quiero compartir sobre el uso de C como parte del ajuste. El resto de esta página también se recomienda.


1
Actualización de 2015: desde hace bastante tiempo, toda mi interfaz Fortran ocurre a través de Cython e iso_c_binding. Esto permite mantener el código Fortran moderno a la vez que expone solo lo que realmente se necesita para Cython / C.
AlexE

Actualización de 2016: la opción iso_c_binding se está volviendo más fácil ahora que simplemente puedo compilar un archivo .pyx usando el cythoncomando, y reduciendo la superposición entre cambiar mi código fortran o código python y hacer que todo funcione rápidamente.
cbcoutinho

5

La documentación de f2py realmente no es tan buena. Estoy en el proceso de mover mis propios proyectos de f2py a Cython . Aunque Cython se puede usar para envolver el código C, descubrí que es más útil para crear un nuevo código de alto rendimiento. Si su intención es escribir un nuevo código Fortran, envolverlo y llamarlo en Python, le recomiendo que use Cython en su lugar. De esa forma puede escribir código Python, y si hay cuellos de botella en el rendimiento, lo transfiere a Cython con modificaciones menores.


Entonces, en lugar de usar Fortran, ¿usa Cython para los bits de código más lentos?
James Tocknell,

2
¡Exactamente! Descubrí que es mucho más fácil porque su código Cython puede interactuar con objetos Python y matrices Numpy de forma natural (sin una capa de conversión adicional). Esto es especialmente útil si desea utilizar sus propias estructuras de datos. Hacer que Fortran o C usen tus clases de Python en f2py no es una tarea tan sencilla.
Leo Uieda

3

f90wrap se crea sobre f2py y genera automáticamente los envoltorios de Python para la base de código Fortran subyacente, incluido el acceso a los tipos derivados. Un conjunto de ejemplos simples muestra cómo funciona.


2

Podrías usar FortWrap para llegar hasta la mitad. Esto creará una interfaz C ++ para su código Fortran, que luego podría envolverse con SWIG para obtener una interfaz Python. Hacemos esto sobre una base algo grande de código Fortran y funciona bastante bien (de hecho, FortWrap fue desarrollado por un miembro de nuestro equipo para este propósito exacto).


1

fwrapse dirige específicamente a Fortran90 / 95 y usa parte de la misma pila de software que f2py.


3
El último compromiso con el repositorio de GitHub de este proyecto fue a fines de 2010.
Geoff Oxberry

1
Si bien estoy de acuerdo en que eso es desalentador, todavía he tenido un éxito decente. Fuera de la caja es más funcional que f2pyen F90. También tiene una barrera de entrada muy baja. Me alegré de haberlo encontrado.
MRocklin

1

f2pyadmite fortran moderno (matrices con forma asumida, etc.), vea un script de ejemplo

Además, para los experimentos con código fortran, recomendaría IPython magic , que es fácil de instalar y muy conveniente (también se basa en f2py).


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.