参数设置
求解问题为 -u''(x)=f(x)、u(0)=u(1)=0,使用精确解 sin(kπx) 并取 f(x)=(kπ)²sin(kπx)。N 会被四舍五入到最近的 2^k+1。
解 u(x) 与收敛历史 ‖r‖
上方=解 u(x)(蓝色实线=MG 数值解 / 灰色虚线=精确解 sin(kπx))/ 下方=对数坐标下残差 ‖r‖ 的收敛历史(蓝=MG,红=GS 单独)
理论与主要公式
对一维泊松方程做有限差分离散后,对每个内部点 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)$$
全权重限制(fine→coarse)与线性插值(coarse→fine):
$$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{Smooth}\circ \text{Prolong}\circ V_{2h}\circ \text{Restrict}\circ \text{Smooth}(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,对比两个残差卡片就知道了。
🙋
把「细网格点数 N」推到 257,计算瞬间完成、残差也照样降下来!细化网格不是会变慢吗?
🎓
这正是 MG「最优复杂度」的特性。普通迭代法把 h 减半,所需迭代次数大致变 4 倍;而 MG 的迭代次数与 h 无关。每个 V 循环成本是 O(N),常数次循环就能收敛,整体也是 O(N)。这就是为什么千万自由度的问题也能在几十秒内解完,多重网格成为现代大规模 CAE 求解器的标配。
常见问题
FAS(Full Approximation Scheme)在粗网格上保存完整解而非误差,给非线性算子提供一致的处理方式。典型应用包括纳维-斯托克斯方程、RANS 湍流封闭模型、塑性问题以及相变热传导等线性化困难或代价高昂的问题。粗网格上直接求解非线性残差,并把修正显式加回细网格的解,这一点与线性 MG 不同。
几何多重网格假设存在规则网格层次,每层将间距减半。AMG 则完全不依赖几何信息,仅从矩阵 A 的连接强度自动构造伪粗化层次。它可以直接用于非结构 FEM 网格、管网、电路仿真等没有自然层次的大规模稀疏问题,被 Hypre BoomerAMG、Trilinos ML 等库实现并嵌入到许多商业求解器中。
在大规模结构与热传导 FEM 问题中,MG/AMG 常作为共轭梯度(CG)或 GMRES 的预条件子使用。单纯 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(Geometric-Algebraic Multigrid)、ANSYS Fluent 的 AMG、Star-CCM+ 等现代商业与开源 CFD 几乎都采用多重网格求解压力泊松方程。SIMPLE/PISO 算法每个时间步都要解一次压力方程,约占总计算时间的 60-80%,能否做到 O(N) 求解直接决定整体性能。
结构分析的预条件子:线性弹性、热传导的大规模 FEM 问题里,刚度矩阵 K 对称正定,AMG 预条件共轭梯度(PCG-AMG)是事实上的标准。即便是 500 万自由度量级的汽车车身模型,AMG-PCG 也只需几十次迭代即可收敛。Hypre、Trilinos ML、PETSc 提供 AMG 后端,被许多商业求解器集成使用。
气象与海洋模拟:全球气候与天气模型经过静水近似、科里奥利近似后会出现椭圆型压力方程,需要每时间步快速求解。WRF 天气模型、MITgcm 海洋模型等均使用球面网格几何多重网格或并行 AMG,在数千乃至数万核 HPC 上实时算出未来数日预报。
计算机视觉与图像处理:多重网格在视觉与图形领域同样关键,泊松图像编辑(无缝拼贴)、HDR 色调映射、立体视差优化、基于流体的 CG 特效都需要每帧求解巨大稀疏系统,多重网格的速度正是实现实时性的保证。
常见误区与注意事项
最常见的误解是认为「多重网格像魔法一样对所有问题都快」。实际上如果松弛子和粗化策略与问题不匹配,收敛就会停滞。例如对流主导问题(高 Péclet 数的对流扩散方程),点 Gauss-Seidel 无法消除高频误差成分,收敛因子接近 1。这类问题需要块 Gauss-Seidel、线松弛子或半粗化。本模拟器使用纯泊松方程,因此始终呈现约 0.1 的理想收敛因子,但实际问题中这些调参才是 MG 实现的精髓。
其次,人们常以为「松弛次数越多越好」。在模拟器里把松弛次数从 1 调到 10,会看到 MG 最终残差几乎不改善。一旦松弛子在几次扫描内消除了高频误差,剩下的就是光滑误差,只能交给粗层处理。实务中前后各 2 至 3 次松弛是标准选择,ν=1 也能收敛的 MG 被视为高效。
最后,「MG 收敛慢就增加 V 循环数」并非正确做法。设计良好的 MG 应在 5 到 10 次循环内达到离散化误差水平 O(h²),若需要更多通常意味着出错——松弛子不匹配、边界条件处理错误,或粗网格算子混用了重新离散化与 Galerkin。正确的诊断是检查每次循环的残差比 r_{n+1}/r_n 是否维持在 0.1 至 0.2 之间,而非靠暴力增加循环数。