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?
Réponses:
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.
la source
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!
la source
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.
la source
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.
la source
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.
la source
Il existe la bibliothèque open source fortran forDat par ffr Engineering qui utilise les fonctionnalités d'OOP 2003
la source