我了解到,对于稀疏线性系统的 BiCGStab 求解器,几乎总是需要使用预处理器。我现在意识到选择一个好的是取决于问题的。
在网上冲浪时,我发现有许多基于 ILU 的预处理器(ILUT、MILU 等)。这就是我感到困惑的地方。
我想知道是否有人可以简要解释 ILU 预处理器的分类,为特定的提供一些文献资源,以及哪些适合 BiCGStab。
我正在使用的设置是 CFD,代码基于非结构化有限体积离散化。湍流标量的动量方程和输运方程可能需要不同的预处理器。
我了解到,对于稀疏线性系统的 BiCGStab 求解器,几乎总是需要使用预处理器。我现在意识到选择一个好的是取决于问题的。
在网上冲浪时,我发现有许多基于 ILU 的预处理器(ILUT、MILU 等)。这就是我感到困惑的地方。
我想知道是否有人可以简要解释 ILU 预处理器的分类,为特定的提供一些文献资源,以及哪些适合 BiCGStab。
我正在使用的设置是 CFD,代码基于非结构化有限体积离散化。湍流标量的动量方程和输运方程可能需要不同的预处理器。
一个预条件子,比如 M,是系统矩阵的一个近似值,比如 A,它将问题变成另一个具有改进特征值谱的问题。一个完美的预条件子将是 A 的逆,即 inv(M) = A。
不幸的是,这个逆通常不可用,计算太复杂,需要更多空间来存储,因为在分解过程中引入了填充,并且还可能遭受舍入错误。因此,预条件子应该易于计算和应用且有效。
除了像 Jacobi 或 Gauss-Seidel(或 SOR)这样的基本预处理器之外,最常见的预处理器之一是 ILU(对称问题中的 IC - 您正在研究 CFD,因此系统或非对称)
预处理器的选择通常取决于您的问题。ILU 有很多变种,如 ILUT、ILUS、MILU 等。您可以查阅我在最后添加的文献。对于难度较小的问题,可以使用 ILU(0),但随着问题变得更难,即雷诺数增加,应该使用更多的填充(例如 ILU(1))和阈值策略 (ILUT)。问题是,ILU 的高级使用需要更多的内存和稀疏模式的确定,这现在与您的系统矩阵不同。在这种情况下,您必须先用符号计算稀疏模式,然后再用数字计算。
有几个减少计算工作的想法,
由于该问题是非对称的,因此主要使用两个求解器:GMRES 或 BiCGStab。(QMR 或 TFQMR 是其他选择,但我相信它的性能低于这两者)。如果您没有存储问题但由于存储的向量需要重新启动,GMRES 通常是一个更好的求解器 - 这是一个问题是预处理器很差或者您有非常大的自由度。BiCGStab 只需要四个 Matrix-Vector 乘积,这对于大问题很好,但通常不如 GMRES。(我更喜欢 GMRES,但我非常喜欢 BiCGStab!)
所有这些预处理器,线性求解器问题都非常复杂。我可以推荐一些书来阅读。你的起点应该是线性系统解决方案的模板这是一本免费的书。本书解释了作为独立求解器和 Krylov 求解器上的预处理器的平滑器。您还可以参考 Yousef Saad 的“稀疏线性系统的迭代方法”。它在您所在机构的图书馆中是确定的。第一版也可在此处获得。
在结束之前,我建议您查看Petsc、Trilinos甚至Hypre等框架以及1提供的文件。它们为预调节器提供了一些编程。实际上还有更多书籍可以提供,但也可以看看 Ke Chen 的“Matrix Preconditioning Techniques and Applications”。本书提供了 Matlab 代码。
祝你旅途愉快,你需要它。
Y. Saad 的书也是求解器和预处理器的标准参考资料之一。