Gibt es quelloffene wissenschaftliche Bibliotheken, die das moderne Fortran mit OOP verwenden?


14

Ich habe die letzten Monate damit verbracht, ein Fortran-Programm zur Lösung eines bestimmten PDE-Systems zu programmieren (beschreibt den Flüssigkeitsfluss / die Verbrennung). Ich habe versucht, den neuesten Fortran-Standard zu verwenden, und die neuen OOP-Funktionen, die der moderne Fortran bietet. Ich arbeite alleine und habe keinen Fortran-Guru neben mir, um Fragen zu stellen. Ein natarischer Weg, für mich zu lernen, wäre es, andere Bibliotheken / Löser zu betrachten, die das moderne Fortran verwenden.

Leider scheinen alle Fortran-Bibliotheken da draußen in hübschen alten Fortran-Fortran90-Oberteilen geschrieben zu sein. Deshalb musste ich das Klassendesign und die Interaktion selbst durchdenken. Und ich bin überhaupt nicht sicher, dass ich es richtig gemacht habe, besonders wenn man es aus einer Preformance-Perspektive betrachtet. Aber vielleicht habe ich etwas verpasst und es werden moderne wissenschaftliche Pakete geschrieben, wenn Fortran und OOP verwendet?

Es gibt eine Menge guter C ++ - Bibliotheken (OpenFOAM, deal.II und mehr) und auch Python-Bibliotheken. Diese Sprachen haben im Allgemeinen auch eine größere Gemeinschaft. Ist es vielleicht besser, Fortran fallen zu lassen und die Sprache zu wechseln, wenn ich anhand von Beispielen lernen möchte?


Jack, es scheint, als wäre dein Kommentar zu groß: "(Der Rest dieses Kommentars dient dazu, die Längenanforderung zu erfüllen.)". Das lässt in mir Hoffnung aufkommen, also bitte redigieren Sie es, damit jeder es lesen kann: D.
24.

2
Entschuldigung, mein Kommentar war irreführend, als ich Ihre letzte Frage beantwortete. Ich meine, wenn Sie modernes OOP anhand von Beispielen aus vollwertigen Bibliotheken lernen möchten, ist C ++ der richtige Weg. Es tut uns leid; Mir sind keine modernen Open-Source-Best-of-Breed-Fortran-Bibliotheken bekannt.
Jack Poulson

6
Ich warne davor, dass C ++ bereits eine verdrehte Inkarnation der Objektorientierung ist und viele Bibliotheken es weiter missbrauchen (für jede Sprache zutreffend). Ich stimme zu, dass es wichtig ist, über Fortran hinauszuschauen, aber es ist wichtig, auch über C ++ hinauszuschauen. Es lohnt sich zu lernen, wie man Konzepte in verschiedenen Sprachen ausdrückt (objektorientiert, generisch und funktional; statisch und dynamisch), auch wenn Sie für Ihre "echte" Arbeit zu einer einfachen Sprache wie C zurückkehren.
Jed Brown

Antworten:


10

Es gibt moderne CFD-Codes, die Sie einsehen können. Zum Beispiel ...

Flüssigkeit : Allzweck-Mehrphasen-CFD-Code (FE-Code); Sogar voll unstrukturierte AMR

WRF : Numerisches Modellwettervorhersage-System der nächsten Generation von NCAR

Code Saturne : Allzweck-CFD-Code (FV-Code); Einige auf Wikipedia aufgelistete Funktionen

Es gibt ähnliche moderne Fortran-Codes für die Strukturanalyse.

Sie können jedoch möglicherweise nicht alle F2003-Funktionen nutzen, da keine umfassende Compilerunterstützung vorhanden ist. Die meisten neuen Compiler unterstützen große Teile von F2003 (siehe die Artikel im ACM SIGPLAN Fortran Forum), aber es braucht Zeit, um eine breite Anwenderbasis zu haben. Debian Stable zum Beispiel hat GCC 4.4.5, so dass Sie im Allgemeinen nicht erwarten sollten, dass Ihre Benutzer etwas Besseres haben (dh 4.5 / 4.6 / 4.7).

Wenn F2003-Compiler verbreitet werden, sehen Sie Bibliotheken / Code, die die F2003-Funktionen verwenden.

Im Moment können Sie in diesem Buch von Damian Rouson nachlesen, wie die OOP-Funktionen verwendet werden.


Richtig, F2003 holt erst kürzlich auf (für meine eigene Bibliothek habe ich mich entschieden, für maximale Portabilität bei F95 zu bleiben). Wir werden bald mehr Code in F2003 oder sogar F2008 sehen.
Ondřej Čertík

