[Thermo] Extract common implementations out of PDSS descendants

The descendants either calculate molar properties from nondimensonal properties
or vice versa. Add two derived classes to PDSS to implement these behaviors, and
have the leaf classes derive from whichever one of these makes sense.
This commit is contained in:
Ray Speth 2014-05-08 23:01:59 +00:00
parent 0eeae5d9c0
commit f61747973c
14 changed files with 82 additions and 155 deletions

View file

@ -675,6 +675,26 @@ protected:
doublereal* m_Vss_ptr;
};
//! Base class for PDSS classes which compute molar properties directly
class PDSS_Molar : public virtual PDSS
{
public:
virtual doublereal enthalpy_RT() const;
virtual doublereal entropy_R() const;
virtual doublereal gibbs_RT() const;
virtual doublereal cp_R() const;
};
//! Base class for PDSS classes which compute nondimensional properties directly
class PDSS_Nondimensional : public virtual PDSS
{
public:
virtual doublereal enthalpy_mole() const;
virtual doublereal entropy_mole() const;
virtual doublereal gibbs_mole() const;
virtual doublereal cp_mole() const;
};
}
#endif

View file

@ -23,7 +23,7 @@ class VPStandardStateTP;
/*!
* @ingroup pdssthermo
*/
class PDSS_ConstVol : public PDSS
class PDSS_ConstVol : public PDSS_Nondimensional
{
public:
//! @name Constructors
@ -85,14 +85,10 @@ public:
//! @{
// See PDSS.h for documentation of functions overridden from Class PDSS
virtual doublereal enthalpy_mole() const;
virtual doublereal enthalpy_RT() const;
virtual doublereal intEnergy_mole() const;
virtual doublereal entropy_mole() const;
virtual doublereal entropy_R() const;
virtual doublereal gibbs_mole() const;
virtual doublereal gibbs_RT() const;
virtual doublereal cp_mole() const;
virtual doublereal cp_R() const;
virtual doublereal cv_mole() const;
virtual doublereal molarVolume() const;

View file

@ -29,7 +29,7 @@ class WaterProps;
/*!
* @ingroup pdssthermo
*/
class PDSS_HKFT : public PDSS
class PDSS_HKFT : public PDSS_Molar
{
public:

View file

@ -25,7 +25,7 @@ class VPStandardStateTP;
*
* @ingroup pdssthermo
*/
class PDSS_IdealGas : public PDSS
class PDSS_IdealGas : public PDSS_Nondimensional
{
public:
//! @name Constructors
@ -88,14 +88,10 @@ public:
// See PDSS.h for documentation of functions overridden from Class PDSS
virtual doublereal enthalpy_mole() const;
virtual doublereal enthalpy_RT() const;
virtual doublereal intEnergy_mole() const;
virtual doublereal entropy_mole() const;
virtual doublereal entropy_R() const;
virtual doublereal gibbs_mole() const;
virtual doublereal gibbs_RT() const;
virtual doublereal cp_mole() const;
virtual doublereal cp_R() const;
virtual doublereal cv_mole() const;
virtual doublereal molarVolume() const;

View file

@ -27,7 +27,7 @@ class ThermoPhase;
*
* @ingroup pdssthermo
*/
class PDSS_IonsFromNeutral : public PDSS
class PDSS_IonsFromNeutral : public PDSS_Nondimensional
{
public:
//! @name Constructors
@ -92,12 +92,9 @@ public:
// See PDSS.h for documentation of functions overridden from Class PDSS
virtual doublereal enthalpy_mole() const;
virtual doublereal enthalpy_RT() const;
virtual doublereal intEnergy_mole() const;
virtual doublereal entropy_mole() const;
virtual doublereal entropy_R() const;
virtual doublereal gibbs_mole() const;
/*!
* @copydoc PDSS::gibbs_RT()
@ -112,7 +109,6 @@ public:
* case is the single anion species, with species index <I>sp</I>.
*/
virtual doublereal gibbs_RT() const;
virtual doublereal cp_mole() const;
virtual doublereal cp_R() const;
virtual doublereal molarVolume() const;
virtual doublereal density() const;

View file

@ -156,7 +156,7 @@ class VPStandardStateTP;
*
* @ingroup pdssthermo
*/
class PDSS_SSVol : public PDSS
class PDSS_SSVol : public PDSS_Nondimensional
{
public:
//! @name Constructors
@ -219,14 +219,10 @@ public:
// See PDSS.h for documentation of functions overridden from Class PDSS
virtual doublereal enthalpy_mole() const;
virtual doublereal enthalpy_RT() const;
virtual doublereal intEnergy_mole() const;
virtual doublereal entropy_mole() const;
virtual doublereal entropy_R() const;
virtual doublereal gibbs_mole() const;
virtual doublereal gibbs_RT() const;
virtual doublereal cp_mole() const;
virtual doublereal cp_R() const;
virtual doublereal cv_mole() const;
virtual doublereal molarVolume() const;

View file

@ -53,7 +53,7 @@ class WaterProps;
*
* @ingroup pdssthermo
*/
class PDSS_Water : public PDSS
class PDSS_Water : public PDSS_Molar
{
public:
//! @name Constructors

View file

@ -221,8 +221,7 @@ doublereal PDSS::enthalpy_mole() const
doublereal PDSS::enthalpy_RT() const
{
double RT = GasConstant * m_temp;
return enthalpy_mole()/RT;
throw NotImplementedError("PDSS::enthalpy_RT()");
}
doublereal PDSS::intEnergy_mole() const
@ -237,7 +236,7 @@ doublereal PDSS::entropy_mole() const
doublereal PDSS::entropy_R() const
{
return entropy_mole()/GasConstant;
throw NotImplementedError("PDSS::entropy_R()");
}
doublereal PDSS::gibbs_mole() const
@ -247,8 +246,7 @@ doublereal PDSS::gibbs_mole() const
doublereal PDSS::gibbs_RT() const
{
double RT = GasConstant * m_temp;
return gibbs_mole()/RT;
throw NotImplementedError("PDSS::gibbs_RT()");
}
doublereal PDSS::cp_mole() const
@ -258,7 +256,7 @@ doublereal PDSS::cp_mole() const
doublereal PDSS::cp_R() const
{
return cp_mole()/GasConstant;
throw NotImplementedError("PDSS::cp_R()");
}
doublereal PDSS::molarVolume() const
@ -404,4 +402,49 @@ void PDSS::reportParams(size_t& kindex, int& type,
maxTemp_ = m_maxTemp;
refPressure_ = m_p0;
}
// PDSS_Molar methods
doublereal PDSS_Molar::enthalpy_RT() const
{
return enthalpy_mole() / (GasConstant * temperature());
}
doublereal PDSS_Molar::entropy_R() const
{
return entropy_mole() / GasConstant;
}
doublereal PDSS_Molar::gibbs_RT() const
{
return gibbs_mole() / (GasConstant * temperature());
}
doublereal PDSS_Molar::cp_R() const
{
return cp_mole() / GasConstant;
}
// PDSS_Nondimensional methods
doublereal PDSS_Nondimensional::enthalpy_mole() const
{
return enthalpy_RT() * GasConstant * temperature();
}
doublereal PDSS_Nondimensional::entropy_mole() const
{
return entropy_R() * GasConstant;
}
doublereal PDSS_Nondimensional::gibbs_mole() const
{
return gibbs_RT() * GasConstant * temperature();
}
doublereal PDSS_Nondimensional::cp_mole() const
{
return cp_R() * GasConstant;
}
}

View file

@ -156,14 +156,6 @@ void PDSS_ConstVol::initThermo()
m_Vss_ptr[m_spindex] = m_constMolarVolume;
}
doublereal
PDSS_ConstVol::enthalpy_mole() const
{
doublereal val = enthalpy_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_ConstVol::enthalpy_RT() const
{
@ -179,40 +171,18 @@ PDSS_ConstVol::intEnergy_mole() const
return val * RT;
}
doublereal
PDSS_ConstVol::entropy_mole() const
{
doublereal val = entropy_R();
return val * GasConstant;
}
doublereal
PDSS_ConstVol::entropy_R() const
{
return m_sss_R_ptr[m_spindex];
}
doublereal
PDSS_ConstVol::gibbs_mole() const
{
doublereal val = gibbs_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_ConstVol::gibbs_RT() const
{
return m_gss_RT_ptr[m_spindex];
}
doublereal
PDSS_ConstVol::cp_mole() const
{
doublereal val = m_cpss_R_ptr[m_spindex];
return val * GasConstant;
}
doublereal
PDSS_ConstVol::cp_R() const
{

View file

@ -476,7 +476,7 @@ void PDSS_HKFT::initThermo()
{
PDSS::initThermo();
m_waterSS = (PDSS_Water*) m_tp->providePDSS(0);
m_waterSS = dynamic_cast<PDSS_Water*>(m_tp->providePDSS(0));
/*
* Section to initialize m_Z_pr_tr and m_Y_pr_tr
*/
@ -553,7 +553,7 @@ void PDSS_HKFT::initAllPtrs(VPStandardStateTP* vptp_ptr, VPSSMgr* vpssmgr_ptr,
SpeciesThermo* spthermo_ptr)
{
PDSS::initAllPtrs(vptp_ptr, vpssmgr_ptr, spthermo_ptr);
m_waterSS = (PDSS_Water*) m_tp->providePDSS(0);
m_waterSS = dynamic_cast<PDSS_Water*>(m_tp->providePDSS(0));
delete m_waterProps;
m_waterProps = new WaterProps(m_waterSS);
}

View file

@ -118,14 +118,6 @@ void PDSS_IdealGas::initThermo()
m_maxTemp = m_spthermo->maxTemp(m_spindex);
}
doublereal
PDSS_IdealGas::enthalpy_mole() const
{
doublereal val = enthalpy_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_IdealGas::enthalpy_RT() const
{
@ -140,40 +132,18 @@ PDSS_IdealGas::intEnergy_mole() const
return val * RT;
}
doublereal
PDSS_IdealGas::entropy_mole() const
{
doublereal val = entropy_R();
return val * GasConstant;
}
doublereal
PDSS_IdealGas::entropy_R() const
{
return m_s0_R_ptr[m_spindex] - log(m_pres/m_p0);
}
doublereal
PDSS_IdealGas::gibbs_mole() const
{
doublereal val = gibbs_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_IdealGas::gibbs_RT() const
{
return m_g0_RT_ptr[m_spindex] + log(m_pres/m_p0);
}
doublereal
PDSS_IdealGas::cp_mole() const
{
doublereal val = cp_R();
return val * GasConstant;
}
doublereal
PDSS_IdealGas::cp_R() const
{

View file

@ -215,14 +215,6 @@ void PDSS_IonsFromNeutral::initThermo()
m_maxTemp = m_spthermo->maxTemp(m_spindex);
}
doublereal
PDSS_IonsFromNeutral::enthalpy_mole() const
{
doublereal val = enthalpy_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_IonsFromNeutral::enthalpy_RT() const
{
@ -243,13 +235,6 @@ PDSS_IonsFromNeutral::intEnergy_mole() const
return val * RT;
}
doublereal
PDSS_IonsFromNeutral::entropy_mole() const
{
doublereal val = entropy_R();
return val * GasConstant;
}
doublereal
PDSS_IonsFromNeutral::entropy_R() const
{
@ -265,14 +250,6 @@ PDSS_IonsFromNeutral::entropy_R() const
return val;
}
doublereal
PDSS_IonsFromNeutral::gibbs_mole() const
{
doublereal val = gibbs_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_IonsFromNeutral::gibbs_RT() const
{
@ -288,13 +265,6 @@ PDSS_IonsFromNeutral::gibbs_RT() const
return val;
}
doublereal
PDSS_IonsFromNeutral::cp_mole() const
{
doublereal val = cp_R();
return val * GasConstant;
}
doublereal
PDSS_IonsFromNeutral::cp_R() const
{

View file

@ -182,14 +182,6 @@ void PDSS_SSVol::initThermo()
m_Vss_ptr[m_spindex] = m_constMolarVolume;
}
doublereal
PDSS_SSVol::enthalpy_mole() const
{
doublereal val = enthalpy_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_SSVol::enthalpy_RT() const
{
@ -205,40 +197,18 @@ PDSS_SSVol::intEnergy_mole() const
return val * RT;
}
doublereal
PDSS_SSVol::entropy_mole() const
{
doublereal val = entropy_R();
return val * GasConstant;
}
doublereal
PDSS_SSVol::entropy_R() const
{
return m_sss_R_ptr[m_spindex];
}
doublereal
PDSS_SSVol::gibbs_mole() const
{
doublereal val = gibbs_RT();
doublereal RT = GasConstant * m_temp;
return val * RT;
}
doublereal
PDSS_SSVol::gibbs_RT() const
{
return m_gss_RT_ptr[m_spindex];
}
doublereal
PDSS_SSVol::cp_mole() const
{
doublereal val = m_cpss_R_ptr[m_spindex];
return val * GasConstant;
}
doublereal
PDSS_SSVol::cp_R() const
{

View file

@ -52,7 +52,7 @@ VPSSMgr_Water_HKFT::operator=(const VPSSMgr_Water_HKFT& b)
return *this;
}
VPSSMgr::operator=(b);
m_waterSS = (PDSS_Water*) m_vptp_ptr->providePDSS(0);
m_waterSS = dynamic_cast<PDSS_Water*>(m_vptp_ptr->providePDSS(0));
m_tlastRef = -1.0;
return *this;
}
@ -154,9 +154,9 @@ void VPSSMgr_Water_HKFT::_updateRefStateThermo() const
m_cp0_R[0] = (m_waterSS->cp_mole()) / GasConstant;
m_g0_RT[0] = (m_hss_RT[0] - m_sss_R[0]);
m_V0[0] = (m_waterSS->density()) / m_vptp_ptr->molecularWeight(0);
PDSS_HKFT* ps;
PDSS* ps;
for (size_t k = 1; k < m_kk; k++) {
ps = (PDSS_HKFT*) m_vptp_ptr->providePDSS(k);
ps = m_vptp_ptr->providePDSS(k);
ps->setState_TP(m_tlast, m_p0);
m_cp0_R[k] = ps->cp_R();
m_s0_R[k] = ps->entropy_mole() / GasConstant;
@ -173,7 +173,7 @@ void VPSSMgr_Water_HKFT::_updateRefStateThermo() const
}
m_waterSS->setState_TP(m_tlast, m_plast);
for (size_t k = 1; k < m_kk; k++) {
ps = (PDSS_HKFT*) m_vptp_ptr->providePDSS(k);
ps = m_vptp_ptr->providePDSS(k);
ps->setState_TP(m_tlast, m_plast);
}
}
@ -190,7 +190,7 @@ void VPSSMgr_Water_HKFT::_updateStandardStateThermo()
m_Vss[0] = (m_vptp_ptr->molecularWeight(0)) / (m_waterSS->density());
for (size_t k = 1; k < m_kk; k++) {
PDSS_HKFT* ps = (PDSS_HKFT*) m_vptp_ptr->providePDSS(k);
PDSS* ps = m_vptp_ptr->providePDSS(k);
ps->setState_TP(m_tlast, m_plast);
m_cpss_R[k] = ps->cp_R();
m_sss_R[k] = ps->entropy_R();