Je connais et j'ai utilisé f2py2e pour envelopper un ancien code Fortran 77, mais je crois comprendre que cela ne fonctionne pas avec le code Fortran 95 plus récent. J'ai recherché ce que je devrais utiliser, et j'ai rencontré fwrap et G3 f2py, qui ne semblent pas donner d'explication sur leur état actuel, ni comment les utiliser (au-delà de l'utilisation de base).
J'ai également vu que la version de f2py a la possibilité d'utiliser la f2py de troisième génération, mais elle est commentée comme étant non fonctionnelle. Compte tenu de cela, je ne sais pas quel projet je dois utiliser pour un projet uni. Lequel dois-je utiliser pour le nouveau code?
PS C'est fondamentalement la même question que /programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python , il a été suggéré que demander ici pourrait donner de meilleures réponses .
Réponses:
Vous pouvez utiliser le module ctypes intégré Python comme décrit sur fortran90.org . Il est assez simple et ne nécessite aucune dépendance externe. De plus, l' aide de type ndpointer arg est très pratique.
la source
J'utilise personnellement f2py pour cela. Cependant, le Fortran que j'écris pour f2py n'est pas vraiment un Fortran moderne, mais plutôt un F90 de forme libre avec des modules. Je n'utilise pas de formes supposées ou de types personnalisés. Cette méthode fonctionne toujours très bien pour moi.
Il y a une ressource que je veux partager concernant l'utilisation de C dans le cadre de l'emballage. Le reste de cette page est également recommandé.
la source
cython
commande, et réduire le chevauchement entre la modification de mon code fortran ou de mon code python et la mise en place rapide de tout.La documentation de f2py n'est vraiment pas terrible. Je suis en train de déplacer mes propres projets de f2py vers Cython . Même si Cython peut être utilisé pour encapsuler du code C, j'ai trouvé qu'il était très utile pour créer un nouveau code haute performance. Si votre intention est d'écrire du nouveau code Fortran, de l'encapsuler et de l'appeler en Python, je vous recommande d'utiliser Cython à la place. De cette façon, vous pouvez écrire du code Python, et s'il y a des goulots d'étranglement des performances, vous transférez cela sur Cython avec des modifications mineures.
la source
f90wrap est construit au-dessus de f2py et génère automatiquement les wrappers Python pour la base de code Fortran sous-jacente, y compris l'accès aux types dérivés. Un ensemble d' exemples simples montre comment cela fonctionne.
la source
Vous pouvez utiliser FortWrap pour vous y rendre à mi-chemin. Cela créera une interface C ++ à votre code Fortran, qui pourrait ensuite être enveloppée avec SWIG pour obtenir une interface Python. Nous le faisons sur une base assez large de code Fortran et cela fonctionne assez bien (en fait, FortWrap a été développé par un membre de notre équipe dans ce but précis).
la source
fwrap
cible spécifiquement Fortran90 / 95 et utilise une partie de la même pile logicielle quef2py
.la source
f2py
sur le F90. Il a également une barrière d'entrée très basse. J'étais content de l'avoir trouvé.f2py
prend en charge le fortran moderne (tableaux de forme supposée, etc.), voir un exemple de scriptDe plus, pour des expériences avec le code fortran, je recommanderais IPython magic , qui est facile à installer et très pratique (il s'appuie également sur f2py).
la source
Voici une liste de wrappers Fortran pour Python:
https://github.com/mgaitan/fortran_magic/issues/4
la source