[开源]香烟燃烧过程的多物理场建模与可视化仿真(含58个变量的完整C++实现+OpenCV实时渲染)
引言
香烟燃烧是一个涉及热力学、流体力学、化学反应和质量传递的复杂多物理过程。对其建立精确的数学模型不仅有助于理解烟草燃烧机理,还能为降低有害物质释放、优化烟草制品设计提供理论依据。然而,现有公开的模型多经过大量简化,难以反映真实的燃烧行为。本文旨在构建一个包含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. 模型扩展与改进方向
本文提供的框架是开放的,研究者可在此基础上:
-
添加更多化学组分:如NOx、HCN、多环芳烃等。
-
引入湍流模型:在抽吸过程中,气体流动可能进入湍流。
-
多步反应机理:用详细气相反应机理替代单步总包反应。
-
三维扩展:考虑周向不均匀性(如卷烟纸透气度差异)。
-
并行计算:利用OpenMP或CUDA加速大规模网格计算。
8. 总结
本文建立了一个包含58个变量的香烟燃烧综合数学模型,并给出了完整的C++实现和OpenCV可视化方案。该模型能够模拟温度场演化、燃烧前沿推进、多组分产物生成等关键过程,为深入研究烟草燃烧机理提供了有力的数值工具。代码结构清晰,易于扩展,适合作为教学科研的起点。欢迎读者下载源码,修改参数,探索属于自己的“数字香烟”。
所有源代码已托管于GitCode:https://gitcode.com/jiarobot/JiaMuFengYue_demo
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)