Welche Vorkonditionierer (und Löser) in PETSc für unbestimmte symmetrische Systeme sollte ich verwenden?

12

Mein System ist ein symmetrisches FE-Problem mit Lagrange-Multiplikatoren (z. B. inkompressibler Stokes-Fluss):

(EINBTBC)

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).C=0

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?

Mikael Öhman
quelle
1
Willkommen bei der SciComp SE! Ihre Frage ist in Bezug auf Klarheit und Allgemeinheit gut gestellt. Nur ein Satz ist etwas unklar oder unvollständig: Was meinen Sie mit den ungenauen Berechnungen?
Jan
1
Ich habe vergessen, den Satz zu beenden! Ich hoffe es ist jetzt klar.
Mikael Öhman

Antworten:

13

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 .

-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point

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 preonlydass 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.

Jed Brown
quelle
3

Sie möchten einen Vorkonditionierer, dessen Aufbau hier besprochen wird: http://www.math.tamu.edu/~bangerth/videos.676.38.html

Wolfgang Bangerth
quelle
Der Vortrag war sehr interessant, aber ich suchte nach konkreten Beispielen für die Verwendung von PETSc, um es zu lösen.
Mikael Öhman