Cantera
Loading...
Searching...
No Matches
ReactionRateFactory.cpp
Go to the documentation of this file.
1 /**
2 * @file ReactionRateFactory.cpp
3 */
4
5// This file is part of Cantera. See License.txt in the top-level directory or
6// at https://cantera.org/license.txt for license and copyright information.
7
16#include "cantera/kinetics/Falloff.h"
26
27namespace Cantera
28{
29
32
34{
35 // ArrheniusRate evaluator
36 reg("Arrhenius", [](const AnyMap& node, const UnitStack& rate_units) {
37 return new ArrheniusRate(node, rate_units);
38 });
39 addAlias("Arrhenius", "");
40 addAlias("Arrhenius", "elementary");
41 addAlias("Arrhenius", "three-body");
42
43 // TwoTempPlasmaRate evaluator
44 reg("two-temperature-plasma", [](const AnyMap& node, const UnitStack& rate_units) {
45 return new TwoTempPlasmaRate(node, rate_units);
46 });
47
48 // Constant vibrational relaxation
49 reg("constant-vibrational-relaxation",
50 [](const AnyMap& node, const UnitStack& rate_units) {
51 return new ConstantVibrationalRelaxationRate(node, rate_units);
52 });
53
54 // Multi-state-resolved vibrational relaxation rate
55 reg("multi-state-resolved-vibrational-relaxation",
56 [](const AnyMap& node, const UnitStack& rate_units) {
57 return new MultiStateResolvedVibrationalRelaxationRate(node, rate_units);
58 });
59
60 // Starikovskiy vibrational relaxation rate
61 reg("Starikovskiy-vibrational-relaxation",
62 [](const AnyMap& node, const UnitStack& rate_units) {
63 return new StarikovskiyVibrationalRelaxationRate(node, rate_units);
64 });
65
66 // Castela vibrational relaxation rate
67 reg("Castela-vibrational-relaxation",
68 [](const AnyMap& node, const UnitStack& rate_units) {
69 return new CastelaVibrationalRelaxationRate(node, rate_units);
70 });
71
72 // ElectronCollisionPlasmaRate evaluator
73 reg("electron-collision-plasma", [](const AnyMap& node, const UnitStack& rate_units) {
74 return new ElectronCollisionPlasmaRate(node, rate_units);
75 });
76
77 // BlowersMaselRate evaluator
78 reg("Blowers-Masel", [](const AnyMap& node, const UnitStack& rate_units) {
79 return new BlowersMaselRate(node, rate_units);
80 });
81
82 // Lindemann falloff evaluator
83 reg("Lindemann", [](const AnyMap& node, const UnitStack& rate_units) {
84 return new LindemannRate(node, rate_units);
85 });
86 addAlias("Lindemann", "falloff");
87
88 // Troe falloff evaluator
89 reg("Troe", [](const AnyMap& node, const UnitStack& rate_units) {
90 return new TroeRate(node, rate_units);
91 });
92
93 // SRI falloff evaluator
94 reg("SRI", [](const AnyMap& node, const UnitStack& rate_units) {
95 return new SriRate(node, rate_units);
96 });
97
98 // Tsang falloff evaluator
99 reg("Tsang", [](const AnyMap& node, const UnitStack& rate_units) {
100 return new TsangRate(node, rate_units);
101 });
102
103 // PlogRate evaluator
104 reg("pressure-dependent-Arrhenius", [](const AnyMap& node, const UnitStack& rate_units) {
105 return new PlogRate(node, rate_units);
106 });
107
108 // LinearBurkeRate evaluator
109 reg("linear-Burke", [](const AnyMap& node, const UnitStack& rate_units) {
110 return new LinearBurkeRate(node, rate_units);
111 });
112
113 // ChebyshevRate evaluator
114 reg("Chebyshev", [](const AnyMap& node, const UnitStack& rate_units) {
115 return new ChebyshevRate(node, rate_units);
116 });
117
118 // CustomFunc1Rate evaluator
119 reg("custom-rate-function", [](const AnyMap& node, const UnitStack& rate_units) {
120 return new CustomFunc1Rate(node, rate_units);
121 });
122
123 // InterfaceArrheniusRate evaluator
124 reg("interface-Arrhenius", [](const AnyMap& node, const UnitStack& rate_units) {
125 return new InterfaceArrheniusRate(node, rate_units);
126 });
127
128 // StickingArrheniusRate evaluator
129 reg("sticking-Arrhenius", [](const AnyMap& node, const UnitStack& rate_units) {
130 return new StickingArrheniusRate(node, rate_units);
131 });
132
133 // InterfaceBlowersMaselRate evaluator
134 reg("interface-Blowers-Masel", [](const AnyMap& node, const UnitStack& rate_units) {
135 return new InterfaceBlowersMaselRate(node, rate_units);
136 });
137
138 // StickingBlowersMaselRate evaluator
139 reg("sticking-Blowers-Masel", [](const AnyMap& node, const UnitStack& rate_units) {
140 return new StickingBlowersMaselRate(node, rate_units);
141 });
142}
143
145 std::unique_lock<std::mutex> lock(rate_mutex);
146 if (!s_factory) {
148 }
149 return s_factory;
150}
151
153 std::unique_lock<std::mutex> lock(rate_mutex);
154 delete s_factory;
155 s_factory = 0;
156}
157
158shared_ptr<ReactionRate> newReactionRate(const string& type)
159{
160 return shared_ptr<ReactionRate> (
161 ReactionRateFactory::factory()->create(type, AnyMap(), UnitStack({})));
162}
163
164shared_ptr<ReactionRate> newReactionRate(
165 const AnyMap& rate_node, const UnitStack& rate_units)
166{
167 string type = ""; // default is to create Arrhenius from empty
168 if (rate_node.hasKey("type")) {
169 type = rate_node["type"].asString();
170 }
171
172 if (type == "falloff" || type == "chemically-activated") {
173 if (rate_node.hasKey("Troe")) {
174 type = "Troe";
175 } else if (rate_node.hasKey("SRI")) {
176 type = "SRI";
177 } else if (rate_node.hasKey("Tsang")) {
178 type = "Tsang";
179 } else {
180 type = "Lindemann";
181 }
182 }
183
184 if (!(ReactionRateFactory::factory()->exists(type))) {
185 throw InputFileError("ReactionRateFactory::newReactionRate", rate_node,
186 "Unknown reaction rate type '{}'", type);
187 }
188
189 return shared_ptr<ReactionRate> (
190 ReactionRateFactory::factory()->create(type, rate_node, rate_units));
191}
192
193shared_ptr<ReactionRate> newReactionRate(const AnyMap& rate_node)
194{
195 return newReactionRate(AnyMap(rate_node), UnitStack({}));
196}
197
198}
Header for reaction rates that involve Arrhenius-type kinetics.
Castela vibrational relaxation reaction rate.
Constant vibrational relaxation reaction rate.
Header for plasma reaction rates parameterized by electron collision cross section and electron energ...
Header for reaction rates that occur at interfaces.
Base class for kinetics managers and also contains the kineticsmgr module documentation (see Kinetics...
Multi-state-resolved vibrational relaxation reaction rate.
Factory class for reaction rate objects.
Starikovskiy vibrational relaxation reaction rate.
Header file for class ThermoPhase, the base class for phases with thermodynamic properties,...
Header for plasma reaction rates parameterized by two temperatures (gas and electron).
Header for vibrational relaxation reaction rates in plasma kinetics.
A map of string keys to values whose type can vary at runtime.
Definition AnyMap.h:431
bool hasKey(const string &key) const
Returns true if the map contains an item named key.
Definition AnyMap.cpp:1477
Arrhenius reaction rate type depends only on temperature.
Definition Arrhenius.h:170
Blowers Masel reaction rate type depends on the enthalpy of reaction.
Castela vibrational relaxation rate implementation.
Pressure-dependent rate expression where the rate coefficient is expressed as a bivariate Chebyshev p...
Constant vibrational relaxation rate implementation.
Custom reaction rate depending only on temperature.
Definition Custom.h:38
Electron collision plasma reaction rate type.
void reg(const string &name, function< ReactionRate *(Args...)> f)
Definition FactoryBase.h:80
void addAlias(const string &original, const string &alias)
Definition FactoryBase.h:85
Error thrown for problems processing information contained in an AnyMap or AnyValue.
Definition AnyMap.h:749
The Lindemann falloff parameterization.
Definition Falloff.h:249
Pressure-dependent and composition-dependent reaction rate calculated according to the reduced-pressu...
Multi-state-resolved vibrational relaxation rate implementation.
Pressure-dependent reaction rate expressed by logarithmically interpolating between Arrhenius rate ex...
Definition PlogRate.h:77
Factory class to construct reaction rate calculators.
static ReactionRateFactory * s_factory
Pointer to the single instance of the factory.
ReactionRateFactory()
default constructor, which is defined as private
void deleteFactory() override
Virtual abstract function that deletes the factory.
static std::mutex rate_mutex
Mutex for use when calling the factory.
static ReactionRateFactory * factory()
Return a pointer to the factory.
The SRI falloff function.
Definition Falloff.h:405
Starikovskiy vibrational relaxation rate implementation.
The 3- or 4-parameter Troe falloff parameterization.
Definition Falloff.h:311
The 1- or 2-parameter Tsang falloff parameterization.
Definition Falloff.h:499
Two temperature plasma reaction rate type depends on both gas temperature and electron temperature.
shared_ptr< ReactionRate > newReactionRate(const string &type)
Create a new empty ReactionRate object.
InterfaceRate< BlowersMaselRate, InterfaceData > InterfaceBlowersMaselRate
Blowers-Masel-type interface reaction rate specifications.
StickingRate< ArrheniusRate, InterfaceData > StickingArrheniusRate
Arrhenius-type interface sticking rate specifications.
StickingRate< BlowersMaselRate, InterfaceData > StickingBlowersMaselRate
Blowers-Masel-type interface sticking rate specifications.
InterfaceRate< ArrheniusRate, InterfaceData > InterfaceArrheniusRate
Arrhenius-type interface reaction rate specifications.
Namespace for the Cantera kernel.
Definition AnyMap.cpp:595
Unit aggregation utility.
Definition Units.h:105