diff --git a/include/cantera/tpx/Sub.h b/include/cantera/tpx/Sub.h index 3a3c8ba89..979dfe833 100644 --- a/include/cantera/tpx/Sub.h +++ b/include/cantera/tpx/Sub.h @@ -42,15 +42,7 @@ public: virtual ~Substance() {} void setStdState(double h0 = 0.0, double s0 = 0.0, - double t0 = 298.15, double p0 = 1.01325e5) { - Set(PropertyPair::TP, t0, p0); - double hh = h(); - double ss = s(); - double hoff = h0 - hh; - double soff = s0 - ss; - m_entropy_offset += soff; - m_energy_offset += hoff; - } + double t0 = 298.15, double p0 = 1.01325e5); //! @name Information about a substance //! @{ @@ -129,54 +121,14 @@ public: } //! Specific heat at constant volume [J/kg/K] - virtual double cv() { - double Tsave = T, dt = 1.e-4*T; - double T1 = std::max(Tmin(), Tsave - dt); - double T2 = std::min(Tmax(), Tsave + dt); - set_T(T1); - double s1 = s(); - set_T(T2); - double s2 = s(); - set_T(Tsave); - return T*(s2 - s1)/(T2-T1); - } + virtual double cv(); //! Specific heat at constant pressure [J/kg/K] - virtual double cp() { - double Tsave = T, dt = 1.e-4*T; - double T1 = std::max(Tmin(), Tsave - dt); - double T2 = std::min(Tmax(), Tsave + dt); - double p0 = P(); - Set(PropertyPair::TP, T1, p0); - double s1 = s(); - Set(PropertyPair::TP, T2, p0); - double s2 = s(); - Set(PropertyPair::TP, Tsave, p0); - return T*(s2 - s1)/(T2-T1); - } + virtual double cp(); - virtual double thermalExpansionCoeff() { - double Tsave = T, dt = 1.e-4*T; - double T1 = std::max(Tmin(), Tsave - dt); - double T2 = std::min(Tmax(), Tsave + dt); - double p0 = P(); - Set(PropertyPair::TP, T1, p0); - double v1 = v(); - Set(PropertyPair::TP, T2, p0); - double v2 = v(); - Set(PropertyPair::TP, Tsave, p0); - return (v2 - v1)/((v2 + v1)*(T2-T1)); - } + virtual double thermalExpansionCoeff(); - virtual double isothermalCompressibility() { - double Psave = P(), dp = 1.e-4*Psave; - Set(PropertyPair::TP, T, Psave - dp); - double v1 = v(); - Set(PropertyPair::TP, T, Psave + dp); - double v2 = v(); - Set(PropertyPair::TP, T, Psave); - return -(v2 - v1)/((v2 + v1)*dp); - } + virtual double isothermalCompressibility(); //! @} //! @name Saturation Properties diff --git a/src/tpx/Sub.cpp b/src/tpx/Sub.cpp index e0a3dd723..33ee6c897 100644 --- a/src/tpx/Sub.cpp +++ b/src/tpx/Sub.cpp @@ -34,6 +34,17 @@ Substance::Substance() : { } +void Substance::setStdState(double h0, double s0, double t0, double p0) +{ + Set(PropertyPair::TP, t0, p0); + double hh = h(); + double ss = s(); + double hoff = h0 - hh; + double soff = s0 - ss; + m_entropy_offset += soff; + m_energy_offset += hoff; +} + double Substance::P() { return TwoPhase() ? Ps() : Pp(); @@ -41,6 +52,58 @@ double Substance::P() const double DeltaT = 0.000001; +double Substance::cv() +{ + double Tsave = T, dt = 1.e-4*T; + double T1 = std::max(Tmin(), Tsave - dt); + double T2 = std::min(Tmax(), Tsave + dt); + set_T(T1); + double s1 = s(); + set_T(T2); + double s2 = s(); + set_T(Tsave); + return T*(s2 - s1)/(T2-T1); +} + +double Substance::cp() +{ + double Tsave = T, dt = 1.e-4*T; + double T1 = std::max(Tmin(), Tsave - dt); + double T2 = std::min(Tmax(), Tsave + dt); + double p0 = P(); + Set(PropertyPair::TP, T1, p0); + double s1 = s(); + Set(PropertyPair::TP, T2, p0); + double s2 = s(); + Set(PropertyPair::TP, Tsave, p0); + return T*(s2 - s1)/(T2-T1); +} + +double Substance::thermalExpansionCoeff() +{ + double Tsave = T, dt = 1.e-4*T; + double T1 = std::max(Tmin(), Tsave - dt); + double T2 = std::min(Tmax(), Tsave + dt); + double p0 = P(); + Set(PropertyPair::TP, T1, p0); + double v1 = v(); + Set(PropertyPair::TP, T2, p0); + double v2 = v(); + Set(PropertyPair::TP, Tsave, p0); + return (v2 - v1)/((v2 + v1)*(T2-T1)); +} + +double Substance::isothermalCompressibility() +{ + double Psave = P(), dp = 1.e-4*Psave; + Set(PropertyPair::TP, T, Psave - dp); + double v1 = v(); + Set(PropertyPair::TP, T, Psave + dp); + double v2 = v(); + Set(PropertyPair::TP, T, Psave); + return -(v2 - v1)/((v2 + v1)*dp); +} + double Substance::dPsdT() { double tsave = T;