Quels préconditionneurs (et solveurs) en PETSc pour les systèmes symétriques indéfinis dois-je utiliser?

12

Mon système est un problème FE symétrique avec des multiplicateurs de lagrange (par exemple le flux de Stokes incompressible):

(ABTBC)

est le cas typique (je me suis même assuré que les équations sont numérotées pour que les multiplicateurs de Lagrange apparaissent en dernier). Le système est assez volumineux (+ 100k lignes).C=0

Après avoir lu la réponse à cette question , j'ai eu l'impression qu'il existe des préconditionneurs appropriés qui peuvent être utilisés pour des problèmes FE mixtes.

En utilisant PETSc, j'ai réussi à résoudre le système avec MINRES ( -ksp_type minres -pc_type none -mat_type sbaij), bien que la précision ne soit pas excellente (provoquant plusieurs itérations de Newton pour un problème linéaire). Aucune autre combinaison de préconditionneur et de solveur ksp ne semble fonctionner.

Y a-t-il une combinaison de drapeaux pour PETSc qui résoudra ce système plus rapidement qu'avec juste MINRES?

Mikael Öhman
la source
1
Bienvenue dans SciComp SE! Votre question est bien posée en termes de clarté et de généralité. Une seule phrase est quelque peu floue ou incomplète: que voulez-vous dire par les calculs inexacts?
Jan
1
J'ai oublié de finir la phrase! J'espère que c'est clair maintenant.
Mikael Öhman

Réponses:

13

avertissement

La résolution des problèmes de selle implique beaucoup plus de choix que des problèmes précis, et il y a beaucoup plus de choses qui peuvent mal tourner. Utilisez des moniteurs pour tous les niveaux pour déboguer la convergence, pour vous assurer que les espaces nuls sont gérés correctement lorsque les opérateurs auxiliaires sont singuliers (généralement juste un espace nul constant) et pour vous assurer que les préconditionneurs sont stables. Ces techniques sont discutées dans cette question .

Résolution des problèmes de point de selle

Vous pouvez commencer par la section sur la résolution des matrices de blocs dans le manuel de l'utilisateur . Pour les problèmes de type Stokes, vous pouvez créer un préconditionneur de complément Schur à l'aide de PCFIELDSPLIT .

-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point

Ceci peut être combiné avec un préconditionneur Commutateur des moindres carrés pour le complément Schur ( -fieldsplit_1_pc_type lsc). Il est courant de -fieldsplit_1_ksp_type preonlylaisser l'itération externe effectuer la majeure partie du travail. Les variantes triangulaires sont populaires lorsqu'elles sont utilisées de cette manière, par exemple -pc_fieldsplit_schur_fact_type upper.

Vous pouvez trouver plus de détails sur la composition du solveur en utilisant les options des options dans notre article (préimpression) , qui traite également de la navette multigrille avec la décomposition en blocs (en plaçant le fieldplit à l'intérieur de la multigrille).

Pour de nombreux problèmes, vous souhaiterez personnaliser la décomposition des champs et les préconditionneurs du complément Schur, dont beaucoup impliquent des opérateurs auxiliaires. Par exemple, la méthode "pression convection-diffusion" (PCD) d'Elman et al nécessite la discrétisation d'un opérateur auxiliaire dans l'espace de pression. Voir des exemples de PCSHELL et la section du manuel de l'utilisateur à cet effet.

Jed Brown
la source
3

Vous voulez un préconditionneur, et sa construction est discutée ici: http://www.math.tamu.edu/~bangerth/videos.676.38.html

Wolfgang Bangerth
la source
La conférence était très intéressante, mais je cherchais des exemples concrets sur la façon d'utiliser PETSc pour le résoudre.
Mikael Öhman