From ffc4ba07da1195ab0731a9dc8c303997f75a8373 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 7 Oct 2015 15:40:58 -0400 Subject: [PATCH] Make m_phi a regular member of WaterPropsIAPWS instead of a pointer --- include/cantera/thermo/WaterPropsIAPWS.h | 5 +- src/thermo/WaterPropsIAPWS.cpp | 72 ++++++++++-------------- 2 files changed, 32 insertions(+), 45 deletions(-) diff --git a/include/cantera/thermo/WaterPropsIAPWS.h b/include/cantera/thermo/WaterPropsIAPWS.h index ab7a6603d..9dfbb2610 100644 --- a/include/cantera/thermo/WaterPropsIAPWS.h +++ b/include/cantera/thermo/WaterPropsIAPWS.h @@ -167,9 +167,6 @@ public: //! assignment constructor WaterPropsIAPWS& operator=(const WaterPropsIAPWS& right); - //! destructor - ~WaterPropsIAPWS(); - //! Set the internal state of the object wrt temperature and density /*! * @param temperature temperature (kelvin) @@ -446,7 +443,7 @@ private: doublereal& densGas, doublereal& pcorr); //! pointer to the underlying object that does the calculations. - WaterPropsIAPWSphi* m_phi; + mutable WaterPropsIAPWSphi m_phi; //! Dimensionless temperature /*! diff --git a/src/thermo/WaterPropsIAPWS.cpp b/src/thermo/WaterPropsIAPWS.cpp index 16aaaaca7..a796f7daa 100644 --- a/src/thermo/WaterPropsIAPWS.cpp +++ b/src/thermo/WaterPropsIAPWS.cpp @@ -38,22 +38,18 @@ static const doublereal Rgas = 8.314371E3; // Joules kmol-1 K-1 // Base constructor WaterPropsIAPWS::WaterPropsIAPWS() : - m_phi(0), tau(-1.0), delta(-1.0), iState(-30000) { - m_phi = new WaterPropsIAPWSphi(); } WaterPropsIAPWS::WaterPropsIAPWS(const WaterPropsIAPWS& b) : - m_phi(0), tau(b.tau), delta(b.delta), iState(b.iState) { - m_phi = new WaterPropsIAPWSphi(); - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); } WaterPropsIAPWS& WaterPropsIAPWS::operator=(const WaterPropsIAPWS& b) @@ -64,16 +60,10 @@ WaterPropsIAPWS& WaterPropsIAPWS::operator=(const WaterPropsIAPWS& b) tau = b.tau; delta = b.delta; iState = b.iState; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); return *this; } -WaterPropsIAPWS::~WaterPropsIAPWS() -{ - delete m_phi; - m_phi = 0; -} - void WaterPropsIAPWS::calcDim(doublereal temperature, doublereal rho) { tau = T_c / temperature; @@ -94,7 +84,7 @@ void WaterPropsIAPWS::calcDim(doublereal temperature, doublereal rho) doublereal WaterPropsIAPWS::helmholtzFE() const { - doublereal retn = m_phi->phi(tau, delta); + doublereal retn = m_phi.phi(tau, delta); doublereal temperature = T_c/tau; doublereal RT = Rgas * temperature; return retn * RT; @@ -102,7 +92,7 @@ doublereal WaterPropsIAPWS::helmholtzFE() const doublereal WaterPropsIAPWS::pressure() const { - doublereal retn = m_phi->pressureM_rhoRT(tau, delta); + doublereal retn = m_phi.pressureM_rhoRT(tau, delta); doublereal rho = delta * Rho_c; doublereal temperature = T_c / tau; return retn * rho * Rgas * temperature/M_water; @@ -144,7 +134,7 @@ doublereal WaterPropsIAPWS::density(doublereal temperature, doublereal pressure, doublereal p_red = pressure * M_water / (Rgas * temperature * Rho_c); deltaGuess = rhoguess / Rho_c; setState_TR(temperature, rhoguess); - doublereal delta_retn = m_phi->dfind(p_red, tau, deltaGuess); + doublereal delta_retn = m_phi.dfind(p_red, tau, deltaGuess); doublereal density_retn; if (delta_retn >0.0) { delta = delta_retn; @@ -203,9 +193,9 @@ doublereal WaterPropsIAPWS::density_const(doublereal pressure, deltaGuess = rhoguess / Rho_c; delta = deltaGuess; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); - doublereal delta_retn = m_phi->dfind(p_red, tau, deltaGuess); + doublereal delta_retn = m_phi.dfind(p_red, tau, deltaGuess); doublereal density_retn; if (delta_retn > 0.0) { delta = delta_retn; @@ -220,7 +210,7 @@ doublereal WaterPropsIAPWS::density_const(doublereal pressure, } delta = deltaSave; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); return density_retn; } @@ -278,14 +268,14 @@ doublereal WaterPropsIAPWS::isothermalCompressibility() const doublereal WaterPropsIAPWS::dpdrho() const { - doublereal retn = m_phi->dimdpdrho(tau, delta); + doublereal retn = m_phi.dimdpdrho(tau, delta); doublereal temperature = T_c/tau; return retn * Rgas * temperature / M_water; } doublereal WaterPropsIAPWS::coeffPresExp() const { - return m_phi->dimdpdT(tau, delta); + return m_phi.dimdpdT(tau, delta); } doublereal WaterPropsIAPWS::coeffThermExp() const @@ -298,7 +288,7 @@ doublereal WaterPropsIAPWS::coeffThermExp() const doublereal WaterPropsIAPWS::Gibbs() const { - doublereal gRT = m_phi->gibbs_RT(); + doublereal gRT = m_phi.gibbs_RT(); doublereal temperature = T_c/tau; return gRT * Rgas * temperature; } @@ -313,7 +303,7 @@ void WaterPropsIAPWS::corr(doublereal temperature, doublereal pressure, temperature, pressure); } setState_TR(temperature, densLiq); - doublereal gibbsLiqRT = m_phi->gibbs_RT(); + doublereal gibbsLiqRT = m_phi.gibbs_RT(); densGas = density(temperature, pressure, WATER_GAS, densGas); if (densGas <= 0.0) { @@ -322,7 +312,7 @@ void WaterPropsIAPWS::corr(doublereal temperature, doublereal pressure, temperature, pressure); } setState_TR(temperature, densGas); - doublereal gibbsGasRT = m_phi->gibbs_RT(); + doublereal gibbsGasRT = m_phi.gibbs_RT(); delGRT = gibbsLiqRT - gibbsGasRT; } @@ -337,7 +327,7 @@ void WaterPropsIAPWS::corr1(doublereal temperature, doublereal pressure, temperature, pressure); } setState_TR(temperature, densLiq); - doublereal prL = m_phi->phiR(); + doublereal prL = m_phi.phiR(); densGas = density(temperature, pressure, WATER_GAS, densGas); if (densGas <= 0.0) { @@ -346,7 +336,7 @@ void WaterPropsIAPWS::corr1(doublereal temperature, doublereal pressure, temperature, pressure); } setState_TR(temperature, densGas); - doublereal prG = m_phi->phiR(); + doublereal prG = m_phi.phiR(); doublereal rhs = (prL - prG) + log(densLiq/densGas); rhs /= (1.0/densGas - 1.0/densLiq); pcorr = rhs * Rgas * temperature / M_water; @@ -417,7 +407,7 @@ int WaterPropsIAPWS::phaseState(bool checkState) const doublereal deltaSave = delta; doublereal deltaDel = rhoDel / Rho_c; delta = deltaDel; - m_phi->tdpolycalc(tau, deltaDel); + m_phi.tdpolycalc(tau, deltaDel); doublereal kappaDel = isothermalCompressibility(); doublereal d2rhodp2 = (rhoDel * kappaDel - rho * kappa) / (rhoDel - rho); @@ -427,7 +417,7 @@ int WaterPropsIAPWS::phaseState(bool checkState) const iState = WATER_UNSTABLEGAS; } delta = deltaSave; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); } } } @@ -450,7 +440,7 @@ doublereal WaterPropsIAPWS::densSpinodalWater() const doublereal densSatLiq = density_const(p, WATER_LIQUID); doublereal dens_old = densSatLiq; delta = dens_old / Rho_c; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); doublereal dpdrho_old = dpdrho(); if (dpdrho_old > 0.0) { rho_high = std::min(dens_old, rho_high); @@ -459,7 +449,7 @@ doublereal WaterPropsIAPWS::densSpinodalWater() const } doublereal dens_new = densSatLiq* (1.0001); delta = dens_new / Rho_c; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); doublereal dpdrho_new = dpdrho(); if (dpdrho_new > 0.0) { rho_high = std::min(dens_new, rho_high); @@ -495,7 +485,7 @@ doublereal WaterPropsIAPWS::densSpinodalWater() const dens_new = dens_est; delta = dens_new / Rho_c; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); dpdrho_new = dpdrho(); if (dpdrho_new > 0.0) { rho_high = std::min(dens_new, rho_high); @@ -518,7 +508,7 @@ doublereal WaterPropsIAPWS::densSpinodalWater() const } // Restore the original delta delta = delta_save; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); return dens_new; } @@ -538,7 +528,7 @@ doublereal WaterPropsIAPWS::densSpinodalSteam() const doublereal densSatGas = density_const(p, WATER_GAS); doublereal dens_old = densSatGas; delta = dens_old / Rho_c; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); doublereal dpdrho_old = dpdrho(); if (dpdrho_old < 0.0) { rho_high = std::min(dens_old, rho_high); @@ -547,7 +537,7 @@ doublereal WaterPropsIAPWS::densSpinodalSteam() const } doublereal dens_new = densSatGas * (0.99); delta = dens_new / Rho_c; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); doublereal dpdrho_new = dpdrho(); if (dpdrho_new < 0.0) { rho_high = std::min(dens_new, rho_high); @@ -582,7 +572,7 @@ doublereal WaterPropsIAPWS::densSpinodalSteam() const dpdrho_old = dpdrho_new; dens_new = dens_est; delta = dens_new / Rho_c; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); dpdrho_new = dpdrho(); if (dpdrho_new < 0.0) { rho_high = std::min(dens_new, rho_high); @@ -605,45 +595,45 @@ doublereal WaterPropsIAPWS::densSpinodalSteam() const } // Restore the original delta delta = delta_save; - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); return dens_new; } void WaterPropsIAPWS::setState_TR(doublereal temperature, doublereal rho) { calcDim(temperature, rho); - m_phi->tdpolycalc(tau, delta); + m_phi.tdpolycalc(tau, delta); } doublereal WaterPropsIAPWS::enthalpy() const { doublereal temperature = T_c/tau; - doublereal hRT = m_phi->enthalpy_RT(); + doublereal hRT = m_phi.enthalpy_RT(); return hRT * Rgas * temperature; } doublereal WaterPropsIAPWS::intEnergy() const { doublereal temperature = T_c / tau; - doublereal uRT = m_phi->intEnergy_RT(); + doublereal uRT = m_phi.intEnergy_RT(); return uRT * Rgas * temperature; } doublereal WaterPropsIAPWS::entropy() const { - doublereal sR = m_phi->entropy_R(); + doublereal sR = m_phi.entropy_R(); return sR * Rgas; } doublereal WaterPropsIAPWS::cv() const { - doublereal cvR = m_phi->cv_R(); + doublereal cvR = m_phi.cv_R(); return cvR * Rgas; } doublereal WaterPropsIAPWS::cp() const { - doublereal cpR = m_phi->cp_R(); + doublereal cpR = m_phi.cp_R(); return cpR * Rgas; }