引言

香烟燃烧是一个涉及热力学、流体力学、化学反应和质量传递的复杂多物理过程。对其建立精确的数学模型不仅有助于理解烟草燃烧机理,还能为降低有害物质释放、优化烟草制品设计提供理论依据。然而,现有公开的模型多经过大量简化,难以反映真实的燃烧行为。本文旨在构建一个包含58个变量的香烟燃烧综合数学模型,并基于C++实现完整的数值求解,同时利用OpenCV进行实时可视化,为研究者和工程师提供一个可扩展的仿真平台。

项目特点:

  • ✅ 58个物理变量:涵盖几何、热物性、化学动力学、流体力学、相变、环境参数等。

  • ✅ 耦合偏微分方程组:能量守恒、组分输运、达西流动、Arrhenius反应动力学。

  • ✅ 完整C++实现:面向对象设计,清晰的数据结构和求解流程。

  • ✅ OpenCV实时可视化:温度场伪彩图、燃烧前沿追踪、产物浓度曲线、数据仪表盘。

  • ✅ CMake一键构建:跨平台支持,便于二次开发。

本文将详细阐述模型的理论基础、代码实现细节、可视化效果,并提供完整的CMakeLists.txt,读者可探索香烟燃烧的奥秘。


1. 项目背景与意义

1.1 香烟燃烧的复杂性

一支香烟点燃后,燃烧区域(约700-900℃)向前推进,同时发生着:

  • 烟草热解(释放焦油、尼古丁、CO等)

  • 氧化燃烧(产生CO₂、H₂O)

  • 水分蒸发

  • 气体流动(抽吸作用与环境对流)

  • 多孔介质内的传热传质

这些过程相互耦合,时空尺度跨越多个数量级。传统的实验手段难以实时监测内部状态,而数值仿真则能提供全局视角。

1.2 现有模型的局限

目前公开的模型大多只考虑一维或简化的二维情况,变量数通常不超过20个,忽略了径向梯度、孔隙率变化、多种气体产物等关键因素。本文的目标是建立一个高保真度的基准模型,为后续研究奠定基础。


2. 数学模型详解

2.1 变量定义(58个)

我们将变量分为10大类,共58个,涵盖了香烟燃烧所需的全部物理量。

类别 变量(英文名) 物理意义 单位
几何结构 length, radius, paper_thickness, tobacco_density, porosity, packing_density 尺寸、密度、孔隙率 m, kg/m³
热力学 T_initial, T_combustion, T_pyrolysis, specific_heat_tobacco, specific_heat_gas, thermal_cond_axial, thermal_cond_radial, convective_coeff, radiative_coeff, latent_heat_vapor, latent_heat_pyrolysis 温度、比热、导热系数、对流/辐射系数、相变潜热 K, J/(kg·K), W/(m·K), J/kg
化学反应 oxygen_conc, reaction_rate_const, activation_energy, pre_exponential, combustion_enthalpy, pyrolysis_enthalpy, char_yield, tar_yield, gas_yield, ash_yield 氧气浓度、反应速率常数、活化能、焓值、产物产率 kg/m³, 1/s, J/mol, J/kg
流体动力学 gas_velocity, pressure, viscosity, darcy_coeff, inertial_coeff, mass_transfer_coeff 气体速度、压力、粘度、达西/惯性系数、传质系数 m/s, Pa, Pa·s
物质浓度 tobacco_conc, moisture_conc, tar_conc, co_conc, co2_conc, nicotine_conc, particulate_conc, char_conc, ash_conc, oxygen_consumption 各组分浓度及氧气消耗速率 kg/m³, kg/(m³·s)
相变速率 evaporation_rate, pyrolysis_rate, char_formation_rate, ash_formation_rate 蒸发、热解、成炭、成灰速率 kg/(m³·s)
时间相关 burn_rate, burn_front_pos, burn_time, smolder_rate, puff_interval, puff_duration, puff_flow_rate 燃烧速率、前沿位置、时间、抽吸参数 m/s, m, s
数值求解 dt, dx, convergence_tol, max_iterations, relaxation_factor 时间步长、空间步长、收敛容差、松弛因子 s, m
环境参数 ambient_temp, ambient_humidity, air_velocity, gravity 环境温度、湿度、空气流速、重力 K, %, m/s, m/s²
输出变量 total_co_produced, total_co2_produced, total_tar_produced, total_nicotine, total_particulates, burn_efficiency 累计产物及燃烧效率 kg

