Cantera 2.6.0

TwoTempPlasmaRate.h
Go to the documentation of this file.
1//! @file TwoTempPlasmaRate.h Header for plasma reaction rates parameterized by two
2//! temperatures (gas and electron).
3
4// This file is part of Cantera. See License.txt in the top-level directory or
5// at https://cantera.org/license.txt for license and copyright information.
6
7#ifndef CT_TWOTEMPPLASMARATE_H
8#define CT_TWOTEMPPLASMARATE_H
9
10#include "Arrhenius.h"
11
12 namespace Cantera
13{
14
15//! Data container holding shared data specific to TwoTempPlasmaRate
16/**
17 * The data container `TwoTempPlasmaData` holds precalculated data common to
18 * all `TwoTempPlasmaRate` objects.
19 */
20 struct TwoTempPlasmaData : public ReactionData
21{
22 TwoTempPlasmaData() : electronTemp(1.), logTe(0.), recipTe(1.) {}
23
24 virtual bool update(const ThermoPhase& phase, const Kinetics& kin) override;
25 virtual void update(double T) override;
26 virtual void update(double T, double Te) override;
27 using ReactionData::update;
28
29 virtual void updateTe(double Te);
30
31 virtual void invalidateCache() override {
32 ReactionData::invalidateCache();
33 electronTemp = NAN;
34 }
35
36 double electronTemp; //!< electron temperature
37 double logTe; //!< logarithm of electron temperature
38 double recipTe; //!< inverse of electron temperature
39};
40
41
42//! Two temperature plasma reaction rate type depends on both
43//! gas temperature and electron temperature.
44/*!
45 * The form of the two temperature plasma reaction rate coefficient is similar to an
46 * Arrhenius reaction rate coefficient. The temperature exponent (b) is applied to
47 * the electron temperature instead. In addition, the exponential term with
48 * activation energy for electron is included.
49 *
50 * \f[
51 * k_f = A T_e^b \exp (-E_{a,g}/RT) \exp (E_{a,e} (T_e - T)/(R T T_e))
52 * \f]
53 *
54 * where \f$ T_e \f$ is the electron temperature, \f$ E_{a,g} \f$ is the activation
55 * energy for gas, and \f$ E_{a,e} \f$ is the activation energy for electron.
56 * Ref.: Kossyi, I. A., Kostinsky, A. Y., Matveyev, A. A., & Silakov, V. P. (1992).
57 * Kinetic scheme of the non-equilibrium discharge in nitrogen-oxygen mixtures.
58 * Plasma Sources Science and Technology, 1(3), 207.
59 * doi: 10.1088/0963-0252/1/3/011
60 *
61 * @ingroup arrheniusGroup
62 */
63 class TwoTempPlasmaRate : public ArrheniusBase
64{
65 public:
66 TwoTempPlasmaRate();
67
68 //! Constructor.
69 /*!
70 * @param A Pre-exponential factor. The unit system is (kmol, m, s); actual units
71 * depend on the reaction order and the dimensionality (surface or bulk).
72 * @param b Temperature exponent (non-dimensional)
73 * @param Ea Activation energy in energy units [J/kmol]
74 * @param EE Activation electron energy in energy units [J/kmol]
75 */
76 TwoTempPlasmaRate(double A, double b, double Ea=0.0, double EE=0.0);
77
78 TwoTempPlasmaRate(const AnyMap& node, const UnitStack& rate_units={}) : TwoTempPlasmaRate() {
79 setParameters(node, rate_units);
80 }
81
82 unique_ptr<MultiRateBase> newMultiRate() const override {
83 return unique_ptr<MultiRateBase>(
84 new MultiRate<TwoTempPlasmaRate, TwoTempPlasmaData>);
85 }
86
87 virtual const std::string type() const override {
88 return "two-temperature-plasma";
89 }
90
91 virtual void setContext(const Reaction& rxn, const Kinetics& kin) override;
92
93 //! Evaluate reaction rate
94 /*!
95 * @param shared_data data shared by all reactions of a given type
96 */
97 double evalFromStruct(const TwoTempPlasmaData& shared_data) const {
98 // m_E4_R is the electron activation (in temperature units)
99 return m_A * std::exp(m_b * shared_data.logTe -
100 m_Ea_R * shared_data.recipT +
101 m_E4_R * (shared_data.electronTemp - shared_data.temperature)
102 * shared_data.recipTe * shared_data.recipT);
103 }
104
105 //! Evaluate derivative of reaction rate with respect to temperature
106 //! divided by reaction rate
107 /*!
108 * This method does not consider changes of electron temperature.
109 * A corresponding warning is raised.
110 * @param shared_data data shared by all reactions of a given type
111 */
112 double ddTScaledFromStruct(const TwoTempPlasmaData& shared_data) const;
113
114 //! Return the electron activation energy *Ea* [J/kmol]
115 double activationElectronEnergy() const {
116 return m_E4_R * GasConstant;
117 }
118};
119
120}
121
122#endif
Arrhenius.h
Header for reaction rates that involve Arrhenius-type kinetics.
Cantera::AnyMap
A map of string keys to values whose type can vary at runtime.
Definition: AnyMap.h:399
Cantera::ArrheniusBase
Base class for Arrhenius-type Parameterizations.
Definition: Arrhenius.h:52
Cantera::ArrheniusBase::setParameters
virtual void setParameters(const AnyMap &node, const UnitStack &rate_units) override
Set parameters.
Definition: Arrhenius.cpp:113
Cantera::ArrheniusBase::m_E4_R
double m_E4_R
Optional 4th energy parameter (in temperature units)
Definition: Arrhenius.h:167
Cantera::ArrheniusBase::m_A
double m_A
Pre-exponential factor.
Definition: Arrhenius.h:164
Cantera::ArrheniusBase::m_b
double m_b
Temperature exponent.
Definition: Arrhenius.h:165
Cantera::ArrheniusBase::m_Ea_R
double m_Ea_R
Activation energy (in temperature units)
Definition: Arrhenius.h:166
Cantera::Kinetics
Public interface for kinetics managers.
Definition: Kinetics.h:114
Cantera::MultiRate
A class template handling ReactionRate specializations.
Definition: MultiRate.h:21
Cantera::Reaction
Abstract base class which stores data about a reaction and its rate parameterization so that it can b...
Definition: Reaction.h:33
Cantera::ThermoPhase
Base class for a phase with thermodynamic properties.
Definition: ThermoPhase.h:102
Cantera::TwoTempPlasmaRate
Two temperature plasma reaction rate type depends on both gas temperature and electron temperature.
Definition: TwoTempPlasmaRate.h:64
Cantera::TwoTempPlasmaRate::evalFromStruct
double evalFromStruct(const TwoTempPlasmaData &shared_data) const
Evaluate reaction rate.
Definition: TwoTempPlasmaRate.h:97
Cantera::TwoTempPlasmaRate::setContext
virtual void setContext(const Reaction &rxn, const Kinetics &kin) override
Set context of reaction rate evaluation.
Definition: TwoTempPlasmaRate.cpp:70
Cantera::TwoTempPlasmaRate::newMultiRate
unique_ptr< MultiRateBase > newMultiRate() const override
Create a rate evaluator for reactions of a particular derived type.
Definition: TwoTempPlasmaRate.h:82
Cantera::TwoTempPlasmaRate::ddTScaledFromStruct
double ddTScaledFromStruct(const TwoTempPlasmaData &shared_data) const
Evaluate derivative of reaction rate with respect to temperature divided by reaction rate.
Definition: TwoTempPlasmaRate.cpp:63
Cantera::TwoTempPlasmaRate::activationElectronEnergy
double activationElectronEnergy() const
Return the electron activation energy Ea [J/kmol].
Definition: TwoTempPlasmaRate.h:115
Cantera::TwoTempPlasmaRate::type
virtual const std::string type() const override
String identifying reaction rate specialization.
Definition: TwoTempPlasmaRate.h:87
Cantera
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:557
Cantera::GasConstant
const double GasConstant
Universal Gas Constant [J/kmol/K].
Definition: ct_defs.h:113
Cantera::ReactionData
Data container holding shared data used for ReactionRate calculation.
Definition: ReactionData.h:26
Cantera::ReactionData::recipT
double recipT
inverse of temperature
Definition: ReactionData.h:111
Cantera::ReactionData::update
virtual void update(double T)
Update data container based on temperature T
Definition: ReactionData.h:35
Cantera::ReactionData::temperature
double temperature
temperature
Definition: ReactionData.h:109
Cantera::ReactionData::invalidateCache
virtual void invalidateCache()
Force shared data and reaction rates to be updated next time.
Definition: ReactionData.h:105
Cantera::TwoTempPlasmaData
Data container holding shared data specific to TwoTempPlasmaRate.
Definition: TwoTempPlasmaRate.h:21
Cantera::TwoTempPlasmaData::update
virtual bool update(const ThermoPhase &phase, const Kinetics &kin) override
Update data container based on thermodynamic phase state.
Definition: TwoTempPlasmaRate.cpp:13
Cantera::TwoTempPlasmaData::electronTemp
double electronTemp
electron temperature
Definition: TwoTempPlasmaRate.h:36
Cantera::TwoTempPlasmaData::logTe
double logTe
logarithm of electron temperature
Definition: TwoTempPlasmaRate.h:37
Cantera::TwoTempPlasmaData::recipTe
double recipTe
inverse of electron temperature
Definition: TwoTempPlasmaRate.h:38
Cantera::TwoTempPlasmaData::invalidateCache
virtual void invalidateCache() override
Force shared data and reaction rates to be updated next time.
Definition: TwoTempPlasmaRate.h:31
Cantera::UnitStack
Unit aggregation utility.
Definition: Units.h:99