PCJACOBI 工作,但默认的 PCBJACOBI 在 PETSc 中失败

计算科学 迭代法 宠物 预处理
2021-12-05 15:40:21

我正在使用 PETSc 和 libmesh 使用线性四面体元素来解决具有相当复杂几何形状的简单线性弹性问题。我一直使用 KSP CG 作为求解器。

我注意到对于某些网格,block-Jacobi ( PCBJACOBI) 预处理器将无法收敛 ( DIVERGED_INDEFINITE_PC) 但 Jacobi ( PCJACOBI) 工作正常。作为这个领域的初学者,这对我来说听起来很奇怪。有人可以帮忙提供一个提示吗?

另外,我在 PETSc 网站上读到 Jacobi 和 block-Jacobi 都支持并行处理。这是否意味着我留在 Jacobi 身边是安全的,也许性能会有所下降?

1个回答

pcjacobi是雅可比预条件子(也称为点雅可比预条件子)。对于此预处理器,您只需获取矩阵的对角元素并将它们反转以供将来在迭代求解器中使用。

pcbjacobi将是一个块雅可比预处理器。对于块雅可比,您不采用单独的对角线条目,而是使用矩阵对角线上的小矩阵块。现在,无论这意味着什么,您都需要“反转它们”。正确配置(块大小)的块雅可比预条件器通常比点雅可比提供更好的收敛性。但是,预处理和迭代求解器肯定与黑暗艺术有关,因此您总能找到一些反例。

现在,在您的情况下,矩阵可能没有任何零对角线条目;因此 point-Jacobi 工作正常。并且您配置 block-Jacobi 的方式会导致预处理器具有不可逆(或不良可逆)块,从而导致预处理问题。我建议您查看block-Jacobi 上的 PETSc 示例,以确定您的特定问题。

关于并行处理:我会更多地使用您的特定问题集,了解不同的迭代求解器、预处理器及其参数如何影响收敛,然后再评估并行化的效果。稍后将其作为一个单独的问题提出。