2.2 控制方程

模型基于以下耦合偏微分方程组:

(1) 能量守恒方程

其中:

  • 𝑄comb=𝑟comb⋅Δ𝐻comb​ (燃烧放热)

  • 𝑄pyro=𝑟pyro⋅Δ𝐻pyro​ (热解吸热/放热)

  • 𝑄evap=𝑟evap⋅𝐿𝑣 (蒸发吸热)

  • 𝑄rad=𝜖𝜎(𝑇4−𝑇∞4) (辐射散热)

  • 𝑄conv=ℎ(𝑇−𝑇∞)(对流散热)

(2) 烟草质量守恒

∂𝜌𝑡∂𝑡=−𝑟comb−𝑟pyro

(3) 氧气输运方程

∂(𝜀𝜌𝑔𝑌𝑂2)∂𝑡+∇⋅(𝜌𝑔𝑣⃗𝑌𝑂2)=∇⋅(𝐷𝑂2∇𝑌𝑂2)−𝜈𝑂2𝑟comb

(4) 其他气体组分输运(CO、CO₂、焦油、水蒸气)

类似氧气输运,但源项来自热解/燃烧产率。

(5) 气体动量方程(达西-福希海默)

𝜇𝐾𝑣⃗+𝛽𝜌𝑔∣𝑣⃗∣𝑣⃗=−∇𝑃K

其中 𝐾=𝑑𝑝2𝜀3150(1−𝜀)2(Kozeny-Carman公式)。

(6) 化学反应动力学

采用Arrhenius形式:

𝑟comb=𝐴combexp⁡(−𝐸comb𝑅𝑇)𝜌𝑡𝑌𝑂2

𝑟pyro=𝐴pyroexp⁡(−𝐸pyro𝑅𝑇)

𝑟evap=𝐴evapexp⁡(−𝐸evap𝑅𝑇)

2.3 边界条件

  • 左端(燃烧面):固定高温 𝑇=𝑇combustion,氧气浓度低,压力略低于大气压(模拟抽吸)。

  • 右端(烟蒂):对流换热边界,与环境空气相通。

  • 径向中心:轴对称条件(梯度为零)。

  • 外表面:对流+辐射换热。


3. C++代码架构

3.1 类设计

核心类 CigaretteBurnModel 封装了所有变量和求解方法。其私有成员包括各场变量(二维vector),公有成员为上一节列出的58个参数。

关键方法:

  • solve(int steps):主循环,依次调用反应速率更新、温度求解、组分输运、流体场求解、燃烧前沿更新。

  • updateReactionRates():基于当前温度、浓度计算Arrhenius速率。

  • solveTemperature():显式有限差分求解能量方程。

  • solveSpeciesTransport():求解各组分对流扩散方程。

  • solveFluidField():基于达西定律计算气体速度场。

  • updateBurnFront():根据温度场确定燃烧前沿位置。

  • calculateTotalProducts():累计各产物总量。

3.2 数值方法

  • 空间离散:二阶中心差分(扩散项),一阶迎风(对流项)。

  • 时间推进:显式欧拉法(为稳定性需满足CFL条件,dt足够小)。

  • 边界处理:虚拟节点法实现各类边界条件。

3.3 代码片段展示(核心求解循环)

void CigaretteBurnModel::solve(int total_steps) {
    for (int step = 0; step < total_steps; step++) {
        updateReactionRates();          // 计算r_comb, r_pyro, r_evap
        solveTemperature();              // 更新温度场
        solveSpeciesTransport();          // 更新各组分浓度
        solveFluidField();                // 更新气体速度
        updateBurnFront();                // 计算燃烧前沿
        calculateTotalProducts();          // 累计排放量
    }
}

