Make m_phi a regular member of WaterPropsIAPWS instead of a pointer

This commit is contained in:
Ray Speth 2015-10-07 15:40:58 -04:00
parent 3c05e801a4
commit ffc4ba07da
2 changed files with 32 additions and 45 deletions

View file

@ -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
/*!

View file

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