2. CFD误差来源全景

在CFD可信度分析中,最忌讳的一件事是把“结果和实验对不上”笼统归因于“模型不准”。实际上,一次仿真从物理问题到最终数值解,要穿过六类性质完全不同的误差通道。它们有的来自我们对物理世界的简化,有的来自数学方程的离散化,有的来自求解器的收敛程度,有的来自计算机浮点运算,有的来自代码实现,还有的来自输入参数本身的不确定度。理解这六类误差的来源、量级特征与相互作用,是后续做误差分离、网格无关性验证和不确定度量化的前提。

六类误差的定位:从物理到比特

可以用一条“仿真信息链”来定位它们。物理真实流动 → 控制方程(建模误差在此引入)→ 离散方程(离散误差在此引入)→ 迭代求解(迭代误差在此引入)→ 浮点运算(舍入误差在此引入)→ 代码执行(编程误差贯穿始终)→ 输入参数(不确定度从入口注入)。这条链上任何一环的偏差,都会向下游传播并被后续环节放大或掩盖。

CFD误差来源全景与相互作用 物理真实流动 不可完全获知 建模误差 湍流/燃烧/多相简化 控制方程 N-S + 模型方程 离散误差 网格/格式/截断 离散代数方程组 Ax = b 迭代误差 残差未降至阈值 舍入误差 浮点精度/病态矩阵 数值解 近似结果 编程误差(贯穿全链) 边界条件实现错误 · 通量符号错误 · 索引越界 · 并行通信缺陷 · 单位不一致 输入参数不确定度(从入口注入) 几何尺寸公差 · 边界条件测量误差 · 物性参数分散性 · 来流湍流度未知 · 壁面粗糙度 → 通过模型方程传播至数值解,与建模误差耦合 建模误差影响离散格式选择 网格分辨率限制模型精度 迭代不足掩盖离散误差 舍入误差在病态矩阵中放大 总误差 ≈ 建模误差 + 离散误差 + 迭代误差 + 舍入误差 + 编程误差 + 输入参数传播 各分量非独立叠加,存在耦合与掩盖效应,需通过系统化验证逐项分离

建模误差:物理简化的代价

建模误差是控制方程与真实物理之间的差距。最常见的来源包括:湍流模型(RANS的Boussinesq假设无法捕捉各向异性湍流应力,LES的亚格子模型在近壁区耗散偏大)、燃烧模型(有限速率化学与湍流混合的相互作用被简化)、多相流模型(相间曳力系数依赖经验关联式)、以及边界条件简化(用充分发展假设替代真实入口剖面)。

建模误差的显著特征是它不能通过加密网格或降低残差来消除。例如,用k-ε模型模拟强旋流或分离流,即使网格做到无关性、残差降到1e-8,结果仍可能与实验偏差20%以上。判断建模误差是否主导,可以做一个简单实验:换用不同湍流模型(如SST k-ω、RSM、LES)在相同网格和收敛标准下计算,若结果差异远大于网格无关性带来的差异,则建模误差是主要矛盾。

离散误差:网格与格式的截断

离散误差来自将连续偏微分方程转化为代数方程组的过程。它包含两个子来源:空间离散误差(网格尺寸h、格式精度阶数p)和时间离散误差(时间步长Δt、时间积分格式)。以一阶迎风格式为例,其截断误差为O(Δx),在粗网格上会引入显著的数值扩散,表现为“假扩散”使激波或剪切层被抹平。

离散误差的估计有成熟方法。Richardson外推法利用三套网格(如h、h/2、h/4)的解,假设误差按h^p衰减,反推p并外推至h→0的“网格无关解”。示例:某翼型升力系数在粗、中、细三套网格上分别为0.82、0.86、0.88,用三阶精度假设外推,可得网格无关值约0.89,离散误差约1.1%。若三套网格结果不满足单调收敛,说明网格质量或格式有问题,需先排查。

迭代误差:未收敛的残差

迭代误差是代数方程组求解未达到精确解而产生的偏差。它由残差水平直接反映。实践中常见误区是:只看残差曲线“下降了几个量级”就认为收敛,而不检查工程量的稳定性。正确做法是同时监控残差和关键监测量(如升力、压降、出口温度),当监测量在若干百步内波动小于0.1%且残差不再下降时,才认为迭代误差可接受。

迭代误差与离散误差存在耦合:在粗网格上,离散误差大,残差可能很快降到很低,但解仍然偏离真解;在细网格上,离散误差小,但迭代收敛更慢,若过早停止,迭代误差会掩盖离散误差的改善。因此,做网格无关性研究时,必须保证每套网格都充分收敛。

舍入误差:浮点运算的极限

舍入误差来自计算机用有限位浮点数表示实数。双精度约16位有效数字,单精度约7位。在CFD中,舍入误差通常在残差降到1e-12以下时才变得显著,但有两个例外:一是病态矩阵(如高长宽比网格、强各向异性扩散),条件数可达1e10以上,舍入误差被放大;二是大数相减(如压力梯度计算中两个接近的大数相减),有效数字急剧损失。缓解手段包括:使用双精度、改善网格长宽比、采用压力修正算法避免直接大数相减。

编程误差:代码实现的陷阱

编程误差是代码与预期算法之间的偏差,典型表现包括:边界条件索引错位(如入口面法向指向错误)、通量符号不一致(对流通量与扩散通量方向相反)、并行分区通信遗漏(交界面通量未交换)、单位混用(几何用mm而物性用m)。这类误差往往不会导致发散,而是产生“看起来合理但系统性偏移”的结果。排查方法是制造解析解或制造解(MMS):构造一个已知解析解,代入方程得到源项,再让代码求解,比较数值解与解析解的收敛阶是否达到理论阶数。

输入参数不确定度:从入口注入的分散性

输入参数不确定度包括几何公差(叶片型面偏差±0.1mm)、边界条件测量误差(入口速度±5%)、物性参数分散性(导热系数±3%)、以及来流湍流度、壁面粗糙度等难以精确获知的量。这些不确定度通过模型方程传播到输出,与建模误差耦合。例如,入口速度±5%可能直接导致阻力±10%,而湍流度从1%变到5%可能使分离点位置移动,进而改变升力。

量化输入参数不确定度的常用方法是蒙特卡洛采样或多项式混沌展开。以蒙特卡洛为例:对入口速度按正态分布N(10, 0.5) m/s采样100次,每次运行CFD,统计出口温度或压降的均值和标准差,即可得到输出不确定度带。若计算成本高,可用代理模型(Kriging、响应面)替代部分CFD计算。

六类误差的相互作用与分离策略

这六类误差并非独立叠加,而是存在耦合与掩盖。建模误差会改变离散误差的敏感方向;迭代不足会掩盖离散误差的改善;舍入误差在病态系统中被放大;编程误差可能伪装成建模误差;输入参数不确定度则通过模型方程传播并与建模误差交织。

分离策略的核心是控制变量:固定网格和收敛标准,只换模型,看建模误差;固定模型和收敛标准,只换网格,看离散误差;固定网格和模型,只改收敛阈值,看迭代误差;用MMS检查编程误差;用蒙特卡洛量化输入不确定度。每一步都记录关键监测量和残差,形成误差预算表。只有把六类误差的量级和主次关系理清,后续的验证与确认才有可靠基础。