在Cantera反应器中利用生物质热解动力学

时间:2018-12-05 19:56:14

标签: python chemistry cantera

我正在尝试将Cantera与动力学方案一起用于生物质热解,以查看间歇式反应器中浓度随时间的变化。下面显示了动力学概述以及对本文的参考。请注意,物种浓度基于质量,例如kg/m^3

primary

secondary

  • 木材=生物量,通常是松木
  • gas =包含轻质不凝性气体的集总物质
  • tar =可冷凝热解蒸气的集总物质
  • char =完全热解的木材,基本上是碳

参考:Colomba Di Blasi。分析多孔固体燃料热解过程中的对流和次级反应效应。燃烧科学与技术,第一卷。 90,第315-340页,1993年。

假设初始木材浓度为1.0,我可以求解 Python生成反应速率方程,并绘制随时间变化的转换,如下所示。

plot

不幸的是,我在Cantera上使用动力学方案的尝试给与不相容相类型有关的错误。我的blasi.cti文件包含以下内容:

#-------------------------------------------------------------------------------
#  Phases data
#-------------------------------------------------------------------------------


stoichiometric_solid(
    name = "wood",
    species = "wood",
    density = (700, "kg/m3")
)

ideal_gas(
    name = "gas",
    species = "gas"
)

ideal_gas(
    name = "tar",
    species = "tar"
)

stoichiometric_solid(
    name = "char",
    species = "char",
    density = (110, "kg/m3")
)

#-------------------------------------------------------------------------------
#  Species data
#-------------------------------------------------------------------------------

species(
    name="wood"
)

species(
    name = "gas"
)

species(
    name = "tar"
)

species(
    name = "char"
)

#-------------------------------------------------------------------------------
#  Reaction data
#-------------------------------------------------------------------------------

# Reaction 1
reaction("wood => gas", [1.4345e4, 0, 88.6])

# Reaction 2
reaction("wood => tar", [4.125e6, 0, 112.7])

# Reaction 3
reaction("wood => char", [7.3766e5, 0, 106.5])

# Reaction 4
reaction("tar => gas", [4.28e6, 0, 108])

# Reaction 5
reaction("tar => char", [1.0e6, 0, 108])

,使用上述blasi_reactor.py文件的Python文件cti为:

import cantera as ct
import matplotlib.pyplot as plt

tk = 773.15     # temperature [K]
p = 101325.0    # pressure [Pa]

gas = ct.Solution('blasi.cti')
gas.TP = tk, p
r = ct.IdealGasConstPressureReactor(gas)

sim = ct.ReactorNet([r])
time = 0.0
states = ct.SolutionArray(gas, extra=['t'])

for n in range(50):
    time += 1.0
    sim.advance(time)
    states.append(r.thermo.state, t=time)

plt.figure()
plt.plot(states.t, states.X[:, gas.species_index('wood')])
plt.plot(states.t, states.X[:, gas.species_index('gas')])
plt.plot(states.t, states.X[:, gas.species_index('tar')])
plt.plot(states.t, states.X[:, gas.species_index('char')])
plt.xlabel('Time [s]')
plt.ylabel('Concentration [kg/m^3]')
plt.show()

Cantera的错误消息是:

Traceback (most recent call last):
  File "blasi_cantera.py", line 9, in <module>
    r = ct.IdealGasConstPressureReactor(gas)
  File "interfaces/cython/cantera/reactor.pyx", line 191, in cantera._cantera.Reactor.__init__
  File "interfaces/cython/cantera/reactor.pyx", line 28, in cantera._cantera.ReactorBase.__init__
  File "interfaces/cython/cantera/reactor.pyx", line 199, in cantera._cantera.Reactor.insert
  File "interfaces/cython/cantera/reactor.pyx", line 50, in cantera._cantera.ReactorBase.insert
cantera._cantera.CanteraError:
***********************************************************************
CanteraError thrown by IdealGasReactor::setThermoMgr:
Incompatible phase type provided
***********************************************************************

如何用Cantera定义诸如木材,天然气,焦油和炭的集总品种? 在Cantera中甚至可以使用这种动力学方案吗?我通常创建 我自己的使用Python的热解模型,但我想使用反应器 坎特拉的特色。这也可以让我比较 Cantera和我的个人Python模型。

注意-我查看了Cantera文档网站上的示例,但 一切都是针对定义明确的气相物种,您可以在其中了解元素组成和NASA系数。

1 个答案:

答案 0 :(得分:0)

只要热力学数据(存在并具有特定热系数的热力学数据),就可以使用您自己的甚至是虚构的元素和种类,但是,找到此类散装材料的正确系数(检查这些:https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940013151.pdf)。

另外,对于动力学计算和反应堆链,使用ct.IdealGasReactor更加容易,它也应该支持多相。

此外,您至少需要在反应堆之间设置上游储层,并在每次迭代时对它们进行同步处理。

p.s。您可以查看由Cantera完成的出版物: https://www.researchgate.net/publication/320592565_Modelling_of_biomass_combustion_chemistry_to_investigate_gas_phase_alkali_sulfate_formation