流体力学里有一类方程,写起来只有几行,但真正把它吃透、把它算准,能让一个工程师从入门熬到资深。纳维-斯托克斯方程就是这样一个东西。它描述的是黏性流体的运动规律,小到毛细血管里的血液流动,大到天气预报里的台风路径、飞机机翼表面的附面层,都归它管。我第一次在代码里把它离散出来跑出结果的时候,屏幕上是一片乱跳的速度场,网格越细跳得越凶,那时候才明白一件事:这个方程的数学难度和工程难度是两回事,前者悬了一百多年没解决,后者逼着几代工程师用各种近似手段硬啃下来。这篇内容适合三类人看:正在学流体力学、被张量符号绕晕的学生;要上手做流体仿真、但不确定该选什么模型和离散格式的工程人员;以及单纯好奇"为什么一行方程能难倒数学家一个世纪"的技术爱好者。我会从方程本身的拆解讲起,一路说到网格、离散、压力耦合、湍流模型和实操里的坑,中间会给可直接复现的算例和参数,尽量让你看完就能动手。
1. 先把方程拆开看:四个项到底在干什么
1.1 从牛顿第二定律到动量方程
很多人第一次看到纳维-斯托克斯方程会觉得它像天书,其实它的出身特别朴素,就是给一个流体微元写牛顿第二定律。取一个边长趋于零的立方体控制体,质量是密度乘体积,加速度是速度对时间的物质导数,右边是作用在它上面的力。流体力无非两种:一种是压力,垂直于表面压进来;一种是黏性力,来自相邻流体层之间的剪切摩擦。把它写成守恒形式就是这么一行:
$$ \rho\left(\frac{\partial \mathbf{u}}{\partial t} + \mathbf{u}\cdot\nabla\mathbf{u}\right) = -\nabla p + \mu \nabla^2 \mathbf{u} + \mathbf{f} $$
左边括号里有两项,$\partial \mathbf{u}/\partial t$ 是当地加速度,也就是你在固定位置架个探头测到的速度变化率;$\mathbf{u}\cdot\nabla\mathbf{u}$ 是对流加速度,即使流场完全定常,只要你跟着流体跑,速度也会变,因为你会被带到速度不同的地方去。这一项是整个方程组里最麻烦的根源,它是非线性的,速度自己乘自己的梯度,数学上所有的"坏脾气"都从这里来。右边第一项压力梯度是推着流体走的动力,第二项黏性扩散是耗散,第三项是体积力,重力、离心力、电磁力都往这里塞。
我在给新人讲这一项的时候喜欢用河流打比方。当地加速度就像你站在桥上盯着某一点水面看它涨落;对流加速度就像你扔一片树叶下去,树叶从窄河道被冲进宽河道,它自己的速度变小了,但没有任何人"减速"它,纯粹是位置变了。这个类比不严谨但对建立直觉特别有用。
1.2 连续性方程与不可压假设的边界
动量方程之外还得配一个连续性方程,也就是质量守恒:
$$ \frac{\partial \rho}{\partial t} + \nabla\cdot(\rho \mathbf{u}) = 0 $$
对于液体,以及马赫数小于 0.3 的气体流动,密度变化可以忽略,它就退化成一个约束条件 $\nabla\cdot\mathbf{u}=0$。这个简化看起来是降低了难度,实际上正相反,它带来了一整套麻烦:压力在不可压方程里不再有状态方程,它变成了一个拉格朗日乘子,作用是保证速度场散度为零。这就是为什么做不可压仿真的人都在跟"压力-速度耦合"较劲,后面的章节我会专门展开。
可压缩那一侧则是另一番景象,密度成了独立变量,需要补能量方程和状态方程,还会出现激波、膨胀波这些间断面,数值上要用通量分裂或者黎曼求解器处理。选择走哪条路,判断标准就是马赫数和你关心的物理现象,不是看哪个公式更熟悉。
1.3 各项的量级对比与取舍逻辑
动手之前我养成了一个习惯:先算各项的量级,确认哪些项能砍、哪些项必须留。以圆管里的水为例,管径 50 mm,平均流速 1 m/s,运动黏度取 $10^{-6}\ \mathrm{m^2/s}$,雷诺数就是 $Re = UL/\nu \approx 5\times10^4$,属于充分湍流。这时候黏性项在主流区其实小得可怜,惯性项占绝对主导,但你又不能把黏性项删掉,因为壁面附近的黏性底层里它是唯一能提供剪切的机制。删掉它就是欧拉方程,会出现无黏流动里经典的达朗贝尔佯谬——一个物体在理想流体里匀速运动居然不受阻力,这显然违背常识。
注意:判断一项能不能忽略,不能只看主体流动,必须看边界层、看分离区、看你最关心的那个物理量产生的区域。全流场一致地做量级判断,是新手最容易犯的错。
举个更具体的例子。做芯片散热器流道仿真的朋友,流道特征尺寸只有零点几毫米,流速也不高,雷诺数可能只有几百,这时候黏性项和对流项是同一量级,甚至黏性占优,任何"简化掉黏性"的操作都会让结果彻底失真。反过来做飞机外流,机身尺度几十米,雷诺数上亿,壁面必须靠壁面模型处理,硬解到壁面会让网格量炸到算不动。同一个方程,尺度一变,方法论全变。
2. 无量纲化与雷诺数:一个数字决定你该用什么方法
2.1 特征尺度怎么取,这里最容易出错
无量纲化的意义在于把问题的控制参数压缩成几个无量纲数,让你在做仿真之前就知道这个流动是层流、湍流、还是根本算不准。做法是拿特征长度 $L$、特征速度 $U$、特征时间 $L/U$、特征压力 $\rho U^2$ 去归一化,代入后得到:
$$ \frac{\partial \mathbf{u}^}{\partial t^} + \mathbf{u}^\cdot\nabla^\mathbf{u}^* = -\nabla^* p^* + \frac{1}{Re}\nabla^{2}\mathbf{u}^$$
雷诺数 $Re = \rho U L/\mu = UL/\nu$ 的物理意义是惯性力与黏性力的比值。这个"特征"两个字非常关键,很多人算出来的雷诺数对不上,不是公式错,是特征尺度取错了。
- 管内流动取水力直径 $D_h$,圆管就是直径,非圆截面取 $4A/P$,面积除以湿周
- 平板外流取距前缘的流向距离 $x$,注意它随位置变化,所以局部雷诺数和整体雷诺数是两个东西
- 绕流圆柱或球体取直径
- 叶轮机械里经常取弦长或者叶高,看你想分析什么现象
- 微通道里特征尺寸小于 1 mm 时,还要考虑稀薄效应,克努森数超过 0.01 连续介质假设就开始失效了
2.2 流态判别与对应的方法论
有了雷诺数就大致知道该走哪条路。工程上常用的经验区间是这样的:
| 雷诺数范围 | 流态判断 | 建议方法 | 备注 |
|---|---|---|---|
| Re < 2000(管内) | 层流 | 直接求解 N-S,无需湍流模型 | 网格足够即可,成本低 |
| 2000 ~ 4000 | 过渡区 | 谨慎,层流模型与湍流模型都可能失真 | 建议做敏感性对比 |
| Re > 4000 | 湍流 | RANS 起步,精度不够上 LES | 壁面处理是关键 |
| Re > 10^6 | 高雷诺数 | RANS + 壁面函数,或 DES/SBES | 全解析 DNS 不现实 |
我在项目里见过太多"不管雷诺数多大直接上个 k-epsilon"的情况,结果做出来的回流区长度差了一倍。原因很简单,标准 k-epsilon 是各向同性涡黏模型,对强旋流、强逆压梯度、大分离的预测天生不足。选模型之前先问自己三个问题:流动有没有强分离?有没有旋转或浮力?壁面附近的物理(换热、摩擦阻力)是不是我关心的重点?三个问题答完,模型基本就定了。
2.3 马赫数与可压缩性的补充判据
光看雷诺数不够,气体流动还要看马赫数。工程上习惯以 0.3 为界,低于它按不可压处理,误差可以接受;超过 0.3 密度变化超过 5%,压缩性效应开始显著;超过 0.8 出现激波,必须用可压缩求解器配通量格式。另外还有一个容易忽略的温度判据:如果流动中存在明显的温度梯度导致的密度变化,即使马赫数不高也得考虑变物性,比如自然对流、燃烧、高温烟气流动。物性变化本身就会改变流场结构,强行用常物性算出来的结果,努塞尔数可能偏 20% 以上。
我用一段几行的 Python 把这两个判据封装成函数,每次建新算例先跑一遍,避免低级失误:
def regime_check(U, L, nu=1.0e-6, c=343.0): """快速判断流态与可压缩性,U 单位 m/s,L 单位 m""" Re = U * L / nu Ma = U / c if Re < 2000: flow = "层流,可直接求解 N-S" elif Re < 4000: flow = "过渡区,需做模型敏感性对比" else: flow = "湍流,RANS 起步" comp = "不可压" if Ma < 0.3 else ("亚声速可压缩" if Ma < 0.8 else "跨/超声速,需通量格式") return {"Re": Re, "Ma": Ma, "flow": flow, "compressibility": comp} print(regime_check(U=1.0, L=0.05)) # {'Re': 50000.0, 'Ma': 0.00292, 'flow': '湍流,RANS 起步', 'compressibility': '不可压'}这段代码没什么技术含量,但把它固定成流程的第一步,能省掉后面返工的时间。
3. 数学上的硬骨头:解的存在性与光滑性
3.1 三维情形到底难在哪
聊这个方程绕不开一个数学悬案:三维不可压纳维-斯托克斯方程在给定光滑初值下,是否存在全局光滑解。这属于数学界公认的顶级难题之一,被列为千禧年七大问题之一。为什么二维好办、三维就卡住了,核心差别在于涡的拉伸。二维流动里涡量只有一个分量,涡管不能被拉伸,所以非线性项的能量传递受到限制,二维的全局正则性早就被证明了;三维里涡管可以被拉长变细,涡量集中,形成所谓的涡拉伸项 $\boldsymbol{\omega}\cdot\nabla\mathbf{u}$,这一项理论上可以让涡量在有限时间内趋于无穷。
能量意义上我们只拿到了一个很弱的结论:解的能量耗散是有界的,所以能定义"弱解"。但弱解只保证方程在积分意义下成立,不保证在任何一点都光滑,也不保证唯一。换句话说,数学上我们连"这个方程在三维情况下有没有一个好好的解"都还没确定,三维的适定性是开放的。
3.2 这对做工程的人意味着什么
很多人听到这里会觉得:既然连数学上都说不清楚,那我算出来的东西有意义吗?我的理解是这样:工程上从来不求解"任意初值下的全局解",我们求解的是特定边值条件下的、带有耗散机制的、离散化之后的近似解。数值格式本身就引入了数值黏性,网格分辨率有限,物理上也总有扰动和边界效应,这些因素合起来让实际的数值问题比纯数学问题"良性"得多。实践里真正卡住你的不是存在性,是适定性和分辨率:网格不够细,你解出来的涡结构就是假的;边界条件给错,解照样发散。
但这件事也不是纯学术。它给了我们一个很重要的心理准备:湍流的细节对初值和分辨率极其敏感,这是方程本身的性质,不是软件的问题。任何声称"我这套模型能准确预测所有湍流细节"的说法都值得保持警惕。你能做的是收敛性验证和网格无关性验证,用可重复的流程把误差压到你业务能接受的水平。
3.3 正则性判据与工程上的间接启发
数学上有一批条件性的正则性判据,比如某些速度分量或涡量的范数在有限时间内保持有界就能保证光滑性。这些判据在工程上没法直接用,但它的思路很有启发:它告诉我们要监控哪些量。我在做复杂算例时,除了常规残差,会额外监控最大涡量、最大速度梯度、以及动能的时间序列。如果最大涡量在某个局部区域持续飙升而不收敛,往往说明那里有网格分辨不足的剪切层,或者是边界条件引入了奇点。
提示:几何上的尖角、零厚度折板、进出流边界与壁面交界处,都是奇点的常见来源。这些地方的解在数学上就可能是奇异的,你加密网格只会让数值越来越难收敛,而不是越来越准。处理办法是把这些位置做小圆角、或者把入口边界往外推几个特征长度,让奇点远离你关心的区域。
我个人的经验是,把数学上那些"存在性"的讨论当成一种底层认知,别指望直接照搬;真正影响你结果可信度的是离散误差、模型误差和边界设定,这三样才是每天要面对的。
4. 数值离散:从方程到能跑的代码
4.1 网格与有限体积的基本约定
把方程变成可计算的代数方程,主流路线是有限体积法:把计算域切成一个个控制体,对每个控制体做积分,用高斯定理把散度项变成表面通量,然后逐面求和。这样做的好处是守恒性天然满足——流出这个控制体的质量、动量,正好等于流入邻居的,不会凭空产生或消失。有限差分和有限元各有适用场合,但工程湍流仿真里有限体积是绝对主流。
网格这块有几个硬指标:
- 正交性:结构化四边形/六面体网格最好,非正交修正会引入额外误差
- 长宽比:主流方向可以拉长,但边界层里要控制增长率,一般每层增长不超过 1.2 倍
- 边界层第一层高度:由目标 $y^+$ 反算,这是决定壁面物理准不准的第一因素
- 网格量:三维复杂算例动不动几百万到上千万单元,规划时先估算内存和迭代时间
第一层高度的估算公式值得背下来:
$$ \Delta y = \frac{y^+ \cdot \nu}{u_\tau}, \quad u_\tau = U\sqrt{\frac{C_f}{2}}, \quad C_f \approx 0.058,Re^{-0.2} $$
我拿管道水算一遍:$U=1$ m/s,$D=0.05$ m,$\nu=10^{-6}$,$Re=5\times10^4$。先算 $C_f \approx 0.058\times(5\times10^4)^{-0.2} \approx 0.0058$,$u_\tau \approx 1\times\sqrt{0.0029}\approx 0.054$ m/s。如果目标是 $y^+=1$,$\Delta y = 1\times10^{-6}/0.054 \approx 1.85\times10^{-5}$ m,也就是 18.5 微米。管半径 25 mm,这个第一层厚度意味着你需要大约 15 到 20 层才能长到主流尺度,网格量相当可观。如果改用壁面函数、把 $y^+$ 放在 30 到 100 之间,第一层可以放大到 0.5 mm 量级,网格量能降一个数量级。这个取舍没有标准答案,取决于你要不要精确的壁面剪切和换热。
4.2 压力-速度耦合:不可压求解的核心难点
不可压流动里压力没有自己的输运方程,它必须通过连续性约束间接求解。早年的做法是交错网格,把速度和压力存在不同位置,避免棋盘振荡。现在常用同位网格配 Rhie-Chow 插值,在面速度里加一项压力梯度的四阶修正,压制振荡同时保持紧凑格式。
工程上最常用的算法族是 SIMPLE 及其变体。它的思路是猜一个压力场,解动量方程得到不满足连续性的速度,再用连续性方程构造压力修正方程,修正压力和速度,然后松弛迭代。流程大致这样:
- 用上一轮的压力场(首轮用初值)解动量方程,得到中间速度
- 用中间速度构造质量通量不平衡量,作为压力修正方程的源项
- 解压力修正方程(这是一个泊松型方程,通常用多重网格或共轭梯度法)
- 用压力修正量更新速度、压力、面通量
- 检查残差和物理量监控,未收敛回到第 1 步
这里有个细节特别容易踩:松弛因子。压力通常取 0.2 到 0.3,动量取 0.7 左右。压力松弛因子给太大(比如 0.8),前期收敛快得让你以为一切顺利,然后在几百步之后突然振荡发散;给太小则收敛慢到怀疑人生。我一般按"先稳后快"的策略,前 200 步用保守值(压力 0.2、动量 0.5),残差平稳下降之后再逐步提到 0.3 和 0.7。
4.3 对流项离散:精度和稳定性的拉锯
对流项 $\mathbf{u}\cdot\nabla\mathbf{u}$ 的离散是整个数值方案里最有讲究的地方,因为它同时决定了精度和稳定性。一阶迎风格式无条件稳定,但数值扩散大得离谱,相当于给流体额外加了一个假黏性,算出来的涡会变胖、回流区会变短、换热会被抹平。中心差分精度高但不稳定,网格佩克莱数超过 2 就开始振荡。折中方案是二阶迎风、QUICK 或者带限制器的 TVD 格式。
| 格式 | 精度阶 | 稳定性 | 数值扩散 | 适用场景 |
|---|---|---|---|---|
| 一阶迎风 | 1 | 无条件稳定 | 大 | 只用于初始阶段或极难收敛的算例 |
| 二阶迎风 | 2 | 条件稳定 | 中 | 通用默认选择 |
| QUICK | 2~3 | 条件稳定 | 较小 | 结构化网格,追求精度 |
| TVD/限制器 | 2 | 稳定 | 小 | 有激波或强梯度的场合 |
网格佩克莱数 $Pe_\Delta = \rho U \Delta x/\mu$ 是判断要不要担心振荡的指标。做层流小雷诺数算例,$\Delta x$ 稍大一点 $Pe_\Delta$ 就超过 2,这时候用中心差分很容易出问题;做大雷诺数湍流反而不用太担心,因为 $\mu$ 换成湍流黏性之后数值大得多,$Pe_\Delta$ 反而降下来了。这种反直觉的现象解释了为什么有些老工程师在小雷诺数算例上反而更谨慎。
4.4 时间推进与 CFL 约束
瞬态计算要选时间步。显式格式受 CFL 条件约束:
$$ C = \frac{|\mathbf{u}|\Delta t}{\Delta x} \le 1 $$
实际用的时候我一般控制在 0.5 以下,有强对流或者激波时压到 0.2。隐式格式理论上无条件稳定,但时间步太大时时间精度会崩,物理上该捕捉的高频结构全部丢失,等于白算。判断标准是:你想看的现象的时间尺度是多少?涡脱落周期、叶片通过频率、气泡溃灭时间,这些决定了你能接受的最大时间步。
举个具体的:圆柱绕流 $Re=100$,直径 10 mm,来流 0.1 m/s,涡脱落周期量级约 $D/U \times 5 \approx 0.5$ s。要看清楚脱落过程,每个周期至少 100 个时间步,那 $\Delta t$ 就取 5 ms。再拿 CFL 校核一下,网格最小尺寸假设 1 mm,$C = 0.1\times0.005/0.001 = 0.5$,刚好。
5. 湍流处理:RANS、LES、DNS 的取舍账
5.1 三条路线的成本对比
湍流不解析所有尺度,就必须做模型。三条主流路线的差别本质上是"你打算解析多少尺度、模型承担多少"的问题。
| 路线 | 解析尺度 | 模型内容 | 网格量级 | 典型用途 |
|---|---|---|---|---|
| RANS | 只解平均场 | 全部湍流应力 | 10^5 ~ 10^6 | 工程定型设计、参数扫描 |
| LES | 解大尺度涡 | 只模化亚格子 | 10^7 ~ 10^9 | 分离流、燃烧、噪声 |
| DNS | 解所有尺度 | 无 | 10^10 以上 | 机理研究、模型标定 |
这个账要算清楚。一个工业级算例,RANS 可能在单机上几小时出结果,LES 需要小型集群跑几天到几周,DNS 基本上是国家级超算的活。你在项目里选哪条,取决于你的问题是不是"平均量就够用"。绝大多数工程问题——压降、总换热系数、整体力矩——RANS 配一个合适的模型完全够用。只有当你关心的是分离剪切层的非定常演化、涡声耦合、燃烧中的火焰皱褶,才值得上 LES。
5.2 模型选择的实战判断
我在不同场景下的选择偏好,直接列出来:
- 内流、管道、简单换热器:标准或 Realizable k-epsilon,配壁面函数,性价比最高
- 外流绕物体、有逆压梯度与分离:k-omega SST,它结合了 Wilcox 模型近壁的鲁棒性和 k-epsilon 远场的自由流不敏感性
- 强旋流、旋风分离器:雷诺应力模型 RSM,各向同性涡黏模型在这里会严重低估切向速度
- 浮力驱动、自然对流:低雷诺数 k-epsilon 或 SST,记得开浮力项
- 转捩问题:需要转捩模型,普通全湍流模型会过早把流动当成湍流,阻力偏大
5.3 壁面处理:$y^+$ 是绕不过去的硬指标
壁面处理直接决定摩擦阻力和换热精度。原则很清楚:
- $y^+ \approx 1$ 以内:低雷诺数模型或两层模型,解析到黏性底层
- $30 < y^+ < 300$:标准壁面函数,用经验律桥接
- $5 < y^+ < 30$:缓冲层,这是最尴尬的区间,两种方法都不准,必须调整网格
注意:$y^+$ 不是一个可以事先精确控制的量,它依赖算出来的摩擦速度,而摩擦速度又依赖解本身。所以第一轮算完之后必须回看 $y^+$ 分布,看主流区域是不是落在你预期的区间,然后重新调第一层高度再算一遍。这一步我从来没省过。
有个常见误解是"$y^+$ 越小越好"。如果你用的是壁面函数,把 $y^+$ 压到 1 反而会让结果变差,因为壁面函数假设第一层落在对数律区,位置错了整个桥接就错了。用壁面函数就把 $y^+$ 稳稳放在 30 到 100,比硬压更靠谱。
6. 实操:二维顶盖驱动方腔的完整流程
6.1 为什么拿这个算例练手
顶盖驱动方腔是流体仿真界的"Hello World"。一个正方形腔体,四周壁面静止,顶盖以恒定速度平移,带动腔内流体形成一个大主涡和角落里的次级涡。它对流动机理覆盖得很全:角点奇异性、主涡中心位置、次级涡尺寸、随雷诺数演化的分叉行为,而且有公开的基准数据可以对照。我建议每个新手都把它完整跑一遍,跑通了再去做真实几何。
6.2 几何、网格与边界条件
取边长 $L=1$ m 的二维方形,顶盖速度 $U=1$ m/s,密度 1 kg/m³,动力黏度按目标雷诺数反算。$Re = \rho U L/\mu$,要 $Re=1000$ 就取 $\mu = 10^{-3}$ Pa·s。
网格用均匀结构化四边形,先做 64×64,然后 128×128、256×256 做网格无关性验证。边界条件四项:顶盖给定速度 $(U, 0)$,其余三边无滑移速度为零,压力在某个角点固定参考值(不可压求解必须固定一个压力参考点,否则压力只有梯度有意义,绝对值飘)。初始场给全零速度,或者给一个线性分布的猜测场加速收敛。
6.3 关键参数与收敛判据
- 对流项:二阶迎风
- 压力-速度耦合:SIMPLE
- 松弛因子:压力 0.3,动量 0.7,先保守后放开
- 时间推进:稳态,或者伪瞬态配局部时间步
- 收敛判据:残差下降 4 个量级以上,同时监控主涡中心坐标和总体动能,这两个量不再变化才算收敛
提示:残差下降不等于解收敛。残差是方程不平衡量的度量,它可以一直降,但解可能在两个状态之间缓慢摆动。必须配物理量监控,我最常用的是监测点的速度时间序列和主涡中心位置。
6.4 结果验证与常见偏差
$Re=1000$ 时,主涡中心大约在 $(0.53, 0.565)$ 附近,靠近底部的两个角会有次级涡,尺寸随网格分辨率变化明显——这正是这个算例的价值所在,角点附近的解在数学上是奇异的,网格越细次级涡越小。所以对照基准数据时要看清楚对方的网格量,拿 64×64 的结果去和 256×256 的基准比,偏差 10% 以上很正常。
我跑这个算例踩过三个坑:一是忘了固定压力参考点,求解器一直报压力发散;二是一开始就用一阶迎风,主涡中心位置偏了将近 8%,换成二阶之后才对上;三是初期松弛因子给到 0.8,前 100 步残差掉得飞快,然后突然起飞。这三条基本上覆盖了新手 80% 的问题。
7. 常见问题与排查清单
7.1 发散、振荡与收敛停滞的区分
这三类问题症状相似但原因完全不同,先分清再动手。
发散:残差持续上升,速度场出现 $10^6$ 量级的数值,通常是边界条件冲突、初始场太离谱、时间步或松弛因子过大、或者网格有负体积。先查边界条件一致性,再看网格质量,最后降松弛因子。
振荡:残差在某个量级上下摆动不下降,速度场能看到棋盘状或高频波纹。多半是对流项格式太激进、网格佩克莱数过高、或者压力-速度耦合插值有问题。改成迎风类格式试一次,能压住就说明是格式问题。
停滞:残差卡在某个量级缓慢下降或完全不动,但流场看起来还算合理。常见原因是网格分辨率不足、收敛判据太严、或者多尺度问题(某个小区域一直拖后腿)。这时候看残差的空间分布,找出那个区域加密网格。
7.2 快速排查表
| 症状 | 可能原因 | 排查动作 | 处理办法 |
|---|---|---|---|
| 首轮就发散 | 边界条件冲突或网格负体积 | 检查网格质量、进出口流量是否平衡 | 修复网格,重新设定边界 |
| 残差下降后突然回升 | 松弛因子过大或出现回流 | 观察回升时的流场截图 | 降低压力松弛,延长入口区 |
| 残差不降但流场合理 | 收敛判据过严 | 看物理量监控是否已稳定 | 放宽判据或改为监控物理量 |
| 结果对网格极度敏感 | 分辨率不足或处于过渡流态 | 做 2 到 3 套网格对比 | 加密网格,或改用瞬态方法 |
| 壁面摩擦系数明显偏低 | $y^+$ 落在缓冲层 | 输出 $y^+$ 云图 | 调整第一层高度,重算 |
| 能量不守恒 | 离散格式非守恒或边界通量错 | 统计进出口质量流量 | 改用守恒型格式,检查面通量 |
| 大分离区长度预测偏短 | 涡黏模型各向同性假设失效 | 换 SST 或 RSM 对比 | 必要时上 DES 或 LES |
7.3 几条从踩坑里换来的经验
第一条,动手之前一定做二维切片或者降维简化。三维复杂几何直接开算,出问题你根本不知道该从哪个维度调。先用二维截面把边界条件、模型、离散格式都跑通,再上三维,效率差好几倍。
第二条,把所有监控量做成时间序列图,而不是只看最后一张云图。云图好看但骗人,一条残差曲线和一条监测点速度曲线能告诉你多得多的信息。我习惯在算例目录里固定放三个文件:残差历史、监控点速度、进出口流量,每次算完先看这三张图。
第三条,物性参数别偷懒。很多算例的偏差不是数值问题,是密度、黏度、比热取错了,或者该用变物性用了常数。特别是温度变化大的场合,黏度随温度能变好几倍,用常值算出来的压降和换热系数都不可信。
第四条,保留每一次算例的完整输入。网格、边界、模型、松弛因子、版本号,全部记下来。我见过太多"上次那个算得挺好的配置是什么来着"的窘境,重跑一遍的成本远比写个记录高。
最后分享一个我自己的习惯:每接手一个新几何,先在纸上把特征尺度、雷诺数、马赫数、$y^+$ 目标、预估网格量、预估机时这六个数字写下来,写完再开机。这六个数字写不出来的话,说明我还没想清楚要算什么,那就先别算。这个方法帮我省掉的无效计算时间,比任何一个数值技巧都多。