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.
This commit is contained in:
Harry Moffat 2008-09-04 16:08:56 +00:00
parent 8fd2fe4ada
commit 43ec6ff871
5 changed files with 34 additions and 91 deletions

View file

@ -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);
}

View file

@ -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.

View file

@ -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)

View file

@ -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 {

View file

@ -386,7 +386,10 @@ namespace Cantera {
*/
virtual doublereal vaporFraction() const;
virtual void setTemperature(double temp);
virtual void setDensity(double dens);
void constructPhase();