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?
Antworten:
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.
quelle
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!
quelle
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.
quelle
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.
quelle
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.
quelle
Es gibt die Open-Source-Bibliothek fortran forDat von ffr Engineering, die Funktionen von oop 2003 verwendet
quelle