28 #ifndef OPM_BRINE_CO2_SYSTEM_HPP 29 #define OPM_BRINE_CO2_SYSTEM_HPP 46 #include <opm/common/Unused.hpp> 51 namespace FluidSystems {
60 template <
class Scalar,
class CO2Tables>
72 template <
class Evaluation>
96 static const char* name[] = {
101 assert(0 <= phaseIdx && phaseIdx <
numPhases);
102 return name[phaseIdx];
110 assert(0 <= phaseIdx && phaseIdx <
numPhases);
120 assert(0 <= phaseIdx && phaseIdx <
numPhases);
132 assert(0 <= phaseIdx && phaseIdx <
numPhases);
142 assert(0 <= phaseIdx && phaseIdx <
numPhases);
168 static const char* name[] = {
174 return name[compIdx];
197 init(273.15, 623.15, 50,
215 if (H2O::isTabulated) {
217 pressMin, pressMax, nPress);
223 if (Brine::isTabulated) {
225 pressMin, pressMax, nPress);
232 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
233 static LhsEval
density(
const FluidState& fluidState,
237 assert(0 <= phaseIdx && phaseIdx <
numPhases);
239 const LhsEval& temperature = Opm::decay<LhsEval>(fluidState.temperature(phaseIdx));
240 const LhsEval& pressure = Opm::decay<LhsEval>(fluidState.pressure(phaseIdx));
246 LhsEval xlBrine = Opm::min(1.0, Opm::max(0.0, Opm::decay<LhsEval>(fluidState.moleFraction(
liquidPhaseIdx,
BrineIdx))));
247 LhsEval xlCO2 = Opm::min(1.0, Opm::max(0.0, Opm::decay<LhsEval>(fluidState.moleFraction(
liquidPhaseIdx,
CO2Idx))));
248 LhsEval sumx = xlBrine + xlCO2;
252 LhsEval result = liquidDensity_(temperature,
257 Valgrind::CheckDefined(result);
266 LhsEval xgBrine = Opm::min(1.0, Opm::max(0.0, Opm::decay<LhsEval>(fluidState.moleFraction(
gasPhaseIdx,
BrineIdx))));
267 LhsEval xgCO2 = Opm::min(1.0, Opm::max(0.0, Opm::decay<LhsEval>(fluidState.moleFraction(
gasPhaseIdx,
CO2Idx))));
268 LhsEval sumx = xgBrine + xgCO2;
272 LhsEval result = gasDensity_(temperature,
276 Valgrind::CheckDefined(result);
283 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
288 assert(0 <= phaseIdx && phaseIdx <
numPhases);
290 const LhsEval& temperature = Opm::decay<LhsEval>(fluidState.temperature(phaseIdx));
291 const LhsEval& pressure = Opm::decay<LhsEval>(fluidState.pressure(phaseIdx));
297 Valgrind::CheckDefined(result);
303 Valgrind::CheckDefined(result);
310 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
316 assert(0 <= phaseIdx && phaseIdx <
numPhases);
325 const LhsEval& temperature = Opm::decay<LhsEval>(fluidState.temperature(phaseIdx));
326 const LhsEval& pressure = Opm::decay<LhsEval>(fluidState.pressure(phaseIdx));
327 assert(temperature > 0);
328 assert(pressure > 0);
333 LhsEval xlH2O, xgH2O;
334 LhsEval xlCO2, xgCO2;
343 xlCO2 = Opm::max(0.0, Opm::min(1.0, xlCO2));
344 xgH2O = Opm::max(0.0, Opm::min(1.0, xgH2O));
351 return phigH2O * xgH2O / xlH2O;
354 assert(compIdx ==
CO2Idx);
357 return phigCO2 * xgCO2 / xlCO2;
364 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
370 const LhsEval& temperature = Opm::decay<LhsEval>(fluidState.temperature(phaseIdx));
371 const LhsEval& pressure = Opm::decay<LhsEval>(fluidState.pressure(phaseIdx));
382 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
383 static LhsEval
enthalpy(
const FluidState& fluidState,
387 assert(0 <= phaseIdx && phaseIdx <
numPhases);
389 const LhsEval& temperature = Opm::decay<LhsEval>(fluidState.temperature(phaseIdx));
390 const LhsEval& pressure = Opm::decay<LhsEval>(fluidState.pressure(phaseIdx));
393 const LhsEval& XlCO2 = Opm::decay<LhsEval>(fluidState.massFraction(phaseIdx,
CO2Idx));
394 const LhsEval& result = liquidEnthalpyBrineCO2_(temperature,
398 Valgrind::CheckDefined(result);
402 const LhsEval& XCO2 = Opm::decay<LhsEval>(fluidState.massFraction(
gasPhaseIdx,
CO2Idx));
403 const LhsEval& XBrine = Opm::decay<LhsEval>(fluidState.massFraction(
gasPhaseIdx,
BrineIdx));
408 Valgrind::CheckDefined(result);
416 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
441 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
446 assert(0 <= phaseIdx && phaseIdx <
numPhases);
448 const LhsEval& temperature = Opm::decay<LhsEval>(fluidState.temperature(phaseIdx));
449 const LhsEval& pressure = Opm::decay<LhsEval>(fluidState.pressure(phaseIdx));
458 template <
class LhsEval>
459 static LhsEval gasDensity_(
const LhsEval& T,
461 const LhsEval& xgH2O,
462 const LhsEval& xgCO2)
464 Valgrind::CheckDefined(T);
465 Valgrind::CheckDefined(pg);
466 Valgrind::CheckDefined(xgH2O);
467 Valgrind::CheckDefined(xgCO2);
478 template <
class LhsEval>
479 static LhsEval liquidDensity_(
const LhsEval& T,
481 const LhsEval& xlH2O,
482 const LhsEval& xlCO2)
484 Valgrind::CheckDefined(T);
485 Valgrind::CheckDefined(pl);
486 Valgrind::CheckDefined(xlH2O);
487 Valgrind::CheckDefined(xlCO2);
490 OPM_THROW(NumericalProblem,
491 "Liquid density for Brine and CO2 is only " 492 "defined above 273.15K (is " << T <<
"K)");
495 OPM_THROW(NumericalProblem,
496 "Liquid density for Brine and CO2 is only " 497 "defined below 250MPa (is " << pl <<
"Pa)");
502 const LhsEval& rho_lCO2 = liquidDensityWaterCO2_(T, pl, xlH2O, xlCO2);
503 const LhsEval& contribCO2 = rho_lCO2 - rho_pure;
505 return rho_brine + contribCO2;
508 template <
class LhsEval>
509 static LhsEval liquidDensityWaterCO2_(
const LhsEval& temperature,
512 const LhsEval& xlCO2)
517 const LhsEval& tempC = temperature - 273.15;
522 const LhsEval xlH2O = 1.0 - xlCO2;
523 const LhsEval& M_T = M_H2O * xlH2O + M_CO2 * xlCO2;
524 const LhsEval& V_phi =
528 tempC*5.044e-7))) / 1.0e6;
529 return 1/ (xlCO2 * V_phi/M_T + M_H2O * xlH2O / (rho_pure * M_T));
532 template <
class LhsEval>
533 static LhsEval liquidEnthalpyBrineCO2_(
const LhsEval& T,
536 const LhsEval& X_CO2_w)
544 2.63500E-1, 7.48368E-6, 1.44611E-6, -3.80860E-10
549 { 9633.6, -4080.0, +286.49 },
550 { +166.58, +68.577, -4.6856 },
551 { -0.90963, -0.36524, +0.249667E-1 },
552 { +0.17965E-2, +0.71924E-3, -0.4900E-4 }
555 LhsEval theta, h_NaCl;
558 LhsEval delta_hCO2, hg, hw;
563 Scalar scalarTheta = Opm::scalarValue(theta);
564 Scalar S_lSAT = f[0] + scalarTheta*(f[1] + scalarTheta*(f[2] + scalarTheta*f[3]));
571 h_NaCl = (3.6710E4*T + 0.5*(6.2770E1)*T*T - ((6.6670E-2)/3)*T*T*T
572 +((2.8000E-5)/4)*(T*T*T*T))/(58.44E3)- 2.045698e+02;
574 Scalar m = 1E3/58.44 * S/(1-S);
579 for (i = 0; i<=3; i++) {
580 for (j=0; j<=2; j++) {
581 d_h = d_h + a[i][j] * Opm::pow(theta, static_cast<Scalar>(i)) * std::pow(m, j);
585 delta_h = (4.184/(1E3 + (58.44 * m)))*d_h;
588 h_ls1 =(1-S)*hw + S*h_NaCl + S*delta_h;
593 delta_hCO2 = (-57.4375 + T * 0.1325) * 1000/44;
599 return (h_ls1 - X_CO2_w*hw + hg*X_CO2_w)*1E3;
Material properties of pure water .
Definition: H2O.hpp:61
static Evaluation liquidDensity(const Evaluation &temperature, const Evaluation &pressure)
The density of liquid at a given pressure and temperature .
Definition: TabulatedComponent.hpp:435
static Evaluation liquidEnthalpy(const Evaluation &temperature, const Evaluation &pressure)
Specific enthalpy of the liquid .
Definition: TabulatedComponent.hpp:290
static void calculateMoleFractions(const Evaluation &temperature, const Evaluation &pg, Scalar salinity, const int knownPhaseIdx, Evaluation &xlCO2, Evaluation &ygH2O)
Returns the mol (!) fraction of CO2 in the liquid phase and the mol_ (!) fraction of H2O in the gas p...
Definition: Brine_CO2.hpp:101
A simplistic class representing the fluid properties.
static LhsEval fugacityCoefficient(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx, unsigned compIdx)
Calculate the fugacity coefficient [Pa] of an individual component in a fluid phase.
Definition: BrineCO2FluidSystem.hpp:311
static const int CO2Idx
The index of the CO2 component.
Definition: BrineCO2FluidSystem.hpp:156
static Evaluation liquidHeatCapacity(const Evaluation &temperature, const Evaluation &pressure)
Specific isobaric heat capacity of the liquid .
Definition: TabulatedComponent.hpp:324
static LhsEval viscosity(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Calculate the dynamic viscosity of a fluid phase [Pa*s].
Definition: BrineCO2FluidSystem.hpp:284
static LhsEval density(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Calculate the density [kg/m^3] of a fluid phase.
Definition: BrineCO2FluidSystem.hpp:233
A class for the CO2 fluid properties.
static Scalar molarMass()
The molar mass in of the component.
Definition: TabulatedComponent.hpp:224
A simple version of pure water.
Relations valid for an ideal gas.
A class for the brine fluid properties.
static bool isIdealGas(unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition: BrineCO2FluidSystem.hpp:118
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &pressure)
Specific enthalpy of gaseous CO2 [J/kg].
Definition: CO2.hpp:167
static LhsEval thermalConductivity(const FluidState &, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Thermal conductivity of a fluid phase [W/(m K)].
Definition: BrineCO2FluidSystem.hpp:417
static LhsEval enthalpy(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Given a phase's composition, temperature, pressure and density, calculate its specific enthalpy [J/kg...
Definition: BrineCO2FluidSystem.hpp:383
static const int gasPhaseIdx
The index of the gas phase.
Definition: BrineCO2FluidSystem.hpp:89
static const int numComponents
Number of chemical species in the fluid system.
Definition: BrineCO2FluidSystem.hpp:151
A class for the brine fluid properties.
Definition: Brine.hpp:45
static Scalar molarMass(unsigned compIdx)
Return the molar mass of a component in [kg/mol].
Definition: BrineCO2FluidSystem.hpp:180
Definition: Air_Mesitylene.hpp:33
Opm::CO2< Scalar, CO2Tables > CO2
The type of the component for pure CO2 used by the fluid system.
Definition: BrineCO2FluidSystem.hpp:161
A parameter cache which does nothing.
Binary coefficients for water and CO2.
Binary coefficients for brine and CO2.
Definition: Brine_CO2.hpp:44
A two-phase fluid system with water and CO2.
Definition: BrineCO2FluidSystem.hpp:61
static Scalar salinity
The mass fraction of salt assumed to be in the brine.
Definition: Brine.hpp:49
static const char * phaseName(unsigned phaseIdx)
Return the human readable name of a fluid phase.
Definition: BrineCO2FluidSystem.hpp:94
A class for the CO2 fluid properties.
Definition: CO2.hpp:54
static const char * name()
A human readable name for the component.
Definition: TabulatedComponent.hpp:218
static const int numPhases
The number of phases considered by the fluid system.
Definition: BrineCO2FluidSystem.hpp:84
static Evaluation gasHeatCapacity(const Evaluation &temperature, const Evaluation &pressure)
Specific isobaric heat capacity of the component [J/kg] as a liquid.
Definition: CO2.hpp:252
static void init()
Initialize the fluid system's static parameters.
Definition: BrineCO2FluidSystem.hpp:195
static const char * name()
A human readable name for the CO2.
Definition: CO2.hpp:63
static Evaluation gasViscosity(Evaluation temperature, const Evaluation &pressure)
The dynamic viscosity [Pa s] of CO2.
Definition: CO2.hpp:202
static bool isCompressible(unsigned phaseIdx OPM_OPTIM_UNUSED)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition: BrineCO2FluidSystem.hpp:140
static const char * componentName(unsigned compIdx)
Return the human readable name of a component.
Definition: BrineCO2FluidSystem.hpp:166
A generic class which tabulates all thermodynamic properties of a given component.
The base class for all fluid systems.
Definition: BaseFluidSystem.hpp:43
Opm::BinaryCoeff::Brine_CO2< Scalar, CO2Tables > BinaryCoeffBrineCO2
The binary coefficients for brine and CO2 used by this fluid system.
Definition: BrineCO2FluidSystem.hpp:77
static Scalar molarMass()
The mass in [kg] of one mole of CO2.
Definition: CO2.hpp:69
A generic class which tabulates all thermodynamic properties of a given component.
Definition: TabulatedComponent.hpp:58
static Evaluation gasDensity(const Evaluation &temperature, const Evaluation &pressure)
The density of CO2 at a given pressure and temperature [kg/m^3].
Definition: CO2.hpp:190
static bool isLiquid(unsigned phaseIdx)
Return whether a phase is liquid.
Definition: BrineCO2FluidSystem.hpp:108
static bool gasIsIdeal()
Returns true iff the gas phase is assumed to be ideal.
Definition: CO2.hpp:160
static Evaluation liquidDiffCoeff(const Evaluation &, const Evaluation &)
Binary diffusion coefficent [m^2/s] of CO2 in the brine phase.
Definition: Brine_CO2.hpp:77
A parameter cache which does nothing.
Definition: NullParameterCache.hpp:39
static const int BrineIdx
The index of the brine component.
Definition: BrineCO2FluidSystem.hpp:154
Binary coefficients for brine and CO2.
Scalar Scalar
The type used for scalar quantities.
Definition: BaseFluidSystem.hpp:49
static void init(Scalar tempMin, Scalar tempMax, unsigned nTemp, Scalar pressMin, Scalar pressMax, unsigned nPress)
Initialize the tables.
Definition: TabulatedComponent.hpp:75
static void init(Scalar tempMin, Scalar tempMax, unsigned nTemp, Scalar pressMin, Scalar pressMax, unsigned nPress)
Initialize the fluid system's static parameters using problem specific temperature and pressure range...
Definition: BrineCO2FluidSystem.hpp:212
Definition: BrineCO2FluidSystem.hpp:73
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &pressure)
Specific enthalpy of the gas .
Definition: TabulatedComponent.hpp:273
static const int liquidPhaseIdx
The index of the liquid phase.
Definition: BrineCO2FluidSystem.hpp:87
static Evaluation liquidViscosity(const Evaluation &temperature, const Evaluation &pressure)
The dynamic viscosity of liquid.
Definition: TabulatedComponent.hpp:469
Brine_Tabulated Brine
The type of the component for brine used by the fluid system.
Definition: BrineCO2FluidSystem.hpp:159
static Evaluation gasDiffCoeff(const Evaluation &temperature, const Evaluation &pressure)
Binary diffusion coefficent [m^2/s] of water in the CO2 phase.
Definition: Brine_CO2.hpp:60
static bool isIdealMixture(unsigned phaseIdx OPM_OPTIM_UNUSED)
Returns true if and only if a fluid phase is assumed to be an ideal mixture.
Definition: BrineCO2FluidSystem.hpp:130
static LhsEval diffusionCoefficient(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx, unsigned)
Calculate the binary molecular diffusion coefficient for a component in a fluid phase [mol^2 * s / (k...
Definition: BrineCO2FluidSystem.hpp:365
static LhsEval heatCapacity(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Specific isobaric heat capacity of a fluid phase [J/kg].
Definition: BrineCO2FluidSystem.hpp:442
The base class for all fluid systems.
Binary coefficients for water and nitrogen.