参数设置
求解问题为 -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单独)
理论与主要公式
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,而非蛮力加循环。