Make m_sub a regular member of WaterSSTP instead of a pointer
This commit is contained in:
parent
ffc4ba07da
commit
0690626ab8
2 changed files with 57 additions and 70 deletions
|
|
@ -12,6 +12,7 @@
|
|||
#define CT_WATERSSTP_H
|
||||
|
||||
#include "SingleSpeciesTP.h"
|
||||
#include "cantera/thermo/WaterPropsIAPWS.h"
|
||||
|
||||
namespace Cantera
|
||||
{
|
||||
|
|
@ -417,7 +418,7 @@ public:
|
|||
|
||||
//! Get a pointer to a changeable WaterPropsIAPWS object
|
||||
WaterPropsIAPWS* getWater() {
|
||||
return m_sub;
|
||||
return &m_sub;
|
||||
}
|
||||
|
||||
//! Get a pointer to a changeable WaterPropsIAPWS object
|
||||
|
|
@ -434,9 +435,8 @@ protected:
|
|||
void _updateThermo() const;
|
||||
|
||||
private:
|
||||
//! Pointer to the WaterPropsIAPWS that calculates the real properties
|
||||
//! of water.
|
||||
mutable WaterPropsIAPWS* m_sub;
|
||||
//! WaterPropsIAPWS that calculates the real properties of water.
|
||||
mutable WaterPropsIAPWS m_sub;
|
||||
|
||||
//! Pointer to the WaterProps object
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
*/
|
||||
|
||||
#include "cantera/thermo/WaterSSTP.h"
|
||||
#include "cantera/thermo/WaterPropsIAPWS.h"
|
||||
#include "cantera/thermo/WaterProps.h"
|
||||
#include "cantera/thermo/ThermoFactory.h"
|
||||
#include "cantera/base/stringUtils.h"
|
||||
|
|
@ -20,7 +19,6 @@ using namespace std;
|
|||
namespace Cantera
|
||||
{
|
||||
WaterSSTP::WaterSSTP() :
|
||||
m_sub(0),
|
||||
m_waterProps(0),
|
||||
m_mw(0.0),
|
||||
EW_Offset(0.0),
|
||||
|
|
@ -31,7 +29,6 @@ WaterSSTP::WaterSSTP() :
|
|||
}
|
||||
|
||||
WaterSSTP::WaterSSTP(const std::string& inputFile, const std::string& id) :
|
||||
m_sub(0),
|
||||
m_waterProps(0),
|
||||
m_mw(0.0),
|
||||
EW_Offset(0.0),
|
||||
|
|
@ -43,7 +40,6 @@ WaterSSTP::WaterSSTP(const std::string& inputFile, const std::string& id) :
|
|||
}
|
||||
|
||||
WaterSSTP::WaterSSTP(XML_Node& phaseRoot, const std::string& id) :
|
||||
m_sub(0),
|
||||
m_waterProps(0),
|
||||
m_mw(0.0),
|
||||
EW_Offset(0.0),
|
||||
|
|
@ -56,7 +52,6 @@ WaterSSTP::WaterSSTP(XML_Node& phaseRoot, const std::string& id) :
|
|||
|
||||
WaterSSTP::WaterSSTP(const WaterSSTP& b) :
|
||||
SingleSpeciesTP(b),
|
||||
m_sub(0),
|
||||
m_waterProps(0),
|
||||
m_mw(b.m_mw),
|
||||
EW_Offset(b.EW_Offset),
|
||||
|
|
@ -64,8 +59,7 @@ WaterSSTP::WaterSSTP(const WaterSSTP& b) :
|
|||
m_ready(false),
|
||||
m_allowGasPhase(b.m_allowGasPhase)
|
||||
{
|
||||
m_sub = new WaterPropsIAPWS(*(b.m_sub));
|
||||
m_waterProps = new WaterProps(m_sub);
|
||||
m_waterProps = new WaterProps(&m_sub);
|
||||
|
||||
/*
|
||||
* Use the assignment operator to do the brunt
|
||||
|
|
@ -79,10 +73,10 @@ WaterSSTP& WaterSSTP::operator=(const WaterSSTP& b)
|
|||
if (&b == this) {
|
||||
return *this;
|
||||
}
|
||||
*m_sub = *b.m_sub;
|
||||
m_sub = b.m_sub;
|
||||
|
||||
if (!m_waterProps) {
|
||||
m_waterProps = new WaterProps(m_sub);
|
||||
m_waterProps = new WaterProps(&m_sub);
|
||||
}
|
||||
*m_waterProps = *b.m_waterProps;
|
||||
|
||||
|
|
@ -99,7 +93,6 @@ ThermoPhase* WaterSSTP::duplMyselfAsThermoPhase() const
|
|||
|
||||
WaterSSTP::~WaterSSTP()
|
||||
{
|
||||
delete m_sub;
|
||||
delete m_waterProps;
|
||||
}
|
||||
|
||||
|
|
@ -109,12 +102,6 @@ void WaterSSTP::initThermoXML(XML_Node& phaseNode, const std::string& id)
|
|||
* Do initializations that don't depend on knowing the XML file
|
||||
*/
|
||||
initThermo();
|
||||
delete m_sub;
|
||||
m_sub = new WaterPropsIAPWS();
|
||||
if (m_sub == 0) {
|
||||
throw CanteraError("WaterSSTP::initThermo",
|
||||
"could not create new substance object.");
|
||||
}
|
||||
/*
|
||||
* Calculate the molecular weight. Note while there may
|
||||
* be a very good calculated weight in the steam table
|
||||
|
|
@ -149,7 +136,7 @@ void WaterSSTP::initThermoXML(XML_Node& phaseNode, const std::string& id)
|
|||
|
||||
doublereal presLow = 1.0E-2;
|
||||
doublereal oneBar = 1.0E5;
|
||||
doublereal dd = m_sub->density(T, presLow, WATER_GAS, 7.0E-8);
|
||||
doublereal dd = m_sub.density(T, presLow, WATER_GAS, 7.0E-8);
|
||||
setDensity(dd);
|
||||
setTemperature(T);
|
||||
SW_Offset = 0.0;
|
||||
|
|
@ -172,10 +159,10 @@ void WaterSSTP::initThermoXML(XML_Node& phaseNode, const std::string& id)
|
|||
* 1 bar.
|
||||
*/
|
||||
setTemperature(298.15);
|
||||
double rho0 = m_sub->density(298.15, OneAtm, WATER_LIQUID);
|
||||
double rho0 = m_sub.density(298.15, OneAtm, WATER_LIQUID);
|
||||
setDensity(rho0);
|
||||
|
||||
m_waterProps = new WaterProps(m_sub);
|
||||
m_waterProps = new WaterProps(&m_sub);
|
||||
|
||||
/*
|
||||
* We have to do something with the thermo function here.
|
||||
|
|
@ -196,23 +183,23 @@ void WaterSSTP::setParametersFromXML(const XML_Node& eosdata)
|
|||
|
||||
void WaterSSTP::getEnthalpy_RT(doublereal* hrt) const
|
||||
{
|
||||
*hrt = (m_sub->enthalpy() + EW_Offset)/(GasConstant*temperature());
|
||||
*hrt = (m_sub.enthalpy() + EW_Offset)/(GasConstant*temperature());
|
||||
}
|
||||
|
||||
void WaterSSTP::getIntEnergy_RT(doublereal* ubar) const
|
||||
{
|
||||
*ubar = (m_sub->intEnergy() + EW_Offset)/GasConstant;
|
||||
*ubar = (m_sub.intEnergy() + EW_Offset)/GasConstant;
|
||||
}
|
||||
|
||||
void WaterSSTP::getEntropy_R(doublereal* sr) const
|
||||
{
|
||||
sr[0] = (m_sub->entropy() + SW_Offset) / GasConstant;
|
||||
sr[0] = (m_sub.entropy() + SW_Offset) / GasConstant;
|
||||
}
|
||||
|
||||
void WaterSSTP::getGibbs_RT(doublereal* grt) const
|
||||
{
|
||||
double T = temperature();
|
||||
*grt = (m_sub->Gibbs() + EW_Offset - SW_Offset*T) / (GasConstant * T);
|
||||
*grt = (m_sub.Gibbs() + EW_Offset - SW_Offset*T) / (GasConstant * T);
|
||||
if (!m_ready) {
|
||||
throw CanteraError("waterSSTP::", "Phase not ready");
|
||||
}
|
||||
|
|
@ -220,7 +207,7 @@ void WaterSSTP::getGibbs_RT(doublereal* grt) const
|
|||
|
||||
void WaterSSTP::getStandardChemPotentials(doublereal* gss) const
|
||||
{
|
||||
*gss = (m_sub->Gibbs() + EW_Offset - SW_Offset*temperature());
|
||||
*gss = (m_sub.Gibbs() + EW_Offset - SW_Offset*temperature());
|
||||
if (!m_ready) {
|
||||
throw CanteraError("waterSSTP::", "Phase not ready");
|
||||
}
|
||||
|
|
@ -228,12 +215,12 @@ void WaterSSTP::getStandardChemPotentials(doublereal* gss) const
|
|||
|
||||
void WaterSSTP::getCp_R(doublereal* cpr) const
|
||||
{
|
||||
cpr[0] = m_sub->cp() / GasConstant;
|
||||
cpr[0] = m_sub.cp() / GasConstant;
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::cv_mole() const
|
||||
{
|
||||
return m_sub->cv();
|
||||
return m_sub.cv();
|
||||
}
|
||||
|
||||
void WaterSSTP::getEnthalpy_RT_ref(doublereal* hrt) const
|
||||
|
|
@ -242,17 +229,17 @@ void WaterSSTP::getEnthalpy_RT_ref(doublereal* hrt) const
|
|||
double T = temperature();
|
||||
double dens = density();
|
||||
int waterState = WATER_GAS;
|
||||
double rc = m_sub->Rhocrit();
|
||||
double rc = m_sub.Rhocrit();
|
||||
if (dens > rc) {
|
||||
waterState = WATER_LIQUID;
|
||||
}
|
||||
doublereal dd = m_sub->density(T, OneAtm, waterState, dens);
|
||||
doublereal dd = m_sub.density(T, OneAtm, waterState, dens);
|
||||
if (dd <= 0.0) {
|
||||
throw CanteraError("setPressure", "error");
|
||||
}
|
||||
doublereal h = m_sub->enthalpy();
|
||||
doublereal h = m_sub.enthalpy();
|
||||
*hrt = (h + EW_Offset) / (GasConstant * T);
|
||||
dd = m_sub->density(T, p, waterState, dens);
|
||||
dd = m_sub.density(T, p, waterState, dens);
|
||||
}
|
||||
|
||||
void WaterSSTP::getGibbs_RT_ref(doublereal* grt) const
|
||||
|
|
@ -261,18 +248,18 @@ void WaterSSTP::getGibbs_RT_ref(doublereal* grt) const
|
|||
double T = temperature();
|
||||
double dens = density();
|
||||
int waterState = WATER_GAS;
|
||||
double rc = m_sub->Rhocrit();
|
||||
double rc = m_sub.Rhocrit();
|
||||
if (dens > rc) {
|
||||
waterState = WATER_LIQUID;
|
||||
}
|
||||
doublereal dd = m_sub->density(T, OneAtm, waterState, dens);
|
||||
doublereal dd = m_sub.density(T, OneAtm, waterState, dens);
|
||||
if (dd <= 0.0) {
|
||||
throw CanteraError("setPressure", "error");
|
||||
}
|
||||
m_sub->setState_TR(T, dd);
|
||||
doublereal g = m_sub->Gibbs();
|
||||
m_sub.setState_TR(T, dd);
|
||||
doublereal g = m_sub.Gibbs();
|
||||
*grt = (g + EW_Offset - SW_Offset*T)/ (GasConstant * T);
|
||||
dd = m_sub->density(T, p, waterState, dens);
|
||||
dd = m_sub.density(T, p, waterState, dens);
|
||||
}
|
||||
|
||||
void WaterSSTP::getGibbs_ref(doublereal* g) const
|
||||
|
|
@ -289,20 +276,20 @@ void WaterSSTP::getEntropy_R_ref(doublereal* sr) const
|
|||
double T = temperature();
|
||||
double dens = density();
|
||||
int waterState = WATER_GAS;
|
||||
double rc = m_sub->Rhocrit();
|
||||
double rc = m_sub.Rhocrit();
|
||||
if (dens > rc) {
|
||||
waterState = WATER_LIQUID;
|
||||
}
|
||||
doublereal dd = m_sub->density(T, OneAtm, waterState, dens);
|
||||
doublereal dd = m_sub.density(T, OneAtm, waterState, dens);
|
||||
|
||||
if (dd <= 0.0) {
|
||||
throw CanteraError("setPressure", "error");
|
||||
}
|
||||
m_sub->setState_TR(T, dd);
|
||||
m_sub.setState_TR(T, dd);
|
||||
|
||||
doublereal s = m_sub->entropy();
|
||||
doublereal s = m_sub.entropy();
|
||||
*sr = (s + SW_Offset)/ GasConstant;
|
||||
dd = m_sub->density(T, p, waterState, dens);
|
||||
dd = m_sub.density(T, p, waterState, dens);
|
||||
}
|
||||
|
||||
void WaterSSTP::getCp_R_ref(doublereal* cpr) const
|
||||
|
|
@ -311,18 +298,18 @@ void WaterSSTP::getCp_R_ref(doublereal* cpr) const
|
|||
double T = temperature();
|
||||
double dens = density();
|
||||
int waterState = WATER_GAS;
|
||||
double rc = m_sub->Rhocrit();
|
||||
double rc = m_sub.Rhocrit();
|
||||
if (dens > rc) {
|
||||
waterState = WATER_LIQUID;
|
||||
}
|
||||
doublereal dd = m_sub->density(T, OneAtm, waterState, dens);
|
||||
m_sub->setState_TR(T, dd);
|
||||
doublereal dd = m_sub.density(T, OneAtm, waterState, dens);
|
||||
m_sub.setState_TR(T, dd);
|
||||
if (dd <= 0.0) {
|
||||
throw CanteraError("setPressure", "error");
|
||||
}
|
||||
doublereal cp = m_sub->cp();
|
||||
doublereal cp = m_sub.cp();
|
||||
*cpr = cp / GasConstant;
|
||||
dd = m_sub->density(T, p, waterState, dens);
|
||||
dd = m_sub.density(T, p, waterState, dens);
|
||||
}
|
||||
|
||||
void WaterSSTP::getStandardVolumes_ref(doublereal* vol) const
|
||||
|
|
@ -331,21 +318,21 @@ void WaterSSTP::getStandardVolumes_ref(doublereal* vol) const
|
|||
double T = temperature();
|
||||
double dens = density();
|
||||
int waterState = WATER_GAS;
|
||||
double rc = m_sub->Rhocrit();
|
||||
double rc = m_sub.Rhocrit();
|
||||
if (dens > rc) {
|
||||
waterState = WATER_LIQUID;
|
||||
}
|
||||
doublereal dd = m_sub->density(T, OneAtm, waterState, dens);
|
||||
doublereal dd = m_sub.density(T, OneAtm, waterState, dens);
|
||||
if (dd <= 0.0) {
|
||||
throw CanteraError("setPressure", "error");
|
||||
}
|
||||
*vol = meanMolecularWeight() /dd;
|
||||
dd = m_sub->density(T, p, waterState, dens);
|
||||
dd = m_sub.density(T, p, waterState, dens);
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::pressure() const
|
||||
{
|
||||
return m_sub->pressure();
|
||||
return m_sub.pressure();
|
||||
}
|
||||
|
||||
void WaterSSTP::setPressure(doublereal p)
|
||||
|
|
@ -353,11 +340,11 @@ void WaterSSTP::setPressure(doublereal p)
|
|||
double T = temperature();
|
||||
double dens = density();
|
||||
int waterState = WATER_GAS;
|
||||
double rc = m_sub->Rhocrit();
|
||||
double rc = m_sub.Rhocrit();
|
||||
if (dens > rc) {
|
||||
waterState = WATER_LIQUID;
|
||||
}
|
||||
doublereal dd = m_sub->density(T, p, waterState, dens);
|
||||
doublereal dd = m_sub.density(T, p, waterState, dens);
|
||||
if (dd <= 0.0) {
|
||||
throw CanteraError("setPressure", "error");
|
||||
}
|
||||
|
|
@ -366,12 +353,12 @@ void WaterSSTP::setPressure(doublereal p)
|
|||
|
||||
doublereal WaterSSTP::isothermalCompressibility() const
|
||||
{
|
||||
return m_sub->isothermalCompressibility();
|
||||
return m_sub.isothermalCompressibility();
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::thermalExpansionCoeff() const
|
||||
{
|
||||
return m_sub->coeffThermExp();
|
||||
return m_sub.coeffThermExp();
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::dthermalExpansionCoeffdT() const
|
||||
|
|
@ -380,57 +367,57 @@ doublereal WaterSSTP::dthermalExpansionCoeffdT() const
|
|||
doublereal dens_save = density();
|
||||
double T = temperature();
|
||||
double tt = T - 0.04;
|
||||
doublereal dd = m_sub->density(tt, pres, WATER_LIQUID, dens_save);
|
||||
doublereal dd = m_sub.density(tt, pres, WATER_LIQUID, dens_save);
|
||||
if (dd < 0.0) {
|
||||
throw CanteraError("WaterSSTP::dthermalExpansionCoeffdT",
|
||||
"Unable to solve for the density at T = {}, P = {}", tt, pres);
|
||||
}
|
||||
doublereal vald = m_sub->coeffThermExp();
|
||||
m_sub->setState_TR(T, dens_save);
|
||||
doublereal val2 = m_sub->coeffThermExp();
|
||||
doublereal vald = m_sub.coeffThermExp();
|
||||
m_sub.setState_TR(T, dens_save);
|
||||
doublereal val2 = m_sub.coeffThermExp();
|
||||
return (val2 - vald) / 0.04;
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::critTemperature() const
|
||||
{
|
||||
return m_sub->Tcrit();
|
||||
return m_sub.Tcrit();
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::critPressure() const
|
||||
{
|
||||
return m_sub->Pcrit();
|
||||
return m_sub.Pcrit();
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::critDensity() const
|
||||
{
|
||||
return m_sub->Rhocrit();
|
||||
return m_sub.Rhocrit();
|
||||
}
|
||||
|
||||
void WaterSSTP::setTemperature(const doublereal temp)
|
||||
{
|
||||
Phase::setTemperature(temp);
|
||||
m_sub->setState_TR(temp, density());
|
||||
m_sub.setState_TR(temp, density());
|
||||
}
|
||||
|
||||
void WaterSSTP::setDensity(const doublereal dens)
|
||||
{
|
||||
Phase::setDensity(dens);
|
||||
m_sub->setState_TR(temperature(), dens);
|
||||
m_sub.setState_TR(temperature(), dens);
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::satPressure(doublereal t) {
|
||||
doublereal tsave = temperature();
|
||||
doublereal dsave = density();
|
||||
doublereal pp = m_sub->psat(t);
|
||||
m_sub->setState_TR(tsave, dsave);
|
||||
doublereal pp = m_sub.psat(t);
|
||||
m_sub.setState_TR(tsave, dsave);
|
||||
return pp;
|
||||
}
|
||||
|
||||
doublereal WaterSSTP::vaporFraction() const
|
||||
{
|
||||
if (temperature() >= m_sub->Tcrit()) {
|
||||
if (temperature() >= m_sub.Tcrit()) {
|
||||
double dens = density();
|
||||
if (dens >= m_sub->Rhocrit()) {
|
||||
if (dens >= m_sub.Rhocrit()) {
|
||||
return 0.0;
|
||||
}
|
||||
return 1.0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue