Mein System ist ein symmetrisches FE-Problem mit Lagrange-Multiplikatoren (z. B. inkompressibler Stokes-Fluss):
Dabei ist der typische Fall (ich habe sogar darauf geachtet, dass die Gleichungen nummeriert sind, damit die Lagrange-Multiplikatoren zuletzt erscheinen). Das System ist ziemlich groß (+ 100k Zeilen).
Nachdem ich die Antwort auf diese Frage gelesen hatte , hatte ich den Eindruck, dass es geeignete Vorkonditionierer gibt, die für gemischte FE-Probleme verwendet werden können.
Mit PETSc habe ich es geschafft, das System mit MINRES ( -ksp_type minres -pc_type none -mat_type sbaij
) zu lösen , obwohl die Genauigkeit nicht großartig ist (was mehrere Newton-Iterationen für ein lineares Problem verursacht). Keine andere Kombination von Vorkonditionierer und ksp-Solver scheint zu funktionieren.
Gibt es eine Kombination von Flags für PETSc, die dieses System schneller lösen als mit MINRES?
quelle
Antworten:
Warnung
Das Lösen von Sattelpunktproblemen beinhaltet viel mehr Auswahlmöglichkeiten als bestimmte Probleme, und es gibt viel mehr Dinge, die schief gehen können. Verwenden Sie Monitore für alle Ebenen, um die Konvergenz zu debuggen, um sicherzustellen, dass Nullstellen korrekt behandelt werden, wenn Hilfsoperatoren singulär sind (normalerweise nur eine konstante Nullstelle), und um sicherzustellen, dass Vorkonditionierer stabil sind. Diese Techniken werden in dieser Frage diskutiert .
Sattelpunktprobleme lösen
Sie können mit dem Abschnitt über das Lösen von Blockmatrizen im Benutzerhandbuch beginnen . Für Stokes-ähnliche Probleme können Sie mit PCFIELDSPLIT einen Schur-Komplementkonditionierer erstellen .
Dies kann mit einem Least Squares Commutator- Vorkonditionierer für das Schur-Komplement (
-fieldsplit_1_pc_type lsc
) kombiniert werden . Es ist üblich,-fieldsplit_1_ksp_type preonly
dass die äußere Iteration den größten Teil der Arbeit erledigt. Die blockdreieckigen Varianten sind beliebt, wenn sie auf diese Weise verwendet werden, z-pc_fieldsplit_schur_fact_type upper
.Weitere Details zur Zusammensetzung von Solvern finden Sie in unserem Artikel (Preprint) , in dem auch das Pendeln von Multigrid mit der Blockzerlegung (Setzen des Feldteilers in Multigrid) erläutert wird.
Bei vielen Problemen sollten Sie die Feldzerlegung und die Schur-Komplement-Vorkonditionierer anpassen, von denen viele Hilfsoperatoren enthalten. Beispielsweise erfordert das "Druckkonvektionsdiffusions" -Verfahren (PCD) von Elman et al. Die Diskretisierung eines Hilfsoperators im Druckraum. Zu diesem Zweck siehe Beispiele für PCSHELL und den Abschnitt zum Benutzerhandbuch.
quelle
Sie möchten einen Vorkonditionierer, dessen Aufbau hier besprochen wird: http://www.math.tamu.edu/~bangerth/videos.676.38.html
quelle