From a03afbd56ee3b51f203a1ee9e7c2fa536c66b01d Mon Sep 17 00:00:00 2001 From: "Bryan W. Weber" Date: Mon, 5 Mar 2018 18:36:24 -0500 Subject: [PATCH] [1D] Throw an exception if transport state is inconsistent The user can enable Soret (thermal) diffusion or multicomponent transport in either order, but attempts to solve flame problems with Soret enabled and the mixture-averaged transport approximation will result in an error --- include/cantera/oneD/StFlow.h | 7 ++++++- interfaces/cython/cantera/_cantera.pxd | 2 +- src/oneD/StFlow.cpp | 19 +++++++------------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/cantera/oneD/StFlow.h b/include/cantera/oneD/StFlow.h index 9b39a0768..deed089bf 100644 --- a/include/cantera/oneD/StFlow.h +++ b/include/cantera/oneD/StFlow.h @@ -78,7 +78,12 @@ public: //! set the transport manager void setTransport(Transport& trans); - void enableSoret(bool withSoret); + //! Enable thermal diffusion, also known as Soret diffusion. + //! Requires that multicomponent transport properties be + //! enabled to carry out calculations. + void enableSoret(bool withSoret) { + m_do_soret = withSoret; + } bool withSoret() const { return m_do_soret; } diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 815a0486e..d7bcd53c9 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -748,7 +748,7 @@ cdef extern from "cantera/oneD/Sim1D.h": void setMaxGridPoints(int, size_t) except +translate_exception size_t maxGridPoints(size_t) except +translate_exception void setGridMin(int, double) except +translate_exception - void setFixedTemperature(double) + void setFixedTemperature(double) except +translate_exception void setInterrupt(CxxFunc1*) except +translate_exception void setTimeStepCallback(CxxFunc1*) void setSteadyCallback(CxxFunc1*) diff --git a/src/oneD/StFlow.cpp b/src/oneD/StFlow.cpp index 2b08d0963..8ae383295 100644 --- a/src/oneD/StFlow.cpp +++ b/src/oneD/StFlow.cpp @@ -132,7 +132,7 @@ void StFlow::setupGrid(size_t n, const doublereal* z) } } -void StFlow::resetBadValues(double* xg) +void StFlow::resetBadValues(double* xg) { double* x = xg + loc(); for (size_t j = 0; j < m_points; j++) { @@ -154,17 +154,6 @@ void StFlow::setTransport(Transport& trans) } } -void StFlow::enableSoret(bool withSoret) -{ - if (m_do_multicomponent) { - m_do_soret = withSoret; - } else { - throw CanteraError("setTransport", - "Thermal diffusion (the Soret effect) " - "requires using a multicomponent transport model."); - } -} - void StFlow::_getInitialSoln(double* x) { for (size_t j = 0; j < m_points; j++) { @@ -195,6 +184,12 @@ void StFlow::setGasAtMidpoint(const doublereal* x, size_t j) void StFlow::_finalize(const doublereal* x) { + if (!m_do_multicomponent && m_do_soret) { + throw CanteraError("_finalize", + "Thermal diffusion (the Soret effect) is enabled, and requires " + "using a multicomponent transport model."); + } + size_t nz = m_zfix.size(); bool e = m_do_energy[0]; for (size_t j = 0; j < m_points; j++) {