Grundsätzlich scheint FEM ein Problem zu sein, das so ziemlich "gelöst" ist. Es gibt zahlreiche leistungsstarke Frameworks wie Trilinos, PETSc, FEniCS, Libmesh oder MOOSE.
Eines haben sie gemeinsam: Sie sind extrem "schwer". Erstens ist die Installation normalerweise sehr schmerzhaft. Zweitens ist ihre Schnittstelle / API dick und schwer - Sie müssen Ihre gesamte Idee in das Denken der jeweiligen Bibliothek übersetzen. Dies bedeutet auch, dass die Interoperabilität und Erweiterbarkeit für spezielle Anforderungen oder vorhandenen Code schwierig ist.
Andere Projekte wie (zufällige Beispiele) Boost, LibIGL, Aztec (linearer Löser), Eigen oder CGAL zeigen, dass es absolut möglich ist, leistungsstarke Bibliotheken zu schreiben, die sich nahtlos in C ++ - oder Python-Code integrieren lassen, mit einer sehr schlanken und sauberen Oberfläche, ohne dass eine Installation erforderlich ist eines super schweren Rahmens.
Gibt es ein wirklich leichtes Paket für FEM? Ich bin nicht auf der Suche nach einem einfachen, automatischen Löser. Ich suche nach einer Bibliothek, die leistungsstarke Funktionen bietet und gleichzeitig eine schlanke Schnittstelle, Interoperabilität mit gängigen Datenstrukturen (z. B. C ++ STL) und eine einfache Installation (nur Header) bietet.
Antworten:
Ich habe in Python 2.7 eine leichtgewichtige Finite-Elemente-Bibliothek entwickelt, die die Leistung von NumPy-Arrays und SciPy-Matrizen mit geringer Dichte nutzt. Die allgemeine Idee ist, dass bei einem Netz und einem finiten Element mehr oder weniger eine Eins-zu-Eins-Entsprechung zwischen der bilinearen Form und einer (spärlichen) Matrix besteht. Der Benutzer kann dann die resultierende Matrix verwenden, wie er es für richtig hält.
Lassen Sie mich ein kanonisches Beispiel vorstellen, in dem wir die Poisson-Gleichung in einem Einheitsquadrat mit einer Einheitsladung lösen.
Andere Kommentare:
Sie finden das Projekt in GitHub .
Die Python 3-Version des Codes finden Sie hier .
quelle
Ich denke, Sie haben einige Verwirrung. PETSc spielt nicht in der gleichen Liga wie Fenics, Libmesh, Moose usw. Tatsächlich verwenden alle diese (Schwergewichts-) Pakete PETSc für die lineare Algebra.
IMHO PETSc ist so leicht wie möglich. Es sind lediglich C / Fortran-Compiler und Python erforderlich (wird nur für die Konfiguration verwendet), und Sie können die Bibliothek in weniger als 5 Minuten auf Ihrem Laptop erstellen. Der komplizierteste Teil eines FE-Codes ist das parallele Zusammensetzen und Lösen, und PETSc kümmert sich um beides. Der Rest (z. B. Berechnungen auf Elementebene) ist ziemlich einfach.
Trillinos, OTOH ist viel mehr als ein lineares Algebra-Framework, z. B. Aztec (linearer Löser), von dem Sie erwähnen, dass es Teil davon ist. In gewisser Weise kann Aztec in Trillinos mit PETSc verglichen werden.
quelle
Ich kann Nutils empfehlen .
nutils erfüllt mindestens einige Ihrer "leichten" Anforderungen.
quelle