Sehr guter Punkt. Ich hoffe, wir werden in den kommenden Jahren mehr neuen Standardcode sehen.
25.

Damian Rouson arbeitet an den ForTrillinos , einer modernen Fortran-Schnittstelle zum Trillinos-Projekt .
Jeremy Kozdon

7

Wenn Sie anhand eines Beispiels lernen möchten, empfehle ich rosettacode , eine Programmier-Chrestomathy-Site. Dort finden Sie viele Beispielprobleme, die vergleichsweise in mehreren Sprachen geschrieben sind.

Vielleicht noch interessanter für Sie wäre das Fortran-Wiki , und hier ist ein Abschnitt über OOP in Fortran, der nützlich sein könnte.

Fortan geht es gut - lassen Sie uns nicht aufgeben!


Ich mag Fortran selbst :). Ich kenne die Wiki-Website, Matcalds Bücher sind auch sehr gut, ebenso wie die Tutorials von PGI. Aber echtes Material zu sehen wäre schön!
24.

Der Codierungsstil des dolfyn CFD-Codes ist wirklich umfassend und "modern Fortran Literate". Dort finden Sie Beispiele für einige Datenstrukturen wie verknüpfte Listen usw., die möglicherweise informativ sind, und ein bisschen OOP, wenn ich mich richtig erinnere.
Johntra Volta

4

Ich stimme dem Kommentar von @JackPoulson zu. Mir sind keine Open-Source-Bibliotheken bekannt, die im modernen Fortran geschrieben wurden. Die Antwort auf Ihre spezifische Frage, ob Sie zu C ++ wechseln müssen, um anhand von Beispielen zu lernen, ist ein bedauerliches "Ja". Aber um klar zu sein, ich weiß, dass es mindestens eine Bibliothek gibt, die fast ausschließlich im modernen Fortran mit Blick auf OOP geschrieben wurde, also ist es möglich (und lohnenswert). Diese Bibliothek ist jedoch keine Open Source-Bibliothek, sodass Sie Ihr Lernziel nicht erreichen können.

Es ist jedoch auch sehr wahrscheinlich, dass Sie nicht bereit sind, das, was Sie bereits erledigt haben, wegzuwerfen. Wenn Sie immer noch daran interessiert sind, Fortran zu verfolgen, und spezielle Entwicklungsfragen haben, empfehlen wir Ihnen, diese auf StackOverflow zu stellen. Es gibt einige hochqualifizierte Fortran-Entwickler, die gerne helfen.


3

Ich bin etwas spät dran , aber Sie sollten sich Version 3 der parallelen linearen Algebra-Bibliothek PSBLAS ansehen , die die modernen Fortran-Funktionen wie Vererbung und Polymorphismus voll ausnutzt. Es gibt auch eine Veröffentlichung , in der sie die Leistung dieser Version mit ihren älteren Versionen verglichen, die an F90 / F95 festhielten. Überraschenderweise war der Geschwindigkeitsunterschied insgesamt vernachlässigbar.


1

Ich weiß nicht, in welchem ​​Fortran-Dialekt es geschrieben ist, aber es gibt William Mitchells PHAML-Code, der ein allgemeiner Fortran-FEM-Code ist.

Ich gebe zu, dass ich in der Diskussion von Fortran vs C ++ nicht unparteiisch bin, aber ich möchte darauf hinweisen, dass es Ihnen schwer fällt, einen modernen Fortran-basierten FEM-Code zu finden, während Sie gleichzeitig eine ganze Reihe von C ++ -basierten Codes finden Etwas von dem, was die Community als Ganzes denkt, ist der richtige Weg. Es ist natürlich nichts auszusetzen, wenn Sie versuchen, Ihren eigenen Code in einer Sprache zu erstellen, die Sie mögen und die Sie kennen, aber Ihre kurze Umfrage zeigt Ihnen bereits, dass Sie eine Insel bauen. Vielleicht möchten Sie das berücksichtigen.


-1

Es gibt die Open-Source-Bibliothek fortran forDat von ffr Engineering, die Funktionen von oop 2003 verwendet


1
Willkommen bei SciComp! Ihre Antwort ist nicht wirklich hilfreich, da Sie nicht beschreiben, a) was forDat tut und b) welche OOP-Funktionen forDat verwendet. Sie verpassen hier auch eine Gelegenheit, da Sie als Entwickler von forDat (den Sie übrigens offenlegen sollten, siehe scicomp.stackexchange.com/help/behavior ) auch erwähnen könnten, warum forDat diese Funktionen verwendet.
Christian Clason
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.