From 7f46371653dfea9d9060fefa7200f406f041d92d Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Fri, 30 Mar 2012 23:46:14 +0000 Subject: [PATCH] Show CVODE error codes when integration fails --- src/numerics/CVodeInt.cpp | 7 ++++--- src/numerics/CVodesIntegrator.cpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/numerics/CVodeInt.cpp b/src/numerics/CVodeInt.cpp index 43edf8655..a2e39bd86 100644 --- a/src/numerics/CVodeInt.cpp +++ b/src/numerics/CVodeInt.cpp @@ -8,7 +8,6 @@ #include using namespace std; - // cvode includes #include "../../ext/cvode/include/llnltyps.h" #include "../../ext/cvode/include/llnlmath.h" @@ -19,6 +18,8 @@ using namespace std; #include "../../ext/cvode/include/nvector.h" #include "../../ext/cvode/include/cvode.h" +#include "cantera/base/stringUtils.h" + inline static N_Vector nv(void* x) { return reinterpret_cast(x); @@ -312,7 +313,7 @@ void CVodeInt::integrate(double tout) int flag; flag = CVode(m_cvode_mem, tout, nv(m_y), &t, NORMAL); if (flag != SUCCESS) { - throw CVodeErr(" CVode error encountered."); + throw CVodeErr(" CVode error encountered. Error code: " + int2str(flag)); } } @@ -322,7 +323,7 @@ double CVodeInt::step(double tout) int flag; flag = CVode(m_cvode_mem, tout, nv(m_y), &t, ONE_STEP); if (flag != SUCCESS) { - throw CVodeErr(" CVode error encountered."); + throw CVodeErr(" CVode error encountered. Error code: " + int2str(flag)); } return t; } diff --git a/src/numerics/CVodesIntegrator.cpp b/src/numerics/CVodesIntegrator.cpp index ea4c5a5ee..3a5437293 100644 --- a/src/numerics/CVodesIntegrator.cpp +++ b/src/numerics/CVodesIntegrator.cpp @@ -497,7 +497,7 @@ void CVodesIntegrator::integrate(double tout) int flag; flag = CVode(m_cvode_mem, tout, nv(m_y), &t, CV_NORMAL); if (flag != CV_SUCCESS) { - throw CVodesErr(" CVodes error encountered."); + throw CVodesErr(" CVodes error encountered. Error code: " + int2str(flag)); } #if defined(SUNDIALS_VERSION_22) || defined(SUNDIALS_VERSION_23) if (m_np > 0) { @@ -520,7 +520,7 @@ double CVodesIntegrator::step(double tout) int flag; flag = CVode(m_cvode_mem, tout, nv(m_y), &t, CV_ONE_STEP); if (flag != CV_SUCCESS) { - throw CVodesErr(" CVodes error encountered."); + throw CVodesErr(" CVodes error encountered. Error code: " + int2str(flag)); } return t; }