Was sind die Best Practices für Algorithmen und die Implementierung von Multi-Physik-Simulationen?

16

Die Multi-Physik-Simulation beinhaltet die Kopplung mehrerer "Physiken", oft mit unterschiedlichen Raum- und / oder Zeitskalen. Zusätzlich werden die Einzelphysik-Codes oft von verschiedenen Teams geschrieben. Die am häufigsten verwendete Kopplungstechnik ist das Aufteilen von Operatoren erster Ordnung, dies weist jedoch schlechte Genauigkeits- und Stabilitätseigenschaften auf. Wie bestimme ich, welche Algorithmen für ein Problem von Interesse effektiv sind, und wie sollte ich meine Software strukturieren, um diese Algorithmen verfügbar zu machen?

Jed Brown
quelle

Antworten:

5

Ich befürworte nachdrücklich eine vollständig gekoppelte Baugruppe, da dies die Versionen mit geteilten Bedienern leicht reproduzieren kann. Insbesondere können die Routinen, die das Residuum und das Jacobi für unterschiedliche Physik berechnen, getrennt sein, aber das Framework sollte sie kombinieren können, um ein einheitliches Residuum für das gesamte System zu bilden. So funktioniert PETSc.

Die Operator Split-Lösungen können dann als Vorkonditionierer für das vollständig gekoppelte System oder als eigenständiger Löser über die Befehlszeile verwendet werden. Darüber hinaus können einige Kupplungen erhalten bleiben, während andere außer Acht gelassen werden können. PETSc übernimmt dies über die PC-FieldSplit-Schnittstelle. Dies ermöglicht die Replikation hybrider Schemata, wie z. B. des semi-impliziten ICE für die Fluiddynamik.

Matt Knepley
quelle
5

Da dies ein sehr aktives Forschungsgebiet ist, zögere ich, eine Antwort darauf zu versuchen, aber ich habe einige Erfahrungen damit, was ich nicht versuchen soll.

Nicht :

  • Nehmen Sie den alten Anwendungscode A und den alten Anwendungscode B und versuchen Sie dann, sie miteinander zu verbinden
  • Verwenden Sie archaischen Code (der im Nachhinein nicht mehr verwendet werden kann), anstatt eine neue Anwendung zu erstellen
  • Benötigen Sie ein umfangreiches Framework (> 10 erforderliche Abhängigkeiten), damit neue Benutzer Beiträge leisten können
  • Angenommen, das Datenlayout (Maschen, Matrizen, Vektoren usw.) ist einfach selbst zu schreiben

Tun :

  • Verwenden Sie Standard-Programmierpraktiken und hoffentlich gute Entwurfsmuster
  • Lesen Sie die Literatur zur Operatoraufteilung, um die Einschränkungen der Genauigkeit und Stabilität zu verstehen
Sean Farley
quelle