[Kinetics] Move common Kinetics features up to the base class

This commit is contained in:
Ray Speth 2014-10-22 21:48:11 +00:00
parent e7236df51f
commit d65dbe3da2
8 changed files with 61 additions and 136 deletions

View file

@ -127,10 +127,6 @@ public:
return getValue(m_index, i).first; return getValue(m_index, i).first;
} }
virtual std::string reactionString(size_t i) const {
return m_rxneqn[i];
}
virtual bool isReversible(size_t i) { virtual bool isReversible(size_t i) {
if (std::find(m_revindex.begin(), m_revindex.end(), i) if (std::find(m_revindex.begin(), m_revindex.end(), i)
< m_revindex.end()) { < m_revindex.end()) {
@ -159,13 +155,6 @@ public:
void updateROP(); void updateROP();
const std::vector<grouplist_t>& reactantGroups(size_t i) {
return m_rgroups[i];
}
const std::vector<grouplist_t>& productGroups(size_t i) {
return m_pgroups[i];
}
/*! /*!
* Update temperature-dependent portions of reaction rates and * Update temperature-dependent portions of reaction rates and
* falloff functions. * falloff functions.
@ -214,8 +203,6 @@ protected:
vector_fp m_dn; vector_fp m_dn;
std::vector<size_t> m_revindex; std::vector<size_t> m_revindex;
std::vector<std::string> m_rxneqn;
vector_fp m_conc; vector_fp m_conc;
vector_fp m_grt; vector_fp m_grt;
@ -243,9 +230,6 @@ private:
void installReagents(const ReactionData& r); void installReagents(const ReactionData& r);
void installGroups(size_t irxn, const std::vector<grouplist_t>& r,
const std::vector<grouplist_t>& p);
/** /**
* Update the equilibrium constants in molar units. * Update the equilibrium constants in molar units.
*/ */

View file

@ -104,18 +104,6 @@ public:
return getValue(m_index, i).first; return getValue(m_index, i).first;
} }
virtual std::string reactionString(size_t i) const {
return m_rxneqn[i];
}
virtual std::string reactantString(size_t i) const {
return m_reactantStrings[i];
}
virtual std::string productString(size_t i) const {
return m_productStrings[i];
}
virtual bool isReversible(size_t i) { virtual bool isReversible(size_t i) {
if (std::find(m_revindex.begin(), m_revindex.end(), i) if (std::find(m_revindex.begin(), m_revindex.end(), i)
< m_revindex.end()) { < m_revindex.end()) {
@ -141,13 +129,6 @@ public:
void updateROP(); void updateROP();
const std::vector<grouplist_t>& reactantGroups(size_t i) {
return m_rgroups[i];
}
const std::vector<grouplist_t>& productGroups(size_t i) {
return m_pgroups[i];
}
//! Update temperature-dependent portions of reaction rates and falloff //! Update temperature-dependent portions of reaction rates and falloff
//! functions. //! functions.
virtual void update_rates_T(); virtual void update_rates_T();
@ -186,9 +167,6 @@ protected:
size_t m_nirrev; size_t m_nirrev;
size_t m_nrev; size_t m_nrev;
std::map<size_t, std::vector<grouplist_t> > m_rgroups;
std::map<size_t, std::vector<grouplist_t> > m_pgroups;
std::vector<int> m_rxntype; std::vector<int> m_rxntype;
std::vector<std::map<size_t, doublereal> > m_rrxn; std::vector<std::map<size_t, doublereal> > m_rrxn;
@ -203,10 +181,6 @@ protected:
vector_fp m_dn; vector_fp m_dn;
std::vector<size_t> m_revindex; std::vector<size_t> m_revindex;
std::vector<std::string> m_rxneqn;
std::vector<std::string> m_reactantStrings;
std::vector<std::string> m_productStrings;
//! @name Reaction rate data //! @name Reaction rate data
//!@{ //!@{
doublereal m_logp_ref; doublereal m_logp_ref;
@ -244,10 +218,7 @@ private:
void addPlogReaction(ReactionData& r); void addPlogReaction(ReactionData& r);
void addChebyshevReaction(ReactionData& r); void addChebyshevReaction(ReactionData& r);
void installReagents(const ReactionData& r); virtual void installReagents(const ReactionData& r);
void installGroups(size_t irxn, const std::vector<grouplist_t>& r,
const std::vector<grouplist_t>& p);
//! Update the equilibrium constants in molar units. //! Update the equilibrium constants in molar units.
void updateKc(); void updateKc();

View file

@ -219,10 +219,6 @@ public:
} }
} }
virtual std::string reactionString(size_t i) const {
return m_rxneqn[i];
}
virtual void getFwdRateConstants(doublereal* kfwd); virtual void getFwdRateConstants(doublereal* kfwd);
virtual void getRevRateConstants(doublereal* krev, virtual void getRevRateConstants(doublereal* krev,
bool doIrreversible = false); bool doIrreversible = false);
@ -531,13 +527,6 @@ public:
std::vector<RxnMolChange*> rmcVector; std::vector<RxnMolChange*> rmcVector;
protected: protected:
/*!
* Vector of strings of length m_ii, the number of
* reactions, containing the string expressions for each reaction
* (e.g., reactants <=> product1 + product2)
*/
std::vector<std::string> m_rxneqn;
//! Array of concentrations for each species in the kinetics mechanism //! Array of concentrations for each species in the kinetics mechanism
/*! /*!
* An array of generalized concentrations \f$ C_k \f$ that are defined * An array of generalized concentrations \f$ C_k \f$ that are defined

View file

@ -700,18 +700,18 @@ public:
* *
* @param i reaction index * @param i reaction index
*/ */
virtual std::string reactionString(size_t i) const { const std::string& reactionString(size_t i) const {
throw NotImplementedError("Kinetics::reactionStd::String"); return m_rxneqn[i];
} }
//! Returns a string containing the reactants side of the reaction equation. //! Returns a string containing the reactants side of the reaction equation.
virtual std::string reactantString(size_t i) const { const std::string& reactantString(size_t i) const {
throw NotImplementedError("Kinetics::reactionString"); return m_reactantStrings[i];
} }
//! Returns a string containing the products side of the reaction equation. //! Returns a string containing the products side of the reaction equation.
virtual std::string productString(size_t i) const { const std::string& productString(size_t i) const {
throw NotImplementedError("Kinetics::productString"); return m_productStrings[i];
} }
/** /**
@ -785,22 +785,29 @@ public:
virtual void finalize(); virtual void finalize();
/** /**
* Add a single reaction to the mechanism. This routine * Add a single reaction to the mechanism. This routine
* must be called after init() and before finalize(). * must be called after init() and before finalize(). Derived classes
* should call the base class method in addition to handling their
* own specialized behavior.
* *
* @param r Reference to the ReactionData object for the reaction * @param r Reference to the ReactionData object for the reaction
* to be added. * to be added.
*/ */
virtual void addReaction(ReactionData& r) { virtual void addReaction(ReactionData& r);
throw NotImplementedError("Kinetics::addReaction");
virtual void installReagents(const ReactionData& r) {
throw NotImplementedError("Kinetics::installReagents");
} }
virtual void installGroups(size_t irxn, const std::vector<grouplist_t>& r,
const std::vector<grouplist_t>& p);
virtual const std::vector<grouplist_t>& reactantGroups(size_t i) { virtual const std::vector<grouplist_t>& reactantGroups(size_t i) {
return m_dummygroups; return m_rgroups[i];
} }
virtual const std::vector<grouplist_t>& productGroups(size_t i) { virtual const std::vector<grouplist_t>& productGroups(size_t i) {
return m_dummygroups; return m_pgroups[i];
} }
//@} //@}
@ -949,9 +956,18 @@ protected:
//! number of spatial dimensions of lowest-dimensional phase. //! number of spatial dimensions of lowest-dimensional phase.
size_t m_mindim; size_t m_mindim;
//! Representation of each reaction equation
std::vector<std::string> m_rxneqn;
//! Representation of the reactant side of each reaction equation
std::vector<std::string> m_reactantStrings;
//! Representation of the product side of each reaction equation
std::vector<std::string> m_productStrings;
private: private:
//! Vector of group lists std::map<size_t, std::vector<grouplist_t> > m_rgroups;
std::vector<grouplist_t> m_dummygroups; std::map<size_t, std::vector<grouplist_t> > m_pgroups;
}; };
} }

