27#ifndef OPM_MATERIAL_FLUIDSYSTEMS_BLACKOILFUNCTIONS_HEADER_INCLUDED
28#define OPM_MATERIAL_FLUIDSYSTEMS_BLACKOILFUNCTIONS_HEADER_INCLUDED
30#include <opm/common/TimingMacros.hpp>
48namespace Opm::BlackOil
57template <class FluidSystem, class FluidState, class LhsEval>
59getRs_(typename std::enable_if<!HasMember_Rs<FluidState>::value, const FluidState&>::type fluidState,
62 const auto& XoG = decay<LhsEval>(fluidState.massFraction(FluidSystem::oilPhaseIdx, FluidSystem::gasCompIdx));
63 return FluidSystem::convertXoGToRs(XoG, regionIdx);
66template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
68getRs_(
typename std::enable_if<HasMember_Rs<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
69 ->
decltype(decay<LhsEval>(fluidState.Rs()))
71 return decay<LhsEval>(fluidState.Rs());
74template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
76getRv_(
typename std::enable_if<!HasMember_Rv<FluidState>::value,
const FluidState&>::type fluidState,
79 const auto& XgO = decay<LhsEval>(fluidState.massFraction(FluidSystem::gasPhaseIdx, FluidSystem::oilCompIdx));
80 return FluidSystem::convertXgOToRv(XgO, regionIdx);
83template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
85getRv_(
typename std::enable_if<HasMember_Rv<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
86 ->
decltype(decay<LhsEval>(fluidState.Rv()))
88 return decay<LhsEval>(fluidState.Rv());
91template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
93getRvw_(
typename std::enable_if<!HasMember_Rvw<FluidState>::value,
const FluidState&>::type fluidState,
96 const auto& XgW = decay<LhsEval>(fluidState.massFraction(FluidSystem::gasPhaseIdx, FluidSystem::waterCompIdx));
97 return FluidSystem::convertXgWToRvw(XgW, regionIdx);
100template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
102getRvw_(
typename std::enable_if<HasMember_Rvw<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
103 ->
decltype(decay<LhsEval>(fluidState.Rvw()))
105 return decay<LhsEval>(fluidState.Rvw());
108template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
110getRsw_(
typename std::enable_if<!HasMember_Rsw<FluidState>::value,
const FluidState&>::type fluidState,
113 const auto& XwG = decay<LhsEval>(fluidState.massFraction(FluidSystem::waterPhaseIdx, FluidSystem::gasCompIdx));
114 return FluidSystem::convertXwGToRsw(XwG, regionIdx);
117template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
119getRsw_(
typename std::enable_if<HasMember_Rsw<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
120 ->
decltype(decay<LhsEval>(fluidState.Rsw()))
122 return decay<LhsEval>(fluidState.Rsw());
125template <
class Flu
idState,
class LhsEval>
127getSaltConcentration_(
typename std::enable_if<!HasMember_saltConcentration<FluidState>::value,
const FluidState&>::type,
133template <
class Flu
idState,
class LhsEval>
135getSaltConcentration_(
136 typename std::enable_if<HasMember_saltConcentration<FluidState>::value,
const FluidState&>::type fluidState,
137 unsigned) ->
decltype(decay<LhsEval>(fluidState.saltConcentration()))
139 return decay<LhsEval>(fluidState.saltConcentration());
142template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
144getSaltSaturation_(
typename std::enable_if<!HasMember_saltSaturation<FluidState>::value,
const FluidState&>::type,
150template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
153 typename std::enable_if<HasMember_saltSaturation<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
154 ->
decltype(decay<LhsEval>(fluidState.saltSaturation()))
156 return decay<LhsEval>(fluidState.saltSaturation());
The base class for all fluid systems.
This macro generates a class HasMember_${MEMBER_NAME} which can be used for template specialization.
#define OPM_GENERATE_HAS_MEMBER(MEMBER_NAME,...)
This macro generates a class HasMember_${MEMBER_NAME} which can be used for template specialization.
Definition HasMemberGeneratorMacros.hpp:49
A parameter cache which does nothing.
Some templates to wrap the valgrind client request macros.