From d65dbe3da25ed89aea9c3cc2830ecb4cf95b451e Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 22 Oct 2014 21:48:11 +0000 Subject: [PATCH] [Kinetics] Move common Kinetics features up to the base class --- include/cantera/kinetics/AqueousKinetics.h | 16 ------- include/cantera/kinetics/GasKinetics.h | 31 +------------- include/cantera/kinetics/InterfaceKinetics.h | 11 ----- include/cantera/kinetics/Kinetics.h | 44 +++++++++++++------- src/kinetics/AqueousKinetics.cpp | 21 +--------- src/kinetics/GasKinetics.cpp | 22 +--------- src/kinetics/InterfaceKinetics.cpp | 20 +-------- src/kinetics/Kinetics.cpp | 32 +++++++++++--- 8 files changed, 61 insertions(+), 136 deletions(-) diff --git a/include/cantera/kinetics/AqueousKinetics.h b/include/cantera/kinetics/AqueousKinetics.h index 95889db31..1cfe43c60 100644 --- a/include/cantera/kinetics/AqueousKinetics.h +++ b/include/cantera/kinetics/AqueousKinetics.h @@ -127,10 +127,6 @@ public: return getValue(m_index, i).first; } - virtual std::string reactionString(size_t i) const { - return m_rxneqn[i]; - } - virtual bool isReversible(size_t i) { if (std::find(m_revindex.begin(), m_revindex.end(), i) < m_revindex.end()) { @@ -159,13 +155,6 @@ public: void updateROP(); - const std::vector& reactantGroups(size_t i) { - return m_rgroups[i]; - } - const std::vector& productGroups(size_t i) { - return m_pgroups[i]; - } - /*! * Update temperature-dependent portions of reaction rates and * falloff functions. @@ -214,8 +203,6 @@ protected: vector_fp m_dn; std::vector m_revindex; - std::vector m_rxneqn; - vector_fp m_conc; vector_fp m_grt; @@ -243,9 +230,6 @@ private: void installReagents(const ReactionData& r); - void installGroups(size_t irxn, const std::vector& r, - const std::vector& p); - /** * Update the equilibrium constants in molar units. */ diff --git a/include/cantera/kinetics/GasKinetics.h b/include/cantera/kinetics/GasKinetics.h index b24b6a4d0..cec3092ea 100644 --- a/include/cantera/kinetics/GasKinetics.h +++ b/include/cantera/kinetics/GasKinetics.h @@ -104,18 +104,6 @@ public: 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) { if (std::find(m_revindex.begin(), m_revindex.end(), i) < m_revindex.end()) { @@ -141,13 +129,6 @@ public: void updateROP(); - const std::vector& reactantGroups(size_t i) { - return m_rgroups[i]; - } - const std::vector& productGroups(size_t i) { - return m_pgroups[i]; - } - //! Update temperature-dependent portions of reaction rates and falloff //! functions. virtual void update_rates_T(); @@ -186,9 +167,6 @@ protected: size_t m_nirrev; size_t m_nrev; - std::map > m_rgroups; - std::map > m_pgroups; - std::vector m_rxntype; std::vector > m_rrxn; @@ -203,10 +181,6 @@ protected: vector_fp m_dn; std::vector m_revindex; - std::vector m_rxneqn; - std::vector m_reactantStrings; - std::vector m_productStrings; - //! @name Reaction rate data //!@{ doublereal m_logp_ref; @@ -244,10 +218,7 @@ private: void addPlogReaction(ReactionData& r); void addChebyshevReaction(ReactionData& r); - void installReagents(const ReactionData& r); - - void installGroups(size_t irxn, const std::vector& r, - const std::vector& p); + virtual void installReagents(const ReactionData& r); //! Update the equilibrium constants in molar units. void updateKc(); diff --git a/include/cantera/kinetics/InterfaceKinetics.h b/include/cantera/kinetics/InterfaceKinetics.h index 1cb4b1c03..64572d1e8 100644 --- a/include/cantera/kinetics/InterfaceKinetics.h +++ b/include/cantera/kinetics/InterfaceKinetics.h @@ -219,10 +219,6 @@ public: } } - virtual std::string reactionString(size_t i) const { - return m_rxneqn[i]; - } - virtual void getFwdRateConstants(doublereal* kfwd); virtual void getRevRateConstants(doublereal* krev, bool doIrreversible = false); @@ -531,13 +527,6 @@ public: std::vector rmcVector; 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 m_rxneqn; - //! Array of concentrations for each species in the kinetics mechanism /*! * An array of generalized concentrations \f$ C_k \f$ that are defined diff --git a/include/cantera/kinetics/Kinetics.h b/include/cantera/kinetics/Kinetics.h index 13a1a78b7..c6a60e81f 100644 --- a/include/cantera/kinetics/Kinetics.h +++ b/include/cantera/kinetics/Kinetics.h @@ -700,18 +700,18 @@ public: * * @param i reaction index */ - virtual std::string reactionString(size_t i) const { - throw NotImplementedError("Kinetics::reactionStd::String"); + const std::string& reactionString(size_t i) const { + return m_rxneqn[i]; } //! Returns a string containing the reactants side of the reaction equation. - virtual std::string reactantString(size_t i) const { - throw NotImplementedError("Kinetics::reactionString"); + const std::string& reactantString(size_t i) const { + return m_reactantStrings[i]; } //! Returns a string containing the products side of the reaction equation. - virtual std::string productString(size_t i) const { - throw NotImplementedError("Kinetics::productString"); + const std::string& productString(size_t i) const { + return m_productStrings[i]; } /** @@ -785,22 +785,29 @@ public: virtual void finalize(); /** - * Add a single reaction to the mechanism. This routine - * must be called after init() and before finalize(). + * Add a single reaction to the mechanism. This routine + * 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 * to be added. */ - virtual void addReaction(ReactionData& r) { - throw NotImplementedError("Kinetics::addReaction"); + virtual void addReaction(ReactionData& r); + + virtual void installReagents(const ReactionData& r) { + throw NotImplementedError("Kinetics::installReagents"); } + virtual void installGroups(size_t irxn, const std::vector& r, + const std::vector& p); + virtual const std::vector& reactantGroups(size_t i) { - return m_dummygroups; + return m_rgroups[i]; } virtual const std::vector& productGroups(size_t i) { - return m_dummygroups; + return m_pgroups[i]; } //@} @@ -949,9 +956,18 @@ protected: //! number of spatial dimensions of lowest-dimensional phase. size_t m_mindim; + //! Representation of each reaction equation + std::vector m_rxneqn; + + //! Representation of the reactant side of each reaction equation + std::vector m_reactantStrings; + + //! Representation of the product side of each reaction equation + std::vector m_productStrings; + private: - //! Vector of group lists - std::vector m_dummygroups; + std::map > m_rgroups; + std::map > m_pgroups; }; } diff --git a/src/kinetics/AqueousKinetics.cpp b/src/kinetics/AqueousKinetics.cpp index e22acbe43..ab8a96cd3 100644 --- a/src/kinetics/AqueousKinetics.cpp +++ b/src/kinetics/AqueousKinetics.cpp @@ -63,14 +63,11 @@ AqueousKinetics& AqueousKinetics::operator=(const AqueousKinetics& right) m_fwdOrder = right.m_fwdOrder; m_nirrev = right.m_nirrev; m_nrev = right.m_nrev; - m_rgroups = right.m_rgroups; - m_pgroups = right.m_pgroups; m_rxntype = right.m_rxntype; m_rrxn = right.m_rrxn; m_prxn = right.m_prxn; m_dn = right.m_dn; m_revindex = right.m_revindex; - m_rxneqn = right.m_rxneqn; m_ropf = right.m_ropf; m_ropr = right.m_ropr; @@ -356,12 +353,7 @@ void AqueousKinetics::addReaction(ReactionData& r) if (r.reactionType == ELEMENTARY_RXN) { addElementaryReaction(r); } - - // operations common to all reaction types - installReagents(r); - installGroups(reactionNumber(), r.rgroups, r.pgroups); - incrementRxnCount(); - m_rxneqn.push_back(r.equation); + Kinetics::addReaction(r); } void AqueousKinetics::addElementaryReaction(ReactionData& r) @@ -442,17 +434,6 @@ void AqueousKinetics::installReagents(const ReactionData& r) } } -void AqueousKinetics::installGroups(size_t irxn, - const vector& r, - const vector& p) -{ - if (!r.empty()) { - writelog("installing groups for reaction "+int2str(reactionNumber())); - m_rgroups[reactionNumber()] = r; - m_pgroups[reactionNumber()] = p; - } -} - void AqueousKinetics::init() { m_kk = thermo().nSpecies(); diff --git a/src/kinetics/GasKinetics.cpp b/src/kinetics/GasKinetics.cpp index 71438156b..c5356c890 100644 --- a/src/kinetics/GasKinetics.cpp +++ b/src/kinetics/GasKinetics.cpp @@ -74,16 +74,11 @@ GasKinetics& GasKinetics::operator=(const GasKinetics& right) m_fwdOrder = right.m_fwdOrder; m_nirrev = right.m_nirrev; m_nrev = right.m_nrev; - m_rgroups = right.m_rgroups; - m_pgroups = right.m_pgroups; m_rxntype = right.m_rxntype; m_rrxn = right.m_rrxn; m_prxn = right.m_prxn; m_dn = right.m_dn; 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_logc_ref = right.m_logc_ref; @@ -498,12 +493,7 @@ void GasKinetics::addReaction(ReactionData& r) } // operations common to all reaction types - installReagents(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); + Kinetics::addReaction(r); m_rxntype.push_back(r.reactionType); } @@ -657,16 +647,6 @@ void GasKinetics::installReagents(const ReactionData& r) } } -void GasKinetics::installGroups(size_t irxn, - const vector& r, const vector& p) -{ - if (!r.empty()) { - writelog("installing groups for reaction "+int2str(reactionNumber())); - m_rgroups[reactionNumber()] = r; - m_pgroups[reactionNumber()] = p; - } -} - void GasKinetics::init() { m_kk = thermo().nSpecies(); diff --git a/src/kinetics/InterfaceKinetics.cpp b/src/kinetics/InterfaceKinetics.cpp index 53256fcc2..ed636dd32 100644 --- a/src/kinetics/InterfaceKinetics.cpp +++ b/src/kinetics/InterfaceKinetics.cpp @@ -129,7 +129,6 @@ InterfaceKinetics& InterfaceKinetics::operator=(const InterfaceKinetics& right) m_rrxn = right.m_rrxn; m_prxn = right.m_prxn; reactionType_ = right.reactionType_; - m_rxneqn = right.m_rxneqn; m_conc = right.m_conc; m_actConc = right.m_actConc; m_mu0 = right.m_mu0; @@ -888,25 +887,8 @@ void InterfaceKinetics::addReaction(ReactionData& 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(nPhases(), false)); m_rxnPhaseIsProduct.push_back(std::vector(nPhases(), false)); diff --git a/src/kinetics/Kinetics.cpp b/src/kinetics/Kinetics.cpp index 7d6b6e556..0cf55b07d 100644 --- a/src/kinetics/Kinetics.cpp +++ b/src/kinetics/Kinetics.cpp @@ -8,6 +8,7 @@ // Copyright 2001-2004 California Institute of Technology #include "cantera/kinetics/Kinetics.h" +#include "cantera/kinetics/ReactionData.h" #include "cantera/base/stringUtils.h" using namespace std; @@ -25,8 +26,7 @@ Kinetics::Kinetics() : m_phaseindex(), m_surfphase(npos), m_rxnphase(npos), - m_mindim(4), - m_dummygroups(0) + m_mindim(4) { } @@ -43,8 +43,7 @@ Kinetics::Kinetics(const Kinetics& right) : m_phaseindex(), m_surfphase(npos), m_rxnphase(npos), - m_mindim(4), - m_dummygroups(0) + m_mindim(4) { /* * Call the assignment operator @@ -74,7 +73,11 @@ Kinetics& Kinetics::operator=(const Kinetics& right) m_surfphase = right.m_surfphase; m_rxnphase = right.m_rxnphase; 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; } @@ -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& r, + const vector& p) +{ + if (!r.empty()) { + writelog("installing groups for reaction "+int2str(irxn)); + m_rgroups[irxn] = r; + m_pgroups[irxn] = p; + } +} + }