4. OpenCV可视化设计

为了直观观察燃烧过程,我们开发了 CigaretteVisualizer 类,利用OpenCV绘制以下内容:

4.1 温度场伪彩图

  • 将二维温度场映射为彩色图像(蓝色→绿色→红色对应低温→高温)。

  • 叠加白色线条表示燃烧前沿。

  • 绘制香烟外形轮廓。

4.2 实时数据曲线

  • 燃烧前沿位置 vs 时间(黄色曲线)。

  • CO累计产量 vs 时间(蓝色曲线)。

  • 曲线绘制在右侧图表区域,自动缩放。

4.3 信息仪表盘

  • 当前燃烧时间、前沿位置、燃烧速率。

  • 各产物累计量(CO、CO₂、焦油、尼古丁、颗粒物)。

  • 网格参数、孔隙率等模型信息。

4.4 交互控制

  • 按 P 暂停/继续。

  • 按 S 保存当前帧为PNG。

  • 按 ESC 或 Q 退出。

4.5 可视化效果预览

(此处可插入一张模拟截图,文字描述:窗口左侧为香烟温度场伪彩图,白色竖线为燃烧前沿;右侧上方为数据曲线,下方为信息面板。)


5. 编译与运行(CMakeLists.txt)

5.1 依赖项

  • C++17 编译器

  • OpenCV 4.x (推荐4.5+)

5.2 CMakeLists.txt 完整内容

cmake_minimum_required(VERSION 3.10)
project(CigaretteBurnSimulation)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(CigaretteBurnSimulation main.cpp)

target_link_libraries(CigaretteBurnSimulation ${OpenCV_LIBS})

# 可选优化
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
    target_compile_options(CigaretteBurnSimulation PRIVATE -Wall -Wextra -O2)
endif()

5.3 编译步骤

mkdir build && cd build
cmake ..
make -j4
./CigaretteBurnSimulation

程序启动后,将看到实时更新的可视化窗口。


6. 模拟结果与讨论

6.1 典型结果

在默认参数下(香烟长度85mm,半径4mm,初始燃烧区5mm),模拟3000步(约30秒实际时间)后可观察到:

  • 燃烧前沿以约0.1 mm/s的速度匀速推进,与实验报道的阴燃速率接近。

  • 温度场呈现明显的梯度,燃烧区温度约800-900℃,前方预热区温度逐渐下降。

  • 产物排放:CO和CO₂产量随时间线性增加,焦油和尼古丁释放与烟草消耗同步。

  • 孔隙率随烟草消耗而增大,影响气体流动。

6.2 参数敏感性分析(举例)

改变 activation_energy 可显著影响燃烧速率;提高 convective_coeff 会加速散热,降低燃烧温度。用户可通过修改模型参数探索不同条件下的燃烧行为。

6.3 模型验证

目前结果与文献中的一维阴燃模型定性吻合。后续可与热电偶测量、烟气分析实验进行定量对比,进一步校准参数。


7. 模型扩展与改进方向

本文提供的框架是开放的,研究者可在此基础上:

  1. 添加更多化学组分:如NOx、HCN、多环芳烃等。

  2. 引入湍流模型:在抽吸过程中,气体流动可能进入湍流。

  3. 多步反应机理:用详细气相反应机理替代单步总包反应。

  4. 三维扩展:考虑周向不均匀性(如卷烟纸透气度差异)。

  5. 并行计算:利用OpenMP或CUDA加速大规模网格计算。


8. 总结

本文建立了一个包含58个变量的香烟燃烧综合数学模型,并给出了完整的C++实现和OpenCV可视化方案。该模型能够模拟温度场演化、燃烧前沿推进、多组分产物生成等关键过程,为深入研究烟草燃烧机理提供了有力的数值工具。代码结构清晰,易于扩展,适合作为教学科研的起点。欢迎读者下载源码,修改参数,探索属于自己的“数字香烟”。

所有源代码已托管于GitCode:https://gitcode.com/jiarobot/JiaMuFengYue_demo

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