diff --git a/include/cantera/zeroD/ReactorNet.h b/include/cantera/zeroD/ReactorNet.h index ead3580eb..877fd2cf9 100644 --- a/include/cantera/zeroD/ReactorNet.h +++ b/include/cantera/zeroD/ReactorNet.h @@ -146,6 +146,9 @@ public: //! Return the sensitivity of the *k*-th solution component with //! respect to the *p*-th sensitivity parameter. double sensitivity(size_t k, size_t p) { + if (!m_init) { + initialize(); + } return m_integ->sensitivity(k, m_sensIndex[p])/m_integ->solution(k); } diff --git a/src/numerics/CVodesIntegrator.cpp b/src/numerics/CVodesIntegrator.cpp index 4052d249b..6dbe25a78 100644 --- a/src/numerics/CVodesIntegrator.cpp +++ b/src/numerics/CVodesIntegrator.cpp @@ -508,6 +508,10 @@ int CVodesIntegrator::nEvals() const double CVodesIntegrator::sensitivity(size_t k, size_t p) { + if (m_time == m_t0) { + // calls to CVodeGetSens are only allowed after a successful time step. + return 0.0; + } if (!m_sens_ok && m_np) { #if SUNDIALS_VERSION <= 23 int flag = CVodeGetSens(m_cvode_mem, m_time, m_yS); diff --git a/src/zeroD/ReactorNet.cpp b/src/zeroD/ReactorNet.cpp index 2887027d3..03a34e6aa 100644 --- a/src/zeroD/ReactorNet.cpp +++ b/src/zeroD/ReactorNet.cpp @@ -256,6 +256,9 @@ void ReactorNet::getInitialConditions(doublereal t0, size_t ReactorNet::globalComponentIndex(const string& species, size_t reactor) { + if (!m_init) { + initialize(); + } size_t start = 0; size_t n; for (n = 0; n < reactor; n++) {