J2-01 CFD 基础、湍流模型与网格划分(Fluent/STAR-CCM+)
课程代码 J2-01 · 板块 J 仿真分析 CAE / 三维流动与传热 CFD 时长 约 4.0 小时(5 讲) 前置 A1-02 对流换热与换热系数估算;A2-01 管网水力学;A2-06 流体力学基础:连续性、伯努利与静压/动压/全压口径;体系外前置(需自备):数值方法基础 本讲义定位 讲师授课蓝本 / 学员自学讲义,是 J2-01 大纲的完整展开版
引言:先判这个数由什么支配,再决定动哪个旋钮
一份 CFD 结果里,不同的量并不同样可信,而它们不准的原因往往不是同一件事。壁温、局部换热系数 h 与局部热流受壁面处理与近壁网格支配——对流换热的全部温差都压在贴壁那一薄层里(承 A1-02 对流换热:自然对流、强制对流与换热系数估算:边界层是 h 的物理底座);分离位置、回流区尺寸与压力恢复受湍流模型支配;而由芯体多孔阻力主导的过芯风量对湍流模型与 y⁺ 基本不敏感——它是压差—流量平衡问题,工作点落在风扇特性曲线与系统总阻力曲线的交点上,阻力大头在芯体多孔源项、机舱阻塞与密封泄漏。先判这个响应量由什么支配,再决定动哪个旋钮,是本课要敲的第一根钉子;“不对就换个更贵的模型、再加密一层”之所以常常整轮空转,正是因为它跳过了这一问。
第二根钉子回答另一个问题:动完之后怎么知道动对了。一个 CFD 结果与真值之间的差要分三本账——建模误差、离散误差、迭代误差,三本账各有各的判据与关闭手段,不能互相顶替:加密网格治不了湍流模型选错、多孔系数没标定、泄漏没封对,把残差再压两个数量级也治不了一阶迎风的数值扩散。关闭顺序同样不能颠倒,必须是迭代 → 离散 → 建模。两根钉子配套使用,一根管“该动哪个旋钮”、一根管“动完怎么验”;但它们各由各的判据成立,谁也不是谁的推论。
围绕这两根钉子,本课建立三个判断力:按响应量定位该动的那一类旋钮、先选壁面处理方式、再由它反推 y⁺ 目标窗口与边界层棱柱层、把误差分账并按顺序关掉。第二条最容易被读反:y⁺ 不是“越小越好”的质量分,它是“第一个网格点落在壁面律哪一段上”的定位坐标,精度对它并不单调;顺序只能是先定壁面处理、再定 y⁺ 窗口,反过来不成立——第 3 讲会把这个单调性错觉当场算破。
本课的定义域是已经可以计算的几何之上的网格质量、边界层与 y⁺。A2-06 流体力学基础:连续性、伯努利与静压/动压/全压口径 第 5 讲把“分离点、回流区尺寸、湍流模型选型、近壁网格划分”四件事交到本课,本课就是它们的数值定量版;从脏数模到可算网格是 J2-06 整车/机舱 CFD 前处理:从脏数模到可算网格(数模验收·删简·包面·计算域抽取) 的事,它排在本课之后。
矩阵的正文形态如下(图1 是它的可视化,另加一条四步决策链)。⚠ 档位是本课依据机理归纳的定性判断,⛔ 不是测量值、⛔ 不来自任何标准、⛔ 不得据它取任何数值或比例。
| 响应量(行) | 湍流模型 | 壁面处理与 y⁺ | 网格尺度与棱柱层 | 边界与源项标定 | 该行的判断根据 |
|---|---|---|---|---|---|
| ①壁温/局部换热系数/局部热流 | 中 | 高 | 高 | 中 | 对流换热的全部温差都压在贴壁那一薄层里,第一层解得对不对直接就是 h;⚠ 按本行动手之前,先确认格式阶数已切到二阶(1.4,理由见本表下方) |
| ②分离位置/回流区尺寸/压力恢复 | 高 | 中 | 中 | 低 | 逆压梯度下的近壁动量输运由湍流模型给出,模型换一个分离点就前后移动 |
| ③多孔介质主导的总风量与总压降 | 低 | 低 | 低 | 高 | 它是压差—流量平衡问题,工作点由风扇特性曲线与系统总阻力曲线的交点定,阻力大头在芯体多孔源项、机舱阻塞与密封泄漏 |
| ④温度分层与混合 | 中 | 中 | 高 | 中 | 掺混直接被数值扩散与格式阶数改变,分层能不能立住由核心区网格尺度与格式阶数决定;⚠ 按本行动手之前,先确认格式阶数已切到二阶(1.4,理由见本表下方) |
| ⑤气动噪声源/脉动压力载荷 | RANS 给不了 | RANS 给不了 | RANS 给不了 | RANS 给不了 | RANS 只解时均场,脉动的时空结构在雷诺平均那一步就被模型吞掉了 |
四列里,「湍流模型」这一列的逐行判断根据在 2.5、「壁面处理与 y⁺」这一列在 3.5 各有一节展开;另外两列本课不再另设一节,档位与判断根据以本表为准,这里就把它们说完:
- 「网格尺度与棱柱层」列改的是「梯度被解到什么程度」。①与④是高——壁温靠棱柱层在法向上的分辨率(第 3 讲、4.2),而分层与掺混直接被一阶迎风的假扩散和核心区尺度抹掉(1.4);②是中——分离点对网格尺度确实敏感,但支配项仍是模型族(2.2),加密修不掉共线假设;③是低——芯体按多孔介质等效之后,源项给的是体积力,把它周围加密不改变压差—流量平衡的工作点。
- 「边界与源项标定」列改的是「进方程的输入本身对不对」。③是高——多孔阻力系数、风扇曲线与泄漏路径全在这一列,典型案例详解左链两轮改动落空,正是因为动的旋钮跑到别的列去了;①与④是中——壁面热边界与热源功率决定 q_w,而浮升所需的参考密度、参考温度与重力方向给错时分层会朝反方向建立(1.2 的第三个易错点);②是低。
四个档位(高/中/低/RANS 给不了)是本课归纳的定性划分,全课只用这四档。第四档必须单列:气动噪声源与脉动压力载荷不是敏感度低,而是 RANS 只解时均场、方法层面就给不了,标成“低”会让人以为换个设置就能拿到。矩阵是选旋钮的起点而不是万能表,具体项目上的敏感度仍要靠一次只改一个变量的对照算例自己量一遍。
⛔ 这四列不是旋钮的全集——必须显式声明一次,否则这张表看起来是完整的。它们是沿「物理模型 + 网格 + 输入」这一条线数出来的,而至少还有两整类旋钮不在表内,本课自己在别处证明它们的量级不比表内任何一列小:
- 离散格式阶数(空间与时间)。体征:同一张网格、同一个湍流模型,只把空间格式从一阶迎风切到二阶,结果就变一大截——1.4 那个有解析解的一维算例上是 +16.21% 对 −0.164%,差两个数量级(⛔ 这是一维模型问题的量级演示,它的误差水平不得外推到任何三维工程算例,同 1.4);而且它的错法是单向的:温度分层被抹掉、峰值温度被抹低,「往看起来更安全的方向倒,不会在评审会上被人质疑」(1.4)。⇒ 去向:机理与量级在 1.4,二阶的代价与有界性边界在 1.5,怎么把它折算成一条误差带在 5.3。
- 时间处理(稳态/URANS/瞬态)。体征:残差平了而监测量在周期性振荡——那多半不是没收敛,而是流动本身非定常,稳态求解器在方法层面就给不出它(5.2 形态②);判据是看振荡有没有确定周期、这个周期与几何尺度和特征流速的量纲组合(Strouhal 关系)对不对得上。⇒ 去向:该不该上尺度解析的判据在 2.5,形态②的正确动作(转 URANS、对足够长的物理时间做时均)在 5.2。⚠ 它在本表里只以⑤行「RANS 给不了」露了个头,⛔ 不要因此以为它只跟气动噪声有关。
⚠ 由此得到一条按表动手前的前置检查,①④两行尤其要做:先确认本算例的格式阶数已经切到二阶,再去动被定位到的那一类旋钮。这两行最贵的一次空转正是这么发生的:局部热点温度算低了,按矩阵定位到「壁面处理与 y⁺ = 高、网格尺度与棱柱层 = 高」,于是去压 y⁺、加棱柱层、局部加密(4.4:局部加密的代价按 r³ 走),而算例还停在一阶迎风上——把峰值抹低的主项恰恰是它,而切二阶几乎不花钱。⇒ 顺序是:先把不在表内的这两类排除掉,再进表选旋钮。
第 1 讲 控制方程与有限体积法:求解器替你解的是什么,又替你丢掉了什么
这一讲不教你点按钮。它要回答三个「求解器不会主动问你、但结果全押在上面」的问题:你让它解的到底是哪几个方程、这些方程在设置面板上被你做了哪几处简化;离散这一步会往方程里额外塞进什么;以及为什么车用热流一律用压力基求解器。这三件事都不会在后处理云图上留下痕迹——设置错了,残差照样降、云图照样漂亮。后面四讲的所有选型判断(湍流模型、壁面处理、网格、收敛与误差),都建在这一讲的答案上。
本课的空气物性基准态(全课统一,后面各讲一律沿用) 20 ℃、101.325 kPa 干空气:ρ=1.204 kg/m³、μ=1.8206×10⁻⁵ Pa·s、ν=1.5114×10⁻⁵ m²/s、Pr=0.708、λ=0.02587 W/(m·K)、c_p=1006 J/(kg·K)。来源=CoolProp 8.0.0(Air,T=293.15 K、p=101325 Pa)逐点取值。 全课此后一律沿用这一组,不在个别地方改用别的温度或别的位数。做量级估算时允许写 ρ≈1.2 kg/m³——1.2 是 1.204 的量级取整,承 A2-06 流体力学基础:连续性、伯努利与静压/动压/全压口径 同一约定,不是另一个取值。 ⚠ 这是基准态,不是你的工况。实际算例须按当地温度、压力(必要时含湿度)取值;湿空气的物性修正前指 A2-04 湿空气物理与焓湿图:空调负荷计算基石。
1.1 有限体积法「天然守恒」是真的,但守恒不等于准确
是什么。有限体积法(FVM)做的事只有一句:把计算域切成一堆互不重叠的控制体,在每个控制体上对守恒律做体积分,再用高斯定理把体积分换成面积分。于是每个单元的方程都长成同一个样子——「各面通量的净和 = 体内源项 + 存储项的变化」。车用热流要解的守恒律是三条:质量(连续性)、动量、能量;湍流模型还会额外带来它自己的输运方程(第 2 讲)。
守恒的严格性来自离散的构造方式,而不是来自网格好坏或格式高低:相邻两个单元共享同一张面,这张面上的通量只算一次,两侧取同一个数、符号相反。所以一个单元丢掉的正好是邻居收到的;全域求和之后内部面全部抵消,只剩下边界上的进和出。这是一条结构性质,粗网格上也成立。
为什么必须把射程一起说清。因为「我用的是 FVM,天然守恒」经常被当成结果可信的理由,而它只保证一件事:不凭空造出、也不凭空丢掉质量与能量。它完全不保证这些量被放在了正确的位置。下一小节要讲的一阶迎风假扩散,一点都不破坏守恒——它只是把热量从该在的地方搬到了不该在的地方,总账分毫不差。守恒是必要条件,不是充分条件。
严格性的边界在哪。上面那句「共享同一张面」暗含了一个前提:界面是共形的(两侧单元面一一对应)。一旦用了非共形界面(interface)、周期性界面、滑移网格或重叠网格,两侧的面并不重合,通量必须靠插值重建——此时守恒是算法额外强制出来的,而不是天然的。界面两侧网格尺度悬殊时会留下守恒误差,而这个误差不会出现在残差曲线上,只能去单独查该界面上的通量不平衡量。
易错点。
- 把全局守恒平衡表合格当成收敛合格。它是必要不充分条件:守恒平衡表很漂亮、而监测的换热量还在漂,是相当常见的一种组合。完整的收敛判据在第 5 讲。
- 用了重叠网格或非共形界面,却只看全局守恒表。整体表看着很好,界面上却在漏——必须单独把界面的通量不平衡量调出来看。
- 把「守恒」当成「准确」的同义词写进报告。这两个词在 CFD 里差着一整讲的内容。
1.2 「不可压」说的是流动条件,不是「密度是常数」
是什么。车用热流的马赫数极低,因此可以不去解可压缩的密度场与声波,改用不可压(或求解器里那个叫「不可压理想气体」的选项)加压力基求解器。这个近似有三层含义,前两层大家都记得,第三层最容易丢:
- Ma 小到声波不必解——密度不再作为一个独立的输运量被推进,压力扰动在方程里被当作瞬时传遍全域;
- 压力不再进密度——只有工作压力(operating pressure)进,动压那一部分不进。这正是「不可压理想气体」这个选项的字面含义:ρ=p_op/(R·T);
- 密度随温度的变化必须留着——「不可压」限定的是流动,不是物性。
为什么第三层最要紧。浮升力项由密度差驱动。一旦把「不可压」执行成「常密度」,这一项恒等于零,浮升力整类消失。而怠速、热浸、舱内温度分层这三类工况的主导机制恰恰就是自然对流——它们不是被算得不准,是被整类算没了。最贵的地方在于:这种错误不留痕迹。残差照样降、云图照样光滑、守恒表照样平,结果看起来毫无异常。
工程量级。先把「车用流速离可压缩那条线有多远」量出来。20 ℃ 空气声速按理想气体式 a=√(γR_d·T)=343.2 m/s(承 A2-06 流体力学基础:连续性、伯努利与静压/动压/全压口径 同一算法与同一取值);CoolProp 8.0.0 给出的实际气体值是 343.3 m/s。⚠ 两个出处都记下来:它们相差约 0.1 m/s,工程上没有差别,但措辞上不得写成「与 CoolProp 一致」——那是两条不同路子算出的两个数,⛔ 不许单值化。Ma=0.3 这条量级分界对应约 103 m/s(两套取值取整都是 103)。而车用前端迎面风速的行业典型带只有 3~8 m/s、机舱内主流也就 10~30 m/s 量级,离 103 m/s 差着一个量级。⛔ 这两个数只用来说明「车用流速离这条线很远」,不得反用它去算任何可压缩性修正。
判据。浮升与强迫对流谁主导,看理查森数 Ri=Gr/Re²(Gr 为格拉晓夫数,Re 为雷诺数;两者的特征长度与参考温差必须取同一套,否则这个比值没有意义)。Ri≫1 浮升主导——必开,且必须给全重力方向、参考密度与参考温度;Ri≪1 强迫对流主导——可以关,但要在报告里显式声明关了;Ri≈1 两者同量级——都开。⚠ 这三条线和 Ma=0.3 一样是量级分界不是锐界,落在附近时该做的是两套都算一次看差多少,不是去争「到底算不算超过」。
易错点。
- 把「不可压」理解成「常密度」,在热浸/怠速工况关掉浮升。这是本节最贵的一种错,因为它不报错。
- 反过来,在强迫对流主导的高速外流上开可压缩求解器。白烧算力,还把低马赫刚性引进来,收敛反而更难。
- 开了浮升,却忘了给重力方向、参考密度与参考温度。浮升项的符号和量级都由这三个输入定,给错了浮升会朝反方向推,而结果依然收敛。重力方向来自装车姿态——姿态口径属前处理的数模验收,去向 J2-06 整车/机舱 CFD 前处理:从脏数模到可算网格(数模验收·删简·包面·计算域抽取);本课只声明它是本课的一个输入,不给验收判据。
1.3 能量方程的两个开关由 Ec 判;而报出来的「温度」自带口径
是什么。能量方程里不止有对流与导热。还有两项在求解器里通常做成可开可关的开关:黏性耗散项 Φ(速度梯度把机械能不可逆地变成热)与压力功项。开不开的判据是埃克特数 Ec=U²/(c_p·ΔT)——它比的是「动能的量级」与「焓变的量级」,ΔT 取本问题的特征温差。Ec≪1 时这两项相对于对流与导热可以忽略。
为什么。车用空气侧:U 是几十 m/s 量级、ΔT 是几十 K 量级,代进去 Ec 是个很小的数,两项可略——这就是为什么绝大多数机舱与舱内算例默认把它们关着。但这个结论有射程:高剪切窄缝里不成立。电驱搅油域、高速轴承腔里,剪切生热本身就是热源而不是一个可略的修正项。这一支的建模属另一门课的射程,去向 J3-06 电驱油冷部件级 CFD:旋转域、自由液面与搅油损失的数值实现;本课只把这条边界声明清楚。⛔ 不得把空气侧「耗散可略」的结论照搬到窄缝油路上——那是把一支的规程套到机理不同的另一支去。
同一个方程还带来第二件事:你读到的那个「温度」自带口径。它可能是静温、可能是总温,也可能是从总焓换算回来的值,取决于求解器与设置。两者之差就是动能折成的温升 U²/(2c_p)。按本课统一物性 c_p≈1006 J/(kg·K) 逐点代入:
| 参考流速 U | U²/(2c_p) | 工程含义 |
|---|---|---|
| 30 m/s | 约 0.45 K | 可忽略,静温与总温不必分 |
| 100 m/s | 约 5.0 K | 已不可忽略(除霜风道出口、膨胀阀后高速段等) |
⛔ 这两个数只用于判断「口径差从什么时候开始有意义」,不得反用它去修正试验测得的温度。
易错点。
- 直接读温度云图而不问是静温还是总温。拿它去和热电偶对账时口径就不一致了——热电偶测到的接近静温,而且它本身还叠着辐射与导热带来的测量误差;那属于对标侧(试验)的不确定度,是另一本账,不要和 CFD 侧的误差混在一起谈。
- 在窄缝油路上照搬空气侧的「耗散可略」。
- 报告里写「温度」不写口径。这与 A2-06 流体力学基础:连续性、伯努利与静压/动压/全压口径 对压力立的那条纪律是同一件事:一个数不带口径,别人就没法复核。
1.4 一阶迎风的数值扩散:它在方程里和真实扩散长得一模一样
是什么。有限体积法要在每张面上给出一个面值,而未知量存放在单元中心。一阶迎风的做法最省事:面值直接取上游那个单元的中心值。把它做泰勒展开,首项误差是一个二阶导数项,系数为 ρuΔx/2。也就是说——你以为自己解的是原方程,实际解的是一个「扩散系数被额外加大了 Γ_num≈ρ·u·Δx/2」的方程。
为什么危险。因为这一项与真实的扩散项(分子扩散+湍流扩散)在方程里形式完全一样,求解器分不出哪一部分是物理、哪一部分是格式带来的,也就不会触发任何告警。它的后果是把梯度抹平,而且方向是单向的:温度分层被抹掉、热羽流被抹散、分离区被抹小、峰值温度被抹低。合起来就是——掺混被高估、局部热点被低估、整体换热偏乐观。「偏乐观」这三个字要记住:假扩散造成的错误几乎总是往「看起来更安全」的方向倒,所以它不会在评审会上被人质疑。
判据。把网格 Peclet 数与 1 比。本课统一写作 Pe_cell=ρuΔx/Γ_eff(Δx 为该方向的单元尺度、Γ_eff 为有效扩散系数),它衡量的是这一个单元上对流与扩散谁占主导;Pe_cell 越大,假扩散在总扩散里占的份额越大。⚠ 与它区分的是模型问题的整体 Peclet 数 Pe=ρuL/Γ(L 为域长);在下面这个均分网格的算例里两者差一个网格数,Pe_cell=Pe/N。⛔ 这两个符号全课分列,不裸写「Peclet 数」。
工程量级(一维稳态对流扩散算例,有解析解,读者可自行复现):取 L=1、Γ=1、φ(0)=0、φ(1)=1、Pe=5,解析解 φ(x)=(e^{Pe·x/L}−1)/(e^{Pe}−1),响应量统一取进口壁面梯度,解析值 0.033918。
| 格式 | N=20 | N=40 | N=80 | N=80 相对解析值 |
|---|---|---|---|---|
| 一阶迎风 | 0.057590 | 0.045214 | 0.039415 | 偏 +16.21% |
| 二阶(中心) | 0.033032 | 0.033696 | 0.033863 | 偏 −0.164% |
换句话说:在同一张网格上,只把格式阶数换掉这一项,就差出两个数量级的误差。相对误差一律以解析值 0.033918 为分母。⚠ 两行的方向相反,符号不得丢:一阶最细一套 0.039415 大于解析值 0.033918,偏高,写 +16.21%;二阶最细一套 0.033863 小于解析值,偏低,写 −0.164%。⛔ 引用这两个数时把符号省掉,读者会以为两种格式错在同一个方向上。
⛔ 这是一维模型问题,它的误差水平不得外推到任何三维工程算例——多维问题里假扩散还与流向和网格线的夹角有关,流向与网格线斜交时更严重。这个算例在这里的作用是把机理和量级关系当场做出来给你看,不是给你一个可以引用的误差数。
把它放进更大的框子里:三本账。一个 CFD 结果与真值之间的差要分三本账——建模误差、离散误差、迭代误差。假扩散属离散误差这一本。这条区分之所以要在这里就立起来,是因为它直接决定你该动哪个旋钮:把残差再压两个数量级,一阶迎风的假扩散一点都不会少;反过来,把格式换成二阶也治不了湍流模型选错、多孔系数没标定或泄漏没封对(那三样都是建模误差)。三本账各自的判据、量化手段与关闭顺序在第 5 讲整讲展开。
易错点。
- 拿「一阶迎风收敛得又快又漂亮」当成结果好的证据。它收敛得好,正是因为假扩散把梯度磨平了——被磨平的解当然更容易收敛。⚠ 这条因果不要读反:不是「收敛好所以结果好」,是「结果被磨平了所以收敛好」。
- 用一阶起步是对的,但忘了切二阶就取结果。前几百步用一阶稳住流场是常规做法,问题出在没有人负责在报告里确认最终格式。
- 报告里不写最终用的格式阶数。别人拿到你的结论无法判断它的射程。
1.5 二阶不是免费的:中心差分会输给一阶迎风,而且不是等到 Pe_cell 过 2 才开始输
是什么。中心差分把面值取成两侧单元值的插值,形式上是二阶精度。但它在对流占主导时会失去有界性:离散方程里下游邻居的系数在 Pe_cell 超过 2 之后变号,方程不再保证「解落在邻值之间」,于是出现非物理振荡——过冲、负温度、负湍动能、负组分浓度。
为什么必须讲这一节。如果只讲「一阶差、二阶好」,读者的下一个动作就是去把格式改成中心差分,然后在粗网格高速区直接炸掉,或者拿到一堆负湍动能。工程 CFD 的默认主力因此不是中心差分,而是二阶迎风——它在二阶精度与有界性之间做了折中。所以「用二阶」这四个字本身就带口径:是二阶迎风、中心、MUSCL 还是有界中心(BCD)?各有各的限幅方式与适用面。
工程量级(仍是 1.4 那个一维算例,同一响应量、同一分母):Pe=5 时三套网格的 Pe_cell=Pe/N 都远小于 2,中心差分的 RMSE 是一阶迎风的约 1/3~1/14,并按观察阶 p_obs≈2 收敛——这是二阶格式该有的样子(⚠ 观察阶全课写作 p_obs,以与压力 p 区分)。把 Pe 提到 25、网格取 N=10(此时 Pe_cell=2.5,刚过界),中心差分的 RMSE 是 0.170,反而大于一阶迎风的 0.0608。同一张网格上,二阶输给了一阶。
⚠ 但这里有两件事,⛔ 不得合成一件写(图3 右幅把两者分别画了一条竖线):
- 有界性界 Pe_cell=2(图上橙色虚线)是解析结论:中心差分离散方程里下游邻居的系数在此变号,越过它就不再保证「解落在邻值之间」,于是可能出现过冲与负值。它管的是有没有非物理振荡。
- RMSE 交叉点(图上灰色点线)是这一个算例上现算出来的位置:Pe=25 时它落在 Pe_cell≈1.25,在 2 的左侧。它管的是整场误差谁大谁小。
也就是说,中心差分早在系数变号之前就已经在精度上输了:Pe_cell 还在 1.25~2 之间、方程仍然有界的那一段里,它的整场 RMSE 就已经大于一阶迎风。⛔ 不得把这两件事写成「越过 2 才开始输」或「交叉点恰好就是 2」——前者会让人以为 Pe_cell 落在 1.5 时用中心差分是安全的。⚠ 1.25 这个数是本算例(Pe=25、一维稳态对流扩散)上的值,⛔ 不是普适常数,换问题、换响应量、换度量它就会变;普适的只有 Pe_cell=2 这条有界性界。
易错点。
- 把「二阶」当成一个开关,不问是哪一种二阶。报告里写「用了二阶格式」而不写具体格式名,等于没写。
- 在有界量(湍动能、组分、体积分数)上开无限幅的高阶格式。负值一出现求解器就开始钳位,而钳位本身又引入不守恒——一个为提高精度做的动作,最后精度和守恒同时损失。
- 看到振荡就去压残差。方向做反了:振荡不是「没收敛」,是格式在这张网格上失去了有界性。正确动作是换成有界的格式,或者把网格加密到 Pe_cell 落回 2 以内。
1.6 低马赫下压力必须由连续性方程「派生」出来,所以车用热流一律用压力基
是什么。可压缩流里,连续性方程可以当成密度的输运方程用——密度由它推进,压力由状态方程给出。这就是密度基(density-based)求解器的路子。低马赫下这条路走不通:密度对压力几乎不响应,连续性方程与压力之间的耦合极弱,方程组变得极度刚性,收敛慢到不可用(要靠低马赫预处理才能勉强用起来)。
压力基(pressure-based)求解器换了个思路:把压力当作独立未知量,让连续性方程去「派生」它——要么用压力修正方程逐次逼近(SIMPLE 族:SIMPLE/SIMPLEC/PISO),要么把压力与速度放进同一个方程组一起解(Coupled)。这是「为什么车用热流一律用压力基」的完整回答,而不是「大家都这么用」。
为什么这值得单独讲一节。因为它决定了后面一大批设置的性质:亚松弛因子、压力—速度耦合方式、伪时间步——这些旋钮改的是「怎么走到解」,不是「解是什么」。把它们和物理模型、网格那些真正改变解的旋钮混在一起谈,排查思路就乱了。
工程量级与取舍。Coupled 的内存开销明显高于分离式,工程实践里常见的量级是 1.5~2 倍(来源级别=工程实践与软件文档;⛔ 具体倍数随模型规模与求解器实现而变,须在本项目上实测确认,不是可承诺值)。换来的是收敛所需迭代步数显著减少,在浮升力主导与强耦合问题上尤其明显。★ 关键的一句:两者收敛到的解应当一致——如果不一致,说明其中一个没收敛。⛔ 不得把这个差写成「算法精度差异」。
易错点。
- 在浮升力主导的舱内问题上用分离式并沿用默认松弛因子。收敛极慢,而且容易停在一个「残差平了但监测量还在漂」的状态里。
- 在超大网格上不假思索地选 Coupled,把内存吃爆。算不出来和算不准是两种不同的失败,前者至少还看得见。
- 把两种算法算出来的差当成算法本身的精度差。判据是收敛判据(第 5 讲),不是算法名字。
1.7 雷诺平均之后方程就不够用了——这就是「湍流模型」这个词的全部含义
是什么。把每个瞬时量拆成时均加脉动 u=ū+u′,代进 N-S 方程再取时均。线性项照旧,非线性对流项时均之后多留下一项 −ρ⟨u′ᵢu′ⱼ⟩,叫雷诺应力。它是一个对称二阶张量,有 6 个独立分量,而方程一条也没有多出来。未知数多于方程——这就是封闭问题。
所谓「湍流模型」,全部含义就是给这 6 个未知分量补一个本构关系。RANS 动量方程写成 ρ(u·∇)u=−∇p+∇·[(μ+μ_t)∇u],正是把这一步的结果直接塞进了扩散项:湍流的全部影响被压缩成一个涡黏 μ_t,而 μ_t 由谁给、给得对不对,就是第 2 讲的全部内容。⚠ 请留意这句话的准确措辞——湍流模型不是在解湍流,它是在给一个未闭合的项补本构关系。
为什么这一句值得单独讲一节。因为它划定了 RANS 能给什么、不能给什么。RANS 解出来的是时均场,脉动量的时空结构在雷诺平均那一步就被积掉了、由模型整体吞掉。于是:
- 拿 RANS 结果去看瞬时涡结构、去提取气动噪声源、去取脉动压力载荷——这是方法层面的错,不是精度不够。再加密网格、再换更贵的两方程模型都不会给你那些量(去向:J5-05 声学 CAE:气动噪声与结构声辐射仿真)。
- 反过来,如果你要的响应量本来就是时均量(稳态壁温、时均换热系数、总压降、总风量),RANS 在方法层面就是对的选择,剩下的才是选哪个模型、配什么壁面处理的问题。
工程量级。这些雷诺应力不是小修正。最直观的看法是看求解器直接输出的湍流黏度比 μ_t/μ——充分发展湍流的主流区常在 10²~10³ 量级(来源级别=教材与工程实践)。⚠ 这是一个场量,随位置与流态变,⛔ 具体值必须在本算例上自查该场量,不作取用值。它的量级告诉你一件事:在湍流主导的区域里,动量与热量的输运绝大部分由模型给出,而不是由分子黏度给出。模型选错,错的是大头。
易错点。
- 以为「RANS 解出了湍流」。它解的是时均场,湍流本身被模化掉了。
- 把 μ_t 当成物性。分子动力黏度 μ 是物性(给定温度、压力就定了),涡黏 μ_t 是场量(随位置与流态变),两者唯一的共同点是量纲相同。⛔ 全课分列写作 μ 与 μ_t,不裸写「黏度」二字。
- 报告里只写「用了 RANS」,不写用了哪个模型、哪种壁面处理。这两样分属两个互相独立的选择维度(第 2 讲与第 3 讲各管一个),缺一个,别人就无法判断你的结果落在什么射程里。
本讲小结:这一讲交出四件可以直接写进 CFD 报告的东西。①有限体积法天然守恒,但守恒只保证总量不丢、不保证分布对,而且这条严格性只在共形界面上无条件成立;②「不可压」说的是流动条件不是常密度——密度随温度那一层必须留着,否则浮升整类消失;能量方程的耗散与压力功由 Ec 判,而报出来的温度必须说清是静温还是总温;③离散格式不是画质选项:一阶迎风往方程里塞进一个 Γ_num≈ρuΔx/2 的假扩散,方向单向地把结果推向「偏乐观」,而中心差分在 Pe_cell 越过 2 之后失去有界性,工程默认主力因此是二阶迎风;④低马赫下压力必须由连续性方程派生,所以车用热流一律用压力基,SIMPLE 与 Coupled 之间是内存换迭代数、不是精度之争。最后,雷诺平均留下 6 个未闭合的雷诺应力分量,把问题原样交给了第 2 讲。
后面还有 4 讲正文 · 关键公式 · 案例拆解 · 常见误区 · 动手做