Die Semantik der entwickelten pde ++ - Bibliothek zur Programmierung von Finite-Differenzen-Methoden im Operatorstil wird vorgestellt. Die Hauptobjekte der Bibliothek sind eine Gitterfunktion, eine Gitterzelle und Gitteroperatoren, deren arithmetische Beziehungen den Programmcode so nah wie möglich an seine mathematische Notation bringen. Die pde ++ - Bibliothek wird durch nur wenige Header-Dateien dargestellt, weist keine externen Abhängigkeiten auf und verwendet das Konzept des Lazy Computing.
Eine große Anzahl mathematischer Modellierungsprobleme wird durch Gittermethoden auf die numerische Lösung partieller Differentialgleichungen (PDEs) reduziert. In der Theorie der Differenzschemata (Samarsky A.A.) bilden die entsprechenden Gitteroperatoren einen linearen Raum über Gitterfunktionen, für die es in allgemeinen Programmiersprachen wie C ++ keine direkte Darstellung gibt. Infolgedessen ist die Praxis der Aufzeichnung des Ergebnisses der Anwendung von Gitteroperatoren auf Gitterfunktionen unter Verwendung mehrdimensionaler Arrays oder Matrizen in der Softwareimplementierung weit verbreitet.
Die Praxis zeigt, dass der oben erwähnte Ansatz sehr nützlich ist, um die Fähigkeiten der Implementierung numerischer Methoden zu beherrschen, vor allem aufgrund seiner Sichtbarkeit bei der Arbeit mit vorab geschriebenen Approximationen von PDEs in Indexform. Wesentliche Probleme treten auch nicht auf, wenn diese Technik auf verallgemeinerte PDEs erweitert wird, wenn beabsichtigt ist, ein Differenzschema mit Parametern einmal zu implementieren und den entsprechenden Programmcode ohne weitere Modifikationen wiederzuverwenden.
Im allgemeinen Fall kann ein Computerprogramm in verschiedene Richtungen modifiziert werden, so dass für die oben beschriebene Technik eine erhebliche Menge an Programmcode geschrieben werden muss, was wiederum die Wahrscheinlichkeit von Tippfehlern und inkonsistenter Aufzeichnung derselben Netzbetreiber in verschiedenen Programmmodulen erhöht. Erwähnenswert ist auch das Problem der Duplizierung von Programmcode mit räumlicher Dimensionsvariabilität (1D, 2D, 3D) und Methoden zur Approximation von PDEs.
Eine Alternative ist daher die Entwicklung und Verwendung spezialisierter Softwarebibliotheken mit Domänenabstraktionen auf hoher Ebene, die den Programmcode näher an seine mathematische Notation bringen. In der Blitz ++ - Bibliothek handelt es sich bei einer solchen Abstraktion um Tensorberechnungen für Differenzvorlagen, die auf der Grundlage der Verwendung der Metaprogrammiertechnik für Vorlagen implementiert werden. Die
freePOOMA- Bibliothek erweitert das Blitz ++ - Konzept um Differenzanaloga von Differentialdivergenz- und Gradientenoperatoren und die Fähigkeit, an Multiprozessor-Computersystemen zu arbeiten. Leider werden diese Bibliotheken seit langem nicht mehr unterstützt und weisen eine Reihe von Einschränkungen auf (sie werden im nächsten Teil erörtert), wenn sie für ziemlich klassische Finite-Differenzen-Näherungen der in diesem Artikel betrachteten PDEs verwendet werden.
Die vom Autor entwickelte Open-Source-Bibliothek pde ++ ist idealerweise von der
freePOOMA- Bibliothek inspiriert und dient zur Aufzeichnung in Form von Finite-Differenzen-Schemata für Skalar- und
Vektorgitterfunktionen, die in einer 2D-Einstellung (1D und 3D in Betrieb) auf einheitlichen rechteckigen Gittern definiert sind.
Warnung: Der Code wurde nur unter Windows getestet.
#include "pdepp.h" double sln_u(double x, double y) { return x * x + y * y; }
#include "pdepp.h" double sln_u(double x, double y) { return x * x + y * y; } double sln_v(double x, double y) { return x * x * x + y * y * y; }