对于不定对称系统,我应该使用 PETSc 中的哪些预处理器(和求解器)?

计算科学 有限元 宠物 克雷洛夫法 预处理
2021-12-23 01:31:54

我的系统是一个带有拉格朗日乘数的对称有限元问题(例如不可压缩的斯托克斯流):

(ABTBC)

在哪里C=0是典型的情况(我什至确保对方程进行编号,以便拉格朗日乘数出现在最后)。该系统非常大(+100k 行)。

阅读了这个问题的答案后,我的印象是有合适的预处理器可用于混合 FE 问题。

使用 PETSc,我设法用 MINRES ( -ksp_type minres -pc_type none -mat_type sbaij) 解决了系统,尽管精度不是很好(导致线性问题的几次牛顿迭代)。预处理器和 ksp-solver 的其他组合似乎不起作用。

是否有任何 PETSc 标志组合可以比仅使用 MINRES 更快地解决该系统?

2个回答

警告

解决鞍点问题涉及的选择比确定的问题多得多,而且可能出错的事情也多得多。使用所有级别的监视器来调试收敛,确保在辅助运算符为奇异时正确处理空空间(通常只是一个恒定的空空间),并确保预条件子是稳定的。在这个问题中讨论了这些技术

解决鞍点问题

您可以从用户手册中关于求解块矩阵的部分开始对于类似斯托克斯的问题,您可以使用PCFIELDSPLIT构建 Schur 补码预条件器

-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point

这可以与Schur 补码 ( )的最小二乘交换器预条件器结合使用。让外部迭代完成大部分工作-fieldsplit_1_pc_type lsc是很常见的。-fieldsplit_1_ksp_type preonly以这种方式使用时,块三角形变体很受欢迎,例如-pc_fieldsplit_schur_fact_type upper.

您可以在我们的论文 (预印本)中找到有关使用选项选项的求解器组合的更多详细信息,该论文还讨论了使用块分解的通勤多重网格(将字段拆分放在多重网格中)。

对于许多问题,您需要自定义域分解和 Schur 补码预处理器,其中许多都涉及辅助运算符。例如,Elman 等人的“压力对流-扩散”(PCD)方法需要在压力空间中离散化辅助算子。为此,请参阅PCSHELL示例和用户手册部分。

你确实想要一个预处理器,这里讨论了一个预处理器的构造:http: //www.math.tamu.edu/~bangerth/videos.676.38.html