diff --git a/include/cantera/kinetics/BulkKinetics.h b/include/cantera/kinetics/BulkKinetics.h index 925e256f56..43d6e476c6 100644 --- a/include/cantera/kinetics/BulkKinetics.h +++ b/include/cantera/kinetics/BulkKinetics.h @@ -36,8 +36,6 @@ class BulkKinetics : public Kinetics virtual bool addReaction(shared_ptr r); virtual void init(); - virtual void finalize(); - virtual bool ready() const; virtual void setMultiplier(size_t i, double f); virtual void invalidateCache(); diff --git a/include/cantera/kinetics/EdgeKinetics.h b/include/cantera/kinetics/EdgeKinetics.h index a892bd0061..164890b07e 100644 --- a/include/cantera/kinetics/EdgeKinetics.h +++ b/include/cantera/kinetics/EdgeKinetics.h @@ -21,7 +21,9 @@ class EdgeKinetics : public InterfaceKinetics { public: //! Constructor - EdgeKinetics() : InterfaceKinetics() {} + EdgeKinetics() : InterfaceKinetics() { + m_nDim = 1; + } EdgeKinetics(const EdgeKinetics& right) : InterfaceKinetics(right) { @@ -44,8 +46,6 @@ class EdgeKinetics : public InterfaceKinetics virtual int type() const { return cEdgeKinetics; } - - virtual void finalize(); }; } diff --git a/include/cantera/kinetics/GasKinetics.h b/include/cantera/kinetics/GasKinetics.h index a0ee54a063..dfde9bb4ca 100644 --- a/include/cantera/kinetics/GasKinetics.h +++ b/include/cantera/kinetics/GasKinetics.h @@ -53,8 +53,6 @@ class GasKinetics : public BulkKinetics virtual void init(); virtual bool addReaction(shared_ptr r); virtual void modifyReaction(size_t i, shared_ptr rNew); - virtual void finalize(); - virtual bool ready() const; virtual void invalidateCache(); //@} diff --git a/include/cantera/kinetics/InterfaceKinetics.h b/include/cantera/kinetics/InterfaceKinetics.h index af03ca21c6..d50eda2a5e 100644 --- a/include/cantera/kinetics/InterfaceKinetics.h +++ b/include/cantera/kinetics/InterfaceKinetics.h @@ -200,8 +200,6 @@ class InterfaceKinetics : public Kinetics virtual void init(); virtual bool addReaction(shared_ptr r); virtual void modifyReaction(size_t i, shared_ptr rNew); - virtual void finalize(); - virtual bool ready() const; //! @} //! Internal routine that updates the Rates of Progress of the reactions @@ -674,6 +672,10 @@ class InterfaceKinetics : public Kinetics void applyStickingCorrection(double* kf); int m_ioFlag; + + //! Number of dimensions of reacting phase (2 for InterfaceKinetics, 1 for + //! EdgeKinetics) + size_t m_nDim; }; } diff --git a/include/cantera/kinetics/Kinetics.h b/include/cantera/kinetics/Kinetics.h index 1d4389395a..419b9bf4a0 100644 --- a/include/cantera/kinetics/Kinetics.h +++ b/include/cantera/kinetics/Kinetics.h @@ -730,6 +730,7 @@ class Kinetics * The base class method does nothing, but derived classes may use this to * perform any initialization (allocating arrays, etc.) that must be done * after the reactions are entered. + * @deprecated No longer needed. To be removed after Cantera 2.3. */ virtual void finalize(); @@ -810,9 +811,12 @@ class Kinetics /** * Returns true if the kinetics manager has been properly initialized and * finalized. + * @deprecated Object is always ready. To be removed after Cantera 2.3. */ virtual bool ready() const { - return false; + warn_deprecated("Kinetics::ready", + "Object is always ready. To be removed after Cantera 2.3."); + return true; } //! Check for duplicate reactions. diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index ff355740e1..455f4220b8 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -361,7 +361,6 @@ cdef extern from "cantera/kinetics/Kinetics.h" namespace "Cantera": void init() except + void skipUndeclaredThirdBodies(cbool) void addReaction(shared_ptr[CxxReaction]) except + - void finalize() except + void modifyReaction(int, shared_ptr[CxxReaction]) except + void invalidateCache() except + diff --git a/interfaces/cython/cantera/base.pyx b/interfaces/cython/cantera/base.pyx index d709c9fe9d..4a066fdb55 100644 --- a/interfaces/cython/cantera/base.pyx +++ b/interfaces/cython/cantera/base.pyx @@ -102,7 +102,6 @@ cdef class _SolutionBase: self.kinetics.skipUndeclaredThirdBodies(True) for reaction in reactions: self.kinetics.addReaction(reaction._reaction) - self.kinetics.finalize() def __getitem__(self, selection): diff --git a/src/kinetics/BulkKinetics.cpp b/src/kinetics/BulkKinetics.cpp index c2079e7b98..fdc4c9ce73 100644 --- a/src/kinetics/BulkKinetics.cpp +++ b/src/kinetics/BulkKinetics.cpp @@ -144,16 +144,6 @@ void BulkKinetics::init() m_grt.resize(m_kk); } -void BulkKinetics::finalize() -{ - m_finalized = true; -} - -bool BulkKinetics::ready() const -{ - return m_finalized; -} - void BulkKinetics::setMultiplier(size_t i, double f) { Kinetics::setMultiplier(i, f); m_ROP_ok = false; diff --git a/src/kinetics/GasKinetics.cpp b/src/kinetics/GasKinetics.cpp index 1d0346be44..553c8d671e 100644 --- a/src/kinetics/GasKinetics.cpp +++ b/src/kinetics/GasKinetics.cpp @@ -294,9 +294,11 @@ void GasKinetics::addFalloffReaction(FalloffReaction& r) } m_falloff_concm.install(nfall, efficiencies, r.third_body.default_efficiency); + concm_falloff_values.resize(m_falloff_concm.workSize()); // install the falloff function calculator for this reaction m_falloffn.install(nfall, r.reaction_type, r.falloff); + falloff_work.resize(m_falloffn.workSize()); } void GasKinetics::addThreeBodyReaction(ThreeBodyReaction& r) @@ -315,6 +317,7 @@ void GasKinetics::addThreeBodyReaction(ThreeBodyReaction& r) } m_3b_concm.install(nReactions()-1, efficiencies, r.third_body.default_efficiency); + concm_3b_values.resize(m_3b_concm.workSize()); } void GasKinetics::addPlogReaction(PlogReaction& r) @@ -389,19 +392,6 @@ void GasKinetics::init() m_logp_ref = log(thermo().refPressure()) - log(GasConstant); } -void GasKinetics::finalize() -{ - BulkKinetics::finalize(); - falloff_work.resize(m_falloffn.workSize()); - concm_3b_values.resize(m_3b_concm.workSize()); - concm_falloff_values.resize(m_falloff_concm.workSize()); -} - -bool GasKinetics::ready() const -{ - return m_finalized; -} - void GasKinetics::invalidateCache() { BulkKinetics::invalidateCache(); diff --git a/src/kinetics/InterfaceKinetics.cpp b/src/kinetics/InterfaceKinetics.cpp index 82839eebbf..d2654d4a62 100644 --- a/src/kinetics/InterfaceKinetics.cpp +++ b/src/kinetics/InterfaceKinetics.cpp @@ -5,7 +5,6 @@ // Copyright 2002 California Institute of Technology #include "cantera/kinetics/InterfaceKinetics.h" -#include "cantera/kinetics/EdgeKinetics.h" #include "cantera/kinetics/RateCoeffMgr.h" #include "cantera/kinetics/ImplicitSurfChem.h" #include "cantera/thermo/SurfPhase.h" @@ -31,7 +30,8 @@ InterfaceKinetics::InterfaceKinetics(thermo_t* thermo) : m_has_electrochem_rxns(false), m_has_exchange_current_density_formulation(false), m_phaseExistsCheck(false), - m_ioFlag(0) + m_ioFlag(0), + m_nDim(2) { if (thermo != 0) { addPhase(*thermo); @@ -708,6 +708,12 @@ bool InterfaceKinetics::addReaction(shared_ptr r_base) size_t p = speciesPhaseIndex(k); m_rxnPhaseIsProduct[i][p] = true; } + + deltaElectricEnergy_.push_back(0.0); + m_deltaG0.push_back(0.0); + m_deltaG.push_back(0.0); + m_ProdStanConcReac.push_back(0.0); + return true; } @@ -828,38 +834,25 @@ void InterfaceKinetics::init() } m_actConc.resize(m_kk); m_conc.resize(m_kk); + m_StandardConc.resize(m_kk, 0.0); m_mu0.resize(m_kk); m_mu.resize(m_kk); m_mu0_Kc.resize(m_kk); m_grt.resize(m_kk); m_pot.resize(m_kk, 0.0); m_phi.resize(nPhases(), 0.0); -} -void InterfaceKinetics::finalize() -{ - Kinetics::finalize(); - deltaElectricEnergy_.resize(nReactions()); size_t ks = reactionPhaseIndex(); if (ks == npos) throw CanteraError("InterfaceKinetics::finalize", "no surface phase is present."); // Check to see that the interface routine has a dimension of 2 m_surf = (SurfPhase*)&thermo(ks); - if (m_surf->nDim() != 2) { + if (m_surf->nDim() != m_nDim) { throw CanteraError("InterfaceKinetics::finalize", "expected interface dimension = 2, but got dimension = {}", m_surf->nDim()); } - m_StandardConc.resize(m_kk, 0.0); - m_deltaG0.resize(nReactions(), 0.0); - m_deltaG.resize(nReactions(), 0.0); - m_ProdStanConcReac.resize(nReactions(), 0.0); - - if (m_thermo.size() != m_phaseExists.size()) { - throw CanteraError("InterfaceKinetics::finalize", "internal error"); - } - m_finalized = true; } doublereal InterfaceKinetics::electrochem_beta(size_t irxn) const @@ -872,11 +865,6 @@ doublereal InterfaceKinetics::electrochem_beta(size_t irxn) const return 0.0; } -bool InterfaceKinetics::ready() const -{ - return m_finalized; -} - void InterfaceKinetics::advanceCoverages(doublereal tstep) { if (m_integrator == 0) { @@ -1013,48 +1001,4 @@ void InterfaceKinetics::applyStickingCorrection(double* kf) } } - -void EdgeKinetics::finalize() -{ - // Note we can't call the Interface::finalize() routine because we need to - // check for a dimension of 1 below. Therefore, we have to malloc room in - // arrays that would normally be handled by the - // InterfaceKinetics::finalize() call. - Kinetics::finalize(); - - size_t safe_reaction_size = std::max(nReactions(), 1); - deltaElectricEnergy_.resize(safe_reaction_size); - size_t ks = reactionPhaseIndex(); - if (ks == npos) throw CanteraError("EdgeKinetics::finalize", - "no surface phase is present."); - - // Check to see edge phase has a dimension of 1 - m_surf = (SurfPhase*)&thermo(ks); - if (m_surf->nDim() != 1) { - throw CanteraError("EdgeKinetics::finalize", - "expected interface dimension = 1, but got dimension = {}", - m_surf->nDim()); - } - m_StandardConc.resize(m_kk, 0.0); - m_deltaG0.resize(safe_reaction_size, 0.0); - m_deltaG.resize(safe_reaction_size, 0.0); - - m_ProdStanConcReac.resize(safe_reaction_size, 0.0); - - if (m_thermo.size() != m_phaseExists.size()) { - throw CanteraError("InterfaceKinetics::finalize", "internal error"); - } - - // Guarantee that these arrays can be converted to double* even in the - // special case where there are no reactions defined. - if (!nReactions()) { - m_perturb.resize(1, 1.0); - m_ropf.resize(1, 0.0); - m_ropr.resize(1, 0.0); - m_ropnet.resize(1, 0.0); - m_rkcn.resize(1, 0.0); - } - m_finalized = true; -} - } diff --git a/src/kinetics/Kinetics.cpp b/src/kinetics/Kinetics.cpp index 0b2e78f9e7..18a8075c02 100644 --- a/src/kinetics/Kinetics.cpp +++ b/src/kinetics/Kinetics.cpp @@ -513,15 +513,13 @@ void Kinetics::addPhase(thermo_t& thermo) } m_thermo.push_back(&thermo); m_phaseindex[m_thermo.back()->id()] = nPhases(); + m_kk += thermo.nSpecies(); } void Kinetics::finalize() { - m_kk = 0; - for (size_t n = 0; n < nPhases(); n++) { - size_t nsp = m_thermo[n]->nSpecies(); - m_kk += nsp; - } + warn_deprecated("Kinetics::finalize", + "No longer needed. To be removed after Cantera 2.3."); } bool Kinetics::addReaction(shared_ptr r) diff --git a/src/kinetics/importKinetics.cpp b/src/kinetics/importKinetics.cpp index 58f6b398d7..bd030e3388 100644 --- a/src/kinetics/importKinetics.cpp +++ b/src/kinetics/importKinetics.cpp @@ -36,7 +36,6 @@ bool installReactionArrays(const XML_Node& p, Kinetics& kin, // purely additive. vector rarrays = p.getChildren("reactionArray"); if (rarrays.empty()) { - kin.finalize(); return false; } for (size_t n = 0; n < rarrays.size(); n++) { @@ -122,9 +121,6 @@ bool installReactionArrays(const XML_Node& p, Kinetics& kin, kin.checkDuplicates(); } - // Finalize the installation of the kinetics, now that we know the true - // number of reactions in the mechanism, itot. - kin.finalize(); return true; } diff --git a/test/kinetics/kineticsFromScratch.cpp b/test/kinetics/kineticsFromScratch.cpp index 81a956f729..d91d4a15b2 100644 --- a/test/kinetics/kineticsFromScratch.cpp +++ b/test/kinetics/kineticsFromScratch.cpp @@ -57,7 +57,6 @@ TEST_F(KineticsFromScratch, add_elementary_reaction) auto R = make_shared(reac, prod, rate); kin.addReaction(R); - kin.finalize(); check_rates(0); } @@ -74,7 +73,6 @@ TEST_F(KineticsFromScratch, add_three_body_reaction) auto R = make_shared(reac, prod, rate, tbody); kin.addReaction(R); - kin.finalize(); check_rates(1); } @@ -123,7 +121,6 @@ TEST_F(KineticsFromScratch, add_falloff_reaction) auto R = make_shared(reac, prod, low_rate, high_rate, tbody); R->falloff = newFalloff(TROE_FALLOFF, falloff_params); kin.addReaction(R); - kin.finalize(); check_rates(2); } @@ -146,7 +143,6 @@ TEST_F(KineticsFromScratch, add_plog_reaction) auto R = make_shared(reac, prod, Plog(rates)); kin.addReaction(R); - kin.finalize(); check_rates(3); } @@ -194,7 +190,6 @@ TEST_F(KineticsFromScratch, add_chebyshev_reaction) auto R = make_shared(reac, prod, rate); kin.addReaction(R); - kin.finalize(); check_rates(4); } @@ -369,7 +364,6 @@ TEST_F(InterfaceKineticsFromScratch, add_surface_reaction) auto R = make_shared(reac, prod, rate); kin.addReaction(R); - kin.finalize(); check_rates(3); } @@ -384,6 +378,5 @@ TEST_F(InterfaceKineticsFromScratch, add_sticking_reaction) auto R = make_shared(reac, prod, rate, true); kin.addReaction(R); - kin.finalize(); check_rates(0); }