93 approach_ = WaterPvtApproach::NoWater;
94 realWaterPvt_ =
nullptr;
99 , realWaterPvt_(realWaterPvt)
110 case WaterPvtApproach::ConstantCompressibilityWater: {
111 delete &getRealPvt<WaterPvtApproach::ConstantCompressibilityWater>();
114 case WaterPvtApproach::ConstantCompressibilityBrine: {
115 delete &getRealPvt<WaterPvtApproach::ConstantCompressibilityBrine>();
118 case WaterPvtApproach::ThermalWater: {
119 delete &getRealPvt<WaterPvtApproach::ThermalWater>();
122 case WaterPvtApproach::BrineCo2: {
123 delete &getRealPvt<WaterPvtApproach::BrineCo2>();
126 case WaterPvtApproach::BrineH2: {
127 delete &getRealPvt<WaterPvtApproach::BrineH2>();
130 case WaterPvtApproach::NoWater:
145 { OPM_WATER_PVT_MULTIPLEXER_CALL(pvtImpl.initEnd()); }
151 { OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.numRegions());
return 1; }
153 void setVapPars(
const Scalar par1,
const Scalar par2)
155 OPM_WATER_PVT_MULTIPLEXER_CALL(pvtImpl.setVapPars(par1, par2));
162 { OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.waterReferenceDensity(regionIdx));
return 1000.; }
167 template <
class Evaluation>
169 const Evaluation& temperature,
170 const Evaluation& pressure,
171 const Evaluation& Rsw,
172 const Evaluation& saltconcentration)
const
173 { OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.internalEnergy(regionIdx, temperature, pressure, Rsw, saltconcentration));
return 0; }
178 template <
class Evaluation>
180 const Evaluation& temperature,
181 const Evaluation& pressure,
182 const Evaluation& Rsw,
183 const Evaluation& saltconcentration)
const
185 OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.viscosity(regionIdx, temperature, pressure, Rsw, saltconcentration));
192 template <
class Evaluation>
194 const Evaluation& temperature,
195 const Evaluation& pressure,
196 const Evaluation& saltconcentration)
const
198 OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.saturatedViscosity(regionIdx, temperature, pressure, saltconcentration));
205 template <
class Evaluation>
207 const Evaluation& temperature,
208 const Evaluation& pressure,
209 const Evaluation& Rsw,
210 const Evaluation& saltconcentration)
const
212 OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.inverseFormationVolumeFactor(regionIdx, temperature, pressure, Rsw, saltconcentration));
219 template <
class Evaluation>
221 const Evaluation& temperature,
222 const Evaluation& pressure,
223 const Evaluation& saltconcentration)
const
225 OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.saturatedInverseFormationVolumeFactor(regionIdx, temperature, pressure, saltconcentration));
232 template <
class Evaluation>
234 const Evaluation& temperature,
235 const Evaluation& pressure,
236 const Evaluation& saltconcentration)
const
238 OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.saturatedGasDissolutionFactor(regionIdx, temperature, pressure, saltconcentration));
249 template <
class Evaluation>
251 const Evaluation& temperature,
252 const Evaluation& Rs,
253 const Evaluation& saltconcentration)
const
254 { OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.saturationPressure(regionIdx, temperature, Rs, saltconcentration));
return 0; }
260 template <
class Evaluation>
262 const Evaluation& pressure,
263 unsigned compIdx)
const
265 OPM_WATER_PVT_MULTIPLEXER_CALL(
return pvtImpl.diffusionCoefficient(temperature, pressure, compIdx));
269 void setApproach(WaterPvtApproach appr)
272 case WaterPvtApproach::ConstantCompressibilityWater:
276 case WaterPvtApproach::ConstantCompressibilityBrine:
280 case WaterPvtApproach::ThermalWater:
284 case WaterPvtApproach::BrineCo2:
288 case WaterPvtApproach::BrineH2:
292 case WaterPvtApproach::NoWater:
293 throw std::logic_error(
"Not implemented: Water PVT of this deck!");
305 {
return approach_; }
308 template <WaterPvtApproach approachV>
309 typename std::enable_if<approachV == WaterPvtApproach::ConstantCompressibilityWater, ConstantCompressibilityWaterPvt<Scalar> >::type& getRealPvt()
315 template <WaterPvtApproach approachV>
316 typename std::enable_if<approachV == WaterPvtApproach::ConstantCompressibilityWater, const ConstantCompressibilityWaterPvt<Scalar> >::type& getRealPvt()
const
319 return *
static_cast<ConstantCompressibilityWaterPvt<Scalar>*
>(realWaterPvt_);
322 template <WaterPvtApproach approachV>
323 typename std::enable_if<approachV == WaterPvtApproach::ConstantCompressibilityBrine, ConstantCompressibilityBrinePvt<Scalar> >::type& getRealPvt()
326 return *
static_cast<ConstantCompressibilityBrinePvt<Scalar>*
>(realWaterPvt_);
329 template <WaterPvtApproach approachV>
330 typename std::enable_if<approachV == WaterPvtApproach::ConstantCompressibilityBrine, const ConstantCompressibilityBrinePvt<Scalar> >::type& getRealPvt()
const
333 return *
static_cast<ConstantCompressibilityBrinePvt<Scalar>*
>(realWaterPvt_);
336 template <WaterPvtApproach approachV>
337 typename std::enable_if<approachV == WaterPvtApproach::ThermalWater, WaterPvtThermal<Scalar, enableBrine> >::type& getRealPvt()
340 return *
static_cast<WaterPvtThermal<Scalar, enableBrine>*
>(realWaterPvt_);
343 template <WaterPvtApproach approachV>
344 typename std::enable_if<approachV == WaterPvtApproach::ThermalWater, const WaterPvtThermal<Scalar, enableBrine> >::type& getRealPvt()
const
347 return *
static_cast<WaterPvtThermal<Scalar, enableBrine>*
>(realWaterPvt_);
350 template <WaterPvtApproach approachV>
351 typename std::enable_if<approachV == WaterPvtApproach::BrineCo2, BrineCo2Pvt<Scalar> >::type& getRealPvt()
354 return *
static_cast<BrineCo2Pvt<Scalar>*
>(realWaterPvt_);
357 template <WaterPvtApproach approachV>
358 typename std::enable_if<approachV == WaterPvtApproach::BrineCo2, const BrineCo2Pvt<Scalar> >::type& getRealPvt()
const
361 return *
static_cast<const BrineCo2Pvt<Scalar>*
>(realWaterPvt_);
364 template <WaterPvtApproach approachV>
365 typename std::enable_if<approachV == WaterPvtApproach::BrineH2, BrineH2Pvt<Scalar> >::type& getRealPvt()
368 return *
static_cast<BrineH2Pvt<Scalar>*
>(realWaterPvt_);
371 template <WaterPvtApproach approachV>
372 typename std::enable_if<approachV == WaterPvtApproach::BrineH2, const BrineH2Pvt<Scalar> >::type& getRealPvt()
const
375 return *
static_cast<const BrineH2Pvt<Scalar>*
>(realWaterPvt_);
378 const void* realWaterPvt()
const {
return realWaterPvt_; }
380 WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& operator=(
const WaterPvtMultiplexer<Scalar,enableThermal,enableBrine>& data)
382 approach_ = data.approach_;
384 case WaterPvtApproach::ConstantCompressibilityWater:
385 realWaterPvt_ =
new ConstantCompressibilityWaterPvt<Scalar>(*
static_cast<const ConstantCompressibilityWaterPvt<Scalar>*
>(data.realWaterPvt_));
387 case WaterPvtApproach::ConstantCompressibilityBrine:
388 realWaterPvt_ =
new ConstantCompressibilityBrinePvt<Scalar>(*
static_cast<const ConstantCompressibilityBrinePvt<Scalar>*
>(data.realWaterPvt_));
390 case WaterPvtApproach::ThermalWater:
391 realWaterPvt_ =
new WaterPvtThermal<Scalar, enableBrine>(*
static_cast<const WaterPvtThermal<Scalar, enableBrine>*
>(data.realWaterPvt_));
393 case WaterPvtApproach::BrineCo2:
394 realWaterPvt_ =
new BrineCo2Pvt<Scalar>(*
static_cast<const BrineCo2Pvt<Scalar>*
>(data.realWaterPvt_));
396 case WaterPvtApproach::BrineH2:
397 realWaterPvt_ =
new BrineH2Pvt<Scalar>(*
static_cast<const BrineH2Pvt<Scalar>*
>(data.realWaterPvt_));
407 WaterPvtApproach approach_;