当使用更多网格级别时,多重网格停止收敛

计算科学 边界条件 收敛 多重网格
2021-11-27 16:32:52

我编写的多重网格代码有问题。如果我在 2D 中求解拉普拉斯方程并使用超过 5 个网格级别,则 V 循环会在几个循环后停止收敛(见下文,收敛因子 > 1)。在网格级别 3,您可以看到递归 V 循环实际上增加了误差(缺陷的 L2 范数)。如果我使用较少的网格级别,我的代码会按预期收敛。我怀疑这是边界条件的问题,因为在 V 周期 2 之后,靠近边界的缺陷非常高。

对于狄利克雷边界,我将鬼点添加到最精细的网格以保存边界值。当我限制缺陷时,我将粗网格鬼点处的缺陷值设置为零。我还有什么需要担心的吗?

V-CYCLE 1
LEVEL   ACTION                  ERROR
1       Initial                 4.566101e-01
1       Relaxation sweep 1      1.375412e-01
2       Initial                 4.264610e-02
2       Relaxation sweep 1      2.082439e-02
3       Initial                 1.580465e-02
3       Relaxation sweep 1      9.881322e-03
4       Initial                 8.008788e-03
4       Relaxation sweep 1      5.150501e-03
5       Initial                 4.121322e-03
5       Relaxation sweep 1      2.643638e-03
5       Relaxation sweep 400    1.525026e-18
5       Coarse grid corr.       4.253979e-03
5       Relaxation sweep 1      1.356265e-03
4       Coarse grid corr.       1.301027e-02
4       Relaxation sweep 1      4.956990e-03
3       Coarse grid corr.       3.427880e-02
3       Relaxation sweep 1      1.421168e-02
2       Coarse grid corr.       8.532111e-02
2       Relaxation sweep 1      3.721634e-02
1       Coarse grid corr.       2.409762e-01
1       Relaxation sweep 1      1.022146e-01
CONVERGENCE FACTOR: 0.223855

V-CYCLE 2
LEVEL   ACTION                  ERROR
1       Initial                 1.022146e-01
1       Relaxation sweep 1      6.796567e-02
2       Initial                 5.807979e-02
2       Relaxation sweep 1      4.311037e-02
3       Initial                 3.733848e-02
3       Relaxation sweep 1      2.717026e-02
4       Initial                 2.302219e-02
4       Relaxation sweep 1      1.627633e-02
5       Initial                 1.341552e-02
5       Relaxation sweep 1      9.233742e-03
5       Relaxation sweep 400    5.981442e-18
5       Coarse grid corr.       1.660509e-02
5       Relaxation sweep 1      5.472094e-03
4       Coarse grid corr.       4.952103e-02
4       Relaxation sweep 1      1.951415e-02
3       Coarse grid corr.       1.255826e-01
3       Relaxation sweep 1      5.395197e-02
2       Coarse grid corr.       2.973566e-01
2       Relaxation sweep 1      1.349677e-01
1       Coarse grid corr.       6.812406e-01
1       Relaxation sweep 1      3.210040e-01
CONVERGENCE FACTOR: 3.140491
1个回答

感谢发帖者鼓励我寻找错误。我发现了一个与限制和插值有关的微妙问题。我使用幽灵点来处理边界,因此第一个内部点位于索引 (0,0) 处(边界点存储在负索引上)。这可以工作,但你必须记住,内部粗网格点必须以细网格点 (1,1)、(3,1)、(1,3)、(3,3) 等为中心。我的错误以 (0,0)、(2,0)、(0,2)、(2,2) 等为中心,这些点是紧邻边界的点。这种轻微的变化会导致边界出现问题。