Existe-t-il des bibliothèques scientifiques open source qui utilisent le Fortran moderne avec la POO?


14

J'ai passé les deux derniers mois à coder un programme Fortran pour résoudre un système PDE particulier (décrit le flux / combustion de fluide). J'ai essayé d'utiliser le Fortran le plus récent et les nouvelles capacités de POO que le Fortran moderne possède. Je travaille seul et je n'ai pas de gourou Fortran à côté de moi pour poser des questions, donc une façon naturelle d'apprendre pour moi serait de regarder d'autres bibliothèques / solveurs qui utilisent Fortran moderne.

Malheureusement, toutes les bibliothèques Fortran semblent être écrites dans de très vieux sommets Fortran, Fortran90. J'ai donc dû réfléchir moi-même à la conception de la classe et à l'interaction. Et je ne suis pas du tout certain que je l'ai bien fait, surtout si l'on regarde du point de vue de la performance. Mais j'ai peut-être manqué quelque chose et il existe des packages scientifiques modernes écrits si Fortran et utilisant la POO?

Il y a beaucoup de bonnes bibliothèques C ++ à apprendre (OpenFOAM, deal.II et plus) et aussi des bibliothèques Python. Ces langues ont également une plus grande communauté en général. Est-il peut-être préférable d'abandonner Fortran et de changer de langue si je veux apprendre par l'exemple?


Jack, il semble que votre commentaire était trop volumineux: "(Le reste de ce commentaire doit répondre à l'exigence de longueur.)". Cela fait naître de l'espoir en moi, alors veuillez le modifier pour que tout le monde puisse le lire: D.
tiam

2
Désolé, mon commentaire était trompeur, car je répondais à votre dernière question. Je veux dire que, si vous voulez apprendre la POO moderne par l'exemple à partir de bibliothèques à part entière, C ++ est la voie à suivre. Pardon; Je ne connais aucune bibliothèque Fortran moderne et open source.
Jack Poulson

6
Je voudrais mettre en garde que le C ++ est déjà en quelque sorte une incarnation tordue de l'orientation des objets, et de nombreuses bibliothèques en font un mauvais usage (vrai pour n'importe quel langage). Je suis d'accord qu'il est important de regarder au-delà de Fortran, mais il est également important de regarder au-delà de C ++. Apprendre à exprimer des concepts dans des langages de différents types (orienté objet, générique et fonctionnel; statique et dynamique) en vaudra la peine même si vous revenez à un langage simple comme C pour votre "vrai" travail.
Jed Brown

Réponses:


10

Il existe des codes CFD modernes que vous pouvez consulter. Par exemple ...

Fluidité : code CFD (FE) multiphase à usage général; Même AMR entièrement non structuré

WRF : Système de prévision météorologique de modèle numérique de nouvelle génération de NCAR

Code Saturne : code CFD (FV) à usage général; Certaines fonctionnalités répertoriées sur Wikipedia

Il existe des codes Fortran modernes similaires pour l'analyse structurale.

Mais ils peuvent ne pas utiliser toutes les capacités de F2003 en raison du manque de prise en charge généralisée du compilateur. La plupart des nouveaux compilateurs prennent en charge de grandes parties de F2003 (voir les documents du Forum ACM SIGPLAN Fortran) mais il faut du temps pour avoir une large base d'utilisateurs. Debian stable, par exemple, a GCC 4.4.5 donc en général, vous ne devriez pas vous attendre à ce que vos utilisateurs aient quelque chose de mieux (c'est-à-dire 4.5 / 4.6 / 4.7).

Lorsque les compilateurs F2003 se généraliseront, vous verrez des bibliothèques / codes qui utilisent les capacités F2003.

Pour l'instant, vous pouvez consulter ce livre de Damian Rouson sur la façon d'utiliser les capacités de POO.


C'est vrai, F2003 est en train de rattraper son retard (pour ma propre bibliothèque, j'ai décidé de m'en tenir à F95 pour une portabilité maximale). Nous verrons plus de code écrit en F2003 ou même F2008 bientôt.
Ondřej Čertík

