GasPvtMultiplexer.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_GAS_PVT_MULTIPLEXER_HPP
28#define OPM_GAS_PVT_MULTIPLEXER_HPP
29
30#include "DryGasPvt.hpp"
31#include "DryHumidGasPvt.hpp"
32#include "WetHumidGasPvt.hpp"
33#include "WetGasPvt.hpp"
34#include "GasPvtThermal.hpp"
35#include "Co2GasPvt.hpp"
36
37#if HAVE_ECL_INPUT
38#include <opm/input/eclipse/EclipseState/EclipseState.hpp>
39#endif
40
41namespace Opm {
42#define OPM_GAS_PVT_MULTIPLEXER_CALL(codeToCall) \
43 switch (gasPvtApproach_) { \
44 case GasPvtApproach::DryGasPvt: { \
45 auto& pvtImpl = getRealPvt<GasPvtApproach::DryGasPvt>(); \
46 codeToCall; \
47 break; \
48 } \
49 case GasPvtApproach::DryHumidGasPvt: { \
50 auto& pvtImpl = getRealPvt<GasPvtApproach::DryHumidGasPvt>(); \
51 codeToCall; \
52 break; \
53 } \
54 case GasPvtApproach::WetHumidGasPvt: { \
55 auto& pvtImpl = getRealPvt<GasPvtApproach::WetHumidGasPvt>(); \
56 codeToCall; \
57 break; \
58 } \
59 case GasPvtApproach::WetGasPvt: { \
60 auto& pvtImpl = getRealPvt<GasPvtApproach::WetGasPvt>(); \
61 codeToCall; \
62 break; \
63 } \
64 case GasPvtApproach::ThermalGasPvt: { \
65 auto& pvtImpl = getRealPvt<GasPvtApproach::ThermalGasPvt>(); \
66 codeToCall; \
67 break; \
68 } \
69 case GasPvtApproach::Co2GasPvt: { \
70 auto& pvtImpl = getRealPvt<GasPvtApproach::Co2GasPvt>(); \
71 codeToCall; \
72 break; \
73 } \
74 case GasPvtApproach::NoGasPvt: \
75 throw std::logic_error("Not implemented: Gas PVT of this deck!"); \
76 } \
77
78enum class GasPvtApproach {
86};
87
98template <class Scalar, bool enableThermal = true>
100{
101public:
103 {
104 gasPvtApproach_ = GasPvtApproach::NoGasPvt;
105 realGasPvt_ = nullptr;
106 }
107
109 : gasPvtApproach_(approach)
110 , realGasPvt_(realGasPvt)
111 { }
112
114 {
115 *this = data;
116 }
117
119 {
120 switch (gasPvtApproach_) {
122 delete &getRealPvt<GasPvtApproach::DryGasPvt>();
123 break;
124 }
126 delete &getRealPvt<GasPvtApproach::DryHumidGasPvt>();
127 break;
128 }
130 delete &getRealPvt<GasPvtApproach::WetHumidGasPvt>();
131 break;
132 }
134 delete &getRealPvt<GasPvtApproach::WetGasPvt>();
135 break;
136 }
138 delete &getRealPvt<GasPvtApproach::ThermalGasPvt>();
139 break;
140 }
142 delete &getRealPvt<GasPvtApproach::Co2GasPvt>();
143 break;
144 }
146 break;
147 }
148 }
149
150#if HAVE_ECL_INPUT
156 void initFromState(const EclipseState& eclState, const Schedule& schedule)
157 {
158 if (!eclState.runspec().phases().active(Phase::GAS))
159 return;
160 if (eclState.runspec().co2Storage())
162 else if (enableThermal && eclState.getSimulationConfig().isThermal())
164 else if (!eclState.getTableManager().getPvtgwTables().empty() && !eclState.getTableManager().getPvtgTables().empty())
166 else if (!eclState.getTableManager().getPvtgTables().empty())
168 else if (eclState.getTableManager().hasTables("PVDG"))
170 else if (!eclState.getTableManager().getPvtgwTables().empty())
172
173
174 OPM_GAS_PVT_MULTIPLEXER_CALL(pvtImpl.initFromState(eclState, schedule));
175 }
176#endif // HAVE_ECL_INPUT
177
179 {
180 switch (gasPvtAppr) {
182 realGasPvt_ = new DryGasPvt<Scalar>;
183 break;
184
186 realGasPvt_ = new DryHumidGasPvt<Scalar>;
187 break;
188
190 realGasPvt_ = new WetHumidGasPvt<Scalar>;
191 break;
192
194 realGasPvt_ = new WetGasPvt<Scalar>;
195 break;
196
198 realGasPvt_ = new GasPvtThermal<Scalar>;
199 break;
200
202 realGasPvt_ = new Co2GasPvt<Scalar>;
203 break;
204
206 throw std::logic_error("Not implemented: Gas PVT of this deck!");
207 }
208
209 gasPvtApproach_ = gasPvtAppr;
210 }
211
212 void initEnd()
213 { OPM_GAS_PVT_MULTIPLEXER_CALL(pvtImpl.initEnd()); }
214
218 unsigned numRegions() const
219 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.numRegions()); return 1; }
220
224 const Scalar gasReferenceDensity(unsigned regionIdx)
225 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.gasReferenceDensity(regionIdx)); return 2.; }
226
230 template <class Evaluation>
231 Evaluation internalEnergy(unsigned regionIdx,
232 const Evaluation& temperature,
233 const Evaluation& pressure,
234 const Evaluation& Rv) const
235 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.internalEnergy(regionIdx, temperature, pressure, Rv)); return 0; }
236
240 template <class Evaluation = Scalar>
241 Evaluation viscosity(unsigned regionIdx,
242 const Evaluation& temperature,
243 const Evaluation& pressure,
244 const Evaluation& Rv,
245 const Evaluation& Rvw ) const
246 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.viscosity(regionIdx, temperature, pressure, Rv, Rvw)); return 0; }
247
251 template <class Evaluation = Scalar>
252 Evaluation saturatedViscosity(unsigned regionIdx,
253 const Evaluation& temperature,
254 const Evaluation& pressure) const
255 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturatedViscosity(regionIdx, temperature, pressure)); return 0; }
256
260 template <class Evaluation = Scalar>
261 Evaluation inverseFormationVolumeFactor(unsigned regionIdx,
262 const Evaluation& temperature,
263 const Evaluation& pressure,
264 const Evaluation& Rv,
265 const Evaluation& Rvw) const
266 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.inverseFormationVolumeFactor(regionIdx, temperature, pressure, Rv, Rvw)); return 0; }
267
271 template <class Evaluation = Scalar>
272 Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx,
273 const Evaluation& temperature,
274 const Evaluation& pressure) const
275 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturatedInverseFormationVolumeFactor(regionIdx, temperature, pressure)); return 0; }
276
280 template <class Evaluation = Scalar>
281 Evaluation saturatedOilVaporizationFactor(unsigned regionIdx,
282 const Evaluation& temperature,
283 const Evaluation& pressure) const
284 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturatedOilVaporizationFactor(regionIdx, temperature, pressure)); return 0; }
285
289 template <class Evaluation = Scalar>
290 Evaluation saturatedOilVaporizationFactor(unsigned regionIdx,
291 const Evaluation& temperature,
292 const Evaluation& pressure,
293 const Evaluation& oilSaturation,
294 const Evaluation& maxOilSaturation) const
295 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturatedOilVaporizationFactor(regionIdx, temperature, pressure, oilSaturation, maxOilSaturation)); return 0; }
296
300 template <class Evaluation = Scalar>
301 Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx,
302 const Evaluation& temperature,
303 const Evaluation& pressure) const
304 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturatedWaterVaporizationFactor(regionIdx, temperature, pressure)); return 0; }
305
309 template <class Evaluation = Scalar>
310 Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx,
311 const Evaluation& temperature,
312 const Evaluation& pressure,
313 const Evaluation& saltConcentration) const
314 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturatedWaterVaporizationFactor(regionIdx, temperature, pressure, saltConcentration)); return 0; }
315
322 template <class Evaluation = Scalar>
323 Evaluation saturationPressure(unsigned regionIdx,
324 const Evaluation& temperature,
325 const Evaluation& Rv) const
326 { OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.saturationPressure(regionIdx, temperature, Rv)); return 0; }
327
331 template <class Evaluation>
332 Evaluation diffusionCoefficient(const Evaluation& temperature,
333 const Evaluation& pressure,
334 unsigned compIdx) const
335 {
336 OPM_GAS_PVT_MULTIPLEXER_CALL(return pvtImpl.diffusionCoefficient(temperature, pressure, compIdx)); return 0;
337 }
338
345 { return gasPvtApproach_; }
346
347 // get the parameter object for the dry gas case
348 template <GasPvtApproach approachV>
349 typename std::enable_if<approachV == GasPvtApproach::DryGasPvt, DryGasPvt<Scalar> >::type& getRealPvt()
350 {
351 assert(gasPvtApproach() == approachV);
352 return *static_cast<DryGasPvt<Scalar>* >(realGasPvt_);
353 }
354
355 template <GasPvtApproach approachV>
356 typename std::enable_if<approachV == GasPvtApproach::DryGasPvt, const DryGasPvt<Scalar> >::type& getRealPvt() const
357 {
358 assert(gasPvtApproach() == approachV);
359 return *static_cast<const DryGasPvt<Scalar>* >(realGasPvt_);
360 }
361
362 // get the parameter object for the dry humid gas case
363 template <GasPvtApproach approachV>
364 typename std::enable_if<approachV == GasPvtApproach::DryHumidGasPvt, DryHumidGasPvt<Scalar> >::type& getRealPvt()
365 {
366 assert(gasPvtApproach() == approachV);
367 return *static_cast<DryHumidGasPvt<Scalar>* >(realGasPvt_);
368 }
369
370 template <GasPvtApproach approachV>
371 typename std::enable_if<approachV == GasPvtApproach::DryHumidGasPvt, const DryHumidGasPvt<Scalar> >::type& getRealPvt() const
372 {
373 assert(gasPvtApproach() == approachV);
374 return *static_cast<const DryHumidGasPvt<Scalar>* >(realGasPvt_);
375 }
376
377 // get the parameter object for the wet humid gas case
378 template <GasPvtApproach approachV>
379 typename std::enable_if<approachV == GasPvtApproach::WetHumidGasPvt, WetHumidGasPvt<Scalar> >::type& getRealPvt()
380 {
381 assert(gasPvtApproach() == approachV);
382 return *static_cast<WetHumidGasPvt<Scalar>* >(realGasPvt_);
383 }
384
385 template <GasPvtApproach approachV>
386 typename std::enable_if<approachV == GasPvtApproach::WetHumidGasPvt, const WetHumidGasPvt<Scalar> >::type& getRealPvt() const
387 {
388 assert(gasPvtApproach() == approachV);
389 return *static_cast<const WetHumidGasPvt<Scalar>* >(realGasPvt_);
390 }
391
392 // get the parameter object for the wet gas case
393 template <GasPvtApproach approachV>
394 typename std::enable_if<approachV == GasPvtApproach::WetGasPvt, WetGasPvt<Scalar> >::type& getRealPvt()
395 {
396 assert(gasPvtApproach() == approachV);
397 return *static_cast<WetGasPvt<Scalar>* >(realGasPvt_);
398 }
399
400 template <GasPvtApproach approachV>
401 typename std::enable_if<approachV == GasPvtApproach::WetGasPvt, const WetGasPvt<Scalar> >::type& getRealPvt() const
402 {
403 assert(gasPvtApproach() == approachV);
404 return *static_cast<const WetGasPvt<Scalar>* >(realGasPvt_);
405 }
406
407 // get the parameter object for the thermal gas case
408 template <GasPvtApproach approachV>
409 typename std::enable_if<approachV == GasPvtApproach::ThermalGasPvt, GasPvtThermal<Scalar> >::type& getRealPvt()
410 {
411 assert(gasPvtApproach() == approachV);
412 return *static_cast<GasPvtThermal<Scalar>* >(realGasPvt_);
413 }
414 template <GasPvtApproach approachV>
415 typename std::enable_if<approachV == GasPvtApproach::ThermalGasPvt, const GasPvtThermal<Scalar> >::type& getRealPvt() const
416 {
417 assert(gasPvtApproach() == approachV);
418 return *static_cast<const GasPvtThermal<Scalar>* >(realGasPvt_);
419 }
420
421 template <GasPvtApproach approachV>
422 typename std::enable_if<approachV == GasPvtApproach::Co2GasPvt, Co2GasPvt<Scalar> >::type& getRealPvt()
423 {
424 assert(gasPvtApproach() == approachV);
425 return *static_cast<Co2GasPvt<Scalar>* >(realGasPvt_);
426 }
427
428 template <GasPvtApproach approachV>
429 typename std::enable_if<approachV == GasPvtApproach::Co2GasPvt, const Co2GasPvt<Scalar> >::type& getRealPvt() const
430 {
431 assert(gasPvtApproach() == approachV);
432 return *static_cast<const Co2GasPvt<Scalar>* >(realGasPvt_);
433 }
434
435 const void* realGasPvt() const { return realGasPvt_; }
436
438 {
439 if (this->gasPvtApproach() != data.gasPvtApproach())
440 return false;
441
442 switch (gasPvtApproach_) {
444 return *static_cast<const DryGasPvt<Scalar>*>(realGasPvt_) ==
445 *static_cast<const DryGasPvt<Scalar>*>(data.realGasPvt_);
447 return *static_cast<const DryHumidGasPvt<Scalar>*>(realGasPvt_) ==
448 *static_cast<const DryHumidGasPvt<Scalar>*>(data.realGasPvt_);
450 return *static_cast<const WetHumidGasPvt<Scalar>*>(realGasPvt_) ==
451 *static_cast<const WetHumidGasPvt<Scalar>*>(data.realGasPvt_);
453 return *static_cast<const WetGasPvt<Scalar>*>(realGasPvt_) ==
454 *static_cast<const WetGasPvt<Scalar>*>(data.realGasPvt_);
456 return *static_cast<const GasPvtThermal<Scalar>*>(realGasPvt_) ==
457 *static_cast<const GasPvtThermal<Scalar>*>(data.realGasPvt_);
459 return *static_cast<const Co2GasPvt<Scalar>*>(realGasPvt_) ==
460 *static_cast<const Co2GasPvt<Scalar>*>(data.realGasPvt_);
461 default:
462 return true;
463 }
464 }
465
467 {
468 gasPvtApproach_ = data.gasPvtApproach_;
469 switch (gasPvtApproach_) {
471 realGasPvt_ = new DryGasPvt<Scalar>(*static_cast<const DryGasPvt<Scalar>*>(data.realGasPvt_));
472 break;
474 realGasPvt_ = new DryHumidGasPvt<Scalar>(*static_cast<const DryHumidGasPvt<Scalar>*>(data.realGasPvt_));
475 break;
477 realGasPvt_ = new WetHumidGasPvt<Scalar>(*static_cast<const WetHumidGasPvt<Scalar>*>(data.realGasPvt_));
478 break;
480 realGasPvt_ = new WetGasPvt<Scalar>(*static_cast<const WetGasPvt<Scalar>*>(data.realGasPvt_));
481 break;
483 realGasPvt_ = new GasPvtThermal<Scalar>(*static_cast<const GasPvtThermal<Scalar>*>(data.realGasPvt_));
484 break;
486 realGasPvt_ = new Co2GasPvt<Scalar>(*static_cast<const Co2GasPvt<Scalar>*>(data.realGasPvt_));
487 break;
488 default:
489 break;
490 }
491
492 return *this;
493 }
494
495private:
496 GasPvtApproach gasPvtApproach_;
497 void* realGasPvt_;
498};
499
500#undef OPM_GAS_PVT_MULTIPLEXER_CALL
501
502} // namespace Opm
503
504#endif
#define OPM_GAS_PVT_MULTIPLEXER_CALL(codeToCall)
Definition: GasPvtMultiplexer.hpp:42
This class represents the Pressure-Volume-Temperature relations of the gas phase for CO2.
Definition: Co2GasPvt.hpp:53
This class represents the Pressure-Volume-Temperature relations of the gas phase without vaporized oi...
Definition: DryGasPvt.hpp:50
This class represents the Pressure-Volume-Temperature relations of the gas phase with vaporized water...
Definition: DryHumidGasPvt.hpp:53
This class represents the Pressure-Volume-Temperature relations of the gas phase in the black-oil mod...
Definition: GasPvtMultiplexer.hpp:100
~GasPvtMultiplexer()
Definition: GasPvtMultiplexer.hpp:118
std::enable_if< approachV==GasPvtApproach::DryGasPvt, constDryGasPvt< Scalar > >::type & getRealPvt() const
Definition: GasPvtMultiplexer.hpp:356
GasPvtApproach gasPvtApproach() const
Returns the concrete approach for calculating the PVT relations.
Definition: GasPvtMultiplexer.hpp:344
std::enable_if< approachV==GasPvtApproach::ThermalGasPvt, GasPvtThermal< Scalar > >::type & getRealPvt()
Definition: GasPvtMultiplexer.hpp:409
std::enable_if< approachV==GasPvtApproach::WetHumidGasPvt, WetHumidGasPvt< Scalar > >::type & getRealPvt()
Definition: GasPvtMultiplexer.hpp:379
std::enable_if< approachV==GasPvtApproach::DryGasPvt, DryGasPvt< Scalar > >::type & getRealPvt()
Definition: GasPvtMultiplexer.hpp:349
const void * realGasPvt() const
Definition: GasPvtMultiplexer.hpp:435
Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the formation volume factor [-] of oil saturated gas given a set of parameters.
Definition: GasPvtMultiplexer.hpp:272
unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition: GasPvtMultiplexer.hpp:218
Evaluation saturatedWaterVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the water vaporization factor [m^3/m^3] of water saturated gas.
Definition: GasPvtMultiplexer.hpp:301
GasPvtMultiplexer(const GasPvtMultiplexer< Scalar, enableThermal > &data)
Definition: GasPvtMultiplexer.hpp:113
std::enable_if< approachV==GasPvtApproach::WetGasPvt, constWetGasPvt< Scalar > >::type & getRealPvt() const
Definition: GasPvtMultiplexer.hpp:401
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: GasPvtMultiplexer.hpp:261
std::enable_if< approachV==GasPvtApproach::WetGasPvt, WetGasPvt< Scalar > >::type & getRealPvt()
Definition: GasPvtMultiplexer.hpp:394
GasPvtMultiplexer()
Definition: GasPvtMultiplexer.hpp:102
GasPvtMultiplexer(GasPvtApproach approach, void *realGasPvt)
Definition: GasPvtMultiplexer.hpp:108
std::enable_if< approachV==GasPvtApproach::DryHumidGasPvt, constDryHumidGasPvt< Scalar > >::type & getRealPvt() const
Definition: GasPvtMultiplexer.hpp:371
std::enable_if< approachV==GasPvtApproach::DryHumidGasPvt, DryHumidGasPvt< Scalar > >::type & getRealPvt()
Definition: GasPvtMultiplexer.hpp:364
Evaluation viscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &Rv, const Evaluation &Rvw) const
Returns the dynamic viscosity [Pa s] of the fluid phase given a set of parameters.
Definition: GasPvtMultiplexer.hpp:241
void setApproach(GasPvtApproach gasPvtAppr)
Definition: GasPvtMultiplexer.hpp:178
std::enable_if< approachV==GasPvtApproach::Co2GasPvt, Co2GasPvt< Scalar > >::type & getRealPvt()
Definition: GasPvtMultiplexer.hpp:422
Evaluation diffusionCoefficient(const Evaluation &temperature, const Evaluation &pressure, unsigned compIdx) const
Calculate the binary molecular diffusion coefficient for a component in a fluid phase [mol^2 * s / (k...
Definition: GasPvtMultiplexer.hpp:332
void initEnd()
Definition: GasPvtMultiplexer.hpp:212
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 saturated gas.
Definition: GasPvtMultiplexer.hpp:310
bool operator==(const GasPvtMultiplexer< Scalar, enableThermal > &data) const
Definition: GasPvtMultiplexer.hpp:437
Evaluation saturatedOilVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the oil vaporization factor [m^3/m^3] of oil saturated gas.
Definition: GasPvtMultiplexer.hpp:281
const Scalar gasReferenceDensity(unsigned regionIdx)
Return the reference density which are considered by this PVT-object.
Definition: GasPvtMultiplexer.hpp:224
std::enable_if< approachV==GasPvtApproach::ThermalGasPvt, constGasPvtThermal< Scalar > >::type & getRealPvt() const
Definition: GasPvtMultiplexer.hpp:415
Evaluation internalEnergy(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &Rv) const
Returns the specific enthalpy [J/kg] of gas given a set of parameters.
Definition: GasPvtMultiplexer.hpp:231
GasPvtMultiplexer< Scalar, enableThermal > & operator=(const GasPvtMultiplexer< Scalar, enableThermal > &data)
Definition: GasPvtMultiplexer.hpp:466
std::enable_if< approachV==GasPvtApproach::Co2GasPvt, constCo2GasPvt< Scalar > >::type & getRealPvt() const
Definition: GasPvtMultiplexer.hpp:429
Evaluation saturationPressure(unsigned regionIdx, const Evaluation &temperature, const Evaluation &Rv) const
Returns the saturation pressure of the gas phase [Pa] depending on its mass fraction of the oil compo...
Definition: GasPvtMultiplexer.hpp:323
std::enable_if< approachV==GasPvtApproach::WetHumidGasPvt, constWetHumidGasPvt< Scalar > >::type & getRealPvt() const
Definition: GasPvtMultiplexer.hpp:386
Evaluation saturatedOilVaporizationFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &oilSaturation, const Evaluation &maxOilSaturation) const
Returns the oil vaporization factor [m^3/m^3] of oil saturated gas.
Definition: GasPvtMultiplexer.hpp:290
Evaluation saturatedViscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the dynamic viscosity [Pa s] of oil saturated gas given a set of parameters.
Definition: GasPvtMultiplexer.hpp:252
This class implements temperature dependence of the PVT properties of gas.
Definition: GasPvtThermal.hpp:50
This class represents the Pressure-Volume-Temperature relations of the gas phas with vaporized oil.
Definition: WetGasPvt.hpp:52
This class represents the Pressure-Volume-Temperature relations of the gas phase with vaporized oil a...
Definition: WetHumidGasPvt.hpp:52
Definition: Air_Mesitylene.hpp:34
GasPvtApproach
Definition: GasPvtMultiplexer.hpp:78