多重网格法模拟器 返回
数值计算模拟器

多重网格法模拟器 — V 循环求解 1D 泊松方程

用V循环多重网格法求解1D泊松方程,通过粗网格修正观察残差快速衰减,与Gauss-Seidel单独算法对比可视化。

参数设置
细网格点数 N(2^k+1)
V循环次数
GS松弛次数(前/后各)
精确解波数 k(sin(kπx))

求解问题为 -u''(x)=f(x),u(0)=u(1)=0。采用精确解 sin(kπx),强制项 f(x)=(kπ)²sin(kπx)。N自动舍入为2^k+1。

计算结果
MG 5循环后残差 ‖r‖
GS等效迭代后残差
残差比 GS/MG(加速倍数)
与精确解L2误差
解 u(x) 与收敛历史 ‖r‖

上图=解u(x)(蓝实线=MG数值解/灰虚线=精确解sin(kπx));下图=对数刻度残差‖r‖收敛历史(蓝=MG,红=GS单独)

理论与主要公式

1D泊松方程用有限差分离散,内部格点i得到线性方程组 $A\mathbf{u}=\mathbf{f}$,其中A是对角线元素为2、副对角线为-1的对称三对角矩阵。

细网格(网格宽度 $h$)离散化:

$$-\frac{u_{i-1}-2u_i+u_{i+1}}{h^2}=f_i$$

Gauss-Seidel松弛(消除高频误差):

$$u_i^{(\text{new})}=\tfrac{1}{2}\bigl(u_{i-1}^{(\text{new})}+u_{i+1}^{(\text{old})}+h^2 f_i\bigr)$$

完全权重限制(细网格→粗网格)和线性延拓(粗网格→细网格):

$$r^{2h}_i=\tfrac{1}{4}r^{h}_{2i-1}+\tfrac{1}{2}r^{h}_{2i}+\tfrac{1}{4}r^{h}_{2i+1}$$

V循环整体(递归):

$$u\leftarrow \text{光滑}\circ \text{延拓}\circ V_{2h}\circ \text{限制}\circ \text{光滑}(u)$$

光滑误差分量在粗网格上被视为\"高频\",各层级光滑器有效消除,收敛因子与网格大小无关,约为0.1。

多重网格法模拟器简介

🙋
在CAE求解器里经常听说"多重网格预处理",这到底是在做什么?与普通迭代法有什么区别?
🎓
好问题。简单说,Gauss-Seidel这样的点迭代法"只能和邻居说话"。信息每步只能传播到相邻格点,光滑(低频)误差需要几百次迭代才能衰减。而多重网格法通过下降到粗网格,可以"一下子传播远距离信息"。在这个模拟器里,试试把V循环次数从1改到5,你会看到红色的GS缓慢下降,而蓝色的MG却大幅跳跃,几个数量级衰减。
🙋
那"GS松弛次数"这个滑块是什么意思?次数越多收敛越快吗?
🎓
这是有趣的地方。增加每层松弛次数,MG的最终残差几乎不变。原因是光滑器的任务只是"消除高频误差",低频误差交给粗网格处理。所以3次和10次的效果差不多。实际工程通常用2-3次,增加反而浪费计算时间。你试试把松弛次数改成1和10对比,蓝线的斜率基本一样。
🙋
"精确解波数k"改成1时,解变成单个正弦半波。改大了就变成波浪。
🎓
对,k控制强制项f(x)的空间频率。重要的观察是:k从1改到20,MG收敛都很稳定。这是多重网格最大优势——能"均匀消除所有频率的误差"。而GS在低频k=1时最难受,收敛极其缓慢。你试试k=1看残差卡片,差别会很明显。
🙋
把细网格点数改成257时,计算一瞬间完成,残差照样衰减!通常细网格会很慢啊?
🎓
这就是MG的"最优复杂度"。普通迭代法把网格宽度h减半,迭代次数约增加4倍。而MG的迭代次数与h无关。所以每次迭代O(N),总共还是O(N)。1千万点问题也能几十秒搞定,这就是为什么现代大规模CAE求解器都用MG。

常见问题

