From 749f988e529d1935a5b0d5e1b754b0221b7b68b6 Mon Sep 17 00:00:00 2001 From: Victor Brunini Date: Thu, 13 Dec 2012 22:15:35 +0000 Subject: [PATCH] Convert LiquidTransport to just store a pointer to the external gradient (T, X, V) values that it uses to compute fluxes. These are never changed by the LiquidTransport object so there is no reason to have them stored locally rather than just holding a pointer to the data. --- include/cantera/transport/LiquidTransport.h | 12 +++--- src/transport/LiquidTransport.cpp | 42 +++++++++++++-------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/include/cantera/transport/LiquidTransport.h b/include/cantera/transport/LiquidTransport.h index 236869958..0fb9fdc72 100644 --- a/include/cantera/transport/LiquidTransport.h +++ b/include/cantera/transport/LiquidTransport.h @@ -1046,7 +1046,7 @@ private: * * m_Grad_X[n*m_nsp + k] */ - vector_fp m_Grad_X; + const doublereal * m_Grad_X; //! Gradient of the logarithm of the activity /*! @@ -1078,7 +1078,7 @@ private: * Gradients are assumed to be freshly updated before * every property call. */ - vector_fp m_Grad_T; + const doublereal * m_Grad_T; //! Internal value of the gradient of the Pressure vector /*! @@ -1090,7 +1090,7 @@ private: * Gradients are assumed to be freshly updated before * every property call. */ - vector_fp m_Grad_P; +// vector_fp m_Grad_P; //! Internal value of the gradient of the Electric Voltage /*! @@ -1102,7 +1102,7 @@ private: * Gradients are assumed to be freshly updated before * every property call. */ - vector_fp m_Grad_V; + const doublereal * m_Grad_V; //! Gradient of the electrochemical potential /*! @@ -1271,10 +1271,10 @@ private: vector_fp m_actCoeff; //! RHS to the stefan-maxwell equation - DenseMatrix m_B; +// DenseMatrix m_B; //! Matrix for the stefan maxwell equation. - DenseMatrix m_A; +// DenseMatrix m_A; //! Current Temperature -> locally stored /*! diff --git a/src/transport/LiquidTransport.cpp b/src/transport/LiquidTransport.cpp index 718c0fe3b..b57918af7 100644 --- a/src/transport/LiquidTransport.cpp +++ b/src/transport/LiquidTransport.cpp @@ -163,8 +163,8 @@ LiquidTransport& LiquidTransport::operator=(const LiquidTransport& right) m_actCoeff = right.m_actCoeff; m_Grad_lnAC = right.m_Grad_lnAC; m_chargeSpecies = right.m_chargeSpecies; - m_B = right.m_B; - m_A = right.m_A; +// m_B = right.m_B; +// m_A = right.m_A; m_temp = right.m_temp; m_press = right.m_press; m_flux = right.m_flux; @@ -420,9 +420,9 @@ bool LiquidTransport::initLiquid(LiquidTransportParams& tr) m_spwork.resize(m_nsp, 0.0); // resize the internal gradient variables - m_Grad_X.resize(m_nDim * m_nsp, 0.0); - m_Grad_T.resize(m_nDim, 0.0); - m_Grad_V.resize(m_nDim, 0.0); +// m_Grad_X.resize(m_nDim * m_nsp, 0.0); +// m_Grad_T.resize(m_nDim, 0.0); +// m_Grad_V.resize(m_nDim, 0.0); m_Grad_mu.resize(m_nDim * m_nsp, 0.0); m_flux.resize(m_nsp, m_nDim, 0.0); @@ -843,11 +843,14 @@ void LiquidTransport::getFluidMobilities(doublereal* const mobil_f) /* * @param grad_T Gradient of the temperature (length num dimensions); */ -void LiquidTransport::set_Grad_T(const doublereal* const grad_T) +void LiquidTransport::set_Grad_T(const doublereal *grad_T) { + m_Grad_T = grad_T; + /* for (size_t a = 0; a < m_nDim; a++) { m_Grad_T[a] = grad_T[a]; } + */ } //============================================================== // Specify the value of the gradient of the voltage @@ -855,11 +858,14 @@ void LiquidTransport::set_Grad_T(const doublereal* const grad_T) * * @param grad_V Gradient of the voltage (length num dimensions); */ -void LiquidTransport::set_Grad_V(const doublereal* const grad_V) +void LiquidTransport::set_Grad_V(const doublereal *grad_V) { + m_Grad_V = grad_V; + /* for (size_t a = 0; a < m_nDim; a++) { m_Grad_V[a] = grad_V[a]; } + */ } //============================================================== // Specify the value of the gradient of the MoleFractions @@ -867,12 +873,15 @@ void LiquidTransport::set_Grad_V(const doublereal* const grad_V) * * @param grad_X Gradient of the mole fractions(length nsp * num dimensions); */ -void LiquidTransport::set_Grad_X(const doublereal* const grad_X) +void LiquidTransport::set_Grad_X(const doublereal*grad_X) { + m_Grad_X = grad_X; + /* size_t itop = m_nDim * m_nsp; for (size_t i = 0; i < itop; i++) { m_Grad_X[i] = grad_X[i]; } + */ } //============================================================== @@ -897,7 +906,7 @@ void LiquidTransport::set_Grad_X(const doublereal* const grad_X) */ doublereal LiquidTransport::getElectricConduct() { - doublereal gradT = 0.0; + vector_fp gradT(m_nDim,0.0); vector_fp gradX(m_nDim * m_nsp); vector_fp gradV(m_nDim); for (size_t i = 0; i < m_nDim; i++) { @@ -907,7 +916,7 @@ doublereal LiquidTransport::getElectricConduct() gradV[i] = 1.0; } - set_Grad_T(&gradT); + set_Grad_T(&gradT[0]); set_Grad_X(&gradX[0]); set_Grad_V(&gradV[0]); @@ -1523,7 +1532,7 @@ void LiquidTransport::updateHydrodynamicRadius_T() void LiquidTransport::update_Grad_lnAC() { doublereal grad_T; - static vector_fp grad_lnAC(m_nsp), grad_X(m_nsp); +// static vector_fp grad_lnAC(m_nsp), grad_X(m_nsp); // IonsFromNeutralVPSSTP * tempIons = dynamic_cast m_thermo; //MargulesVPSSTP * tempMarg = dynamic_cast (tempIons->neutralMoleculePhase_); @@ -1531,15 +1540,14 @@ void LiquidTransport::update_Grad_lnAC() //m_thermo->getdlnActCoeffdlnX( DATA_PTR(grad_lnAC) ); for (size_t k = 0; k < m_nDim; k++) { grad_T = m_Grad_T[k]; - grad_X.assign(m_Grad_X.begin()+m_nsp*k,m_Grad_X.begin()+m_nsp*(k+1)); - m_thermo->getdlnActCoeffds(grad_T, DATA_PTR(grad_X), DATA_PTR(grad_lnAC)); + const int start = m_nsp*k; + m_thermo->getdlnActCoeffds(grad_T, &(m_Grad_X[start]), &(m_Grad_lnAC[start])); for (size_t i = 0; i < m_nsp; i++) if (m_molefracs[i] < 1.e-15) { - grad_lnAC[i] = 0; + m_Grad_lnAC[start+i] = 0; } else { - grad_lnAC[i] += grad_X[i]/m_molefracs[i]; + m_Grad_lnAC[start+i] += m_Grad_X[start+i]/m_molefracs[i]; } - copy(grad_lnAC.begin(),grad_lnAC.end(),m_Grad_lnAC.begin()+m_nsp*k); // std::cout << k << " m_Grad_lnAC = " << m_Grad_lnAC[k] << std::endl; } @@ -1585,6 +1593,8 @@ void LiquidTransport::update_Grad_lnAC() void LiquidTransport::stefan_maxwell_solve() { doublereal tmp; + static DenseMatrix m_A(m_nsp, m_nsp, 0.0); + static DenseMatrix m_B(m_nsp, m_nDim, 0.0); m_B.resize(m_nsp, m_nDim, 0.0); m_A.resize(m_nsp, m_nsp, 0.0);