View file

@ -63,14 +63,11 @@ AqueousKinetics& AqueousKinetics::operator=(const AqueousKinetics& right)
m_fwdOrder = right.m_fwdOrder; m_fwdOrder = right.m_fwdOrder;
m_nirrev = right.m_nirrev; m_nirrev = right.m_nirrev;
m_nrev = right.m_nrev; m_nrev = right.m_nrev;
m_rgroups = right.m_rgroups;
m_pgroups = right.m_pgroups;
m_rxntype = right.m_rxntype; m_rxntype = right.m_rxntype;
m_rrxn = right.m_rrxn; m_rrxn = right.m_rrxn;
m_prxn = right.m_prxn; m_prxn = right.m_prxn;
m_dn = right.m_dn; m_dn = right.m_dn;
m_revindex = right.m_revindex; m_revindex = right.m_revindex;
m_rxneqn = right.m_rxneqn;
m_ropf = right.m_ropf; m_ropf = right.m_ropf;
m_ropr = right.m_ropr; m_ropr = right.m_ropr;
@ -356,12 +353,7 @@ void AqueousKinetics::addReaction(ReactionData& r)
if (r.reactionType == ELEMENTARY_RXN) { if (r.reactionType == ELEMENTARY_RXN) {
addElementaryReaction(r); addElementaryReaction(r);
} }
Kinetics::addReaction(r);
// operations common to all reaction types
installReagents(r);
installGroups(reactionNumber(), r.rgroups, r.pgroups);
incrementRxnCount();
m_rxneqn.push_back(r.equation);
} }
void AqueousKinetics::addElementaryReaction(ReactionData& r) void AqueousKinetics::addElementaryReaction(ReactionData& r)
@ -442,17 +434,6 @@ void AqueousKinetics::installReagents(const ReactionData& r)
} }
} }
void AqueousKinetics::installGroups(size_t irxn,
const vector<grouplist_t>& r,
const vector<grouplist_t>& p)
{
if (!r.empty()) {
writelog("installing groups for reaction "+int2str(reactionNumber()));
m_rgroups[reactionNumber()] = r;
m_pgroups[reactionNumber()] = p;
}
}
void AqueousKinetics::init() void AqueousKinetics::init()
{ {
m_kk = thermo().nSpecies(); m_kk = thermo().nSpecies();

View file

@ -74,16 +74,11 @@ GasKinetics& GasKinetics::operator=(const GasKinetics& right)
m_fwdOrder = right.m_fwdOrder; m_fwdOrder = right.m_fwdOrder;
m_nirrev = right.m_nirrev; m_nirrev = right.m_nirrev;
m_nrev = right.m_nrev; m_nrev = right.m_nrev;
m_rgroups = right.m_rgroups;
m_pgroups = right.m_pgroups;
m_rxntype = right.m_rxntype; m_rxntype = right.m_rxntype;
m_rrxn = right.m_rrxn; m_rrxn = right.m_rrxn;
m_prxn = right.m_prxn; m_prxn = right.m_prxn;
m_dn = right.m_dn; m_dn = right.m_dn;
m_revindex = right.m_revindex; m_revindex = right.m_revindex;
m_rxneqn = right.m_rxneqn;
m_reactantStrings = right.m_reactantStrings;
m_productStrings = right.m_productStrings;
m_logp_ref = right.m_logp_ref; m_logp_ref = right.m_logp_ref;
m_logc_ref = right.m_logc_ref; m_logc_ref = right.m_logc_ref;
@ -498,12 +493,7 @@ void GasKinetics::addReaction(ReactionData& r)
} }
// operations common to all reaction types // operations common to all reaction types
installReagents(r); Kinetics::addReaction(r);
installGroups(reactionNumber(), r.rgroups, r.pgroups);
incrementRxnCount();
m_rxneqn.push_back(r.equation);
m_reactantStrings.push_back(r.reactantString);
m_productStrings.push_back(r.productString);
m_rxntype.push_back(r.reactionType); m_rxntype.push_back(r.reactionType);
} }
@ -657,16 +647,6 @@ void GasKinetics::installReagents(const ReactionData& r)
} }
} }
void GasKinetics::installGroups(size_t irxn,
const vector<grouplist_t>& r, const vector<grouplist_t>& p)
{
if (!r.empty()) {
writelog("installing groups for reaction "+int2str(reactionNumber()));
m_rgroups[reactionNumber()] = r;
m_pgroups[reactionNumber()] = p;
}
}
void GasKinetics::init() void GasKinetics::init()
{ {
m_kk = thermo().nSpecies(); m_kk = thermo().nSpecies();

View file

@ -129,7 +129,6 @@ InterfaceKinetics& InterfaceKinetics::operator=(const InterfaceKinetics& right)
m_rrxn = right.m_rrxn; m_rrxn = right.m_rrxn;
m_prxn = right.m_prxn; m_prxn = right.m_prxn;
reactionType_ = right.reactionType_; reactionType_ = right.reactionType_;
m_rxneqn = right.m_rxneqn;
m_conc = right.m_conc; m_conc = right.m_conc;
m_actConc = right.m_actConc; m_actConc = right.m_actConc;
m_mu0 = right.m_mu0; m_mu0 = right.m_mu0;
@ -888,25 +887,8 @@ void InterfaceKinetics::addReaction(ReactionData& r)
*/ */
addElementaryReaction(r); addElementaryReaction(r);
} }
/*
* Add the reactants and products for m_ropnet;the current reaction
* to the various stoichiometric coefficient arrays.
*/
installReagents(r);
/*
* Save the reaction and product groups, which are
* part of the ReactionData class, in this class.
* They aren't used for anything but reaction path
* analysis.
*/
//installGroups(reactionNumber(), r.rgroups, r.pgroups);
/*
* Increase the internal number of reactions, m_ii, by one.
* increase the size of m_perturb by one as well.
*/
incrementRxnCount();
m_rxneqn.push_back(r.equation); Kinetics::addReaction(r);
m_rxnPhaseIsReactant.push_back(std::vector<bool>(nPhases(), false)); m_rxnPhaseIsReactant.push_back(std::vector<bool>(nPhases(), false));
m_rxnPhaseIsProduct.push_back(std::vector<bool>(nPhases(), false)); m_rxnPhaseIsProduct.push_back(std::vector<bool>(nPhases(), false));