FAS(Full Approximation Scheme)在粗网格保持"解本身"而非误差方程,为非线性算子提供一致处理框架。用于Navier-Stokes方程、Reynolds平均湍流模型、塑性问题、相变传热等线性化困难或代价高的问题。各层级直接计算非线性残差,粗网格修正显式加到解上,这是与线性MG的核心区别。
几何多重网格依赖"规则网格",每层点数减半。AMG不用格子信息,只从系数矩阵A的强耦合关系自动构造伪粗化。适用于非结构FEM、管网、电路模拟等无几何层次的大规模疏矩阵,商用求解器(HYPRE BoomerAMG、Trilinos ML等)广泛实现。
大规模结构、热分析有限元模型用迭代法(共轭梯度CG、GMRES)求刚度矩阵K,用MG/AMG作预处理。CG单独会因条件数恶化严重减速,加AMG预处理后数十次迭代即收敛。Ansys、Abaqus、COMSOL的"PCG with AMG"设置、OpenFOAM的GAMG求解器都是实例。
主要有W循环(粗网格递归2次)和F循环(V与W之间)、FMG(Full Multigrid/嵌套迭代)。W循环粗网格成本增加,但对流控制或强各向异性问题稳定性更好。FMG从最粗网格逐层细化求解,花费仅1-2个V循环代价却能达离散化误差,是"最优初值"的关键。

实际应用

大规模CFD求解器:OpenFOAM的GAMG、Ansys Fluent的AMG、Star-CCM+等现代商用和开源CFD求解器,压力泊松方程求解都用多重网格。SIMPLE/PISO算法每时步求解的泊松方程占总计算时间60-80%,O(N)求解能力决定全局性能。

结构分析预处理:线性弹性、热传导大规模FEM问题的刚度矩阵K是对称正定的,标准用PCG-AMG(预处理共轭梯度)。500万自由度汽车车身模型数十次迭代即收敛。Hypre、Trilinos ML、PETSc的AMG库嵌入各商用求解器。

气象海洋模拟:全球大气海洋模型因Coriolis力和静水压近似产生椭圆型压力方程,需每步高速求解。WRF气象预报模型、MITgcm海洋模型用球面网格几何MG或并行AMG,数千万核HPC实时预报数天天气。

图像处理与泊松编辑:计算机视觉中泊松图像编辑(无缝拼贴)、HDR色调映射、立体视差优化、CG流体特效都涉及巨大疏矩阵逐帧求解,多重网格速度支撑实时性。

常见误解与注意事项

最常见误解是"多重网格对任何问题都是魔法般快速"。实际上光滑器和粗化必须与问题匹配,否则收敛失效。如对流占优问题(Péclet数大的移流扩散方程),点Gauss-Seidel无法消除高频,收敛因子接近1。这需用块GS、线GS或单向粗化。本模拟器纯泊松方程,收敛因子恒为理想的0.1,现实问题需精心调优。

次常见误解是"增加松弛次数越多越好"。试试把模拟器松弛从1改10,MG最终残差几乎不动。原因是光滑器只负责高频消除,数次已足,更多浪费。工程标准是前后各2-3次(共4-6次),更多导致效率恶化。ν=1收敛的MG被视为"高效"。

最后"MG收敛慢就多加循环"也错。本应5-10循环达离散化误差(O(h²)),需更多说明"有问题"。常见原因:光滑器与矩阵不匹配、边界处理错、粗网格算子构造缺陷(重离散vs Galerkin混用)。正确诊断是检查收敛因子rₙ₊₁/rₙ是否在0.1-0.2,而非蛮力加循环。

使用指南

  1. 设置细网格点数N(默认256)。选择2的幂次使V字处理高效。
  2. 输入多重网格迭代循环数(推荐1-10)。每个V循环执行一次粗网格限制和延拓。
  3. 选择光滑器:Gauss-Seidel迭代(默认),每层前进扫4次。
  4. 调整振动数参数(1-10),改变粗网格修正针对的高频波数。
  5. 运行后查看5循环后的残差‖r‖和与精确解的L2误差。

具体计算例

1D泊松方程-d²u/dx²=f(x),x∈[0,1],u(0)=u(1)=0,在N=512格点离散(网格宽h=1/513≈0.00195)。右端f(x)=sin(πx),Gauss-Seidel100次迭代后‖r‖≈8.2×10⁻⁴,多重网格5个V循环‖r‖≈1.1×10⁻⁶。残差比GS/MG≈745倍加速。精确解u(x)=sin(πx)/π²的L2误差MG达3.5×10⁻⁵以下。

工程实践注意