Cantera  2.5.1
WaterPropsIAPWSphi.h
Go to the documentation of this file.
1 /**
2  * @file WaterPropsIAPWSphi.h
3  * Header for Lowest level of the classes which support a real water model
4  * (see class \link Cantera::WaterPropsIAPWS WaterPropsIAPWS\endlink and class
5  * \link Cantera::WaterPropsIAPWSphi WaterPropsIAPWSphi\endlink).
6  *
7  * This class calculates dimensionless quantities.
8  */
9 
10 // This file is part of Cantera. See License.txt in the top-level directory or
11 // at https://cantera.org/license.txt for license and copyright information.
12 
13 #ifndef WATERPROPSIAPWSPHI_H
14 #define WATERPROPSIAPWSPHI_H
15 
16 #include "cantera/base/config.h"
17 
18 namespace Cantera
19 {
20 
21 //! Low level class for the real description of water.
22 /*!
23  * This is a helper class for WaterSSTP and PDSS_Water and does not constitute
24  * a complete implementation of a thermo phase by itself (see \ref thermoprops
25  * and classes \link Cantera::WaterSSTP WaterSSTP\endlink and
26  * \link Cantera::PDSS_Water PDSS_Water\endlink).
27  *
28  * The reference is W. Wagner, A. Pruss, "The IAPWS Formulation 1995 for the
29  * Thermodynamic Properties of Ordinary Water Substance for General and
30  * Scientific Use," J. Phys. Chem. Ref. Dat, 31, 387, 2002.
31  *
32  * Units Note: This class works with reduced units exclusively.
33  */
35 {
36 public:
37  //! Base constructor
39 
40  //! Calculate the Phi function, which is the base function
41  /*!
42  * The phi function is basically the Helmholtz free energy Eqn. (6.4) All
43  * internal polynomials are recalculated.
44  *
45  * @param tau Dimensionless temperature = T_c/T
46  * @param delta Dimensionless density = delta = rho / Rho_c
47  */
48  doublereal phi(doublereal tau, doublereal delta);
49 
50  //! Calculate derivative of phi wrt delta
51  /*!
52  * @param tau Dimensionless temperature = T_c/T
53  * @param delta Dimensionless density = delta = rho / Rho_c
54  */
55  doublereal phi_d(doublereal tau, doublereal delta);
56 
57  //! 2nd derivative of phi wrt delta
58  /*!
59  * @param tau Dimensionless temperature = T_c/T
60  * @param delta Dimensionless density = delta = rho / Rho_c
61  */
62  doublereal phi_dd(doublereal tau, doublereal delta);
63 
64  //! First derivative of phi wrt tau
65  /*!
66  * @param tau Dimensionless temperature = T_c/T
67  * @param delta Dimensionless density = delta = rho / Rho_c
68  */
69  doublereal phi_t(doublereal tau, doublereal delta);
70 
71  //! Second derivative of phi wrt tau
72  /*!
73  * @param tau Dimensionless temperature = T_c/T
74  * @param delta Dimensionless density = delta = rho / Rho_c
75  */
76  doublereal phi_tt(doublereal tau, doublereal delta);
77 
78  //! Calculate the dimensionless pressure at tau and delta;
79  /*!
80  * pM/(rhoRT) = delta * phi_d() = 1.0 + delta phiR_d()
81  *
82  * @param tau Dimensionless temperature = T_c/T
83  * @param delta Dimensionless density = delta = rho / Rho_c
84  *
85  * note: this is done so much, we have a separate routine.
86  */
87  doublereal pressureM_rhoRT(doublereal tau, doublereal delta);
88 
89  //! Dimensionless derivative of p wrt rho at constant T
90  /*!
91  * dp/drho * 1/RT = (2. delta phi_d() + delta**2 phi_dd())
92  * (1.0 + 2. delta phiR_d() + delta**2 phiR_dd())
93  *
94  * @param tau Dimensionless temperature = T_c/T
95  * @param delta Dimensionless density = delta = rho / Rho_c
96  */
97  doublereal dimdpdrho(doublereal tau, doublereal delta);
98 
99  //! Dimensionless derivative of p wrt T at constant rho
100  /*!
101  * dp/dT * M/(Rho R) = (1.0 + delta phiR_d()
102  * - tau delta (phiR_dt())
103  *
104  * @param tau Dimensionless temperature = T_c/T
105  * @param delta Dimensionless density = delta = rho / Rho_c
106  */
107  doublereal dimdpdT(doublereal tau, doublereal delta);
108 
109  /**
110  * This function computes the reduced density, given the reduced pressure
111  * and the reduced temperature, tau. It takes an initial guess, deltaGuess.
112  * DeltaGuess is important as this is a multivalued function below the
113  * critical point.
114  *
115  * @param p_red Value of the dimensionless pressure
116  * @param tau Dimensionless temperature = T_c/T
117  * @param deltaGuess Initial guess for the dimensionless density
118  *
119  * @returns the dimensionless density.
120  */
121  doublereal dfind(doublereal p_red, doublereal tau, doublereal deltaGuess);
122 
123  //! Calculate the dimensionless Gibbs free energy
124  doublereal gibbs_RT() const;
125 
126  //! Calculate the dimensionless enthalpy, h/RT
127  doublereal enthalpy_RT() const;
128 
129  //! Calculate the dimensionless entropy, s/R
130  doublereal entropy_R() const;
131 
132  //! Calculate the dimensionless internal energy, u/RT
133  doublereal intEnergy_RT() const;
134 
135  //! Calculate the dimensionless constant volume heat capacity, Cv/R
136  doublereal cv_R() const;
137 
138  //! Calculate the dimensionless constant pressure heat capacity, Cv/R
139  doublereal cp_R() const;
140 
141  //! Calculates internal polynomials in tau and delta.
142  /*!
143  * This routine is used to store the internal state of tau and delta
144  * for later use by the other routines in the class.
145  *
146  * @param tau Dimensionless temperature = T_c/T
147  * @param delta Dimensionless density = delta = rho / Rho_c
148  */
149  void tdpolycalc(doublereal tau, doublereal delta);
150 
151  /*!
152  * Calculate Equation 6.6 for phiR, the residual part of the
153  * dimensionless Helmholtz free energy.
154  */
155  doublereal phiR() const;
156 
157 protected:
158  //! Calculate Equation 6.5 for phi0, the ideal gas part of the
159  //! dimensionless Helmholtz free energy.
160  doublereal phi0() const;
161  //! Calculate d_phiR_d(delta), the first derivative of phiR wrt delta
162  doublereal phiR_d() const;
163  //! Calculate d_phi0_d(delta), the first derivative of phi0 wrt delta
164  doublereal phi0_d() const;
165  //! Calculate d2_phiR_dd(delta), the second derivative of phiR wrt delta
166  doublereal phiR_dd() const;
167  //! Calculate d2_phi0_dd(delta), the second derivative of phi0 wrt delta
168  doublereal phi0_dd() const;
169  //! Calculate d_phi0/d(tau)
170  doublereal phi0_t() const;
171  //! Calculate Equation 6.6 for dphiRdtau, the derivative residual part of
172  //! the dimensionless Helmholtz free energy wrt temperature
173  doublereal phiR_t() const;
174  //! Calculate Equation 6.6 for dphiRdtau, the second derivative residual
175  //! part of the dimensionless Helmholtz free energy wrt temperature
176  doublereal phiR_tt() const;
177  //! Calculate d2_phi0/dtau2
178  doublereal phi0_tt() const;
179  //! Calculate the mixed derivative d2_phiR/(dtau ddelta)
180  doublereal phiR_dt() const;
181  //! Calculate the mixed derivative d2_phi0/(dtau ddelta)
182  doublereal phi0_dt() const;
183 
184  //! Value of internally calculated polynomials of powers of TAU
185  doublereal TAUp[52];
186 
187  //! Value of internally calculated polynomials of powers of delta
188  doublereal DELTAp[16];
189 
190  //! Last tau that was used to calculate polynomials
191  doublereal TAUsave;
192 
193  //! sqrt of TAU
194  doublereal TAUsqrt;
195 
196  //! Last delta that was used to calculate polynomials
197  doublereal DELTAsave;
198 };
199 
200 } // namespace Cantera
201 #endif
Low level class for the real description of water.
doublereal phi_tt(doublereal tau, doublereal delta)
Second derivative of phi wrt tau.
doublereal dimdpdrho(doublereal tau, doublereal delta)
Dimensionless derivative of p wrt rho at constant T.
doublereal entropy_R() const
Calculate the dimensionless entropy, s/R.
doublereal DELTAp[16]
Value of internally calculated polynomials of powers of delta.
doublereal phiR_d() const
Calculate d_phiR_d(delta), the first derivative of phiR wrt delta.
doublereal phi0() const
Calculate Equation 6.5 for phi0, the ideal gas part of the dimensionless Helmholtz free energy.
doublereal phiR_tt() const
Calculate Equation 6.6 for dphiRdtau, the second derivative residual part of the dimensionless Helmho...
doublereal phi0_dt() const
Calculate the mixed derivative d2_phi0/(dtau ddelta)
doublereal enthalpy_RT() const
Calculate the dimensionless enthalpy, h/RT.
doublereal gibbs_RT() const
Calculate the dimensionless Gibbs free energy.
doublereal cv_R() const
Calculate the dimensionless constant volume heat capacity, Cv/R.
doublereal phiR_dt() const
Calculate the mixed derivative d2_phiR/(dtau ddelta)
doublereal phi_t(doublereal tau, doublereal delta)
First derivative of phi wrt tau.
doublereal DELTAsave
Last delta that was used to calculate polynomials.
doublereal dfind(doublereal p_red, doublereal tau, doublereal deltaGuess)
This function computes the reduced density, given the reduced pressure and the reduced temperature,...
WaterPropsIAPWSphi()
Base constructor.
doublereal cp_R() const
Calculate the dimensionless constant pressure heat capacity, Cv/R.
doublereal phi(doublereal tau, doublereal delta)
Calculate the Phi function, which is the base function.
doublereal TAUp[52]
Value of internally calculated polynomials of powers of TAU.
doublereal intEnergy_RT() const
Calculate the dimensionless internal energy, u/RT.
doublereal dimdpdT(doublereal tau, doublereal delta)
Dimensionless derivative of p wrt T at constant rho.
doublereal phi_dd(doublereal tau, doublereal delta)
2nd derivative of phi wrt delta
doublereal TAUsqrt
sqrt of TAU
doublereal phiR_t() const
Calculate Equation 6.6 for dphiRdtau, the derivative residual part of the dimensionless Helmholtz fre...
doublereal phi0_tt() const
Calculate d2_phi0/dtau2.
doublereal phi_d(doublereal tau, doublereal delta)
Calculate derivative of phi wrt delta.
doublereal phi0_t() const
Calculate d_phi0/d(tau)
doublereal phi0_dd() const
Calculate d2_phi0_dd(delta), the second derivative of phi0 wrt delta.
doublereal phi0_d() const
Calculate d_phi0_d(delta), the first derivative of phi0 wrt delta.
doublereal TAUsave
Last tau that was used to calculate polynomials.
doublereal phiR_dd() const
Calculate d2_phiR_dd(delta), the second derivative of phiR wrt delta.
void tdpolycalc(doublereal tau, doublereal delta)
Calculates internal polynomials in tau and delta.
doublereal pressureM_rhoRT(doublereal tau, doublereal delta)
Calculate the dimensionless pressure at tau and delta;.
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:264