Skip to content

Commit

Permalink
[Kinetics] Define TwoTempPlasmaRate as BulkRate
Browse files Browse the repository at this point in the history
  • Loading branch information
ischoegl committed Feb 7, 2022
1 parent 7a68a11 commit 3441bc2
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 64 deletions.
64 changes: 23 additions & 41 deletions include/cantera/kinetics/Arrhenius.h
Original file line number Diff line number Diff line change
Expand Up @@ -210,12 +210,13 @@ class Arrhenius3 : public ArrheniusBase
* Kinetic scheme of the non-equilibrium discharge in nitrogen-oxygen mixtures.
* Plasma Sources Science and Technology, 1(3), 207.
* doi: 10.1088/0963-0252/1/3/011
*
* @ingroup arrheniusGroup
*/
class TwoTempPlasmaRate final : public ArrheniusBase, public ReactionRate
class TwoTempPlasma : public ArrheniusBase
{
public:
TwoTempPlasmaRate();
TwoTempPlasma();

//! Constructor.
/*!
Expand All @@ -225,55 +226,34 @@ class TwoTempPlasmaRate final : public ArrheniusBase, public ReactionRate
* @param Ea Activation energy in energy units [J/kmol]
* @param EE Activation electron energy in energy units [J/kmol]
*/
TwoTempPlasmaRate(double A, double b, double Ea=0.0, double EE=0.0);

unique_ptr<MultiRateBase> newMultiRate() const override {
return unique_ptr<MultiRateBase>(
new MultiRate<TwoTempPlasmaRate, TwoTempPlasmaData>);
}
TwoTempPlasma(double A, double b, double Ea=0.0, double EE=0.0);

//! Constructor based on AnyMap content
TwoTempPlasmaRate(const AnyMap& node, const UnitStack& rate_units={})
: TwoTempPlasmaRate()
{
setParameters(node, rate_units);
}

//! Identifier of reaction rate type
virtual const std::string type() const override {
const std::string rateType() const {
return "two-temperature-plasma";
}

//! Perform object setup based on AnyMap node information
/*!
* @param node AnyMap containing rate information
* @param rate_units Unit definitions specific to rate information
*/
virtual void setParameters(const AnyMap& node, const UnitStack& rate_units) override;

virtual void getParameters(AnyMap& node) const override;

void check(const std::string& equation, const AnyMap& node) override {
checkRate(equation, node);
//! Context (unused)
void setRateContext(const Reaction& rxn, const Kinetics& kin) {
}

//! Evaluate reaction rate
/*!
* @param shared_data data shared by all reactions of a given type
*/
double evalFromStruct(const TwoTempPlasmaData& shared_data) {
//! @internal Non-virtual method that should not be overloaded
double evalRate(const TwoTempPlasmaData& shared_data) const {
// m_E4_R is the electron activation (in temperature units)
return m_A * std::exp(m_b * shared_data.logTe -
m_Ea_R * shared_data.recipT +
m_E4_R * (shared_data.electronTemp - shared_data.temperature)
* shared_data.recipTe * shared_data.recipT);
}

//! Return the activation energy divided by the gas constant (i.e. the
//! activation temperature) [K]
double activationEnergy_R() const {
return m_Ea_R;
}
//! Evaluate derivative of reaction rate with respect to temperature
//! divided by reaction rate
/*!
* This method does not consider changes of electron temperature.
* A corresponding warning is raised.
* @internal Non-virtual method that should not be overloaded
*/
double ddTScaled(const TwoTempPlasmaData& shared_data) const;

//! Return the electron activation energy *Ea* [J/kmol]
double activationElectronEnergy() const {
Expand Down Expand Up @@ -338,6 +318,7 @@ class BlowersMasel : public ArrheniusBase
return "Blowers-Masel";
}

//! Set context
void setRateContext(const Reaction& rxn, const Kinetics& kin);

//! Update information specific to reaction
Expand Down Expand Up @@ -456,20 +437,20 @@ class BulkRate final : public RateType, public ReactionRate
}

void check(const std::string& equation, const AnyMap& node) override {
checkRate(equation, node);
RateType::checkRate(equation, node);
}

virtual void setContext(const Reaction& rxn, const Kinetics& kin) override {
// as this method is virtual, it cannot be templated
setRateContext(rxn, kin);
RateType::setRateContext(rxn, kin);
}

//! Evaluate reaction rate
/*!
* @param shared_data data shared by all reactions of a given type
*/
double evalFromStruct(const DataType& shared_data) const {
return evalRate(shared_data);
return RateType::evalRate(shared_data);
}

//! Evaluate derivative of reaction rate with respect to temperature
Expand All @@ -478,11 +459,12 @@ class BulkRate final : public RateType, public ReactionRate
* @param shared_data data shared by all reactions of a given type
*/
double ddTScaledFromStruct(const DataType& shared_data) const {
return ddTScaled(shared_data);
return RateType::ddTScaled(shared_data);
}
};

typedef BulkRate<Arrhenius3, ArrheniusData> ArrheniusRate;
typedef BulkRate<TwoTempPlasma, TwoTempPlasmaData> TwoTempPlasmaRate;
typedef BulkRate<BlowersMasel, BlowersMaselData> BlowersMaselRate;

}
Expand Down
29 changes: 6 additions & 23 deletions src/kinetics/Arrhenius.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,43 +126,26 @@ void ArrheniusBase::checkRate(const std::string& equation, const AnyMap& node)
}
}

TwoTempPlasmaRate::TwoTempPlasmaRate()
TwoTempPlasma::TwoTempPlasma()
: ArrheniusBase()
{
m_Ea_str = "Ea-gas";
m_E4_str = "Ea-electron";
}

TwoTempPlasmaRate::TwoTempPlasmaRate(double A, double b, double Ea, double EE)
TwoTempPlasma::TwoTempPlasma(double A, double b, double Ea, double EE)
: ArrheniusBase(A, b, Ea)
{
m_Ea_str = "Ea-gas";
m_E4_str = "Ea-electron";
m_E4_R = EE / GasConstant;
}

void TwoTempPlasmaRate::setParameters(const AnyMap& node, const UnitStack& rate_units)
double TwoTempPlasma::ddTScaled(const TwoTempPlasmaData& shared_data) const
{
m_negativeA_ok = node.getBool("negative-A", false);
if (!node.hasKey("rate-constant")) {
setRateParameters(AnyValue(), node.units(), rate_units);
return;
}
setRateParameters(node["rate-constant"], node.units(), rate_units);
}

void TwoTempPlasmaRate::getParameters(AnyMap& rateNode) const
{
if (m_negativeA_ok) {
rateNode["negative-A"] = true;
}
AnyMap node;
ArrheniusBase::getRateParameters(node);
if (!node.empty()) {
// object is configured
rateNode["rate-constant"] = std::move(node);
}
rateNode["type"] = type();
warn_user("TwoTempPlasma::ddTScaled",
"Temperature derivative does not consider changes of electron temperature.");
return (m_Ea_R - m_E4_R) * shared_data.recipT * shared_data.recipT;
}

BlowersMasel::BlowersMasel()
Expand Down

0 comments on commit 3441bc2

Please sign in to comment.