Quale pacchetto dovrei usare per avvolgere Modern Fortran Code con Python?


27

Conosco e ho usato f2py2e per racchiudere il vecchio codice Fortran 77, ma la mia comprensione è che non funziona con il nuovo codice Fortran 95. Ho studiato cosa dovrei usare e mi sono imbattuto in fwrap e G3 f2py, nessuno dei quali sembra dare alcuna spiegazione del loro stato attuale o come usarli (oltre l'uso di base).

Ho anche visto che la versione di f2py ha l'opzione di usare f2py di terza generazione, ma è commentata come non funzionale. Detto questo, non so quale progetto dovrei usare per un progetto uni. Quale dovrei usare per il nuovo codice?

PS Questa è sostanzialmente la stessa domanda di /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python , è stato suggerito che chiedere qui potrebbe fornire risposte migliori .


2
"Modern Fortran"
meawoppl

Risposte:


19

Puoi usare il modulo ctypes incorporato in Python come descritto su fortran90.org . È piuttosto semplice e non richiede dipendenze esterne. Inoltre, l' helper di tipo arg ndpointer è molto utile.


8
Giusto. Oppure usa Cython invece dei tipi come descritto nella pagina fortran90.org.
Ondřej Čertík,

@ OndřejČertík, ottimo sito web! Ci sono poche risorse preziose sul moderno Fortran su Internet, ma questo è sicuramente uno dei miei preferiti insieme a fortranwiki.org
astrojuanlu,

6

Personalmente uso f2py per questo. Tuttavia, il Fortran che scrivo per f2py non è davvero il moderno Fortran, ma piuttosto un F90 a moduli liberi con moduli. Non utilizzo forme presunte o tipi personalizzati. Questo metodo funziona ancora molto bene per me.

C'è una risorsa che voglio condividere riguardo all'uso di C come parte del wrapping. Anche il resto di questa pagina è raccomandato.


1
Aggiornamento 2015: da un po 'di tempo, tutte le mie interfacce Fortran avvengono tramite Cython e iso_c_binding. Ciò consente di mantenere moderno il codice Fortran pur esponendo a Cython / C solo ciò che è veramente necessario.
AlexE,

Aggiornamento 2016: l'opzione iso_c_binding ora sta diventando più facile di quanto possa semplicemente compilare un file .pyx usando il cythoncomando e riducendo la sovrapposizione tra la modifica del mio codice fortran o del codice python e il rapido funzionamento di tutto.
cbcoutinho,

5

La documentazione di f2py non è davvero eccezionale. Sono in procinto di spostare i miei progetti da f2py a Cython . Anche se Cython può essere usato per racchiudere il codice C, ho scoperto che è molto utile per creare un nuovo codice ad alte prestazioni. Se il tuo intento è scrivere un nuovo codice Fortran, racchiuderlo e chiamarlo in Python, ti consiglio invece di usare Cython. In questo modo puoi scrivere il codice Python e, se ci sono colli di bottiglia delle prestazioni, trasferiscilo su Cython con piccole modifiche.


Quindi, piuttosto che usare Fortran, usare Cython per i bit di codice più lenti?
James Tocknell,

2
Esattamente! Ho scoperto che è molto più semplice perché il tuo codice Cython può interagire con gli oggetti Python e gli array Numpy in modo naturale (senza un livello di conversione aggiuntivo). Ciò è particolarmente utile se si desidera utilizzare le proprie strutture dati. Fare in modo che Fortran o C usino le tue classi Python in f2py non è un compito così diretto.
Leo Uieda,

3

f90wrap si basa su f2py e genera automaticamente i wrapper Python per la base di codice Fortran sottostante, incluso l'accesso ai tipi derivati. Una serie di semplici esempi mostra come funziona.


2

Potresti usare FortWrap per portarti a metà strada. Ciò creerà un'interfaccia C ++ per il tuo codice Fortran, che potrebbe quindi essere racchiusa con SWIG per ottenere un'interfaccia Python. Lo facciamo su una base piuttosto ampia di codice Fortran e funziona abbastanza bene (in effetti, FortWrap è stato sviluppato da un membro del nostro team per questo preciso scopo).


1

fwrapmira specificamente a Fortran90 / 95 e utilizza alcuni dello stesso stack software di f2py.


3
L'ultimo impegno per il repository GitHub di questo progetto è stato alla fine del 2010.
Geoff Oxberry,

1
Mentre sono d'accordo sul fatto che ciò sia scoraggiante, ho comunque avuto un discreto successo. Immediatamente è più funzionale che f2pysu F90. Ha anche una barriera d'ingresso molto bassa. Mi ha fatto piacere averlo trovato.
MRocklin,

1

f2pysupporta il moderno fortran (array di forma presunta e così), vedi uno script di esempio

Inoltre, per esperimenti con il codice fortran, consiglierei IPython Magic , che è facile da installare e molto conveniente (si basa anche su f2py).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.