From 092937fd06a54a72b2d01eed53777b4c8644bd13 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Tue, 5 May 2015 23:09:38 -0400 Subject: [PATCH] [Kinetics] Fix handling of undeclared third bodies in Falloff reactions --- include/cantera/kinetics/ThirdBodyCalc.h | 2 ++ src/kinetics/GasKinetics.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/cantera/kinetics/ThirdBodyCalc.h b/include/cantera/kinetics/ThirdBodyCalc.h index 97cd51862..2ce6ab26d 100644 --- a/include/cantera/kinetics/ThirdBodyCalc.h +++ b/include/cantera/kinetics/ThirdBodyCalc.h @@ -6,6 +6,7 @@ #define CT_THIRDBODYCALC_H #include "cantera/base/utilities.h" +#include namespace Cantera { @@ -26,6 +27,7 @@ public: iter != enhanced.end(); ++iter) { + assert(iter->first != npos); m_species.back().push_back(iter->first); m_eff.back().push_back(iter->second - dflt); } diff --git a/src/kinetics/GasKinetics.cpp b/src/kinetics/GasKinetics.cpp index c78541f93..65aaad282 100644 --- a/src/kinetics/GasKinetics.cpp +++ b/src/kinetics/GasKinetics.cpp @@ -359,7 +359,14 @@ void GasKinetics::addFalloffReaction(FalloffReaction& r) for (Composition::const_iterator iter = r.third_body.efficiencies.begin(); iter != r.third_body.efficiencies.end(); ++iter) { - efficiencies[kineticsSpeciesIndex(iter->first)] = iter->second; + size_t k = kineticsSpeciesIndex(iter->first); + if (k != npos) { + efficiencies[k] = iter->second; + } else if (!m_skipUndeclaredThirdBodies) { + throw CanteraError("GasKinetics::addTFalloffReaction", "Found " + "third-body efficiency for undefined species '" + iter->first + + "' while adding reaction '" + r.equation() + "'"); + } } m_falloff_concm.install(m_nfall, efficiencies, r.third_body.default_efficiency);