[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:
parent
0eeae5d9c0
commit
f61747973c
14 changed files with 82 additions and 155 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class WaterProps;
|
|||
/*!
|
||||
* @ingroup pdssthermo
|
||||
*/
|
||||
class PDSS_HKFT : public PDSS
|
||||
class PDSS_HKFT : public PDSS_Molar
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class WaterProps;
|
|||
*
|
||||
* @ingroup pdssthermo
|
||||
*/
|
||||
class PDSS_Water : public PDSS
|
||||
class PDSS_Water : public PDSS_Molar
|
||||
{
|
||||
public:
|
||||
//! @name Constructors
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue