version 3.10-dev
xylene.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12#ifndef DUMUX_XYLENE_HH
13#define DUMUX_XYLENE_HH
14
15#include <cmath>
18
22
23namespace Dumux {
24namespace Components {
25
32template <class Scalar>
33class Xylene
34: public Components::Base<Scalar, Xylene<Scalar> >
35, public Components::Liquid<Scalar, Xylene<Scalar> >
36, public Components::Gas<Scalar, Xylene<Scalar> >
37{
40
41public:
45 static std::string name()
46 { return "xylene"; }
47
51 constexpr static Scalar molarMass()
52 { return 0.106; }
53
57 constexpr static Scalar criticalTemperature()
58 { return 617.1; }
59
63 constexpr static Scalar criticalPressure()
64 { return 35.4e5; }
65
69 constexpr static Scalar boilingTemperature()
70 { return 412.3; }
71
76 {
77 DUNE_THROW(Dune::NotImplemented, "tripleTemperature for xylene");
78 }
79
84 {
85 DUNE_THROW(Dune::NotImplemented, "triplePressure for xylene");
86 }
87
95 {
96 const Scalar A = 7.00909;
97 const Scalar B = 1462.266;
98 const Scalar C = 215.110;
99
100 Scalar T = temperature - 273.15;
101
102 using std::pow;
103 Scalar psat = 1.334*pow(10.0, (A - (B/(T + C)))); // in [mbar]
104 psat *= 100.0; // in [Pa] (0.001*1.E5)
105
106 return psat;
107 }
108
118 {
119 Scalar CH3,C6H5,H;
120 // after Reid et al. : Missenard group contrib. method (s. example 5-8) \cite reid1987 <BR>
121 // Xylene: C9H12 : 3* CH3 ; 1* C6H5 (phenyl-ring) ; -2* H (this was too much!)
122 // linear interpolation between table values [J/(mol K)]
123
124 if(temp < 298.0){ // take care: extrapolation for Temp<273
125 H = 13.4 + 1.2*(temp - 273.0)/25.0; // 13.4 + 1.2 = 14.6 = H(T=298K) i.e. interpolation of table values 273<T<298
126 CH3 = 40.0 + 1.6*(temp - 273.0)/25.0; // 40 + 1.6 = 41.6 = CH3(T=298K)
127 C6H5 = 113.0 + 4.2*(temp - 273.0)/25.0; // 113 + 4.2 = 117.2 = C6H5(T=298K)
128 }
129 else if(temp < 323.0){
130 H = 14.6 + 0.9*(temp - 298.0)/25.0; // i.e. interpolation of table values 298<T<323
131 CH3 = 41.6 + 1.9*(temp - 298.0)/25.0;
132 C6H5 = 117.2 + 6.2*(temp - 298.0)/25.0;
133 }
134 else if(temp < 348.0){
135 H = 15.5 + 1.2*(temp - 323.0)/25.0; // i.e. interpolation of table values 323<T<348
136 CH3 = 43.5 + 2.3*(temp - 323.0)/25.0;
137 C6H5 = 123.4 + 6.3*(temp - 323.0)/25.0;
138 }
139 else {
140 H = 16.7 + 2.1*(temp - 348.0)/25.0; // i.e. interpolation of table values 348<T<373
141 CH3 = 45.8 + 2.5*(temp - 348.0)/25.0; // take care: extrapolation for Temp>373
142 C6H5 = 129.7 + 6.3*(temp - 348.0)/25.0; // most likely leads to underestimation
143 }
144
145 return (C6H5 + 2*CH3 - H)/molarMass();// J/(mol K) -> J/(kg K)
146 }
147
148
156 const Scalar pressure)
157 {
158 // Gauss quadrature rule:
159 // Interval: [0K; temperature (K)]
160 // Gauss-Legendre-Integration with variable transformation:
161 // \int_a^b f(T) dT \approx (b-a)/2 \sum_i=1^n \alpha_i f( (b-a)/2 x_i + (a+b)/2 )
162 // with: n=2, legendre -> x_i = +/- \sqrt(1/3), \apha_i=1
163 // here: a=273.15K, b=actual temperature in Kelvin
164 // \leadsto h(T) = \int_273.15^T c_p(T) dT
165 // \approx 0.5 (T-273.15) * (cp( 0.5(temperature-273.15)sqrt(1/3) ) + cp(0.5(temperature-273.15)(-1)sqrt(1/3))
166
167 // Enthalpy may have arbitrary reference state, but the empirical/fitted heatCapacity function needs Kelvin as input and is
168 // fit over a certain temperature range. This suggests choosing an interval of integration being in the actual fit range.
169 // I.e. choosing T=273.15K as reference point for liquid enthalpy.
170 using std::sqrt;
171 const Scalar sqrt1over3 = sqrt(1./3.);
172 // evaluation points according to Gauss-Legendre integration
173 const Scalar TEval1 = 0.5*(temperature-273.15)* sqrt1over3 + 0.5*(273.15+temperature);
174 // evaluation points according to Gauss-Legendre integration
175 const Scalar TEval2 = 0.5*(temperature-273.15)* (-1)* sqrt1over3 + 0.5*(273.15+temperature);
176
177 const Scalar h_n = 0.5 * (temperature-273.15) * ( liquidHeatCapacity(TEval1, pressure) + liquidHeatCapacity(TEval2, pressure) );
178
179 return h_n;
180 }
181
191 const Scalar pressure)
192 {
193 using std::min;
194 using std::max;
195 temperature = min(temperature, criticalTemperature()); // regularization
196 temperature = max(temperature, 0.0); // regularization
197
198 constexpr Scalar T_crit = criticalTemperature();
200 constexpr Scalar p_crit = criticalPressure();
201
202 // Chen method, eq. 7-11.4 (at boiling)
203 using std::log;
204 const Scalar DH_v_boil = Consts::R * T_crit * Tr1
205 * (3.978 * Tr1 - 3.958 + 1.555*log(p_crit * 1e-5 /*Pa->bar*/ ) )
206 / (1.07 - Tr1); /* [J/mol] */
207
208 /* Variation with temp according to Watson relation eq 7-12.1*/
209 using std::pow;
211 const Scalar n = 0.375;
212 const Scalar DH_vap = DH_v_boil * pow(((1.0 - Tr2)/(1.0 - Tr1)), n);
213
214 return (DH_vap/molarMass()); // we need [J/kg]
215 }
216
227 {
229 }
230
238 {
241 pressure);
242 }
243
252
263 {
264 // saturated molar volume according to Lide, CRC Handbook of
265 // Thermophysical and Thermochemical Data, CRC Press, 1994
266 // valid for 245 < Temp < 600
267 using std::min;
268 using std::max;
269 temp = min(temp, 500.0); // regularization
270 temp = max(temp, 250.0); // regularization
271
272 using std::pow;
273 const Scalar A1 = 0.25919; // from table
274 const Scalar A2 = 0.0014569; // from table
275 const Scalar expo = 1.0 + pow((1.0 - temp/criticalTemperature()), (2.0/7.0));
276 const Scalar V = A2*pow(A1, expo); // liquid molar volume [m^3/mol]
277
278 return 1.0/V; // molar density [mol/m^3]
279 }
280
288 {
290 }
291
295 static constexpr bool gasIsCompressible()
296 { return true; }
297
301 static constexpr bool gasIsIdeal()
302 { return true; }
303
307 static constexpr bool liquidIsCompressible()
308 { return false; }
309
317 {
318 using std::min;
319 using std::max;
320 temp = min(temp, 500.0); // regularization
321 temp = max(temp, 250.0); // regularization
322
323 using std::pow;
324 using std::exp;
325 const Scalar Tr = max(temp/criticalTemperature(), 1e-10);
326 const Scalar Fp0 = 1.0;
327 const Scalar xi = 0.004623;
328 const Scalar eta_xi = Fp0*(0.807*pow(Tr, 0.618)
329 - 0.357*exp(-0.449*Tr)
330 + 0.34*exp(-4.058*Tr)
331 + 0.018);
332 Scalar r = eta_xi/xi; // [1e-6 P]
333 r /= 1.0e7; // [Pa s]
334
335 return r;
336 }
337
345 {
346 using std::min;
347 using std::max;
348 temp = min(temp, 500.0); // regularization
349 temp = max(temp, 250.0); // regularization
350
351 const Scalar A = -3.82;
352 const Scalar B = 1027.0;
353 const Scalar C = -6.38e-4;
354 const Scalar D = 4.52e-7;
355
356 using std::exp;
357 Scalar r = exp(A + B/temp + C*temp + D*temp*temp); // in [cP]
358 r *= 1.0e-3; // in [Pa s]
359
360 return r; // [Pa s]
361 }
362
373 {
374 return 0.13;
375 }
376};
377
378} // end namespace Components
379
380} // end namespace Dumux
381
382#endif
Base class for all components Components provide the thermodynamic relations for the liquid,...
Definition: components/base.hh:47
Scalar Scalar
export the scalar type used by the component
Definition: components/base.hh:51
Interface for components that have a gas state.
Definition: gas.hh:29
Interface for components that have a liquid state.
Definition: liquid.hh:29
Properties of xylene.
Definition: xylene.hh:37
static Scalar gasViscosity(Scalar temp, Scalar pressure)
The dynamic viscosity of xylene vapor.
Definition: xylene.hh:316
static std::string name()
A human readable name for the xylene.
Definition: xylene.hh:45
static Scalar liquidDensity(Scalar temperature, Scalar pressure)
The density of pure xylene at a given pressure and temperature .
Definition: xylene.hh:287
static constexpr Scalar criticalPressure()
Returns the critical pressure of xylene.
Definition: xylene.hh:63
static Scalar liquidEnthalpy(const Scalar temperature, const Scalar pressure)
Specific enthalpy of liquid xylene .
Definition: xylene.hh:155
static Scalar gasMolarDensity(Scalar temperature, Scalar pressure)
The molar gas density of xylene gas at a given pressure and temperature.
Definition: xylene.hh:250
static constexpr bool gasIsIdeal()
Returns true if the gas phase is assumed to be ideal.
Definition: xylene.hh:301
static Scalar vaporPressure(Scalar temperature)
The saturation vapor pressure in of pure xylene at a given temperature according to Antoine after Be...
Definition: xylene.hh:94
static Scalar tripleTemperature()
Returns the temperature at xylene's triple point.
Definition: xylene.hh:75
static constexpr Scalar boilingTemperature()
Returns the temperature at xylene's boiling point (1 atm).
Definition: xylene.hh:69
static Scalar liquidThermalConductivity(Scalar temperature, Scalar pressure)
Thermal conductivity of xylene.
Definition: xylene.hh:372
static constexpr bool liquidIsCompressible()
Returns true if the liquid phase is assumed to be compressible.
Definition: xylene.hh:307
static Scalar gasEnthalpy(Scalar temperature, Scalar pressure)
Specific enthalpy of xylene vapor .
Definition: xylene.hh:226
static constexpr Scalar criticalTemperature()
Returns the critical temperature of xylene.
Definition: xylene.hh:57
static Scalar triplePressure()
Returns the pressure at xylene's triple point.
Definition: xylene.hh:83
static Scalar heatVap(Scalar temperature, const Scalar pressure)
Latent heat of vaporization for xylene .
Definition: xylene.hh:190
static Scalar liquidHeatCapacity(Scalar temp, Scalar pressure)
Specific heat cap of liquid xylene .
Definition: xylene.hh:117
static constexpr Scalar molarMass()
The molar mass in of xylene.
Definition: xylene.hh:51
static Scalar gasDensity(Scalar temperature, Scalar pressure)
The density of xylene gas at a given pressure and temperature.
Definition: xylene.hh:237
static Scalar liquidMolarDensity(Scalar temp, Scalar pressure)
The molar liquid density of pure xylene at a given pressure and temperature .
Definition: xylene.hh:262
static constexpr bool gasIsCompressible()
Returns true if the gas phase is assumed to be compressible.
Definition: xylene.hh:295
static Scalar liquidViscosity(Scalar temp, Scalar pressure)
The dynamic viscosity of pure xylene.
Definition: xylene.hh:344
A central place for various physical constants occurring in some equations.
Definition: constants.hh:27
static constexpr Scalar R
The ideal gas constant .
Definition: constants.hh:32
Relations valid for an ideal gas.
Definition: idealgas.hh:25
static constexpr Scalar density(Scalar avgMolarMass, Scalar temperature, Scalar pressure)
The density of the gas in , depending on pressure, temperature and average molar mass of the gas.
Definition: idealgas.hh:37
static constexpr Scalar molarDensity(Scalar temperature, Scalar pressure)
The molar density of the gas , depending on pressure and temperature.
Definition: idealgas.hh:58
Base class for all components Components provide the thermodynamic relations for the liquid,...
A central place for various physical constants occurring in some equations.
Interface for components that have a gas state.
Relations valid for an ideal gas.
Interface for components that have a liquid state.
std::string temperature() noexcept
I/O name of temperature for equilibrium models.
Definition: name.hh:39
std::string pressure(int phaseIdx) noexcept
I/O name of pressure for multiphase systems.
Definition: name.hh:22
Definition: adapt.hh:17