28#ifndef OPM_BRINE_CO2_SYSTEM_HPP
29#define OPM_BRINE_CO2_SYSTEM_HPP
55const float CO2<float>::brineSalinity;
57const double CO2<double>::brineSalinity;
66template <
class Scalar>
71 typedef ::Opm::Brine<Scalar, H2O_IAPWS>
Brine_IAPWS;
78 template <
class Evaluation>
85 typedef ::Opm::CO2<Scalar>
CO2;
107 static const std::string_view name[] = {
113 return name[phaseIdx];
174 static const std::string_view name[] = {
180 return name[compIdx];
203 init(273.15, 623.15, 50,
221 if (H2O::isTabulated) {
223 pressMin, pressMax, nPress);
229 if (Brine::isTabulated) {
231 pressMin, pressMax, nPress);
238 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
239 static LhsEval
density(
const FluidState& fluidState,
245 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
246 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
253 LhsEval xlCO2 = min(1.0, max(0.0, decay<LhsEval>(fluidState.moleFraction(
liquidPhaseIdx,
CO2Idx))));
254 LhsEval sumx = xlBrine + xlCO2;
258 LhsEval result = liquidDensity_(temperature,
263 Valgrind::CheckDefined(result);
272 LhsEval xgBrine = min(1.0, max(0.0, decay<LhsEval>(fluidState.moleFraction(
gasPhaseIdx,
BrineIdx))));
273 LhsEval xgCO2 = min(1.0, max(0.0, decay<LhsEval>(fluidState.moleFraction(
gasPhaseIdx,
CO2Idx))));
274 LhsEval sumx = xgBrine + xgCO2;
278 LhsEval result = gasDensity_(temperature,
282 Valgrind::CheckDefined(result);
289 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
296 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
297 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
303 Valgrind::CheckDefined(result);
309 Valgrind::CheckDefined(result);
316 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
331 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
332 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
333 assert(temperature > 0);
334 assert(pressure > 0);
338 const int activityModel = 3;
343 LhsEval xlH2O, xgH2O;
344 LhsEval xlCO2, xgCO2;
354 xlCO2 = max(0.0, min(1.0, xlCO2));
355 xgH2O = max(0.0, min(1.0, xgH2O));
362 return phigH2O * xgH2O / xlH2O;
365 assert(compIdx ==
CO2Idx);
368 return phigCO2 * xgCO2 / xlCO2;
375 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
381 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
382 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
393 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
394 static LhsEval
enthalpy(
const FluidState& fluidState,
400 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
401 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
404 const LhsEval& XlCO2 = decay<LhsEval>(fluidState.massFraction(phaseIdx,
CO2Idx));
405 const LhsEval& result = liquidEnthalpyBrineCO2_(temperature,
409 Valgrind::CheckDefined(result);
413 const LhsEval& XCO2 = decay<LhsEval>(fluidState.massFraction(
gasPhaseIdx,
CO2Idx));
419 Valgrind::CheckDefined(result);
427 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
452 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
459 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
460 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
469 template <
class LhsEval>
470 static LhsEval gasDensity_(
const LhsEval& T,
472 const LhsEval& xgH2O,
473 const LhsEval& xgCO2)
475 Valgrind::CheckDefined(T);
476 Valgrind::CheckDefined(pg);
477 Valgrind::CheckDefined(xgH2O);
478 Valgrind::CheckDefined(xgCO2);
489 template <
class LhsEval>
490 static LhsEval liquidDensity_(
const LhsEval& T,
492 const LhsEval& xlH2O,
493 const LhsEval& xlCO2)
495 Valgrind::CheckDefined(T);
496 Valgrind::CheckDefined(pl);
497 Valgrind::CheckDefined(xlH2O);
498 Valgrind::CheckDefined(xlCO2);
500 auto cast = [](
const auto d)
503 if constexpr (std::is_same_v<
decltype(d),
const quad>)
504 return static_cast<double>(d);
510 auto tostring = [cast](
const auto& val) -> std::string
512 if constexpr (DenseAd::is_evaluation<LhsEval>::value) {
513 return std::to_string(cast(getValue(val.value())));
515 return std::to_string(cast(val));
520 const std::string msg =
521 "Liquid density for Brine and CO2 is only "
522 "defined above 273.15K (is +"
524 throw NumericalProblem(msg);
527 const std::string msg =
528 "Liquid density for Brine and CO2 is only "
529 "defined below 250MPa (is "
530 + tostring(pl) +
"Pa)";
531 throw NumericalProblem(msg);
536 const LhsEval& rho_lCO2 = liquidDensityWaterCO2_(T, pl, xlH2O, xlCO2);
537 const LhsEval& contribCO2 = rho_lCO2 - rho_pure;
539 return rho_brine + contribCO2;
542 template <
class LhsEval>
543 static LhsEval liquidDensityWaterCO2_(
const LhsEval& temperature,
546 const LhsEval& xlCO2)
551 const LhsEval& tempC = temperature - 273.15;
556 const LhsEval xlH2O = 1.0 - xlCO2;
557 const LhsEval& M_T = M_H2O * xlH2O + M_CO2 * xlCO2;
558 const LhsEval& V_phi =
562 tempC*5.044e-7))) / 1.0e6;
563 return 1/ (xlCO2 * V_phi/M_T + M_H2O * xlH2O / (rho_pure * M_T));
566 template <
class LhsEval>
567 static LhsEval liquidEnthalpyBrineCO2_(
const LhsEval& T,
570 const LhsEval& X_CO2_w)
578 2.63500E-1, 7.48368E-6, 1.44611E-6, -3.80860E-10
583 { 9633.6, -4080.0, +286.49 },
584 { +166.58, +68.577, -4.6856 },
585 { -0.90963, -0.36524, +0.249667E-1 },
586 { +0.17965E-2, +0.71924E-3, -0.4900E-4 }
589 LhsEval theta, h_NaCl;
592 LhsEval delta_hCO2, hg, hw;
597 Scalar scalarTheta = scalarValue(theta);
598 Scalar S_lSAT = f[0] + scalarTheta*(f[1] + scalarTheta*(f[2] + scalarTheta*f[3]));
605 h_NaCl = (3.6710E4*T + 0.5*(6.2770E1)*T*T - ((6.6670E-2)/3)*T*T*T
606 +((2.8000E-5)/4)*(T*T*T*T))/(58.44E3)- 2.045698e+02;
608 Scalar m = 1E3/58.44 * S/(1-S);
613 for (i = 0; i<=3; i++) {
614 for (j=0; j<=2; j++) {
615 d_h = d_h + a[i][j] * pow(theta,
static_cast<Scalar>(i)) * std::pow(m, j);
619 delta_h = (4.184/(1E3 + (58.44 * m)))*d_h;
622 h_ls1 =(1-S)*hw + S*h_NaCl + S*delta_h;
627 delta_hCO2 = (-57.4375 + T * 0.1325) * 1000/44;
633 return (h_ls1 - X_CO2_w*hw + hg*X_CO2_w)*1E3;
The base class for all fluid systems.
A class for the brine fluid properties.
Binary coefficients for brine and CO2.
A class for the CO2 fluid properties.
Provides the OPM specific exception classes.
Binary coefficients for water and CO2.
Binary coefficients for water and nitrogen.
Relations valid for an ideal gas.
A parameter cache which does nothing.
A simplistic class representing the fluid properties.
A simple version of pure water.
A generic class which tabulates all thermodynamic properties of a given component.
The base class for all fluid systems.
Definition BaseFluidSystem.hpp:47
Scalar Scalar
The type used for scalar quantities.
Definition BaseFluidSystem.hpp:52
Binary coefficients for brine and CO2.
Definition Brine_CO2.hpp:45
static void calculateMoleFractions(const Evaluation &temperature, const Evaluation &pg, const Evaluation &salinity, const int knownPhaseIdx, Evaluation &xlCO2, Evaluation &ygH2O, const int &activityModel, bool extrapolate=false)
Returns the mol (!) fraction of CO2 in the liquid phase and the mol_ (!) fraction of H2O in the gas p...
Definition Brine_CO2.hpp:100
static Evaluation gasDiffCoeff(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
Binary diffusion coefficent [m^2/s] of water in the CO2 phase.
Definition Brine_CO2.hpp:59
static Evaluation liquidDiffCoeff(const Evaluation &, const Evaluation &)
Binary diffusion coefficent [m^2/s] of CO2 in the brine phase.
Definition Brine_CO2.hpp:76
A two-phase fluid system with water and CO2.
Definition BrineCO2FluidSystem.hpp:69
static const int CO2Idx
The index of the CO2 component.
Definition BrineCO2FluidSystem.hpp:167
static const int BrineIdx
The index of the brine component.
Definition BrineCO2FluidSystem.hpp:165
Brine_Tabulated Brine
The type of the component for brine used by the fluid system.
Definition BrineCO2FluidSystem.hpp:83
static std::string_view componentName(unsigned compIdx)
Return the human readable name of a component.
Definition BrineCO2FluidSystem.hpp:172
static void init()
Initialize the fluid system's static parameters.
Definition BrineCO2FluidSystem.hpp:201
static LhsEval heatCapacity(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Specific isobaric heat capacity of a fluid phase [J/kg].
Definition BrineCO2FluidSystem.hpp:453
static const int gasPhaseIdx
The index of the gas phase.
Definition BrineCO2FluidSystem.hpp:100
static LhsEval thermalConductivity(const FluidState &, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Thermal conductivity of a fluid phase [W/(m K)].
Definition BrineCO2FluidSystem.hpp:428
static const int numPhases
The number of phases considered by the fluid system.
Definition BrineCO2FluidSystem.hpp:95
BinaryCoeff::Brine_CO2< Scalar, H2O, CO2 > BinaryCoeffBrineCO2
The binary coefficients for brine and CO2 used by this fluid system.
Definition BrineCO2FluidSystem.hpp:88
::Opm::CO2< Scalar > CO2
The type of the component for pure CO2 used by the fluid system.
Definition BrineCO2FluidSystem.hpp:85
static Scalar molarMass(unsigned compIdx)
Return the molar mass of a component in [kg/mol].
Definition BrineCO2FluidSystem.hpp:186
static bool isIdealMixture(unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal mixture.
Definition BrineCO2FluidSystem.hpp:141
static bool isCompressible(unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition BrineCO2FluidSystem.hpp:151
static const int numComponents
Number of chemical species in the fluid system.
Definition BrineCO2FluidSystem.hpp:162
static const int liquidPhaseIdx
The index of the liquid phase.
Definition BrineCO2FluidSystem.hpp:98
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:394
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:218
static LhsEval viscosity(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Calculate the dynamic viscosity of a fluid phase [Pa*s].
Definition BrineCO2FluidSystem.hpp:290
static bool isIdealGas(unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition BrineCO2FluidSystem.hpp:129
static std::string_view phaseName(unsigned phaseIdx)
Return the human readable name of a fluid phase.
Definition BrineCO2FluidSystem.hpp:105
static LhsEval density(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Calculate the density [kg/m^3] of a fluid phase.
Definition BrineCO2FluidSystem.hpp:239
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:376
static bool isLiquid(unsigned phaseIdx)
Return whether a phase is liquid.
Definition BrineCO2FluidSystem.hpp:119
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:317
A class for the brine fluid properties.
Definition Brine.hpp:48
static Scalar salinity
The mass fraction of salt assumed to be in the brine.
Definition Brine.hpp:51
static Evaluation gasHeatCapacity(const Evaluation &temperature, const Evaluation &pressure)
Specific isobaric heat capacity of the component [J/kg] as a liquid.
Definition CO2.hpp:261
static Evaluation gasViscosity(Evaluation temperature, const Evaluation &pressure, bool extrapolate=false)
The dynamic viscosity [Pa s] of CO2.
Definition CO2.hpp:208
static std::string_view name()
A human readable name for the CO2.
Definition CO2.hpp:65
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
Specific enthalpy of gaseous CO2 [J/kg].
Definition CO2.hpp:169
static bool gasIsIdeal()
Returns true iff the gas phase is assumed to be ideal.
Definition CO2.hpp:162
static Scalar molarMass()
The mass in [kg] of one mole of CO2.
Definition CO2.hpp:71
static Evaluation gasDensity(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
The density of CO2 at a given pressure and temperature [kg/m^3].
Definition CO2.hpp:194
Material properties of pure water .
Definition H2O.hpp:65
A parameter cache which does nothing.
Definition NullParameterCache.hpp:40
A generic class which tabulates all thermodynamic properties of a given component.
Definition TabulatedComponent.hpp:56
static std::string_view name()
A human readable name for the component.
Definition TabulatedComponent.hpp:215
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &pressure)
Specific enthalpy of the gas .
Definition TabulatedComponent.hpp:282
static Evaluation liquidHeatCapacity(const Evaluation &temperature, const Evaluation &pressure)
Specific isobaric heat capacity of the liquid .
Definition TabulatedComponent.hpp:333
static void init(Scalar tempMin, Scalar tempMax, unsigned nTemp, Scalar pressMin, Scalar pressMax, unsigned nPress)
Initialize the tables.
Definition TabulatedComponent.hpp:72
static Scalar molarMass()
The molar mass in of the component.
Definition TabulatedComponent.hpp:221
static Evaluation liquidViscosity(const Evaluation &temperature, const Evaluation &pressure)
The dynamic viscosity of liquid.
Definition TabulatedComponent.hpp:478
static Evaluation liquidDensity(const Evaluation &temperature, const Evaluation &pressure)
The density of liquid at a given pressure and temperature .
Definition TabulatedComponent.hpp:444
static Evaluation liquidEnthalpy(const Evaluation &temperature, const Evaluation &pressure)
Specific enthalpy of the liquid .
Definition TabulatedComponent.hpp:299
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30
Definition BrineCO2FluidSystem.hpp:80