View file

@ -8,6 +8,7 @@
// Copyright 2001-2004 California Institute of Technology // Copyright 2001-2004 California Institute of Technology
#include "cantera/kinetics/Kinetics.h" #include "cantera/kinetics/Kinetics.h"
#include "cantera/kinetics/ReactionData.h"
#include "cantera/base/stringUtils.h" #include "cantera/base/stringUtils.h"
using namespace std; using namespace std;
@ -25,8 +26,7 @@ Kinetics::Kinetics() :
m_phaseindex(), m_phaseindex(),
m_surfphase(npos), m_surfphase(npos),
m_rxnphase(npos), m_rxnphase(npos),
m_mindim(4), m_mindim(4)
m_dummygroups(0)
{ {
} }
@ -43,8 +43,7 @@ Kinetics::Kinetics(const Kinetics& right) :
m_phaseindex(), m_phaseindex(),
m_surfphase(npos), m_surfphase(npos),
m_rxnphase(npos), m_rxnphase(npos),
m_mindim(4), m_mindim(4)
m_dummygroups(0)
{ {
/* /*
* Call the assignment operator * Call the assignment operator
@ -74,7 +73,11 @@ Kinetics& Kinetics::operator=(const Kinetics& right)
m_surfphase = right.m_surfphase; m_surfphase = right.m_surfphase;
m_rxnphase = right.m_rxnphase; m_rxnphase = right.m_rxnphase;
m_mindim = right.m_mindim; m_mindim = right.m_mindim;
m_dummygroups = right.m_dummygroups; m_rxneqn = right.m_rxneqn;
m_reactantStrings = right.m_reactantStrings;
m_productStrings = right.m_productStrings;
m_rgroups = right.m_rgroups;
m_pgroups = right.m_pgroups;
return *this; return *this;
} }
@ -289,4 +292,23 @@ void Kinetics::finalize()
} }
} }
void Kinetics::addReaction(ReactionData& r) {
installReagents(r);
installGroups(nReactions(), r.rgroups, r.pgroups);
incrementRxnCount();
m_rxneqn.push_back(r.equation);
m_reactantStrings.push_back(r.reactantString);
m_productStrings.push_back(r.productString);
}
void Kinetics::installGroups(size_t irxn, const vector<grouplist_t>& r,
const vector<grouplist_t>& p)
{
if (!r.empty()) {
writelog("installing groups for reaction "+int2str(irxn));
m_rgroups[irxn] = r;
m_pgroups[irxn] = p;
}
}
} }