如何处理多区域问题(在 PETSc 中)

计算科学 有限元 宠物 多物理场
2021-12-10 04:00:49

考虑一个问题,其中空间充满液体和固相,具有大而复杂的几何形状。在每个相位上,都有一个电位/泊松方程。这些方程由通过相界的非线性表面电流耦合。

目前,为这两个阶段构建了一个 FEM,并将其组装成一个大的雅可比矩阵,然后在牛顿方法中将其作为黑盒求解。这会导致不良的矩阵条件和不良的性能。

为了提高性能,我计划使用 PETSc。对于多物理问题,他们建议使用嵌套矩阵,然后为每个方程使用单独的预条件器。但是,对于迄今为止我发现的所有示例,有一个很大的区别:这些示例总是考虑一个相位上的不同物理方程,这些方程在空间中的所有点上都耦合。在我的例子中,我每相只有一个方程,但耦合只在相的边界上,并且是非线性的。

您将如何处理 PETSc 中的此类问题?(强调矩阵、求解器和预处理器的组合。)

1个回答

该策略实际上非常相似——将您的矩阵和向量划分为“块”,这些“块”对应于不同阶段的变量。区别实际上只是耦合不是针对同一位置的所有变量,而仅针对位于界面上同一点的不同相位的变量。

这意味着非对角块比在多物理场问题中要稀疏得多,因为一个相内部的所有变量都不会与不同相上的任何变量耦合,因此矩阵中没有这些矩阵的对角线块之外的变量。

结果也是,如果您对每个阶段都有一个预处理器(即块对角矩阵),那么它可能是整个矩阵的一个很好的预处理器,因为非对角块大部分是空的。