00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00030 #ifndef OPM_SIMPLE_CO2_HPP
00031 #define OPM_SIMPLE_CO2_HPP
00032
00033 #include <opm/material/IdealGas.hpp>
00034 #include <opm/material/components/Component.hpp>
00035
00036 #include <opm/material/densead/Math.hpp>
00037
00038 #include <cmath>
00039
00040 namespace Opm {
00041
00049 template <class Scalar>
00050 class SimpleCO2 : public Component<Scalar, SimpleCO2<Scalar> >
00051 {
00052 typedef Opm::IdealGas<Scalar> IdealGas;
00053
00054 public:
00058 static const char* name()
00059 { return "CO2"; }
00060
00064 static Scalar molarMass()
00065 { return 44e-3; }
00066
00070 static Scalar criticalTemperature()
00071 { return 273.15 + 30.95; }
00072
00076 static Scalar criticalPressure()
00077 { return 73.8e5; }
00078
00082 static Scalar tripleTemperature()
00083 { return 273.15 - 56.35; }
00084
00088 static Scalar triplePressure()
00089 { return 5.11e5; }
00090
00094 static bool gasIsCompressible()
00095 { return true; }
00096
00100 static bool gasIsIdeal()
00101 { return true; }
00102
00106 template <class Evaluation>
00107 static Evaluation gasEnthalpy(const Evaluation& temperature,
00108 const Evaluation& )
00109 { return 571.3e3 + (temperature - 298.15)*0.85e3; }
00110
00114 template <class Evaluation>
00115 static Evaluation liquidEnthalpy(const Evaluation& temperature,
00116 const Evaluation& )
00117 { return (temperature - 298.15)*5e3; }
00118
00122 template <class Evaluation>
00123 static Evaluation gasInternalEnergy(const Evaluation& temperature,
00124 const Evaluation& pressure)
00125 {
00126 return
00127 gasEnthalpy(temperature, pressure) -
00128 1/molarMass()*
00129 IdealGas::R*temperature;
00130 }
00131
00135 template <class Evaluation>
00136 static Evaluation gasDensity(const Evaluation& temperature, const Evaluation& pressure)
00137 {
00138
00139 return IdealGas::density(Evaluation(molarMass()), temperature, pressure);
00140 }
00141
00150 template <class Evaluation>
00151 static Evaluation gasViscosity(const Evaluation& temperature, const Evaluation& )
00152 {
00153 const Scalar Tc = criticalTemperature();
00154 const Scalar Vc = 93.9;
00155 const Scalar omega = 0.239;
00156 const Scalar M = molarMass() * 1e3;
00157 const Scalar dipole = 0.0;
00158
00159 Scalar mu_r4 = 131.3 * dipole / std::sqrt(Vc * Tc);
00160 mu_r4 *= mu_r4;
00161 mu_r4 *= mu_r4;
00162
00163 Scalar Fc = 1 - 0.2756*omega + 0.059035*mu_r4;
00164 Evaluation Tstar = 1.2593 * temperature/Tc;
00165 Evaluation Omega_v =
00166 1.16145*Opm::pow(Tstar, -0.14874) +
00167 0.52487*Opm::exp(- 0.77320*Tstar) +
00168 2.16178*Opm::exp(- 2.43787*Tstar);
00169 Evaluation mu = 40.785*Fc*Opm::sqrt(M*temperature)/(std::pow(Vc, 2./3)*Omega_v);
00170
00171
00172 return mu/1e6 / 10;
00173 }
00174 };
00175
00176 }
00177
00178 #endif