From 8bcda61e4caf62d24c18459786e27736162186dc Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 24 Oct 2012 15:42:05 +0000 Subject: [PATCH] Changed type of CVodesIntegrator members to eliminate unnecessary casts --- src/numerics/CVodesIntegrator.cpp | 41 +++++++++++++------------------ src/numerics/CVodesIntegrator.h | 2 +- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/numerics/CVodesIntegrator.cpp b/src/numerics/CVodesIntegrator.cpp index aa86340c4..fdc49c892 100644 --- a/src/numerics/CVodesIntegrator.cpp +++ b/src/numerics/CVodesIntegrator.cpp @@ -50,11 +50,6 @@ using namespace std; #include #include -inline static N_Vector nv(void* x) -{ - return reinterpret_cast(x); -} - namespace Cantera { @@ -154,10 +149,10 @@ CVodesIntegrator::~CVodesIntegrator() CVodeFree(&m_cvode_mem); } if (m_y) { - N_VDestroy_Serial(nv(m_y)); + N_VDestroy_Serial(m_y); } if (m_abstol) { - N_VDestroy_Serial(nv(m_abstol)); + N_VDestroy_Serial(m_abstol); } delete m_fdata; @@ -166,12 +161,12 @@ CVodesIntegrator::~CVodesIntegrator() double& CVodesIntegrator::solution(size_t k) { - return NV_Ith_S(nv(m_y),k); + return NV_Ith_S(m_y, k); } double* CVodesIntegrator::solution() { - return NV_DATA_S(nv(m_y)); + return NV_DATA_S(m_y); } void CVodesIntegrator::setTolerances(double reltol, size_t n, double* abstol) @@ -180,12 +175,12 @@ void CVodesIntegrator::setTolerances(double reltol, size_t n, double* abstol) m_nabs = n; if (n != m_neq) { if (m_abstol) { - N_VDestroy_Serial(nv(m_abstol)); + N_VDestroy_Serial(m_abstol); } - m_abstol = reinterpret_cast(N_VNew_Serial(n)); + m_abstol = N_VNew_Serial(n); } for (size_t i=0; i(N_VNew_Serial(m_neq)); // allocate solution vector + m_y = N_VNew_Serial(m_neq); // allocate solution vector for (size_t i = 0; i < m_neq; i++) { - NV_Ith_S(nv(m_y), i) = 0.0; + NV_Ith_S(m_y, i) = 0.0; } // check abs tolerance array size if (m_itol == CV_SV && m_nabs < m_neq) { throw CVodesErr("not enough absolute tolerance values specified."); } - func.getInitialConditions(m_t0, m_neq, NV_DATA_S(nv(m_y))); + func.getInitialConditions(m_t0, m_neq, NV_DATA_S(m_y)); if (m_cvode_mem) { CVodeFree(&m_cvode_mem); @@ -352,7 +347,7 @@ void CVodesIntegrator::initialize(double t0, FuncEval& func) } #elif SUNDIALS_VERSION >= 24 - flag = CVodeInit(m_cvode_mem, cvodes_rhs, m_t0, nv(m_y)); + flag = CVodeInit(m_cvode_mem, cvodes_rhs, m_t0, m_y); if (flag != CV_SUCCESS) { if (flag == CV_MEM_FAIL) { throw CVodesErr("Memory allocation failed."); @@ -364,7 +359,7 @@ void CVodesIntegrator::initialize(double t0, FuncEval& func) } if (m_itol == CV_SV) { - flag = CVodeSVtolerances(m_cvode_mem, m_reltol, nv(m_abstol)); + flag = CVodeSVtolerances(m_cvode_mem, m_reltol, m_abstol); } else { flag = CVodeSStolerances(m_cvode_mem, m_reltol, m_abstols); } @@ -435,7 +430,7 @@ void CVodesIntegrator::reinitialize(double t0, FuncEval& func) m_t0 = t0; m_time = t0; //try { - func.getInitialConditions(m_t0, m_neq, NV_DATA_S(nv(m_y))); + func.getInitialConditions(m_t0, m_neq, NV_DATA_S(m_y)); //} //catch (CanteraError) { //showErrors(); @@ -458,7 +453,7 @@ void CVodesIntegrator::reinitialize(double t0, FuncEval& func) throw CVodesErr("CVodeReInit failed. result = "+int2str(result)); } #elif SUNDIALS_VERSION >= 24 - result = CVodeReInit(m_cvode_mem, m_t0, nv(m_y)); + result = CVodeReInit(m_cvode_mem, m_t0, m_y); if (result != CV_SUCCESS) { throw CVodesErr("CVodeReInit failed. result = "+int2str(result)); } @@ -495,7 +490,7 @@ void CVodesIntegrator::reinitialize(double t0, FuncEval& func) void CVodesIntegrator::integrate(double tout) { - int flag = CVode(m_cvode_mem, tout, nv(m_y), &m_time, CV_NORMAL); + int flag = CVode(m_cvode_mem, tout, m_y, &m_time, CV_NORMAL); if (flag != CV_SUCCESS) { throw CVodesErr(" CVodes error encountered. Error code: " + int2str(flag) + "\nComponents with largest weighted error estimates:\n" + getErrorInfo(10)); @@ -505,7 +500,7 @@ void CVodesIntegrator::integrate(double tout) double CVodesIntegrator::step(double tout) { - int flag = CVode(m_cvode_mem, tout, nv(m_y), &m_time, CV_ONE_STEP); + int flag = CVode(m_cvode_mem, tout, m_y, &m_time, CV_ONE_STEP); if (flag != CV_SUCCESS) { throw CVodesErr(" CVodes error encountered. Error code: " + int2str(flag) + "\nComponents with largest weighted error estimates:\n" + getErrorInfo(10)); @@ -570,5 +565,3 @@ string CVodesIntegrator::getErrorInfo(int N) { } } - - diff --git a/src/numerics/CVodesIntegrator.h b/src/numerics/CVodesIntegrator.h index 18874de0e..ca7fc67aa 100644 --- a/src/numerics/CVodesIntegrator.h +++ b/src/numerics/CVodesIntegrator.h @@ -93,7 +93,7 @@ private: void* m_cvode_mem; double m_t0; double m_time; //!< The current integrator time - void* m_y, *m_abstol; + N_Vector m_y, m_abstol; int m_type; int m_itol; int m_method;