opm-common
Co2GasPvt.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_CO2_GAS_PVT_HPP
28 #define OPM_CO2_GAS_PVT_HPP
29 
30 #include <opm/common/utility/VectorWithDefaultAllocator.hpp>
31 
33 #include <opm/common/TimingMacros.hpp>
34 #include <opm/common/ErrorMacros.hpp>
35 #include <opm/common/utility/gpuDecorators.hpp>
37 
43 #include <opm/input/eclipse/EclipseState/Co2StoreConfig.hpp>
44 #include <opm/material/components/CO2Tables.hpp>
45 #include <opm/input/eclipse/EclipseState/EclipseState.hpp>
46 #include <opm/input/eclipse/EclipseState/Tables/TableManager.hpp>
47 
48 #include <cstddef>
49 #include <vector>
50 
51 namespace Opm {
52 
53 class EclipseState;
54 class Schedule;
55 class Co2StoreConfig;
56 
57 // forward declaration of the class so the function in the next namespace can be declared
58 template <class Scalar, template<class> class Storage>
59 class Co2GasPvt;
60 
61 #if HAVE_CUDA
62 // declaration of make_view in correct namespace so friend function can be declared in the class
63 namespace gpuistl {
64  template <class Scalar>
66  make_view(Co2GasPvt<Scalar, GpuVector>&);
67 } // namespace gpuistl
68 #endif // HAVE_CUDA
69 
73 template <class Scalar, template<class> class Storage = VectorWithDefaultAllocator>
74 class Co2GasPvt
75 {
76  using Params = Opm::CO2Tables<double, Storage>;
80  using ContainerT = Storage<Scalar>;
81  static constexpr bool extrapolate = true;
82 
83 public:
86 
87  Co2GasPvt() = default;
88 
89  explicit Co2GasPvt(const ContainerT& salinity,
90  int activityModel = 3,
91  int thermalMixingModel = 1,
92  Scalar T_ref = 288.71, //(273.15 + 15.56)
93  Scalar P_ref = 101325);
94 
95  Co2GasPvt(const Params& params,
96  const ContainerT& brineReferenceDensity,
97  const ContainerT& gasReferenceDensity,
98  const ContainerT& salinity,
99  bool enableEzrokhiDensity,
100  bool enableVaporization,
101  int activityModel,
102  Co2StoreConfig::GasMixingType gastype)
103  : brineReferenceDensity_(brineReferenceDensity)
104  , gasReferenceDensity_(gasReferenceDensity)
105  , salinity_(salinity)
106  , enableEzrokhiDensity_(enableEzrokhiDensity)
107  , enableVaporization_(enableVaporization)
108  , activityModel_(activityModel)
109  , gastype_(gastype)
110  , co2Tables(params)
111 {
112  assert(enableEzrokhiDensity == false && "Ezrokhi density not supported by GPUs");
113 }
114 
115  void initFromState(const EclipseState& eclState, const Schedule&);
116 
117  void setNumRegions(std::size_t numRegions);
118 
119  OPM_HOST_DEVICE void setVapPars(const Scalar, const Scalar)
120  {
121  }
122 
123 
124  OPM_HOST_DEVICE static constexpr bool isActive()
125  {
126  return true;
127  }
128 
132  OPM_HOST_DEVICE void setReferenceDensities(unsigned regionIdx,
133  Scalar rhoRefBrine,
134  Scalar rhoRefGas,
135  Scalar /*rhoRefWater*/);
136 
143  OPM_HOST_DEVICE void setEnableVaporizationWater(bool yesno)
144  { enableVaporization_ = yesno; }
145 
149  OPM_HOST_DEVICE void setActivityModelSalt(int activityModel);
150 
154  OPM_HOST_DEVICE void setThermalMixingModel(int thermalMixingModel);
155 
159  OPM_HOST_DEVICE void initEnd()
160  {
161  }
162 
166  OPM_HOST_DEVICE unsigned numRegions() const
167  { return gasReferenceDensity_.size(); }
168 
169  OPM_HOST_DEVICE Scalar hVap(unsigned ) const
170  { return 0.0; }
171 
175  OPM_HOST_DEVICE static constexpr bool mixingEnergy()
176  { return false; }
177 
181  template <class Evaluation>
182  OPM_HOST_DEVICE Evaluation internalEnergy(unsigned regionIdx,
183  const Evaluation& temperature,
184  const Evaluation& pressure,
185  const Evaluation& rv,
186  const Evaluation& rvw) const
187  {
188  OPM_TIMEBLOCK_LOCAL(internalEnergy, Subsystem::PvtProps);
189  if (gastype_ == Co2StoreConfig::GasMixingType::NONE) {
190  // use the gasInternalEnergy of CO2
191  return CO2::gasInternalEnergy(co2Tables, temperature, pressure, extrapolate);
192  }
193 
194  assert(gastype_ == Co2StoreConfig::GasMixingType::IDEAL);
195  // account for H2O in the gas phase
196  Evaluation result = 0;
197  // The CO2STORE option both works for GAS/WATER and GAS/OIL systems
198  // Either rv og rvw should be zero
199  assert(rv == 0.0 || rvw == 0.0);
200  const Evaluation xBrine = convertRvwToXgW_(max(rvw,rv),regionIdx);
201  result += xBrine * H2O::gasInternalEnergy(temperature, pressure);
202  result += (1 - xBrine) * CO2::gasInternalEnergy(co2Tables, temperature, pressure, extrapolate);
203  return result;
204  }
205 
210  template <class Evaluation>
211  OPM_HOST_DEVICE Evaluation viscosity(unsigned regionIdx,
212  const Evaluation& temperature,
213  const Evaluation& pressure,
214  const Evaluation& /*Rv*/,
215  const Evaluation& /*Rvw*/) const
216  { return saturatedViscosity(regionIdx, temperature, pressure); }
217 
221  template <class Evaluation>
222  OPM_HOST_DEVICE Evaluation saturatedViscosity(unsigned /*regionIdx*/,
223  const Evaluation& temperature,
224  const Evaluation& pressure) const
225  {
226  OPM_TIMEBLOCK_LOCAL(saturatedViscosity, Subsystem::PvtProps);
227  // Neglects impact of vaporized water on the visosity
228  return CO2::gasViscosity(co2Tables, temperature, pressure, extrapolate);
229  }
230 
234  template <class Evaluation>
235  OPM_HOST_DEVICE Evaluation inverseFormationVolumeFactor(unsigned regionIdx,
236  const Evaluation& temperature,
237  const Evaluation& pressure,
238  const Evaluation& rv,
239  const Evaluation& rvw) const
240  {
241  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
242  if (!enableVaporization_) {
243  return CO2::gasDensity(co2Tables, temperature, pressure, extrapolate) /
244  gasReferenceDensity_[regionIdx];
245  }
246 
247  // Use CO2 density for the gas phase.
248  const auto& rhoCo2 = CO2::gasDensity(co2Tables, temperature, pressure, extrapolate);
249  //const auto& rhoH2O = H2O::gasDensity(temperature, pressure);
250  //The CO2STORE option both works for GAS/WATER and GAS/OIL systems
251  //Either rv og rvw should be zero
252  //assert(rv == 0.0 || rvw == 0.0);
253  //const Evaluation xBrine = convertRvwToXgW_(max(rvw,rv),regionIdx);
254  //const auto rho = 1.0/(xBrine/rhoH2O + (1.0 - xBrine)/rhoCo2);
255  return rhoCo2 / (gasReferenceDensity_[regionIdx] +
256  max(rvw,rv) * brineReferenceDensity_[regionIdx]);
257  }
258 
262  template <class FluidState, class LhsEval = typename FluidState::ValueType>
263  OPM_HOST_DEVICE std::pair<LhsEval, LhsEval>
264  inverseFormationVolumeFactorAndViscosity(const FluidState& fluidState, unsigned regionIdx) const
265  {
266  const LhsEval& T = decay<LhsEval>(fluidState.temperature(FluidState::gasPhaseIdx));
267  const LhsEval& p = decay<LhsEval>(fluidState.pressure(FluidState::gasPhaseIdx));
268  const LhsEval& Rv = decay<LhsEval>(fluidState.Rv());
269  const LhsEval& Rvw = decay<LhsEval>(fluidState.Rvw());
270  return { this->inverseFormationVolumeFactor(regionIdx, T, p, Rv, Rvw),
271  this->viscosity(regionIdx, T, p, Rv, Rvw) };
272  }
273 
277  template <class Evaluation>
278  OPM_HOST_DEVICE Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx,
279  const Evaluation& temperature,
280  const Evaluation& pressure) const
281  {
282  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
283  const Evaluation rvw = rvwSat_(regionIdx, temperature, pressure,
284  Evaluation(salinity_[regionIdx]));
285  return inverseFormationVolumeFactor(regionIdx, temperature,
286  pressure, Evaluation(0.0), rvw);
287  }
288 
296  template <class Evaluation>
297  OPM_HOST_DEVICE Evaluation saturationPressure(unsigned /*regionIdx*/,
298  const Evaluation& /*temperature*/,
299  const Evaluation& /*Rvw*/) const
300  { return 0.0; /* not implemented */ }
301 
305  template <class Evaluation>
306  OPM_HOST_DEVICE Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx,
307  const Evaluation& temperature,
308  const Evaluation& pressure) const
309  { return rvwSat_(regionIdx, temperature, pressure, Evaluation(salinity_[regionIdx])); }
310 
314  template <class Evaluation = Scalar>
315  OPM_HOST_DEVICE Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx,
316  const Evaluation& temperature,
317  const Evaluation& pressure,
318  const Evaluation& saltConcentration) const
319  {
320  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
321  const Evaluation salinity = salinityFromConcentration(temperature, pressure,
322  saltConcentration);
323  return rvwSat_(regionIdx, temperature, pressure, salinity);
324  }
325 
329  template <class Evaluation>
330  OPM_HOST_DEVICE Evaluation saturatedOilVaporizationFactor(unsigned regionIdx,
331  const Evaluation& temperature,
332  const Evaluation& pressure,
333  const Evaluation& /*oilSaturation*/,
334  const Evaluation& /*maxOilSaturation*/) const
335  { return rvwSat_(regionIdx, temperature, pressure, Evaluation(salinity_[regionIdx])); }
336 
340  template <class Evaluation>
341  OPM_HOST_DEVICE Evaluation saturatedOilVaporizationFactor(unsigned regionIdx,
342  const Evaluation& temperature,
343  const Evaluation& pressure) const
344  { return rvwSat_(regionIdx, temperature, pressure, Evaluation(salinity_[regionIdx])); }
345 
346  template <class Evaluation>
347  OPM_HOST_DEVICE Evaluation diffusionCoefficient(const Evaluation& temperature,
348  const Evaluation& pressure,
349  unsigned /*compIdx*/) const
350  {
351  return BinaryCoeffBrineCO2::gasDiffCoeff(co2Tables, temperature, pressure, extrapolate);
352  }
353 
354  OPM_HOST_DEVICE Scalar gasReferenceDensity(unsigned regionIdx) const
355  {
356  return gasReferenceDensity_[regionIdx];
357  }
358 
359  OPM_HOST_DEVICE Scalar oilReferenceDensity(unsigned regionIdx) const
360  { return brineReferenceDensity_[regionIdx]; }
361 
362  OPM_HOST_DEVICE Scalar waterReferenceDensity(unsigned regionIdx) const
363  { return brineReferenceDensity_[regionIdx]; }
364 
365  OPM_HOST_DEVICE Scalar salinity(unsigned regionIdx) const
366  { return salinity_[regionIdx]; }
367 
368  void setEzrokhiDenCoeff(const std::vector<EzrokhiTable>& denaqa);
369 
370  // new get functions that will be needed to move a cpu based Co2GasPvt object to the GPU
371  OPM_HOST_DEVICE const ContainerT& getBrineReferenceDensity() const
372  { return brineReferenceDensity_; }
373 
374  OPM_HOST_DEVICE const ContainerT& getGasReferenceDensity() const
375  { return gasReferenceDensity_; }
376 
377  OPM_HOST_DEVICE const ContainerT& getSalinity() const
378  { return salinity_; }
379 
380  OPM_HOST_DEVICE bool getEnableEzrokhiDensity() const
381  { return enableEzrokhiDensity_; }
382 
383  OPM_HOST_DEVICE bool getEnableVaporization() const
384  { return enableVaporization_; }
385 
386  OPM_HOST_DEVICE int getActivityModel() const
387  { return activityModel_; }
388 
389  OPM_HOST_DEVICE Co2StoreConfig::GasMixingType getGasType() const
390  { return gastype_; }
391 
392  OPM_HOST_DEVICE const Params& getParams() const
393  { return co2Tables; }
394 
395 private:
396  template <class LhsEval>
397  LhsEval ezrokhiExponent_(const LhsEval& temperature,
398  const ContainerT& ezrokhiCoeff) const
399  {
400  const LhsEval& tempC = temperature - 273.15;
401  return ezrokhiCoeff[0] + tempC * (ezrokhiCoeff[1] + ezrokhiCoeff[2] * tempC);
402  }
403 
404  template <class LhsEval>
405  OPM_HOST_DEVICE LhsEval rvwSat_(unsigned regionIdx,
406  const LhsEval& temperature,
407  const LhsEval& pressure,
408  const LhsEval& salinity) const
409  {
410  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
411  if (!enableVaporization_) {
412  return 0.0;
413  }
414 
415  // calulate the equilibrium composition for the given
416  // temperature and pressure.
417  LhsEval xgH2O;
418  LhsEval xlCO2;
420  temperature,
421  pressure,
422  salinity,
423  /*knownPhaseIdx=*/-1,
424  xlCO2,
425  xgH2O,
426  activityModel_,
427  extrapolate);
428 
429  // normalize the phase compositions
430  xgH2O = max(0.0, min(1.0, xgH2O));
431 
432  return convertXgWToRvw(convertxgWToXgW(xgH2O, salinity), regionIdx);
433  }
434 
439  template <class LhsEval>
440  OPM_HOST_DEVICE LhsEval convertXgWToRvw(const LhsEval& XgW, unsigned regionIdx) const
441  {
442  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
443  Scalar rho_wRef = brineReferenceDensity_[regionIdx];
444  Scalar rho_gRef = gasReferenceDensity_[regionIdx];
445 
446  return XgW / (1.0 - XgW) * (rho_gRef / rho_wRef);
447  }
448 
453  template <class LhsEval>
454  OPM_HOST_DEVICE LhsEval convertRvwToXgW_(const LhsEval& Rvw, unsigned regionIdx) const
455  {
456  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
457  Scalar rho_wRef = brineReferenceDensity_[regionIdx];
458  Scalar rho_gRef = gasReferenceDensity_[regionIdx];
459 
460  const LhsEval& rho_wG = Rvw * rho_wRef;
461  return rho_wG / (rho_gRef + rho_wG);
462  }
466  template <class LhsEval>
467  OPM_HOST_DEVICE LhsEval convertxgWToXgW(const LhsEval& xgW, const LhsEval& salinity) const
468  {
469  OPM_TIMEFUNCTION_LOCAL(Subsystem::PvtProps);
470  Scalar M_CO2 = CO2::molarMass();
471  LhsEval M_Brine = Brine::molarMass(salinity);
472 
473  return xgW * M_Brine / (xgW * (M_Brine - M_CO2) + M_CO2);
474  }
475 
476  #if HAVE_CUDA
477  template <class ScalarT>
478  friend Co2GasPvt<ScalarT, gpuistl::GpuView>
479  gpuistl::make_view(Co2GasPvt<ScalarT, gpuistl::GpuBuffer>&);
480  #endif // HAVE_CUDA
481 
482  template <class LhsEval>
483  OPM_HOST_DEVICE const LhsEval salinityFromConcentration(const LhsEval&T, const LhsEval& P,
484  const LhsEval& saltConcentration) const
485  { return saltConcentration/H2O::liquidDensity(T, P, true); }
486 
487  ContainerT brineReferenceDensity_{};
488  ContainerT gasReferenceDensity_{};
489  ContainerT salinity_{};
490  ContainerT ezrokhiDenNaClCoeff_{};
491  bool enableEzrokhiDensity_ = false;
492  bool enableVaporization_ = true;
493  int activityModel_{};
494  Co2StoreConfig::GasMixingType gastype_{};
495  Params co2Tables;
496 };
497 
498 } // namespace Opm
499 
500 #if HAVE_CUDA
501 namespace Opm::gpuistl {
502  template<class ScalarT>
503  Co2GasPvt<ScalarT, GpuBuffer>
504  copy_to_gpu(const Co2GasPvt<ScalarT>& cpuCo2)
505  {
506  return Co2GasPvt<ScalarT, GpuBuffer>(
507  copy_to_gpu(cpuCo2.getParams()),
508  GpuBuffer<ScalarT>(cpuCo2.getBrineReferenceDensity()),
509  GpuBuffer<ScalarT>(cpuCo2.getGasReferenceDensity()),
510  GpuBuffer<ScalarT>(cpuCo2.getSalinity()),
511  cpuCo2.getEnableEzrokhiDensity(),
512  cpuCo2.getEnableVaporization(),
513  cpuCo2.getActivityModel(),
514  cpuCo2.getGasType());
515  }
516 
517  template <class ScalarT>
518  Co2GasPvt<ScalarT, GpuView>
519  make_view(Co2GasPvt<ScalarT, GpuBuffer>& co2GasPvt)
520  {
521  using ContainedType = ScalarT;
522 
523  auto newBrineReferenceDensity = make_view<ContainedType>(co2GasPvt.brineReferenceDensity_);
524  auto newGasReferenceDensity = make_view<ContainedType>(co2GasPvt.gasReferenceDensity_);
525  auto newSalinity = make_view<ContainedType>(co2GasPvt.salinity_);
526 
527  return Co2GasPvt<ScalarT, GpuView>(
528  make_view(co2GasPvt.co2Tables),
529  newBrineReferenceDensity,
530  newGasReferenceDensity,
531  newSalinity,
532  co2GasPvt.getEnableEzrokhiDensity(),
533  co2GasPvt.getEnableVaporization(),
534  co2GasPvt.getActivityModel(),
535  co2GasPvt.getGasType());
536  }
537 } // namespace Opm::gpuistl
538 #endif // HAVE_CUDA
539 
540 #endif
static OPM_HOST_DEVICE Evaluation gasDiffCoeff(const CO2Params &params, 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:65
Material properties of pure water .
Definition: H2O.hpp:64
static OPM_HOST_DEVICE Scalar molarMass()
The mass in [kg] of one mole of CO2.
Definition: CO2.hpp:73
static OPM_HOST_DEVICE Evaluation gasViscosity(const Params &params, Evaluation temperature, const Evaluation &pressure, bool extrapolate=false)
The dynamic viscosity [Pa s] of CO2.
Definition: CO2.hpp:249
OPM_HOST_DEVICE Evaluation saturatedOilVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &, const Evaluation &) const
Returns the oil vaporization factor [m^3/m^3] of the oil phase.
Definition: Co2GasPvt.hpp:330
A class for the brine fluid properties.
Definition: BrineDynamic.hpp:48
A class for the CO2 fluid properties.
OPM_HOST_DEVICE void setReferenceDensities(unsigned regionIdx, Scalar rhoRefBrine, Scalar rhoRefGas, Scalar)
Initialize the reference densities of all fluids for a given PVT region.
Definition: Co2GasPvt.cpp:122
static OPM_HOST_DEVICE Evaluation gasDensity(const Params &params, 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:222
OPM_HOST_DEVICE void setThermalMixingModel(int thermalMixingModel)
Set thermal mixing model for co2 in brine.
Definition: Co2GasPvt.cpp:150
OPM_HOST_DEVICE Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the water vaporization factor [m^3/m^3] of the water phase.
Definition: Co2GasPvt.hpp:306
Definition: Schedule.hpp:102
OPM_HOST_DEVICE std::pair< LhsEval, LhsEval > inverseFormationVolumeFactorAndViscosity(const FluidState &fluidState, unsigned regionIdx) const
Returns the formation volume factor [-] and viscosity [Pa s] of the fluid phase.
Definition: Co2GasPvt.hpp:264
OPM_HOST_DEVICE Evaluation saturatedOilVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the oil vaporization factor [m^3/m^3] of the oil phase.
Definition: Co2GasPvt.hpp:341
OPM_HOST_DEVICE unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition: Co2GasPvt.hpp:166
static OPM_HOST_DEVICE Evaluation liquidDensity(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate)
The density of pure water at a given pressure and temperature .
Definition: SimpleHuDuanH2O.hpp:316
PiecewiseLinearTwoPhaseMaterialParams< TraitsT, ViewType > make_view(PiecewiseLinearTwoPhaseMaterialParams< TraitsT, ContainerType > &params)
this function is intented to make a GPU friendly view of the PiecewiseLinearTwoPhaseMaterialParams ...
Definition: PiecewiseLinearTwoPhaseMaterialParams.hpp:312
A class for the brine fluid properties.
Definition: Brine.hpp:47
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Convience header to include the gpuistl headers if HAVE_CUDA is defined.
Binary coefficients for brine and CO2.
Definition: Brine_CO2.hpp:48
static OPM_HOST_DEVICE Evaluation gasInternalEnergy(const Params &params, const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
Specific internal energy of CO2 [J/kg].
Definition: CO2.hpp:195
OPM_HOST_DEVICE void setEnableVaporizationWater(bool yesno)
Specify whether the PVT model should consider that the water component can vaporize in the gas phase...
Definition: Co2GasPvt.hpp:143
Definition: EclipseState.hpp:66
A class for the CO2 fluid properties.
Definition: CO2.hpp:57
OPM_HOST_DEVICE void setActivityModelSalt(int activityModel)
Set activity coefficient model for salt in solubility model.
Definition: Co2GasPvt.cpp:133
A simple version of pure water with density from Hu et al.
static OPM_HOST_DEVICE constexpr bool mixingEnergy()
Indicates whether this PVT object computes the gas internal energy via a thermal mixing model...
Definition: Co2GasPvt.hpp:175
static OPM_HOST_DEVICE Evaluation gasInternalEnergy(const Evaluation &temperature, const Evaluation &pressure)
Specific internal energy of steam .
Definition: SimpleHuDuanH2O.hpp:228
Implements a scalar function that depends on two variables and which is sampled on an uniform X-Y gri...
A simple version of pure water with density from Hu et al.
Definition: SimpleHuDuanH2O.hpp:65
A class for the brine fluid properties.
This class represents the Pressure-Volume-Temperature relations of the gas phase for CO2...
Definition: Co2GasPvt.hpp:59
OPM_HOST_DEVICE Evaluation internalEnergy(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &rv, const Evaluation &rvw) const
Returns the specific enthalpy [J/kg] of gas given a set of parameters.
Definition: Co2GasPvt.hpp:182
static OPM_HOST_DEVICE void calculateMoleFractions(const CO2Params &params, 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:113
PiecewiseLinearTwoPhaseMaterialParams< TraitsT, GPUContainerType > copy_to_gpu(const PiecewiseLinearTwoPhaseMaterialParams< TraitsT > &params)
Move a PiecewiseLinearTwoPhaseMaterialParams-object to the GPU.
Definition: PiecewiseLinearTwoPhaseMaterialParams.hpp:285
Definition: PiecewiseLinearTwoPhaseMaterialParams.hpp:47
OPM_HOST_DEVICE Evaluation saturationPressure(unsigned, const Evaluation &, const Evaluation &) const
Returns the saturation pressure of the gas phase [Pa] depending on its mass fraction of the brine com...
Definition: Co2GasPvt.hpp:297
Binary coefficients for brine and CO2.
OPM_HOST_DEVICE Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the formation volume factor [-] of water saturated gas at given pressure. ...
Definition: Co2GasPvt.hpp:278
OPM_HOST_DEVICE Evaluation inverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &rv, const Evaluation &rvw) const
Returns the formation volume factor [-] of the fluid phase.
Definition: Co2GasPvt.hpp:235
OPM_HOST_DEVICE Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &saltConcentration) const
Returns the water vaporization factor [m^3/m^3] of water phase.
Definition: Co2GasPvt.hpp:315
static Scalar molarMass()
The molar mass in of the component.
Definition: Component.hpp:93
OPM_HOST_DEVICE Evaluation viscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &, const Evaluation &) const
Returns the dynamic viscosity [Pa s] of the fluid phase given a set of parameters.
Definition: Co2GasPvt.hpp:211
OPM_HOST_DEVICE Evaluation saturatedViscosity(unsigned, const Evaluation &temperature, const Evaluation &pressure) const
Returns the dynamic viscosity [Pa s] of fluid phase at saturated conditions.
Definition: Co2GasPvt.hpp:222
OPM_HOST_DEVICE void initEnd()
Finish initializing the co2 phase PVT properties.
Definition: Co2GasPvt.hpp:159