我正在使用 BiCGStab(l) 解决 3D 时谐 Maxwell FDFD 问题(导致巨大的稀疏线性系统)。我已经尝试了许多不同的方法,对于我的特定用例,似乎该算法在总求解时间方面优于其他常见算法,例如 BiCG 并重新启动了 GMRES。但是,我注意到随着我增加了问题大小以及网格精度(我使用的是非均匀网格,但最小的似乎对收敛行为很重要)我遇到了一个问题,即在针对特定初始解决方案进行多次迭代后,BiCGStab(l) 停滞不前,无法进一步减少残差。这似乎发生在大约 10% 的时间里,到目前为止,我总是能够通过从不同的初始解决方案重新启动来解决它。然而,每个问题都需要很长时间才能解决,所以如果我能保证一开始就收敛,那将是理想的。我试过设置 l=2,4,5,甚至 8,同样的事情发生了。
我想知道是否做一些简单的事情,比如检测停滞,采用当前的解决方案并随机扰动它,然后重新启动求解器,因为最初的猜测会有所帮助。听起来像一个完整的黑客,但我不确定我可以如何解决这个问题而不必完全重新启动。
如果它对任何事情都很重要,我会使用一个简单的预处理器,它几乎是一个对角预处理器。我发现对于我的具体问题,它比 ILU(0) 预条件子收敛速度更快。除了这两个之外,我还没有尝试过任何其他预处理器。