搞燃烧数值仿真的,这两年绕不开一个词:大涡模拟(LES)。燃烧本身是强非线性、多尺度、多物理场耦合的过程,湍流和化学反应之间的相互作用从火焰根部一直作用到产物区。RANS算燃烧省资源,但湍流和化学的耦合细节被时均化抹得太大,温度场经常出现令人头疼的偏差;直接数值模拟DNS精度是天花板,可工业尺度算例动辄需要上亿网格,周期和成本往往让人望而却步。大涡模拟正好卡在中间,用滤波把能量集中的大尺度湍流实实在在解析出来,小尺度交给亚格子模型封闭,是目前工程燃烧仿真里投入产出比最高的一条路线。
这一篇对应我的主题编号017,定位是LES的基础,我把做燃烧类项目时反复确认过的关键知识点、模型取舍和实战中的坑都放在一起讲。内容包括:为什么燃烧仿真该选LES而不是习惯性上RANS或硬上DNS、LES滤波方程里的亚格子项到底在算什么、亚格子燃烧模型怎么选,以及从网格配置到数值格式再到边界条件的一整套实操要点。适合正在从RANS往LES过渡的工程师,也适合第一次搭燃烧算例的研究生。如果你只是听过LES这个名词还没正经跑过燃烧算例,这一篇能帮你把底子打起来。
1. 为什么燃烧仿真要上LES:先把三条路线摆清楚
1.1 RANS、LES、DNS:三种尺度观
在动手配算例之前,先搞清楚自己站在哪条技术线上。RANS、LES、DNS三种方法对湍流的处理方式截然不同,计算代价也差着好几个量级。
| 方法 | 湍流处理 | 网格量级参考 | 主要用途 |
|---|---|---|---|
| RANS | 全部湍流时均化建模 | 相对粗,壁面附近加密即可 | 工程方案评估、趋势分析 |
| LES | 大涡解析,小涡亚格子建模 | 中等,需在能量携带涡范围内足够密 | 非定常燃烧现象、稳焰与点火机制 |
| DNS | 全部尺度解析 | 极大,流动和化学尺度全分辨 | 基础机理研究、模型标定基准 |
RANS的最大优势是便宜,很多稳态设计问题用它能给出合理趋势,但代价是湍流脉动对燃烧的影响被平均掉了。LES把含能的大涡结构直接算出来,特别适合捕捉旋流、射流、剪切层这类组织化湍流结构,这些结构恰恰是工程燃烧室里稳焰、点火、熄火的关键。DNS虽然理想,但它在实际工程几何上的应用仍然非常受限,大多充当“数值实验”来标定模型。
1.2 燃烧仿真的真正难点:湍流与化学的耦合
我习惯用一个不那么严格但很好懂的说法:想象大风里点了一排蜡烛,蜡烛能否稳定燃烧,取决于来流的风和蜡烛本身的特性。RANS相当于只给你平均风速,蜡烛被一阵阵阵风吹得忽明忽暗的过程是看不到的;LES能看到风的阵性脉动结构;DNS则连最小尺度的气流琢磨都要算清。
这个类比不是开玩笑。燃烧里两个核心时间尺度——流动时间尺度和化学时间尺度——经常在同个数量级上竞争。湍流拉伸火焰面,可以增大反应总面积让燃烧更烈,也可以把火焰拉断造成局部熄火;湍流混合决定局部当量比,进而决定哪些区域烧得起来;热释放改变密度场,又反过来改变湍流结构。这些耦合效应全是非定常的,RANS时均化处理等于把它们糊在一起。这就是为什么研究燃烧不稳定、点火过程、熄火极限这类课题时,LES几乎成了标配。某型涡流燃烧室的项目里,我同时跑过RANS和LES,RANS给出的回流区长度和温度分布明显偏钝,火焰前锋被“平均”得无棱无角,换成LES后才能看到剪切层里一轮轮涡卷着火焰面往前推进,这种结构差异直接影响出口温度场的判断。
2. LES在算什么:滤波方程与亚格子模型
2.1 滤波操作:给流场切一刀
LES的第一步是空间滤波。对任意瞬时量φ,定义一个滤波操作:φ̄(x,t) = ∫ φ(x′,t) G(x−x′) dx′,其中G是滤波函数,滤波宽度Δ通常取为当地网格尺度。对可压缩燃烧问题,工程上更常用密度加权滤波(Favre平均),把密度脉动的影响吸进变量定义里。
滤波之后的连续方程和动量方程长这样:∂ρ̄/∂t + ∇·(ρ̄ ũ) = 0,∂(ρ̄ ũ)/∂t + ∇·(ρ̄ ũ⊗ũ) = −∇p̄ + ∇·σ̄ − ∇·τ_sgs。多出来的τ_sgs是亚格子应力,代表被滤波宽度挡掉的小尺度运动对大尺度动量的作用,必须建模。类似地,组分输运方程里会出现亚格子组分通量,能量方程里会出现亚格子焓通量,燃烧源项也会出现闭合问题。
一个直观的比喻:滤波就像拿一张粗纱网去看火焰。比网眼大的火焰结构和流动结构都能看得清楚,小于网眼的细节则统一被当作亚格子内容处理。滤波器宽度等于网格尺寸,意味着你的网格越细,能直接看到的火焰细节就越多,需要建模的部分就越少。这也是为什么同样一套燃烧模型,网格加密后结果通常会变化——你是在改变“纱网孔径”。
2.2 亚格子应力模型:从Smagorinsky到WALE
亚格子应力模型最常见的是涡粘思路,最经典的Smagorinsky模型给出ν_t = (CsΔ)²|S̄|,其中|S̄|是滤波后应变率张量的模,Cs是常数,典型取值0.1到0.2。它思路简单、实现容易,但有个老毛病:在近壁区和层流区仍然给出不小的涡粘,导致壁面附近湍流耗散被高估。所以在燃烧室这种存在壁面限制和分离再附的流动里,直接用基本Smagorinsky不太让人放心。
WALE模型是更推荐的起步选择。它利用速度梯度的对称与非对称部分构造了一个近壁自动衰减的涡粘表达式,壁面附近涡粘自然趋向于零,不需要额外阻尼函数,在旋流、剪切层强、壁面受限的燃烧流动里实测更稳。动态Smagorinsky模型通过局部流场实时修正Cs,精度更好但计算量上升,而且动态过程平滑不好也有收敛问题。
我的建议很直接:多数工程燃烧LES算例,从WALE起步,把主要预算花在网格质量和燃烧模型选择上。涡粘模型本身给的是亚格子耗散的粗粒度估计,没必要在那里追求完美精确,过度纠结常数反而容易忽略真正影响火焰结果的亚格子燃烧模型。
2.3 亚格子燃烧模型:火焰在亚格子尺度怎么烧
这是燃烧LES和普通流体LES最大的分岔点。普通LES把亚格子应力模掉就够了,燃烧LES还要回答一个问题:化学反应源项ω̇在滤波后的表达是什么?你不能直接把瞬时组分、温度场代入机理去算,因为组分和温度的亚格子关联被丢了。
主流选择有这么几类。火焰面模型(Flamelet)假设火焰是比最小湍流涡还要薄的薄层,内部结构接近一维预混或扩散火焰,用混合分数Z和标量耗散率χ把火焰结构参数化。优势是计算量小、物理图像清楚,适合射流扩散火焰这类非预混场景,但对强拉伸、局部熄火再点火过程偏差较大。G方程/Level Set方法把预混火焰面前沿当作一个传播薄面,用湍流火焰速度模型去推进它,很适合看火焰面形态演化。增厚火焰模型(TFM)通常把火焰厚度人为放大数倍到网格可分辨范围,配合效率函数修正亚格子湍流对火焰增厚的影响,适合同时存在薄体和局部熄火再燃的工况,但参数多,增厚因子和效率函数调起来比较考验经验。PaSR(部分搅动反应器)和涡耗散概念模型(EDC)则从湍流与反应时间尺度之比出发,把每个网格想象成包含一个反应亚网格和一个混合亚网格的小反应器,能配合详细机理使用,对非预混、部分预混和稀燃工况都相对友好,是我个人用得比较多的一类。
| 模型 | 适用燃烧类型 | 主要优势 | 主要限制 |
|---|---|---|---|
| Flamelet | 非预混扩散火焰 | 计算快,参数少 | 强拉伸熄火不准 |
| G方程/Level Set | 预混火焰 | 火焰面形态直观 | 需S_T模型,局部熄火难 |
| TFM | 薄火焰、局部熄火 | 火焰结构可分辨 | 增厚因子与效率函数调参繁琐 |
| PaSR/EDC | 非预混/部分预混/稀燃 | 配合有限速率机理 | 对时间尺度比敏感 |
动手选型时,第一件事永远是判明你的燃烧类型:是扩散主导还是预混主导,有没有强烈的局部熄火。别沿袭RANS时代的习惯默认一个模型用到底,LES的燃烧模型对工况敏感的程度要明显得多。举个例子,把Flamelet模型直接套到一台强旋流稀预混燃烧器上,火焰前端对拉伸的响应就很难被真实表达,温度场可能看起来光滑合理,但点火和熄火极限的判断会差得很远。
3. 实操配置:从网格到数值格式
3.1 网格分辨率:火焰厚度和湍流尺度都要照顾
LES网格设计的第一个原则,是解析绝大部分含能涡。一个常用的经验是网格尺度Δ相对流动积分尺度L保持在0.1到0.2以下,也就是说在大涡区至少需要5到10个网格。如果几何里有明显的剪切层、回流区、旋流核心,这些区域的网格密度要比主流区提升一到两个量级。我做某旋流燃烧室算例时,入口直径约80毫米,中心主流区网格取0.5到1毫米,剪切层和回流区加密到0.2毫米,而下游远场区域又可以逐步放宽到2毫米以上,这种非均匀布局能把算力用在刀刃上。
壁面处理是另一个容易翻车的点。LES近壁要解析粘性底层就需要第一层网格高度满足y+≈1,这在很多工程壁面上代价非常高,所以工程LES常配壁面应力模型,把第一层网格放松到y+=30到100附近。你有两条路可以选:预算足、重点观察壁面热流,就走精细近壁;预算紧、关注整体火焰行为,就用壁面模型。两条路对网格的初始布局要求完全不同,最好在建网前就定下来。
火焰尺度也要照顾。如果采用增厚火焰模型,需要让增厚后的火焰厚度占到至少3到5个网格,增厚因子N要相应调大;如果采用火焰面模型,火焰内部结构不需要网格解析,但混合分数边界层和剪切层分辨率会直接影响局部当量比分布,网格不足会明显低估混合强度,温度场跟着跑偏。
3.2 数值格式与时间步长:耗散是LES的头号敌人
LES对数值耗散高度敏感。迎风格式虽然鲁棒,但数值扩散会像额外加了一层涡粘一样,逐步磨掉小尺度涡结构,火焰和湍流的相互作用会失真。所以我建议核心流动变量用低耗散格式,比如二阶中心差分或带限制器的有界中心差分,组分和能量方程中需要单调性的变量可以用高阶带限格式。不同代码实现方式有差异,核心思路是:不要为了让算例稳定就把数值耗散加得过大,那会毁掉LES的意义。
时间步长方面,计算中一个硬约束是CFL数,一般控制在0.3到0.5以内,燃烧区域建议更严一些。举个例子,网格尺度0.5毫米,来流速度20米每秒,单靠对流限制dt约为2.5e-5秒,CFL取0.3则时间步约7.5e-6秒。如果一共要跑0.1秒的物理时间,就是上万步的量级。再加上化学反应源项的刚性问题,组分方程往往要配合隐式处理或算子分裂,这部分对稳定性的提升很大。
我踩过的坑是刚切LES时总想沿用RANS的大时间步,结果要么直接发散,要么中间几步看似能跑,再往下温度开始局部爆炸。调整顺序应该是先把CFL压下来,确认冷态流场稳定,再逐步放开时间步。
3.3 边界条件与初始流场:细节决定成败
LES与RANS在边界条件上的一个重大区别,是入口湍流脉动不能只给平均剖面。RANS给个均匀速度入口算起来没什么大问题,LES如果入口没有合适的湍流脉动,剪切层和回流区往往要延迟很久才发展起来,或者发展出的流场和实际明显不符。目前的通用做法是用合成湍流方法生成入口脉动,比如合成涡方法或数字滤波法,让入口段在一到两个水力直径内自然过渡到湍流充分发展的状态。如果算的是实际燃烧器,入口条件最好对一下设计工况的实测平均剖面和湍流强度。
出口边界要特别注意波反射问题。低马赫数燃烧系统中进出口压力波的虚假反射会让火焰面发生不真实的振荡。压力出口要配合非反射处理,出口段网格也需要适当拉长,把涡结构送出去再结束计算域。
初始流场最忌一上来就把高温反应流场塞满整个计算域。我会先用冷态LES把流场跑稳定,再在流场内布置点火源,比如在回流区中心设定一个高温球体区域并限定其持续时间,让火焰自己发展起来。冷态稳态流场是燃烧算例的最好起点,因为火焰才能在你关注的真实流动结构里建立,而不是在一个虚假的初始流场里挣扎。
4. 常见问题与排查技巧实录
4.1 温度场出现非物理尖峰
这是燃烧LES新手最容易撞见的异常。现象很直接:某几个网格或小区域内温度突然冲到三四千K甚至更高,随后要么熄灭要么扩散,整个流场被污染。
按我的经验,按顺序排查三件事。第一,关闭燃烧反应跑冷态流场,确认纯流动没问题,温度尖峰不是数值不稳定带出来的。第二,检查组分质量分数的取值范围,有没有负值或超过物理上限。低耗散格式下组分越界常见,很多代码会给越界的组分做钳制,但钳制本身又会造成守恒误差,所以要在离散格式和限制器上找平衡。第三,检查使用的化学机理在高温富燃或极贫条件下的适用性。不少简化的骨架机理只在小范围当量比和温度区间内标定过,超出范围外推就会产出离谱的反应速率。
温度尖峰通常是纯粹的“模型加数值”问题,不要一上来就怀疑物理。把火焰区域监听起来,看看尖峰是持续存在还是在某一两个网格点上来回跳动,能帮你判断是格式问题还是机理问题。
4.2 火焰面发展失真或吹脱
辛辛苦苦跑起来,结果火焰面要么被冲走,要么厚度完全不对劲,这属于第二类高频问题。
如果火焰传不进去,先看回流区是否真实存在。LES在入口脉动不足的情况下,回流区可能比实际弱,火焰没有稳定锚点自然会被吹走。调整入口湍流脉动强度和结构,往往比换燃烧模型更有效。如果是预混火焰,再检查你对入口的当量比和温度是否有偏差,很小的富燃偏差都会影响层流火焰速度,继而改变火焰位置。
对于增厚火焰模型,火焰厚度不对劲通常源于增厚因子或效率函数配合不当。增厚因子太小,火焰前后只有一两个网格,数值误差直接改变火焰速度;增厚因子太大,亚格子湍流贡献被放大,火焰速度又会被高估。实际调试时,我会在相同输入条件下对比一条改增厚因子后的温度分布,看火焰前锋位置是否发生明显移动,若移动幅度超过5%就说明参数还没有调到位。
4.3 计算中途发散
燃烧算例比冷态算例更容易发散,因为化学反应源项是强烈的非线性,局部温度上升又会加剧数值刚度。最常见的触发点有三个:初始CFL过高导致的剧烈振荡、网格质量在边界层区域变形过大、以及出口反射压力波。
处理办法里我强烈推荐“热身策略”。先用正常时间步长的0.1倍跑前面几千步,让流场逐渐适应燃烧释放量,再逐步把时间步长放开到目标CFL。这跟运动员赛前热身一个道理,突然上强度没有人受得了。如果发散的部位集中在特定边界附近,用后处理工具找出发散前最后几步的残差热点,基本能定位到问题边界。
4.4 统计平均与后处理不要只看瞬时云图
LES是非定常仿真,你需要的最终产品往往是时均流场。这里有个非常容易踩的效率坑:有人从第0步就开始统计平均,结果把大量发展阶段的瞬态混进了均值里,流场看起来总是不对。
我自己的流程是先把瞬态充分跑开,通常需要几个流动通过时间,再开始采集统计。采集时长要足够长,流动通过时间的定义是计算域特征长度除以来流特征速度,工程估算至少留出3到5个通过时间。判断统计收敛可以盯着某个关键位置的时均温度或速度,画成曲线,看它随时间是否还有明显单向漂移,或者对比两段不同时段的均值偏差是否在可接受范围内。
后处理时我会同时输出瞬时场和时均场两套结果。瞬时场用来观察火焰结构、涡的卷吸和形态演化,适合讲故事;时均场用来和实验数据做定量对比、提取设计指标,适合写结论。两者分开才能使各自的意义清晰。如果关心燃烧不稳定问题,压力脉动和热释放脉动的频谱分析更是必须的,这时一定要保存足够长时间的压力监测数据,否则频率分辨率不够,分析起来很尴尬。
5. 几个值得长期坚持的习惯
5.1 从RANS切LES:分阶段渐进
直接一次性从RANS切换到高精度LES并带详细机理,几乎一定会让你在调试上浪费大量时间。我会按三个阶段推进:第一阶段用冷态LES把流场结构和基本涡特征跑通,确认回流区、旋流中心、剪切层位置都合理;第二阶段引入被动标量或混合物分数模拟,把混合特征和入口条件检验一遍;第三阶段再打开化学反应,加入燃烧模型。每阶段留好检查结果,问题出在哪里一目了然。
这个习惯帮我在很多项目里节省了大量排查时间。因为燃烧LES的每一步调试都牵动上下游,一旦带上反应,很多数值问题会叠加,就很难分清是流场问题还是反应模型问题。
5.2 算例启动前先算一笔成本账
我在接手一个新的燃烧LES算例时,会先做一个简单的成本估算:网格量乘上每步迭代时间再乘目标步数,折算成核时。一个500万网格的算例,在普通规模集群上跑0.1秒物理时间,往往要连续跑数周甚至更久。所以在项目初期就把目标物理时间定清楚,是只关心最终稳焰状态还是需要统计收敛的时均场,两者需要的算力差别很大。能先降维就降维,比如用轴对称粗网格做概念验证,再决定是否值得上三维全尺度。
5.3 检查点与过程监控
LES燃烧算例的数据量非常可怕,如果每步都存全场,几天就能把存储撑爆。要给过程文件设置合理的保存频率,检查点存得勤一点,可视化场存得稀一点。关键位置布置监测点和监测线,温度、组分、速度随时看曲线变化,这比看云图更能早期发现异常。我自己习惯每几百步存一次检查点,每一段时间存一次可视化解,既保证能续算,又不至于被数据淹没。
最后再分享一个观念层面的体会。我见过不少人在LES燃烧仿真上把注意力都集中在燃烧模型按钮上,反复调模型常数希望能把温度云图画得漂亮,却忽略了流场结构本身是否真实。实际上,大多数失败的燃烧LES算例,问题根子都出在流场解析得不够、入口条件不对、或者网格把剪切层磨平了。燃烧模型只是给一个合理的火焰响应,前提是它所在的流场是可信的。先确认流场,再相信火焰云图——这句话我每次带新同事做LES也会重复一遍。