Très bon point. J'espère que nous verrons plus de code nouveau standard dans les années à venir.
tiam

Damian Rouson travaille sur le ForTrillinos , qui est une interface fortran moderne du projet Trillinos .
Jeremy Kozdon

7

Si vous voulez apprendre par l'exemple, je recommanderais rosettacode , un site de programmation de chrestomathie. Vous pouvez y trouver de nombreux exemples de problèmes écrits dans plusieurs langues différentes.

Le wiki de Fortran pourrait être encore plus intéressant pour vous , et voici une section sur la POO dans Fortran qui pourrait être utile.

Fortan se porte très bien - n'abandonnons pas!


J'aime Fortran moi-même :). Je connais le site wiki, les livres de Matcalds sont aussi très bons ainsi que les tutoriels de PGI. Mais voir du vrai matériel serait bien!
tiam

Le style de codage du code dolfyn CFD est vraiment complet et "moderne en alphabet Fortran". Vous pouvez y trouver des exemples de certaines structures de données comme des listes chaînées, etc. qui pourraient être informatives, et un peu de POO si je me souviens bien.
Johntra Volta

4

Je suis d'accord avec le commentaire de @JackPoulson. Je ne connais aucune bibliothèque open source écrite en Fortran moderne. Ainsi, la réponse à votre question spécifique sur la nécessité de passer au C ++ pour apprendre par l'exemple est un «oui» malheureux. Mais, pour être clair, je sais qu'il existe au moins une bibliothèque qui a été écrite presque exclusivement dans Fortran moderne avec un œil sur la POO, donc c'est possible (et utile). Cette bibliothèque n'est pas open source, cependant, elle ne vous aidera pas à atteindre votre objectif d'apprentissage.

Cependant, vous êtes également susceptible d'être réticent à jeter ce que vous avez déjà accompli. Si vous êtes toujours intéressé à poursuivre Fortran pour cela et avez des questions de développement spécifiques, je vous encourage à les poser sur StackOverflow. Il y a quelques développeurs Fortran hautement qualifiés qui sont plus qu'heureux de vous aider.


3

Je suis un peu en retard sur celui-ci, mais vous devriez jeter un œil à la version 3 de la bibliothèque d'algèbre linéaire parallèle PSBLAS , qui tire pleinement parti des fonctionnalités modernes de Fortran telles que l'héritage et le polymorphisme. Il y a aussi un document ici où ils ont comparé les performances de cette version avec leurs anciennes versions, qui restaient fidèles à F90 / F95. Étonnamment, la différence de vitesse était globalement négligeable.


1

Je ne sais pas dans quel dialecte Fortran il est écrit, mais il y a le code PHAML de William Mitchell qui est un code Fortran FEM à usage général.

J'admettrai que je ne suis pas impartial dans la discussion de Fortran vs C ++ mais j'aime souligner que vous avez de la difficulté à trouver un code FEM moderne basé sur Fortran tout en trouvant beaucoup de codes basés sur C ++. quelque chose de ce que la communauté dans son ensemble pense est la voie à suivre. Il n'y a bien sûr rien de mal à essayer de construire votre propre code dans un langage que vous aimez et que vous connaissez, mais votre bref sondage vous montre déjà que vous construisez une île. Vous voudrez peut-être en tenir compte.


-1

Il existe la bibliothèque open source fortran forDat par ffr Engineering qui utilise les fonctionnalités d'OOP 2003


1
Bienvenue chez SciComp! Votre réponse n'est pas vraiment utile car vous ne décrivez pas a) ce que forDat fait et b) quelles fonctionnalités POO forDat utilise. Vous manquez également une opportunité ici, car en tant que développeur de forDat (que vous devriez divulguer, d'ailleurs, voir scicomp.stackexchange.com/help/behavior ), vous pouvez également mentionner pourquoi forDat utilise ces fonctionnalités.
Christian Clason
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.