我正在使用 PETSc 的 SNES 线搜索 (NEWTONLS) 来求解非线性 PDE 系统。SNES+KSP 之前成功解决了一个同类型的测试问题,没有遇到任何麻烦。
但是,对于我目前的问题,如果我使用 KSP 反转雅可比行列式,中间解决方案会在两个 MPI 进程之间的边界处形成一个“脊”。下图显示了一个 SNES 步骤运行后的解决方案-ksp_gmres_modifiedgramschmidt -pc_type asm -sub_pc_type lu -sub_pc_factor_shift_type NONZERO。

如果我执行完全相同的二进制文件,但使用带有 的 MUMPS 直接求解器,问题似乎消失了-ksp_type preonly -pc_type lu -pc_factor_mat_solver_package mumps,如下所示。

在上述两种情况下,SNES 决定从采用完整的牛顿步开始。然而,在 KSP 运行中,山脊继续增长,并且步长在接下来的几个步骤中被显着抑制,然后完全失败。在 MUMPS 运行中,SNES 在完成 5 个完整步骤后直接收敛。
有谁知道这里发生了什么?