Ich suche nach Ressourcen zu Entwurfsmustern und -prinzipien für numerische Software, möglicherweise, aber nicht unbedingt, mit Schwerpunkt auf objektorientierten Ansätzen für numerische Codes.
Ich kenne den Text Writing Scientific Software: Ein Leitfaden für guten Stil , aber dieser befasst sich immer noch mit Dingen wie Gleitkomma-Problemen, wie und wann optimiert werden muss usw.
Ich bin auf der Suche nach Informationen über das Gesamtbild des Entwurfs numerischer Codes, nicht über irgendetwas, das sich mit Algorithmen und dergleichen befasst.
Ich hoffe, dass es Ressourcen dafür gibt, und man muss nicht einfach Bibliothek für Bibliothek durchgehen, zumal es keinen Leitfaden gibt, in dem die Dinge richtig gestaltet werden, abgesehen von meinen eigenen Kenntnissen über gute Redewendungen und Praktiken in C ++.
(Dies ist nicht sprachspezifisch, aber wenn es sprachspezifische Inhalte gibt, würde ich C ++ vorziehen.)
quelle
Antworten:
Ich habe seit 20 Jahren numerische Software entwickelt und finde, dass wir wahrscheinlich die Mehrheit der im Buch der Viererbande ( siehe hier ) beschriebenen Entwurfsmuster verwendet haben . Letztendlich handelt es sich bei numerischer Software nur um umfangreiche, komplexe Software. Es ist daher möglicherweise nicht verwunderlich, dass dieselben Entwurfsüberlegungen gelten wie bei anderer Software.
Natürlich gibt es eine Reihe von Fällen, die für numerische Algorithmen spezifisch sind (siehe z. B. hier ), aber die Kenntnis der "traditionellen" Gruppe von Entwurfsmustern ist bereits ein guter Anfang.
quelle
Ich empfehle diesen Matthew G Knepley. Programmiersprachen für das wissenschaftliche Rechnen. arXiv-Vorabdruck arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )
Ich rate auch, andere Codes zu suchen und zu lesen, zum Beispiel Dreieck, PETSc, MoAB, deal.II, Fenics und viele andere. Nicht alle Lösungen werden für Sie funktionieren, aber am Ende ist das Bewältigen und Lernen von anderen (erfahrenen Entwicklern und erfolgreichen Codes) die beste Lektion zum Entwerfen von Code.
Darüber hinaus halte ich es für besser, sich einem bestehenden Projekt anzuschließen und Mitwirkender oder Entwickler zu werden. Manchmal magst du es, etwas Neues anzustoßen, aber du musst solide Argumente haben, um das zu tun.
quelle