From 43ec6ff871c4b2678a70e3639e14c7d4ab286f1a Mon Sep 17 00:00:00 2001 From: Harry Moffat Date: Thu, 4 Sep 2008 16:08:56 +0000 Subject: [PATCH] Fixed errors in the startups of PDSS_Water and WaterSSTP that had recently crept in. Started getting rid of property evalulations that also set the state. This is not consistent with the rest of Cantera. --- Cantera/src/thermo/PDSS_Water.cpp | 38 ++++++++++---------------- Cantera/src/thermo/WaterPropsIAPWS.cpp | 29 ++------------------ Cantera/src/thermo/WaterPropsIAPWS.h | 26 +----------------- Cantera/src/thermo/WaterSSTP.cpp | 29 ++++++++++---------- Cantera/src/thermo/WaterSSTP.h | 3 ++ 5 files changed, 34 insertions(+), 91 deletions(-) diff --git a/Cantera/src/thermo/PDSS_Water.cpp b/Cantera/src/thermo/PDSS_Water.cpp index 60b1ce3d9..8bba86f7a 100644 --- a/Cantera/src/thermo/PDSS_Water.cpp +++ b/Cantera/src/thermo/PDSS_Water.cpp @@ -242,9 +242,8 @@ namespace Cantera { doublereal presLow = 1.0E-2; doublereal oneBar = 1.0E5; doublereal dens = 1.0E-9; - doublereal dd = m_sub->density(T, presLow, WATER_GAS, dens); - setTemperature(T); - m_dens = dd; + m_dens = m_sub->density(T, presLow, WATER_GAS, dens); + m_pres = presLow; SW_Offset = 0.0; doublereal s = entropy_mole(); s -= GasConstant * log(oneBar/presLow); @@ -260,17 +259,15 @@ namespace Cantera { EW_Offset = -241.826E6 - h; } h = enthalpy_mole(); - //printf("h = %g\n", h); - /* * Set the initial state of the system to 298.15 K and * 1 bar. */ setTemperature(298.15); - doublereal rho0 = m_sub->density(298.15, OneAtm, WATER_LIQUID); - m_dens = rho0; + m_dens = m_sub->density(298.15, OneAtm, WATER_LIQUID); + m_pres = OneAtm; } void PDSS_Water::initThermo() { @@ -282,27 +279,20 @@ namespace Cantera { PDSS::initThermoXML(phaseNode, id); } - doublereal PDSS_Water:: - enthalpy_mole() const { - doublereal T = m_temp; - doublereal dens = m_dens; - doublereal h = m_sub->enthalpy(T, dens); + doublereal PDSS_Water::enthalpy_mole() const { + doublereal h = m_sub->enthalpy(); return (h + EW_Offset); } doublereal PDSS_Water:: intEnergy_mole() const { - doublereal T = m_dens; - doublereal dens = m_temp; - doublereal u = m_sub->intEnergy(T, dens); + doublereal u = m_sub->intEnergy(); return (u + EW_Offset); } doublereal PDSS_Water:: entropy_mole() const { - doublereal T = m_temp; - doublereal dens = m_dens; - doublereal s = m_sub->entropy(T, dens); + doublereal s = m_sub->entropy(); return (s + SW_Offset); } @@ -344,8 +334,8 @@ namespace Cantera { doublereal PDSS_Water::gibbs_RT_ref() const { doublereal T = m_temp; - doublereal dens0 = m_sub->density(T, m_p0); - doublereal h = m_sub->enthalpy(T, dens0); + m_sub->density(T, m_p0); + doublereal h = m_sub->enthalpy(); m_sub->setState_TR(m_temp, m_dens); return ((h + EW_Offset - SW_Offset*T)/(T * GasConstant)); } @@ -354,8 +344,8 @@ namespace Cantera { doublereal PDSS_Water::enthalpy_RT_ref() const { doublereal T = m_temp; - doublereal dens0 = m_sub->density(T, m_p0); - doublereal h = m_sub->enthalpy(T, dens0); + m_sub->density(T, m_p0); + doublereal h = m_sub->enthalpy(); m_sub->setState_TR(m_temp, m_dens); return ((h + EW_Offset)/(T * GasConstant)); } @@ -363,8 +353,8 @@ namespace Cantera { doublereal PDSS_Water:: entropy_R_ref() const { doublereal T = m_temp; - doublereal dens0 = m_sub->density(T, m_p0); - doublereal s = m_sub->entropy(T, dens0); + m_sub->density(T, m_p0); + doublereal s = m_sub->entropy(); m_sub->setState_TR(m_temp, m_dens); return ((s + SW_Offset)/GasConstant); } diff --git a/Cantera/src/thermo/WaterPropsIAPWS.cpp b/Cantera/src/thermo/WaterPropsIAPWS.cpp index dfe15bcc9..0f9e857ed 100644 --- a/Cantera/src/thermo/WaterPropsIAPWS.cpp +++ b/Cantera/src/thermo/WaterPropsIAPWS.cpp @@ -396,14 +396,7 @@ void WaterPropsIAPWS::setState_TR(double temperature, double rho) { * Calculate the enthalpy in mks units of * J kmol-1 K-1. */ -double WaterPropsIAPWS:: -enthalpy(double temperature, double rho) { - setState_TR(temperature, rho); - double hRT = m_phi->enthalpy_RT(); - return (hRT * Rgas * temperature); -} -double WaterPropsIAPWS:: -enthalpy() const { +double WaterPropsIAPWS::enthalpy() const { double temperature = T_c/tau; double hRT = m_phi->enthalpy_RT(); return (hRT * Rgas * temperature); @@ -414,30 +407,12 @@ enthalpy() const { * Calculate the internal Energy in mks units of * J kmol-1 K-1. */ -double WaterPropsIAPWS:: -intEnergy(double temperature, double rho) { - setState_TR(temperature, rho); - double uRT = m_phi->intEnergy_RT(); - return (uRT * Rgas * temperature); -} -double WaterPropsIAPWS:: -intEnergy() const{ +double WaterPropsIAPWS::intEnergy() const{ double temperature = T_c / tau; double uRT = m_phi->intEnergy_RT(); return (uRT * Rgas * temperature); } -/* - * Calculate the enthalpy in mks units of - * J kmol-1 K-1. - */ -double WaterPropsIAPWS:: -entropy(double temperature, double rho) { - setState_TR(temperature, rho); - double sR = m_phi->entropy_R(); - return (sR * Rgas); -} - /* * Calculate the enthalpy in mks units of * J kmol-1 K-1. diff --git a/Cantera/src/thermo/WaterPropsIAPWS.h b/Cantera/src/thermo/WaterPropsIAPWS.h index 7c7f64119..77a162ae6 100644 --- a/Cantera/src/thermo/WaterPropsIAPWS.h +++ b/Cantera/src/thermo/WaterPropsIAPWS.h @@ -188,40 +188,16 @@ public: //! using the last temperature and density double Gibbs() const; - //! Calculate the enthalpy in mks units of J kmol-1 - /*! - * @param temperature temperature (kelvin) - * @param rho density (kg m-3) - */ - double enthalpy(double temperature, double rho); - //! Calculate the enthalpy in mks units of J kmol-1 //! using the last temperature and density double enthalpy() const; //! Calculate the internal energy in mks units of J kmol-1 - /*! - * @param temperature temperature (kelvin) - * @param rho density (kg m-3) - */ - double intEnergy(double temperature, double rho); - - //! Calculate the internal energy in mks units of J kmol-1 - //! at the last internal energy double intEnergy() const; - - //! Calculate the entropy in mks units of J kmol-1 K-1 - /*! - * @param temperature temperature (kelvin) - * @param rho density (kg m-3) - */ - double entropy(double temperature, double rho); //! Calculate the entropy in mks units of J kmol-1 K-1 - //! at the last temperature and density double entropy() const; - - + //! Calculate the constant volume heat capacity in mks units of J kmol-1 K-1 /*! * @param temperature temperature (kelvin) diff --git a/Cantera/src/thermo/WaterSSTP.cpp b/Cantera/src/thermo/WaterSSTP.cpp index bac7f80e8..78f236700 100644 --- a/Cantera/src/thermo/WaterSSTP.cpp +++ b/Cantera/src/thermo/WaterSSTP.cpp @@ -233,13 +233,14 @@ namespace Cantera { * Set the baseline */ doublereal T = 298.15; + State::setDensity(7.0E-8); + State::setTemperature(T); doublereal presLow = 1.0E-2; doublereal oneBar = 1.0E5; - doublereal dens = density(); - doublereal dd = m_sub->density(T, presLow, WATER_GAS, dens); - setTemperature(T); + doublereal dd = m_sub->density(T, presLow, WATER_GAS, 7.0E-8); setDensity(dd); + setTemperature(T); SW_Offset = 0.0; doublereal s = entropy_mole(); s -= GasConstant * log(oneBar/presLow); @@ -291,8 +292,7 @@ namespace Cantera { */ void WaterSSTP::getEnthalpy_RT(doublereal* hrt) const { double T = temperature(); - double dens = density(); - doublereal h = m_sub->enthalpy(T, dens); + doublereal h = m_sub->enthalpy(); *hrt = (h + EW_Offset)/(GasConstant*T); } @@ -301,9 +301,7 @@ namespace Cantera { * J kmol-1 */ void WaterSSTP::getIntEnergy_RT(doublereal *ubar) const { - double T = temperature(); - double dens = density(); - doublereal u = m_sub->intEnergy(T, dens); + doublereal u = m_sub->intEnergy(); *ubar = (u + EW_Offset)/GasConstant; } @@ -311,9 +309,7 @@ namespace Cantera { * Calculate the dimensionless entropy */ void WaterSSTP::getEntropy_R(doublereal* sr) const { - double T = temperature(); - double dens = density(); - doublereal s = m_sub->entropy(T, dens); + doublereal s = m_sub->entropy(); sr[0] = (s + SW_Offset) / GasConstant; } @@ -380,7 +376,7 @@ namespace Cantera { if (dd <= 0.0) { throw CanteraError("setPressure", "error"); } - doublereal h = m_sub->enthalpy(T, dd); + doublereal h = m_sub->enthalpy(); *hrt = (h + EW_Offset) / (GasConstant * T); dd = m_sub->density(T, p, waterState, dens); } @@ -429,7 +425,7 @@ namespace Cantera { } m_sub->setState_TR(T, dd); - doublereal s = m_sub->entropy(T, dd); + doublereal s = m_sub->entropy(); *sr = (s + SW_Offset)/ (GasConstant); dd = m_sub->density(T, p, waterState, dens); @@ -539,7 +535,6 @@ namespace Cantera { // critical density doublereal WaterSSTP::critDensity() const { return m_sub->Rhocrit(); } - void WaterSSTP::setTemperature(double temp) { State::setTemperature(temp); @@ -547,7 +542,11 @@ namespace Cantera { m_sub->setState_TR(temp, dd); } - + void WaterSSTP::setDensity(double dens) { + State::setDensity(dens); + doublereal temp = temperature(); + m_sub->setState_TR(temp, dens); + } // saturation pressure doublereal WaterSSTP::satPressure(doublereal t) const { diff --git a/Cantera/src/thermo/WaterSSTP.h b/Cantera/src/thermo/WaterSSTP.h index 2df13b6e7..07c1e4db5 100644 --- a/Cantera/src/thermo/WaterSSTP.h +++ b/Cantera/src/thermo/WaterSSTP.h @@ -386,7 +386,10 @@ namespace Cantera { */ virtual doublereal vaporFraction() const; + virtual void setTemperature(double temp); + + virtual void setDensity(double dens); void constructPhase();