27#ifndef OPM_EFF_TO_ABS_LAW_HPP
28#define OPM_EFF_TO_ABS_LAW_HPP
69template <
class EffLawT,
class ParamsT = EffToAbsLawParams<
typename EffLawT::Params, EffLawT::numPhases> >
72 typedef EffLawT EffLaw;
75 typedef typename EffLaw::Traits Traits;
76 typedef ParamsT Params;
77 typedef typename EffLaw::Scalar Scalar;
116 template <
class Container,
class Flu
idState>
121 OverlayFluidState overlayFs(fs);
122 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++ phaseIdx) {
123 overlayFs.setSaturation(phaseIdx,
125 fs.saturation(phaseIdx),
142 template <
class Container,
class Flu
idState>
147 OverlayFluidState overlayFs(fs);
148 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++ phaseIdx) {
149 overlayFs.setSaturation(phaseIdx,
151 fs.saturation(phaseIdx),
170 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
171 static Evaluation
pcnw(
const Params& params,
const FluidState& fs)
175 static_assert(FluidState::numPhases ==
numPhases,
176 "The fluid state and the material law must exhibit the same "
177 "number of phases!");
179 OverlayFluidState overlayFs(fs);
180 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++ phaseIdx) {
181 overlayFs.setSaturation(phaseIdx,
183 fs.saturation(phaseIdx),
190 template <
class Evaluation>
191 static typename std::enable_if<implementsTwoPhaseSatApi, Evaluation>::type
192 twoPhaseSatPcnw(
const Params& params,
const Evaluation& SwAbs)
196 return EffLaw::twoPhaseSatPcnw(params, SwEff);
202 template <
class Container,
class Flu
idState>
203 static void saturations(Container& values,
const Params& params,
const FluidState& fs)
206 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++phaseIdx) {
215 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
216 static Evaluation
Sw(
const Params& params,
const FluidState& fs)
220 Traits::wettingPhaseIdx);
223 template <
class Evaluation>
224 static typename std::enable_if<implementsTwoPhaseSatApi, Evaluation>::type
225 twoPhaseSatSw(
const Params& params,
const Evaluation&
Sw)
227 EffLaw::twoPhaseSatSw(params,
Sw),
228 Traits::wettingPhaseIdx); }
234 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
235 static Evaluation
Sn(
const Params& params,
const FluidState& fs)
239 Traits::nonWettingPhaseIdx);
242 template <
class Evaluation>
243 static typename std::enable_if<implementsTwoPhaseSatApi, Evaluation>::type
244 twoPhaseSatSn(
const Params& params,
const Evaluation&
Sw)
247 EffLaw::twoPhaseSatSn(params,
Sw),
248 Traits::nonWettingPhaseIdx);
257 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
258 static typename std::enable_if< (Traits::numPhases > 2), Evaluation>::type
259 Sg(
const Params& params,
const FluidState& fs)
263 Traits::gasPhaseIdx);
276 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
277 static Evaluation
krw(
const Params& params,
const FluidState& fs)
281 static_assert(FluidState::numPhases ==
numPhases,
282 "The fluid state and the material law must exhibit the same "
283 "number of phases!");
285 OverlayFluidState overlayFs(fs);
286 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++ phaseIdx) {
287 overlayFs.setSaturation(phaseIdx,
289 fs.saturation(phaseIdx),
296 template <
class Evaluation>
297 static typename std::enable_if<implementsTwoPhaseSatApi, Evaluation>::type
298 twoPhaseSatKrw(
const Params& params,
const Evaluation&
Sw)
304 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
305 static Evaluation
krn(
const Params& params,
const FluidState& fs)
309 static_assert(FluidState::numPhases ==
numPhases,
310 "The fluid state and the material law must exhibit the same "
311 "number of phases!");
313 OverlayFluidState overlayFs(fs);
314 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++ phaseIdx) {
315 overlayFs.setSaturation(phaseIdx,
317 fs.saturation(phaseIdx),
324 template <
class Evaluation>
325 static typename std::enable_if<implementsTwoPhaseSatApi, Evaluation>::type
326 twoPhaseSatKrn(
const Params& params,
const Evaluation&
Sw)
334 template <
class Flu
idState,
class Evaluation =
typename Flu
idState::Scalar>
335 static typename std::enable_if< (Traits::numPhases > 2), Evaluation>::type
336 krg(
const Params& params,
const FluidState& fs)
340 static_assert(FluidState::numPhases ==
numPhases,
341 "The fluid state and the material law must exhibit the same "
342 "number of phases!");
344 OverlayFluidState overlayFs(fs);
345 for (
unsigned phaseIdx = 0; phaseIdx <
numPhases; ++ phaseIdx) {
346 overlayFs.setSaturation(phaseIdx,
348 fs.saturation(phaseIdx),
358 template <
class Evaluation>
360 {
return (S - params.residualSaturation(phaseIdx))/(1.0 - params.sumResidualSaturations()); }
365 template <
class Evaluation>
367 {
return S*(1.0 - params.sumResidualSaturations()) + params.residualSaturation(phaseIdx); }
378 static Scalar dSeff_dSabs_(
const Params& params,
int )
379 {
return 1.0/(1 - params.sumResidualSaturations()); }
389 static Scalar dSabs_dSeff_(
const Params& params,
int )
390 {
return 1 - params.sumResidualSaturations(); }
A default implementation of the parameters for the adapter class to convert material laws from effect...
This is a fluid state which allows to set the fluid saturations and takes all other quantities from a...
This material law takes a material law defined for effective saturations and converts it to a materia...
Definition EffToAbsLaw.hpp:71
static const bool implementsTwoPhaseApi
Specify whether this material law implements the two-phase convenience API.
Definition EffToAbsLaw.hpp:84
static const bool isPressureDependent
Specify whether the quantities defined by this material law are dependent on the absolute pressure.
Definition EffToAbsLaw.hpp:96
static const bool isTemperatureDependent
Specify whether the quantities defined by this material law are temperature dependent.
Definition EffToAbsLaw.hpp:100
static void capillaryPressures(Container &values, const Params ¶ms, const FluidState &fs)
The capillary pressure-saturation curves depending on absolute saturations.
Definition EffToAbsLaw.hpp:117
static const bool isCompositionDependent
Specify whether the quantities defined by this material law are dependent on the phase composition.
Definition EffToAbsLaw.hpp:104
static Evaluation pcnw(const Params ¶ms, const FluidState &fs)
The capillary pressure-saturation curve.
Definition EffToAbsLaw.hpp:171
static Evaluation krn(const Params ¶ms, const FluidState &fs)
The relative permeability of the non-wetting phase.
Definition EffToAbsLaw.hpp:305
static Evaluation Sn(const Params ¶ms, const FluidState &fs)
Calculate non-wetting liquid phase saturation given that the rest of the fluid state has been initial...
Definition EffToAbsLaw.hpp:235
static const bool isSaturationDependent
Specify whether the quantities defined by this material law are saturation dependent.
Definition EffToAbsLaw.hpp:92
static Evaluation krw(const Params ¶ms, const FluidState &fs)
The relative permeability for the wetting phase.
Definition EffToAbsLaw.hpp:277
static std::enable_if<(Traits::numPhases >2), Evaluation >::type Sg(const Params ¶ms, const FluidState &fs)
Calculate gas phase saturation given that the rest of the fluid state has been initialized.
Definition EffToAbsLaw.hpp:259
static const bool implementsTwoPhaseSatApi
Specify whether this material law implements the two-phase convenience API which only depends on the ...
Definition EffToAbsLaw.hpp:88
static Evaluation absoluteSaturation(const Params ¶ms, const Evaluation &S, unsigned phaseIdx)
Convert an effective saturation to an absolute one.
Definition EffToAbsLaw.hpp:366
static const int numPhases
The number of fluid phases.
Definition EffToAbsLaw.hpp:80
static std::enable_if<(Traits::numPhases >2), Evaluation >::type krg(const Params ¶ms, const FluidState &fs)
The relative permability of the gas phase.
Definition EffToAbsLaw.hpp:336
static Evaluation Sw(const Params ¶ms, const FluidState &fs)
Calculate wetting liquid phase saturation given that the rest of the fluid state has been initialized...
Definition EffToAbsLaw.hpp:216
static Evaluation effectiveSaturation(const Params ¶ms, const Evaluation &S, unsigned phaseIdx)
Convert an absolute saturation to an effective one.
Definition EffToAbsLaw.hpp:359
static void relativePermeabilities(Container &values, const Params ¶ms, const FluidState &fs)
The relative permeability-saturation curves depending on absolute saturations.
Definition EffToAbsLaw.hpp:143
static void saturations(Container &values, const Params ¶ms, const FluidState &fs)
The saturation-capillary pressure curves.
Definition EffToAbsLaw.hpp:203
This is a fluid state which allows to set the fluid saturations and takes all other quantities from a...
Definition SaturationOverlayFluidState.hpp:44
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30