ICCG负残留产品r吨米− 1rrTM−1r

计算科学 预处理 共轭梯度 数值限制
2021-11-27 09:49:03

我有一个由泊松方程的有限元离散化产生我正在应用一个 IC0(与原始矩阵具有相同稀疏度的然而,当这个系统变得足够大时,我偶尔会在某些迭代中得到负的预处理残差积(其中,并且是预处理器)。Ax=bLDLTrkTM1rkrk=bAxkM=LDLT

分解期间或在前向和后向替换期间由浮点错误引起的(此时我使用双精度,因此目前不能选择使用更高的精度) 。我使用 Cholesky–Banachiewicz 算法进行分解(由于浮点精度我已经手动确保完全对称,并且我还尝试使用更新而不是LDLTLDLTLLTArk=bAxkrk=rk1αAqk在每次 PCG 迭代中,但这并没有解决问题。有什么方法可以使它更健壮吗?或者关于不会涉及如此大错误的预处理器的任何其他建议?我目前正在考虑域分解并阻止 Jacobi,因为它允许我在多个较小的系统上执行分解。

1个回答

作为我所做的参考:我尝试了更精确的求和算法,但这仅在一定程度上有所帮助,并且系统稍大或条件稍差的问题仍然会导致 CG 发散。我已经切换到几何多重网格,即使在单精度下它也能很好地工作。事实证明,它比 Choleksy 预处理 CG 快得多,并且有一些扩展使其适用于具有更复杂形状的边界:用于大型网格上的流体模拟的并行多网格 Poisson 求解器