BiCGStab(l) 的收敛/停滞

计算科学 有限差分 迭代法 收敛 克雷洛夫法
2021-12-08 15:02:15

我正在使用 BiCGStab(l) 解决 3D 时谐 Maxwell FDFD 问题(导致巨大的稀疏线性系统)。我已经尝试了许多不同的方法,对于我的特定用例,似乎该算法在总求解时间方面优于其他常见算法,例如 BiCG 并重新启动了 GMRES。但是,我注意到随着我增加了问题大小以及网格精度(我使用的是非均匀网格,但最小的dx似乎对收敛行为很重要)我遇到了一个问题,即在针对特定初始解决方案进行多次迭代后,BiCGStab(l) 停滞不前,无法进一步减少残差。这似乎发生在大约 10% 的时间里,到目前为止,我总是能够通过从不同的初始解决方案重新启动来解决它。然而,每个问题都需要很长时间才能解决,所以如果我能保证一开始就收敛,那将是理想的。我试过设置 l=2,4,5,甚至 8,同样的事情发生了。

我想知道是否做一些简单的事情,比如检测停滞,采用当前的解决方案并随机扰动它,然后重新启动求解器,因为最初的猜测会有所帮助。听起来像一个完整的黑客,但我不确定我可以如何解决这个问题而不必完全重新启动。

如果它对任何事情都很重要,我会使用一个简单的预处理器,它几乎是一个对角预处理器。我发现对于我的具体问题,它比 ILU(0) 预条件子收敛速度更快。除了这两个之外,我还没有尝试过任何其他预处理器。

2个回答

您可能已经熟悉以下论文:

http://link.springer.com/chapter/10.1007%2F978-3-642-22061-6_10

高度不确定和振荡的问题很难设计稳健的迭代方法。该论文提供了一些可能对您有所帮助的建议,其中许多建议也已扩展到时谐波麦克斯韦案例。

编辑:为了其他人的利益,尽管您已经遇到过这种挫败感,但我会提到您在正确收敛中描述的困难只会随着波数的增加而增加,因为这个参数会增加解决方案的振荡性质。我认为链接的论文比我在几段中更好地描述了这个问题的性质,我强烈建议通读它。

然而,为了尊重,我应该提到已经开发了一些健壮的迭代方法,这些方法甚至已经成功地实现了并行实现。这是一张这样的论文

http://arxiv.org/abs/1007.4291

我的(原始)理解是,这种方法有点像使用 PML 边界条件的乘法 Schwarz 预处理器,具有一些出色的见解,允许以低于正常计算复杂度的方式应用预处理器(使用 H 矩阵代数)。

迭代方法的收敛性受矩阵条件数的影响,随着网格的细化而趋于增加。Benzi 所做的工作表明,如果首先执行置换以最大化矩阵的对角线条目,则可以使用 ILU 或近似逆预处理器获得改进的收敛性。搜索 Bollhoffer 的“预处理对称和高度不定问题”和 Benzi 等人的“预处理高度不定和非对称矩阵”。他们使用了 Harwell MC64 算法,我相信它可以免费用于学术用途,或者他们自己的底层算法变体。搜索“用于将大型条目置换到稀疏矩阵的对角线的算法的设计和使用”以获取 MC64 的描述。一般来说,首先重新排序以最小化填充或带宽,然后置换矩阵以最大化对角线。还可以使用行和列缩放矩阵对矩阵进行正则化。

还有一个 BiCGStab 的变体,它以多个起始向量开头。我不确定它是否会在这种情况下有所帮助。搜索 ML(n)BiCGStab。作者还在以下位置提供了 matlab 代码:

http://www.uwyo.edu/mathmyeung/r19/index.html

最好的选择可能只是一个更好更健壮的预处理器(例如,来自 Saad 的 ILUt 代码、来自 Bollhoffer 的 ILUPACK 代码、桑迪亚国家实验室开发的 Trilinos 预处理器等)。ORNL 的 Jack Dongarra 维护了一个不错的站点,其中包含可免费获得的稀疏矩阵直接和迭代求解器列表:

http://www.netlib.org/utk/people/JackDongarra/la-sw.html

网站包含指向该软件官方网站的链接。