[Kinetics] Fix 'skip_undeclared_species' behavior
This commit is contained in:
parent
982846acf7
commit
14b2e8f5cf
10 changed files with 53 additions and 35 deletions
|
|
@ -56,7 +56,7 @@ public:
|
|||
void updateKc();
|
||||
|
||||
virtual void addReaction(ReactionData& r);
|
||||
virtual void addReaction(shared_ptr<Reaction> r);
|
||||
virtual bool addReaction(shared_ptr<Reaction> r);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public:
|
|||
bool doIrreversible = false);
|
||||
|
||||
virtual void addReaction(ReactionData& r);
|
||||
virtual void addReaction(shared_ptr<Reaction> r);
|
||||
virtual bool addReaction(shared_ptr<Reaction> r);
|
||||
virtual void init();
|
||||
virtual void finalize();
|
||||
virtual bool ready() const;
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public:
|
|||
//! @{
|
||||
virtual void init();
|
||||
virtual void addReaction(ReactionData& r);
|
||||
virtual void addReaction(shared_ptr<Reaction> r);
|
||||
virtual bool addReaction(shared_ptr<Reaction> r);
|
||||
virtual void finalize();
|
||||
virtual bool ready() const;
|
||||
//@}
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ public:
|
|||
|
||||
virtual void init();
|
||||
virtual void addReaction(ReactionData& r);
|
||||
virtual void addReaction(shared_ptr<Reaction> r);
|
||||
virtual bool addReaction(shared_ptr<Reaction> r);
|
||||
virtual void finalize();
|
||||
virtual bool ready() const;
|
||||
//! @}
|
||||
|
|
|
|||
|
|
@ -803,8 +803,9 @@ public:
|
|||
* base class method in addition to handling their own specialized behavior.
|
||||
*
|
||||
* @param r Pointer to the Reaction object to be added.
|
||||
* @return `true` if the reaction is added or `false` if it was skipped
|
||||
*/
|
||||
virtual void addReaction(shared_ptr<Reaction> r);
|
||||
virtual bool addReaction(shared_ptr<Reaction> r);
|
||||
|
||||
/**
|
||||
* Return the Reaction object for reaction *i*.
|
||||
|
|
|
|||
|
|
@ -157,16 +157,19 @@ void AqueousKinetics::addReaction(ReactionData& r)
|
|||
BulkKinetics::addReaction(r);
|
||||
}
|
||||
|
||||
void AqueousKinetics::addReaction(shared_ptr<Reaction> r)
|
||||
bool AqueousKinetics::addReaction(shared_ptr<Reaction> r)
|
||||
{
|
||||
bool added = BulkKinetics::addReaction(r);
|
||||
if (!added) {
|
||||
return false;
|
||||
}
|
||||
if (r->reaction_type == ELEMENTARY_RXN) {
|
||||
addElementaryReaction(dynamic_cast<ElementaryReaction&>(*r));
|
||||
} else {
|
||||
throw CanteraError("AqueousKinetics::addReaction",
|
||||
"Invalid reaction type: " + int2str(r->reaction_type));
|
||||
}
|
||||
|
||||
BulkKinetics::addReaction(r);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ void BulkKinetics::getRevRateConstants(doublereal* krev, bool doIrreversible)
|
|||
|
||||
void BulkKinetics::addReaction(ReactionData& r)
|
||||
{
|
||||
Kinetics::addReaction(r);
|
||||
m_dn.push_back(accumulate(r.pstoich.begin(), r.pstoich.end(), 0.0) -
|
||||
accumulate(r.rstoich.begin(), r.rstoich.end(), 0.0));
|
||||
|
||||
|
|
@ -125,11 +126,14 @@ void BulkKinetics::addReaction(ReactionData& r)
|
|||
} else {
|
||||
m_irrev.push_back(nReactions());
|
||||
}
|
||||
Kinetics::addReaction(r);
|
||||
}
|
||||
|
||||
void BulkKinetics::addReaction(shared_ptr<Reaction> r)
|
||||
bool BulkKinetics::addReaction(shared_ptr<Reaction> r)
|
||||
{
|
||||
bool added = Kinetics::addReaction(r);
|
||||
if (!added) {
|
||||
return false;
|
||||
}
|
||||
double dn = 0.0;
|
||||
for (Composition::const_iterator iter = r->products.begin();
|
||||
iter != r->products.end();
|
||||
|
|
@ -145,11 +149,11 @@ void BulkKinetics::addReaction(shared_ptr<Reaction> r)
|
|||
m_dn.push_back(dn);
|
||||
|
||||
if (r->reversible) {
|
||||
m_revindex.push_back(nReactions());
|
||||
m_revindex.push_back(nReactions()-1);
|
||||
} else {
|
||||
m_irrev.push_back(nReactions());
|
||||
m_irrev.push_back(nReactions()-1);
|
||||
}
|
||||
Kinetics::addReaction(r);
|
||||
return true;
|
||||
}
|
||||
|
||||
void BulkKinetics::addElementaryReaction(ReactionData& r)
|
||||
|
|
@ -159,7 +163,7 @@ void BulkKinetics::addElementaryReaction(ReactionData& r)
|
|||
|
||||
void BulkKinetics::addElementaryReaction(ElementaryReaction& r)
|
||||
{
|
||||
m_rates.install(nReactions(), r.rate);
|
||||
m_rates.install(nReactions()-1, r.rate);
|
||||
}
|
||||
|
||||
void BulkKinetics::init()
|
||||
|
|
|
|||
|
|
@ -267,8 +267,14 @@ void GasKinetics::addReaction(ReactionData& r)
|
|||
BulkKinetics::addReaction(r);
|
||||
}
|
||||
|
||||
void GasKinetics::addReaction(shared_ptr<Reaction> r)
|
||||
bool GasKinetics::addReaction(shared_ptr<Reaction> r)
|
||||
{
|
||||
// operations common to all reaction types
|
||||
bool added = BulkKinetics::addReaction(r);
|
||||
if (!added) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (r->reaction_type) {
|
||||
case ELEMENTARY_RXN:
|
||||
addElementaryReaction(dynamic_cast<ElementaryReaction&>(*r));
|
||||
|
|
@ -290,9 +296,7 @@ void GasKinetics::addReaction(shared_ptr<Reaction> r)
|
|||
throw CanteraError("GasKinetics::addReaction",
|
||||
"Unknown reaction type specified: " + int2str(r->reaction_type));
|
||||
}
|
||||
|
||||
// operations common to all reaction types
|
||||
BulkKinetics::addReaction(r);
|
||||
return true;
|
||||
}
|
||||
|
||||
void GasKinetics::addFalloffReaction(ReactionData& r)
|
||||
|
|
@ -348,7 +352,7 @@ void GasKinetics::addFalloffReaction(FalloffReaction& r)
|
|||
m_rfn_low.push_back(0.0);
|
||||
|
||||
// add this reaction number to the list of falloff reactions
|
||||
m_fallindx.push_back(nReactions());
|
||||
m_fallindx.push_back(nReactions()-1);
|
||||
|
||||
// install the enhanced third-body concentration calculator
|
||||
map<size_t, double> efficiencies;
|
||||
|
|
@ -369,7 +373,7 @@ void GasKinetics::addFalloffReaction(FalloffReaction& r)
|
|||
|
||||
void GasKinetics::addThreeBodyReaction(ThirdBodyReaction& r)
|
||||
{
|
||||
m_rates.install(nReactions(), r.rate);
|
||||
m_rates.install(nReactions()-1, r.rate);
|
||||
map<size_t, double> efficiencies;
|
||||
for (Composition::const_iterator iter = r.third_body.efficiencies.begin();
|
||||
iter != r.third_body.efficiencies.end();
|
||||
|
|
@ -383,18 +387,18 @@ void GasKinetics::addThreeBodyReaction(ThirdBodyReaction& r)
|
|||
"' while adding reaction '" + r.equation() + "'");
|
||||
}
|
||||
}
|
||||
m_3b_concm.install(nReactions(), efficiencies,
|
||||
m_3b_concm.install(nReactions()-1, efficiencies,
|
||||
r.third_body.default_efficiency);
|
||||
}
|
||||
|
||||
void GasKinetics::addPlogReaction(PlogReaction& r)
|
||||
{
|
||||
m_plog_rates.install(nReactions(), r.rate);
|
||||
m_plog_rates.install(nReactions()-1, r.rate);
|
||||
}
|
||||
|
||||
void GasKinetics::addChebyshevReaction(ChebyshevReaction& r)
|
||||
{
|
||||
m_cheb_rates.install(nReactions(), r.rate);
|
||||
m_cheb_rates.install(nReactions()-1, r.rate);
|
||||
}
|
||||
|
||||
void GasKinetics::init()
|
||||
|
|
|
|||
|
|
@ -894,8 +894,14 @@ void InterfaceKinetics::addReaction(ReactionData& r)
|
|||
}
|
||||
}
|
||||
|
||||
void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
||||
bool InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
||||
{
|
||||
size_t i = nReactions();
|
||||
bool added = Kinetics::addReaction(r_base);
|
||||
if (!added) {
|
||||
return false;
|
||||
}
|
||||
|
||||
InterfaceReaction& r = dynamic_cast<InterfaceReaction&>(*r_base);
|
||||
// Create a SurfaceArrhenius rate calculator and set the coverage dependencies
|
||||
double A_rate = r.rate.preExponentialFactor();
|
||||
|
|
@ -966,7 +972,7 @@ void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
|||
}
|
||||
}
|
||||
}
|
||||
m_sticking_orders.push_back(make_pair(m_ii, surface_order));
|
||||
m_sticking_orders.push_back(make_pair(i, surface_order));
|
||||
}
|
||||
SurfaceArrhenius rate(A_rate, b_rate, r.rate.activationEnergy_R());
|
||||
|
||||
|
|
@ -982,7 +988,7 @@ void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
|||
rate.addCoverageDependence(k, iter->second.a, iter->second.m, iter->second.E);
|
||||
}
|
||||
|
||||
m_rates.install(m_ii, rate);
|
||||
m_rates.install(i, rate);
|
||||
|
||||
// Store activation energy
|
||||
m_E.push_back(rate.activationEnergy_R());
|
||||
|
|
@ -991,7 +997,7 @@ void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
|||
if (re) {
|
||||
m_has_electrochem_rxns = true;
|
||||
m_beta.push_back(re->beta);
|
||||
m_ctrxn.push_back(m_ii);
|
||||
m_ctrxn.push_back(i);
|
||||
if (re->exchange_current_density_formulation) {
|
||||
m_has_exchange_current_density_formulation = true;
|
||||
m_ctrxn_ecdf.push_back(1);
|
||||
|
|
@ -1032,7 +1038,7 @@ void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
|||
determineFwdOrdersBV(*re, fwdFullorders);
|
||||
RxnOrders* ro = new RxnOrders();
|
||||
ro->fill(fwdFullorders);
|
||||
m_ctrxn_FwdOrdersList_[m_ii] = ro;
|
||||
m_ctrxn_FwdOrdersList_[i] = ro;
|
||||
}
|
||||
} else {
|
||||
m_ctrxn_ROPOrdersList_.push_back(0);
|
||||
|
|
@ -1051,18 +1057,16 @@ void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
|||
}
|
||||
|
||||
if (r.reversible) {
|
||||
m_revindex.push_back(nReactions());
|
||||
m_revindex.push_back(i);
|
||||
m_nrev++;
|
||||
} else {
|
||||
m_irrev.push_back(nReactions());
|
||||
m_irrev.push_back(i);
|
||||
m_nirrev++;
|
||||
}
|
||||
Kinetics::addReaction(r_base);
|
||||
|
||||
m_rxnPhaseIsReactant.push_back(std::vector<bool>(nPhases(), false));
|
||||
m_rxnPhaseIsProduct.push_back(std::vector<bool>(nPhases(), false));
|
||||
|
||||
size_t i = m_ii - 1;
|
||||
for (Composition::const_iterator iter = r.reactants.begin();
|
||||
iter != r.reactants.end();
|
||||
++iter) {
|
||||
|
|
@ -1077,6 +1081,7 @@ void InterfaceKinetics::addReaction(shared_ptr<Reaction> r_base)
|
|||
size_t p = speciesPhaseIndex(k);
|
||||
m_rxnPhaseIsProduct[i][p] = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -653,7 +653,7 @@ void Kinetics::addReaction(ReactionData& r) {
|
|||
m_ropnet.push_back(0.0);
|
||||
}
|
||||
|
||||
void Kinetics::addReaction(shared_ptr<Reaction> r)
|
||||
bool Kinetics::addReaction(shared_ptr<Reaction> r)
|
||||
{
|
||||
r->validate();
|
||||
|
||||
|
|
@ -672,7 +672,7 @@ void Kinetics::addReaction(shared_ptr<Reaction> r)
|
|||
++iter) {
|
||||
if (kineticsSpeciesIndex(iter->first) == npos) {
|
||||
if (m_skipUndeclaredSpecies) {
|
||||
return;
|
||||
return false;
|
||||
} else {
|
||||
throw CanteraError("Kinetics::addReaction", "Reaction '" +
|
||||
r->equation() + "' contains the undeclared species '" +
|
||||
|
|
@ -685,7 +685,7 @@ void Kinetics::addReaction(shared_ptr<Reaction> r)
|
|||
++iter) {
|
||||
if (kineticsSpeciesIndex(iter->first) == npos) {
|
||||
if (m_skipUndeclaredSpecies) {
|
||||
return;
|
||||
return false;
|
||||
} else {
|
||||
throw CanteraError("Kinetics::addReaction", "Reaction '" +
|
||||
r->equation() + "' contains the undeclared species '" +
|
||||
|
|
@ -767,6 +767,7 @@ void Kinetics::addReaction(shared_ptr<Reaction> r)
|
|||
m_ropf.push_back(0.0);
|
||||
m_ropr.push_back(0.0);
|
||||
m_ropnet.push_back(0.0);
|
||||
return true;
|
||||
}
|
||||
|
||||
shared_ptr<Reaction> Kinetics::reaction(size_t i)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue