Changed the algorithm for calculation of reference state properties.

It will now calculate the reference state at an elevated pressure for
elevated temperature for the real water equation of state.
Core dumps were happening around the critical point without this change.
This commit is contained in:
Harry Moffat 2008-12-22 22:40:44 +00:00
parent dfe6473b09
commit 103fd934a1
3 changed files with 28 additions and 5 deletions

View file

@ -392,7 +392,7 @@ namespace Cantera {
doublereal
PDSS_HKFT::gibbs_RT_ref() const {
doublereal m_psave = m_pres;
m_pres = OneAtm;
m_pres = m_waterSS->pref_safe(m_temp);
doublereal ee = gibbs_RT();
m_pres = m_psave;
return ee;
@ -401,7 +401,7 @@ namespace Cantera {
doublereal
PDSS_HKFT::enthalpy_RT_ref() const {
doublereal m_psave = m_pres;
m_pres = OneAtm;
m_pres = m_waterSS->pref_safe(m_temp);
doublereal hh = enthalpy_RT();
m_pres = m_psave;
return hh;
@ -410,7 +410,7 @@ namespace Cantera {
doublereal
PDSS_HKFT::entropy_R_ref() const {
doublereal m_psave = m_pres;
m_pres = OneAtm;
m_pres = m_waterSS->pref_safe(m_temp);
doublereal ee = entropy_R();
m_pres = m_psave;
return ee;
@ -419,7 +419,7 @@ namespace Cantera {
doublereal
PDSS_HKFT::cp_R_ref() const {
doublereal m_psave = m_pres;
m_pres = OneAtm;
m_pres = m_waterSS->pref_safe(m_temp);
doublereal ee = cp_R();
m_pres = m_psave;
return ee;
@ -428,7 +428,7 @@ namespace Cantera {
doublereal
PDSS_HKFT::molarVolume_ref() const {
doublereal m_psave = m_pres;
m_pres = OneAtm;
m_pres = m_waterSS->pref_safe(m_temp);
doublereal ee = molarVolume();
m_pres = m_psave;
return ee;

View file

@ -473,6 +473,18 @@ namespace Cantera {
m_sub->setState_TR(m_temp, m_dens);
}
doublereal PDSS_Water::pref_safe(doublereal temp) const {
if (temp < m_sub->Tcrit()) {
doublereal pp = m_sub->psat_est(temp);
if (pp > OneAtm) {
return pp;
}
} else {
return m_sub->Pcrit();
}
return OneAtm;
}
// saturation pressure
doublereal PDSS_Water::satPressure(doublereal t){
doublereal pp = m_sub->psat(t, WATER_LIQUID);

View file

@ -234,6 +234,17 @@ namespace Cantera {
* @{
*/
//! Returns a reference pressure value that can be safely calculated by the
//! underlying real equation of state for water
/*!
* Note, this function is needed because trying to calculate a one atm
* value around the critical point will cause a crash
*
* @param temp Temperature (Kelvin)
*/
doublereal PDSS_Water::pref_safe(doublereal temp) const;
//! Return the molar gibbs free energy divided by RT at reference pressure
/*!
* Returns the species reference state gibbs free energy divided by RT at the