28 #ifndef OPM_BRINE_CO2_SYSTEM_HPP
29 #define OPM_BRINE_CO2_SYSTEM_HPP
57 template <
class Scalar,
class CO2Tables>
59 :
public BaseFluidSystem<Scalar, BrineCO2FluidSystem<Scalar, CO2Tables> >
62 typedef ::Opm::Brine<Scalar, H2O_IAPWS>
Brine_IAPWS;
69 template <
class Evaluation>
76 typedef ::Opm::CO2<Scalar, CO2Tables>
CO2;
98 static const char* name[] = {
104 return name[phaseIdx];
165 static const char* name[] = {
171 return name[compIdx];
194 init(273.15, 623.15, 50,
212 if (H2O::isTabulated) {
214 pressMin, pressMax, nPress);
220 if (Brine::isTabulated) {
222 pressMin, pressMax, nPress);
229 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
230 static LhsEval
density(
const FluidState& fluidState,
236 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
237 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
244 LhsEval xlCO2 = min(1.0, max(0.0, decay<LhsEval>(fluidState.moleFraction(
liquidPhaseIdx,
CO2Idx))));
245 LhsEval sumx = xlBrine + xlCO2;
249 LhsEval result = liquidDensity_(temperature,
254 Valgrind::CheckDefined(result);
263 LhsEval xgBrine = min(1.0, max(0.0, decay<LhsEval>(fluidState.moleFraction(
gasPhaseIdx,
BrineIdx))));
264 LhsEval xgCO2 = min(1.0, max(0.0, decay<LhsEval>(fluidState.moleFraction(
gasPhaseIdx,
CO2Idx))));
265 LhsEval sumx = xgBrine + xgCO2;
269 LhsEval result = gasDensity_(temperature,
273 Valgrind::CheckDefined(result);
280 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
287 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
288 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
294 Valgrind::CheckDefined(result);
300 Valgrind::CheckDefined(result);
307 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
322 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
323 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
324 assert(temperature > 0);
325 assert(pressure > 0);
330 LhsEval xlH2O, xgH2O;
331 LhsEval xlCO2, xgCO2;
340 xlCO2 = max(0.0, min(1.0, xlCO2));
341 xgH2O = max(0.0, min(1.0, xgH2O));
348 return phigH2O * xgH2O / xlH2O;
351 assert(compIdx ==
CO2Idx);
354 return phigCO2 * xgCO2 / xlCO2;
361 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
367 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
368 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
379 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
380 static LhsEval
enthalpy(
const FluidState& fluidState,
386 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
387 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
390 const LhsEval& XlCO2 = decay<LhsEval>(fluidState.massFraction(phaseIdx,
CO2Idx));
391 const LhsEval& result = liquidEnthalpyBrineCO2_(temperature,
395 Valgrind::CheckDefined(result);
399 const LhsEval& XCO2 = decay<LhsEval>(fluidState.massFraction(
gasPhaseIdx,
CO2Idx));
405 Valgrind::CheckDefined(result);
413 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
438 template <
class Flu
idState,
class LhsEval =
typename Flu
idState::Scalar,
class ParamCacheEval = LhsEval>
445 const LhsEval& temperature = decay<LhsEval>(fluidState.temperature(phaseIdx));
446 const LhsEval& pressure = decay<LhsEval>(fluidState.pressure(phaseIdx));
455 template <
class LhsEval>
456 static LhsEval gasDensity_(
const LhsEval& T,
458 const LhsEval& xgH2O,
459 const LhsEval& xgCO2)
461 Valgrind::CheckDefined(T);
462 Valgrind::CheckDefined(pg);
463 Valgrind::CheckDefined(xgH2O);
464 Valgrind::CheckDefined(xgCO2);
475 template <
class LhsEval>
476 static LhsEval liquidDensity_(
const LhsEval& T,
478 const LhsEval& xlH2O,
479 const LhsEval& xlCO2)
481 Valgrind::CheckDefined(T);
482 Valgrind::CheckDefined(pl);
483 Valgrind::CheckDefined(xlH2O);
484 Valgrind::CheckDefined(xlCO2);
487 std::ostringstream oss;
488 oss <<
"Liquid density for Brine and CO2 is only "
489 "defined above 273.15K (is "<<T<<
"K)";
490 throw NumericalIssue(oss.str());
493 std::ostringstream oss;
494 oss <<
"Liquid density for Brine and CO2 is only "
495 "defined below 250MPa (is "<<pl<<
"Pa)";
496 throw NumericalIssue(oss.str());
501 const LhsEval& rho_lCO2 = liquidDensityWaterCO2_(T, pl, xlH2O, xlCO2);
502 const LhsEval& contribCO2 = rho_lCO2 - rho_pure;
504 return rho_brine + contribCO2;
507 template <
class LhsEval>
508 static LhsEval liquidDensityWaterCO2_(
const LhsEval& temperature,
511 const LhsEval& xlCO2)
516 const LhsEval& tempC = temperature - 273.15;
521 const LhsEval xlH2O = 1.0 - xlCO2;
522 const LhsEval& M_T = M_H2O * xlH2O + M_CO2 * xlCO2;
523 const LhsEval& V_phi =
527 tempC*5.044e-7))) / 1.0e6;
528 return 1/ (xlCO2 * V_phi/M_T + M_H2O * xlH2O / (rho_pure * M_T));
531 template <
class LhsEval>
532 static LhsEval liquidEnthalpyBrineCO2_(
const LhsEval& T,
535 const LhsEval& X_CO2_w)
543 2.63500E-1, 7.48368E-6, 1.44611E-6, -3.80860E-10
548 { 9633.6, -4080.0, +286.49 },
549 { +166.58, +68.577, -4.6856 },
550 { -0.90963, -0.36524, +0.249667E-1 },
551 { +0.17965E-2, +0.71924E-3, -0.4900E-4 }
554 LhsEval theta, h_NaCl;
557 LhsEval delta_hCO2, hg, hw;
562 Scalar scalarTheta = scalarValue(theta);
563 Scalar S_lSAT = f[0] + scalarTheta*(f[1] + scalarTheta*(f[2] + scalarTheta*f[3]));
570 h_NaCl = (3.6710E4*T + 0.5*(6.2770E1)*T*T - ((6.6670E-2)/3)*T*T*T
571 +((2.8000E-5)/4)*(T*T*T*T))/(58.44E3)- 2.045698e+02;
573 Scalar m = 1E3/58.44 * S/(1-S);
578 for (i = 0; i<=3; i++) {
579 for (j=0; j<=2; j++) {
580 d_h = d_h + a[i][j] * pow(theta,
static_cast<Scalar>(i)) * std::pow(m, j);
584 delta_h = (4.184/(1E3 + (58.44 * m)))*d_h;
587 h_ls1 =(1-S)*hw + S*h_NaCl + S*delta_h;
592 delta_hCO2 = (-57.4375 + T * 0.1325) * 1000/44;
598 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.
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:44
Scalar Scalar
The type used for scalar quantities.
Definition: BaseFluidSystem.hpp:49
Binary coefficients for brine and CO2.
Definition: Brine_CO2.hpp:42
static void calculateMoleFractions(const Evaluation &temperature, const Evaluation &pg, Scalar salinity, const int knownPhaseIdx, Evaluation &xlCO2, Evaluation &ygH2O, 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:97
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:56
static Evaluation liquidDiffCoeff(const Evaluation &, const Evaluation &)
Binary diffusion coefficent [m^2/s] of CO2 in the brine phase.
Definition: Brine_CO2.hpp:73
A two-phase fluid system with water and CO2.
Definition: BrineCO2FluidSystem.hpp:60
static bool isIdealGas(unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal gas.
Definition: BrineCO2FluidSystem.hpp:120
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:380
static const char * phaseName(unsigned phaseIdx)
Return the human readable name of a fluid phase.
Definition: BrineCO2FluidSystem.hpp:96
static LhsEval thermalConductivity(const FluidState &, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Thermal conductivity of a fluid phase [W/(m K)].
Definition: BrineCO2FluidSystem.hpp:414
static const int gasPhaseIdx
The index of the gas phase.
Definition: BrineCO2FluidSystem.hpp:91
static Scalar molarMass(unsigned compIdx)
Return the molar mass of a component in [kg/mol].
Definition: BrineCO2FluidSystem.hpp:177
static const char * componentName(unsigned compIdx)
Return the human readable name of a component.
Definition: BrineCO2FluidSystem.hpp:163
static LhsEval density(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Calculate the density [kg/m^3] of a fluid phase.
Definition: BrineCO2FluidSystem.hpp:230
static const int numComponents
Number of chemical species in the fluid system.
Definition: BrineCO2FluidSystem.hpp:153
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:308
::Opm::CO2< Scalar, CO2Tables > CO2
The type of the component for pure CO2 used by the fluid system.
Definition: BrineCO2FluidSystem.hpp:76
static const int CO2Idx
The index of the CO2 component.
Definition: BrineCO2FluidSystem.hpp:158
static LhsEval viscosity(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Calculate the dynamic viscosity of a fluid phase [Pa*s].
Definition: BrineCO2FluidSystem.hpp:281
static bool isLiquid(unsigned phaseIdx)
Return whether a phase is liquid.
Definition: BrineCO2FluidSystem.hpp:110
BinaryCoeff::Brine_CO2< Scalar, H2O, CO2 > BinaryCoeffBrineCO2
The binary coefficients for brine and CO2 used by this fluid system.
Definition: BrineCO2FluidSystem.hpp:79
static bool isCompressible([[maybe_unused]] unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be compressible.
Definition: BrineCO2FluidSystem.hpp:142
static const int numPhases
The number of phases considered by the fluid system.
Definition: BrineCO2FluidSystem.hpp:86
static const int BrineIdx
The index of the brine component.
Definition: BrineCO2FluidSystem.hpp:156
static bool isIdealMixture([[maybe_unused]] unsigned phaseIdx)
Returns true if and only if a fluid phase is assumed to be an ideal mixture.
Definition: BrineCO2FluidSystem.hpp:132
static void init()
Initialize the fluid system's static parameters.
Definition: BrineCO2FluidSystem.hpp:192
static const int liquidPhaseIdx
The index of the liquid phase.
Definition: BrineCO2FluidSystem.hpp:89
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:209
Brine_Tabulated Brine
The type of the component for brine used by the fluid system.
Definition: BrineCO2FluidSystem.hpp:74
static LhsEval heatCapacity(const FluidState &fluidState, const ParameterCache< ParamCacheEval > &, unsigned phaseIdx)
Specific isobaric heat capacity of a fluid phase [J/kg].
Definition: BrineCO2FluidSystem.hpp:439
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:362
A class for the brine fluid properties.
Definition: Brine.hpp:46
static Scalar salinity
The mass fraction of salt assumed to be in the brine.
Definition: Brine.hpp:49
static Evaluation gasHeatCapacity(const Evaluation &temperature, const Evaluation &pressure)
Specific isobaric heat capacity of the component [J/kg] as a liquid.
Definition: CO2.hpp:255
static const char * name()
A human readable name for the CO2.
Definition: CO2.hpp:60
static Scalar molarMass()
The mass in [kg] of one mole of CO2.
Definition: CO2.hpp:66
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
Specific enthalpy of gaseous CO2 [J/kg].
Definition: CO2.hpp:164
static Evaluation gasViscosity(Evaluation temperature, const Evaluation &pressure, bool extrapolate=false)
The dynamic viscosity [Pa s] of CO2.
Definition: CO2.hpp:203
static bool gasIsIdeal()
Returns true iff the gas phase is assumed to be ideal.
Definition: CO2.hpp:157
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:189
Material properties of pure water .
Definition: H2O.hpp:62
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 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 const char * name()
A human readable name for the component.
Definition: TabulatedComponent.hpp:215
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
Definition: BrineCO2FluidSystem.hpp:71