MMS:不可压Navier-Stokes方程——故障排查指南

分类: V&V | 2026-02-20
本文已移至整合版本
更加充实的内容请参见 mms-navier-stokes.html
CAE visualization for mms navier stokes troubleshoot - technical simulation diagram
MMS: 不可压缩纳维叶-斯托克斯方程 — 故障排除指南

不可压NS方程的MMS为什么格外难

🙋

热传导的MMS一次就通了,换成Navier-Stokes就完全不行……差在哪里?


🎓

不可压NS带着两条别的方程没有的约束。第一,连续性方程 \( \nabla\cdot\mathbf{u} = 0 \) 是"不随时间演化的约束条件"——制造的速度场不满足它、而求解器又不接受质量源项时,验证从一开始就不成立。第二,压力是维持该约束的拉格朗日乘子——它没有自己的演化方程,对边界条件、基准固定方式、单元配对(LBB条件)都很敏感,压力与速度不同阶收敛往往才是正常的。NS-MMS的大多数麻烦都能归结到这两点。

明确被验证的方程组(密度恒定、运动黏度 \( \nu \)):

$$ \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot\nabla)\mathbf{u} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{u} + \mathbf{s}_u, \qquad \nabla\cdot\mathbf{u} = 0 $$

动量源项 \( \mathbf{s}_u \) 由把 \( (\mathbf{u}_m, p_m) \) 代入左端得到。问题出在连续性那一侧。

症状1:连续性无法满足——无散度制造解的构造

任取的速度场一般 \( \nabla\cdot\mathbf{u}_m \ne 0 \)。求解器能注入质量源(自研代码等)倒也罢了,多数求解器不允许改动连续性方程。那就从一开始构造无散度的制造解。二维用流函数 \( \psi(x,y) \):

$$ u_m = \frac{\partial \psi}{\partial y}, \qquad v_m = -\frac{\partial \psi}{\partial x} $$

按构造保证 \( \nabla\cdot\mathbf{u}_m = 0 \)。例如 \( \psi = \sin(\pi x)\sin(\pi y) \) 给出 \( u_m = \pi\sin(\pi x)\cos(\pi y) \)、\( v_m = -\pi\cos(\pi x)\sin(\pi y) \)。三维用矢量势 \( \mathbf{u}_m = \nabla\times\mathbf{A} \)。压力制造解 \( p_m \) 可独立选取(如 \( \cos(\pi x)\sin(\pi y) \))。符号推导阶段务必确认 \( \nabla\cdot\mathbf{u}_m \) 化简为零——simplify后还剩东西,就是构造错了。

症状2:速度收敛、压力的阶数出不来

检查项说明
压力的不定性固定了吗全边界给速度时压力只定到相差常数。定一点或取零均值,误差评估也按同一约定(先减均值再比较)
单元配对的理论阶数Taylor-Hood系(速度二次/压力一次)压力理论上就比速度低一阶。等阶稳定化(PSPG等)还叠加稳定化项自身的阶数影响
边界附近的压力评估出流边界·角点处压力容易局部降阶。改用仅内部区域的范数重评,先切分开
压力边界条件的一致性压力指定边界要给 \( p_m \) 的值;速度边界上不要顺手又约束压力

"压力观测阶数低于速度"本身在许多离散化里是设计使然。不合格指的是达不到该单元配对的理论阶数,而不是与速度不同。

症状3:源项与求解器的对流项写法不一致

对流项有几种数学等价的写法:迁移形 \( (\mathbf{u}\cdot\nabla)\mathbf{u} \)、散度形 \( \nabla\cdot(\mathbf{u}\mathbf{u}) \)、斜对称形、旋转形。连续且无散度时它们一致,离散层面并不一致——推导用一种、求解器离散另一种,就会出现微妙的阶数污染或误差地板。黏性项同理:\( \nu\nabla^2\mathbf{u} \) 与应力散度形 \( \nabla\cdot\left[\nu(\nabla\mathbf{u} + \nabla\mathbf{u}^T)\right] \) 无散度下等价、离散实现是两码事。查求解器文档里写的定式,就按那个形式推导 \( \mathbf{s}_u \)——这是原则。

症状4:非定常时间阶数出不来——投影法的分裂误差

SIMPLE/PISO/投影法系的压力-速度分离解法,每个时间步都带来分裂误差;随实现不同,压力的时间阶数可能低于速度,常表现为贴边界的压力误差层。诊断的标准顺序:

  1. 先用定常MMS只验空间——把时间离散摘出去;空间阶数不过关,就还轮不到时间
  2. 验时间时把空间冻结得足够细——在时间误差大于空间地板的范围里构造 \( \Delta t \) 序列
  3. 确认外层迭代收敛——PISO修正次数不足、SIMPLE松弛过重都会拉低时间精度;逐步记录残差
  4. 核对时间格式的理论阶——一阶隐式Euler别指望二阶;把时间积分设置写明

症状5:MMS算例直接发散

原因说明与对策
制造解的雷诺数过高振幅与黏度的搭配可能把有效Re推到几千,定常层流解失稳。提高 \( \nu \) 或压低振幅,把有效Re设计在10~100
源项振幅过大波数越高,微分带来的 \( \pi \) 系数放大越猛。从每方向1~2个周期起步
初始条件不一致非定常MMS的初值要用 \( \mathbf{u}_m(t=0) \) 的精确值;零初始化会在初始瞬态崩掉
单位·无量纲化混乱无量纲求解器里塞了有量纲源项;是否除以 \( \rho \) 的形式对不上。逐符号核对定义

附:与已知精确解(Kovasznay流等)的分工

🙋

NS不是有Kovasznay流、Taylor-Green涡这些精确解吗?用它们验证不就行了?


🎓

最佳实践是两个都用。Kovasznay流和Taylor-Green涡不需要任何源项机制就能直接验证,是不依赖注入通道的独立检查。而MMS赢在覆盖面——解的形状、边界类型都能自由设计,让每一项都被检验到。"精确解打底、MMS扫盲区"的两段式,还能把源项bug和求解器bug相互隔离出来。

NS-MMS算例的质量清单

基础流程见整合版MMS:不可压Navier-Stokes方程;源项推导的自动化见MMS源项的自动推导;阶数不达标的通用诊断见收敛阶数的故障排查

评价本文
感谢您的反馈!

帮助
想了解
更多
报告
错误
有帮助
0
想了解更多
0
报告错误
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — 网站地图
查看简介