Air.hpp
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  This file is part of the Open Porous Media project (OPM).
5 
6  OPM is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 2 of the License, or
9  (at your option) any later version.
10 
11  OPM is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with OPM. If not, see <http://www.gnu.org/licenses/>.
18 
19  Consult the COPYING file in the top-level source directory of this
20  module for the precise wording of the license and the list of
21  copyright holders.
22 */
27 #ifndef OPM_AIR_HPP
28 #define OPM_AIR_HPP
29 
33 
34 #include <opm/common/Exceptions.hpp>
35 #include <opm/common/ErrorMacros.hpp>
36 
37 namespace Opm {
38 
46 template <class Scalar>
47 class Air : public Component<Scalar, Air<Scalar> >
48 {
50 
51 public:
55  static bool liquidIsCompressible()
56  { OPM_THROW(std::runtime_error, "Not implemented: Component::liquidIsCompressible()"); }
57 
61  static const char* name()
62  { return "Air"; }
63 
67  static bool gasIsCompressible()
68  { return true; }
69 
73  static bool gasIsIdeal()
74  { return true; }
75 
81  static Scalar molarMass()
82  { return 0.02896; /* [kg/mol] */ }
83 
87  static Scalar criticalTemperature()
88  { return 132.531 ; /* [K] */ }
89 
93  static Scalar criticalPressure()
94  { return 37.86e5; /* [Pa] */ }
95 
102  template <class Evaluation>
103  static Evaluation gasDensity(const Evaluation& temperature, const Evaluation& pressure)
104  { return IdealGas::density(Evaluation(molarMass()), temperature, pressure); }
105 
112  template <class Evaluation>
113  static Evaluation gasPressure(const Evaluation& temperature, Scalar density)
114  { return IdealGas::pressure(temperature, density/molarMass()); }
115 
137  template <class Evaluation>
138  static Evaluation gasViscosity(const Evaluation& temperature, const Evaluation& /*pressure*/)
139  {
140  Scalar Tc = criticalTemperature();
141  Scalar Vc = 84.525138; // critical specific volume [cm^3/mol]
142  Scalar omega = 0.078; // accentric factor
143  Scalar M = molarMass() * 1e3; // molar mas [g/mol]
144  Scalar dipole = 0.0; // dipole moment [debye]
145 
146  Scalar mu_r4 = 131.3 * dipole / std::sqrt(Vc * Tc);
147  mu_r4 *= mu_r4;
148  mu_r4 *= mu_r4;
149 
150  Scalar Fc = 1 - 0.2756*omega + 0.059035*mu_r4;
151  Evaluation Tstar = 1.2593 * temperature/Tc;
152  Evaluation Omega_v =
153  1.16145*Opm::pow(Tstar, -0.14874) +
154  0.52487*Opm::exp(- 0.77320*Tstar) +
155  2.16178*Opm::exp(- 2.43787*Tstar);
156  return 40.7851e-7*Fc*Opm::sqrt(M*temperature)/(std::pow(Vc, 2./3)*Omega_v);
157  }
158 
159  // simpler method, from old constrelAir.hh
160  template <class Evaluation>
161  static Evaluation simpleGasViscosity(const Evaluation& temperature, const Evaluation& /*pressure*/)
162  {
163  if(temperature < 273.15 || temperature > 660.) {
164  OPM_THROW(NumericalProblem,
165  "Air: Temperature (" << temperature << "K) out of range");
166  }
167  return 1.496e-6*Opm::pow(temperature, 1.5)/(temperature + 120);
168  }
169 
181  template <class Evaluation>
182  static Evaluation gasEnthalpy(const Evaluation& temperature, const Evaluation& /*pressure*/)
183  {
184  return 1005*(temperature - 273.15);
185  }
186 
198  template <class Evaluation>
199  static Evaluation gasInternalEnergy(const Evaluation& temperature,
200  const Evaluation& pressure)
201  {
202  return
203  gasEnthalpy(temperature, pressure)
204  - (IdealGas::R*temperature/molarMass()); // <- specific volume of an ideal gas
205  }
206 
218  template <class Evaluation>
219  static Evaluation gasThermalConductivity(const Evaluation& /*temperature*/,
220  const Evaluation& /*pressure*/)
221  {
222  // Isobaric Properties for Nitrogen in: NIST Standard
223  // see http://webbook.nist.gov/chemistry/fluid/
224  // evaluated at p=.1 MPa, T=20°C
225  // Nitrogen: 0.025398
226  // Oxygen: 0.026105
227  // lambda_air is approximately 0.78*lambda_N2+0.22*lambda_O2
228  return 0.0255535;
229  }
230 
247  template <class Evaluation>
248  static Evaluation gasHeatCapacity(const Evaluation& temperature,
249  const Evaluation& /*pressure*/)
250  {
251  // scale temperature by reference temp of 100K
252  Evaluation phi = temperature/100;
253 
254  Evaluation c_p =
255  0.661738E+01
256  -0.105885E+01 * phi
257  +0.201650E+00 * Opm::pow(phi,2.)
258  -0.196930E-01 * Opm::pow(phi,3.)
259  +0.106460E-02 * Opm::pow(phi,4.)
260  -0.303284E-04 * Opm::pow(phi,5.)
261  +0.355861E-06 * Opm::pow(phi,6.);
262  c_p +=
263  -0.549169E+01 * Opm::pow(phi,-1.)
264  +0.585171E+01* Opm::pow(phi,-2.)
265  -0.372865E+01* Opm::pow(phi,-3.)
266  +0.133981E+01* Opm::pow(phi,-4.)
267  -0.233758E+00* Opm::pow(phi,-5.)
268  +0.125718E-01* Opm::pow(phi,-6.);
269  c_p *= IdealGas::R / (molarMass() * 1000); // in J/mol/K * mol / kg / 1000 = kJ/kg/K
270 
271  return c_p;
272  }
273 };
274 
275 } // namespace Opm
276 
277 #endif
static bool gasIsCompressible()
Returns true iff the gas phase is assumed to be compressible.
Definition: Air.hpp:67
static Evaluation gasHeatCapacity(const Evaluation &temperature, const Evaluation &)
Specific isobaric heat capacity of pure air.
Definition: Air.hpp:248
A traits class which provides basic mathematical functions for arbitrary scalar floating point values...
Relations valid for an ideal gas.
Abstract base class of a pure chemical species.
Definition: Component.hpp:43
static Evaluation gasInternalEnergy(const Evaluation &temperature, const Evaluation &pressure)
Specific internal energy of .
Definition: Air.hpp:199
static Scalar criticalPressure()
Returns the critical pressure of .
Definition: Air.hpp:93
static bool liquidIsCompressible()
Returns true iff the liquid phase is assumed to be compressible.
Definition: Air.hpp:55
static bool gasIsIdeal()
Returns true iff the gas phase is assumed to be ideal.
Definition: Air.hpp:73
static Evaluation gasViscosity(const Evaluation &temperature, const Evaluation &)
The dynamic viscosity of at a given pressure and temperature.
Definition: Air.hpp:138
static Scalar criticalTemperature()
Returns the critical temperature of .
Definition: Air.hpp:87
Definition: Air_Mesitylene.hpp:33
static Evaluation pressure(const Evaluation &temperature, const Evaluation &rhoMolar)
The pressure of the gas in , depending on the molar density and temperature.
Definition: IdealGas.hpp:58
static Scalar molarMass()
The molar mass in of .
Definition: Air.hpp:81
A simple class implementing the fluid properties of air.
Definition: Air.hpp:47
static const Scalar R
The ideal gas constant .
Definition: IdealGas.hpp:41
static Evaluation gasDensity(const Evaluation &temperature, const Evaluation &pressure)
The density of at a given pressure and temperature [kg/m^3].
Definition: Air.hpp:103
static Evaluation density(const Evaluation &avgMolarMass, const Evaluation &temperature, const Evaluation &pressure)
The density of the gas in , depending on pressure, temperature and average molar mass of the gas...
Definition: IdealGas.hpp:48
Abstract base class of a pure chemical species.
static Evaluation gasThermalConductivity(const Evaluation &, const Evaluation &)
Specific heat conductivity of steam .
Definition: Air.hpp:219
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &)
Specific enthalpy of liquid water with 273.15 K as basis.
Definition: Air.hpp:182
Relations valid for an ideal gas.
Definition: IdealGas.hpp:37
static Evaluation gasPressure(const Evaluation &temperature, Scalar density)
The pressure of gaseous at a given density and temperature .
Definition: Air.hpp:113
static const char * name()
A human readable name for the .
Definition: Air.hpp:61