我已经使用线性缺陷校正 (LDC) 和完全近似方案 (FAS) 实现了 V-Cycle 多重网格求解器。
我的问题如下:使用 LDC,每个周期的残差减少了约 0.03 倍。FAS 实现也确实与线性因子收敛,但该因子仅为 ~0.58。因此 FAS 需要大约 20 倍的周期数。
大部分代码是共享的,唯一的区别是向下/向上计算,LDC使用
向下:
向上:
和 FAS 使用
向下:
向上:
我的测试设置来自 Brigg 的“A Multigrid Tutorial, Second Edition”,p。64、有解析解
和
方程是使用典型的线性 5 点模板作为拉普拉斯算子. 最初的猜测是.
更改测试设置,例如更改为微不足道的使用初始猜测导致几乎相同的收敛因子。
由于只有向下/向上代码不同,LDC 结果与本书相符,而且 FAS 至少似乎也可以工作,我不知道为什么它在相同的线性设置中要慢得多。
在 LDC 和 FAS 中都有一个我无法解释的奇怪行为,只有在最初的猜测错误的情况下才会发生(例如而且在我的完整多网格实验中,对新细网格的插值会增加残差到):如果我将后校正松弛的数量增加到一个非常高的数量,以便解决方案在粗网格上解决机器精度问题,那么当进入下一个细网格时,它会丢失几乎所有数字。
因为一张照片胜过千言万语:
// first cycle, levels 0-4
// DOWN
VCycle top 4, start res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)
我不确定每个周期是否只能获得几位数字,或者这是否表明在细网格插值过程中出现错误。如果是后一种情况,LDC 如何在始终使用 2 个松弛时实现约 0.03 的账面残差率?