我已经使用线性缺陷校正(LDC)和全近似方案(FAS)实现了V循环多网格求解器。
我的问题如下:使用LDC,每个循环的残差减少了约0.03倍。FAS的实现也确实以线性因子收敛,但是该因子仅为〜0.58。因此,FAS需要大约20倍的循环次数。
大多数代码是共享的,唯一的区别是LDC使用的向下/向上计算
下:
上:
和FAS使用
下:
上:
我的测试设置来自Brigg的“ Multigrid教程,第二版”,第1页。64,有分析解决方案
与
使用典型的线性五点模具作为Laplace-operator L,该方程式为Lv = \ Delta u =:b。最初的猜测是v = 0。
使用v = 1的初始猜测将测试设置更改为琐碎的,会导致几乎相同的收敛因子。
由于只有向下/向上的代码有所不同,所以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)
我不确定每个周期是否只能获得几位数字,或者这是否表示在对精细网格进行插值时出现错误。如果是后一种情况,那么在始终使用2个弛豫时,LDC如何实现约0.03的账面剩余比率?