diff --git a/Cantera/src/kinetics/InterfaceKinetics.cpp b/Cantera/src/kinetics/InterfaceKinetics.cpp index 6d217be5c..fdd391233 100644 --- a/Cantera/src/kinetics/InterfaceKinetics.cpp +++ b/Cantera/src/kinetics/InterfaceKinetics.cpp @@ -325,15 +325,18 @@ namespace Cantera { // modify the reaction rates. Only modify those with a // non-zero activation energy, and do not decrease the // activation energy below zero. - doublereal ea, eamod; - + doublereal eamod; +#ifdef DEBUG_MODE + double ea; +#endif int nct = m_beta.size(); int irxn; for (i = 0; i < nct; i++) { irxn = m_ctrxn[i]; eamod = m_beta[i]*m_rwork[irxn]; - if (eamod != 0.0 && m_E[i] != 0.0) { - ea = GasConstant * m_E[i]; + if (eamod != 0.0 && m_E[irxn] != 0.0) { +#ifdef DEBUG_MODE + ea = GasConstant * m_E[irxn]; if (eamod + ea < 0.0) { writelog("Warning: act energy mod too large!\n"); writelog(" Delta phi = "+fp2str(m_rwork[irxn]/Faraday)+"\n"); @@ -344,7 +347,7 @@ namespace Cantera { +fp2str(m_phi[n])+"\n"); } } - //eamod = -ea; +#endif kf[irxn] *= exp(-eamod*rrt); } } @@ -677,8 +680,8 @@ namespace Cantera { for (int m = 0; m < ncov; m++) rp.push_back(r.cov[m]); iloc = m_rates.install( reactionNumber(), - r.rateCoeffType, rp.size(), - DATA_PTR(rp) ); + r.rateCoeffType, rp.size(), + DATA_PTR(rp) ); // store activation energy m_E.push_back(r.rateCoeffParameters[2]); @@ -862,6 +865,17 @@ namespace Cantera { } + doublereal InterfaceKinetics::electrochem_beta(int irxn) const{ + int n = m_ctrxn.size(); + for (int i = 0; i < n; i++) { + if (m_ctrxn[i] == irxn) { + return m_beta[i]; + } + } + return 0.0; + } + + bool InterfaceKinetics::ready() const { return (m_finalized); } diff --git a/Cantera/src/kinetics/InterfaceKinetics.h b/Cantera/src/kinetics/InterfaceKinetics.h index 18984d8e5..5f7e055bc 100644 --- a/Cantera/src/kinetics/InterfaceKinetics.h +++ b/Cantera/src/kinetics/InterfaceKinetics.h @@ -274,6 +274,24 @@ namespace Cantera { return m_index[i].first; } + //! Return the charge transfer rxn Beta parameter for the ith reaction + /*! + * Returns the beta parameter for a charge transfer reaction. This + * parameter is not important for non-charge transfer reactions. + * Note, the parameter defaults to zero. However, a value of 0.5 + * should be supplied for every charge transfer reaction if + * no information is known, as a value of 0.5 pertains to a + * symmetric transition state. The value can vary between 0 to 1. + * + * + * @param irxn Reaction number in the kinetics mechanism + * + * @return + * Beta parameter. This defaults to zero, even for charge transfer + * reactions. + */ + doublereal electrochem_beta(int irxn) const; + /** * True if reaction i has been declared to be reversible. If * isReversible(i) is false, then the reverse rate of progress @@ -340,13 +358,13 @@ namespace Cantera { - void _update_rates_T(); - void _update_rates_phi(); - void _update_rates_C(); - - void advanceCoverages(doublereal tstep); - void checkPartialEquil(); - + void _update_rates_T(); + void _update_rates_phi(); + void _update_rates_C(); + + void advanceCoverages(doublereal tstep); + void checkPartialEquil(); + //! Temporary work vector of length m_kk vector_fp m_grt; @@ -500,8 +518,8 @@ namespace Cantera { //! Pointer to the surface solver ImplicitSurfChem* m_integrator; - vector_fp m_beta; - vector_int m_ctrxn; + vector_fp m_beta; + vector_int m_ctrxn; int reactionNumber(){ return m_ii;}