Skip to content

反应动力学速率组件 (Perks) 代码解析

perks.py 实现了 CPD 模型中的并行反应动力学。其代码核心特征是采用了基于正态分布(Gaussian Distribution)的变活化能模型,模拟煤这种复杂混合物在受热时的非均匀反应速率。


🧪 核心算法逻辑:变活化能模型

Section titled “🧪 核心算法逻辑:变活化能模型”

在煤热解中,化学键的断裂并非单一活化能,而是一个分布。代码通过插值标准正态分布累计分布函数(CDF)的逆函数,实现了活化能的动态漂移。

1. 极速正态分布插值 _get_x_interpolated

Section titled “1. 极速正态分布插值 _get_x_interpolated”

代码内置了一个小型的高斯分布表 _XX_ERF / _YY_ERF,通过 Numba 优化的二分查找实现高性能反查:

@njit(inline='always')
def _get_x_interpolated(f_val):
# 使用 searchsorted 实现 O(log N) 级别的快速定位
idx = np.searchsorted(_YY_ERF, yp_v) - 1
# 线性插值计算对应的标准偏差倍数
return fac * (x0 + (yp_v - y0) * (x1 - x0) / (y1 - y0))
  • inline='always': 强制内联到调用处,消除函数调用开销,这在 ODE 求解器频繁迭代时至关重要。

对于气体产出(Gas)、氮析出(Nitrogen)和可动键断裂(Labile),活化能会随着反应进度的增加而升高:


该函数计算四个状态变量的瞬时变化率 :

代码中的 res 数组对应以下物理过程:

  • res[0] (dl/dt): 可动键(Labile bridges)的消耗速率。
  • res[1] (ddel/dt): 桥键断裂产生的周边界限(Del_val)的演变。
  • res[2] (dc/dt): 稳定键(Char bridges)的生成速率。
  • res[3] (dfnca/dt): 煤中非催化活性氮(Non-catalytic Nitrogen)的减少。

代码体现了 CPD 模型中经典的 Bridge -> Sidechain + Char 竞争逻辑:

term_kb_l = kb * l
common_term = term_kb_l / (rho + 1.0) # 竞争因子分配
res[0] = -term_kb_l # 全部消耗
res[2] = common_term # 其中一部分转化为稳定键 (Char)

  • @njit(cache=True): 该函数在仿真过程中会被 ODE 积分器(如 odeint)调用数千次,JIT 编译是系统响应速度的保证。
  • 公共项提取: 计算 common_term 避免了重复的浮点除法运算,降低了 CPU 周期消耗。
  • np.empty(4): 相比 np.zerosempty 不进行初始化填充,在极高频调用场景下能榨取更多性能。

变量名物理意义对应动力学参数
Tp颗粒瞬时温度 (K)决定 Arrhenius 速率
l, del, c结构状态量决定当前反应的浓度基数
eb0, ebsig可动键活化能基准值 与分布标准差
Rg气体常数默认采用英制或公制单位(取决于引擎配置)