27#ifndef OPM_MATERIAL_FLUIDSYSTEMS_BLACKOILFUNCTIONS_HEADER_INCLUDED
28#define OPM_MATERIAL_FLUIDSYSTEMS_BLACKOILFUNCTIONS_HEADER_INCLUDED
30#include <opm/common/TimingMacros.hpp>
40#include <opm/common/utility/gpuDecorators.hpp>
50namespace Opm::BlackOil
63template <class FluidSystem, class FluidState, class LhsEval>
64OPM_HOST_DEVICE LhsEval
65getRs_(typename std::enable_if<!HasMember_Rs<FluidState>::value, const FluidState&>::type fluidState,
68 const auto& XoG = decay<LhsEval>(fluidState.massFraction(FluidSystem::oilPhaseIdx, FluidSystem::gasCompIdx));
69 return FluidSystem::convertXoGToRs(XoG, regionIdx);
72template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
74getRs_(
typename std::enable_if<HasMember_Rs<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
75 ->
decltype(decay<LhsEval>(fluidState.Rs()))
77 return decay<LhsEval>(fluidState.Rs());
80template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
81OPM_HOST_DEVICE LhsEval
82getRv_(
typename std::enable_if<!HasMember_Rv<FluidState>::value,
const FluidState&>::type fluidState,
85 const auto& XgO = decay<LhsEval>(fluidState.massFraction(FluidSystem::gasPhaseIdx, FluidSystem::oilCompIdx));
86 return FluidSystem::convertXgOToRv(XgO, regionIdx);
89template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
91getRv_(
typename std::enable_if<HasMember_Rv<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
92 ->
decltype(decay<LhsEval>(fluidState.Rv()))
94 return decay<LhsEval>(fluidState.Rv());
97template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
98OPM_HOST_DEVICE LhsEval
99getRvw_(
typename std::enable_if<!HasMember_Rvw<FluidState>::value,
const FluidState&>::type fluidState,
102 const auto& XgW = decay<LhsEval>(fluidState.massFraction(FluidSystem::gasPhaseIdx, FluidSystem::waterCompIdx));
103 return FluidSystem::convertXgWToRvw(XgW, regionIdx);
106template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
108getRvw_(
typename std::enable_if<HasMember_Rvw<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
109 ->
decltype(decay<LhsEval>(fluidState.Rvw()))
111 return decay<LhsEval>(fluidState.Rvw());
114template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
115OPM_HOST_DEVICE LhsEval
116getRsw_(
typename std::enable_if<!HasMember_Rsw<FluidState>::value,
const FluidState&>::type fluidState,
119 const auto& XwG = decay<LhsEval>(fluidState.massFraction(FluidSystem::waterPhaseIdx, FluidSystem::gasCompIdx));
120 return FluidSystem::convertXwGToRsw(XwG, regionIdx);
123template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
125getRsw_(
typename std::enable_if<HasMember_Rsw<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
126 ->
decltype(decay<LhsEval>(fluidState.Rsw()))
128 return decay<LhsEval>(fluidState.Rsw());
131template <
class Flu
idState,
class LhsEval>
132OPM_HOST_DEVICE LhsEval
133getSaltConcentration_(
typename std::enable_if<!HasMember_saltConcentration<FluidState>::value,
const FluidState&>::type,
139template <
class Flu
idState,
class LhsEval>
141getSaltConcentration_(
142 typename std::enable_if<HasMember_saltConcentration<FluidState>::value,
const FluidState&>::type fluidState,
143 unsigned) ->
decltype(decay<LhsEval>(fluidState.saltConcentration()))
145 return decay<LhsEval>(fluidState.saltConcentration());
148template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
149OPM_HOST_DEVICE LhsEval
150getSaltSaturation_(
typename std::enable_if<!HasMember_saltSaturation<FluidState>::value,
const FluidState&>::type,
156template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
159 typename std::enable_if<HasMember_saltSaturation<FluidState>::value,
const FluidState&>::type fluidState,
unsigned)
160 ->
decltype(decay<LhsEval>(fluidState.saltSaturation()))
162 return decay<LhsEval>(fluidState.saltSaturation());
165template <
class Flu
idState,
class LhsEval>
166OPM_HOST_DEVICE LhsEval
167getSolventSaturation_(
typename std::enable_if<!HasMember_solventSaturation<FluidState>::value,
const FluidState&>::type,
173template <
class Flu
idState,
class LhsEval>
175getSolventSaturation_(
176 typename std::enable_if<HasMember_solventSaturation<FluidState>::value,
const FluidState&>::type fluidState,
177 unsigned) ->
decltype(decay<LhsEval>(fluidState.solventSaturation()))
179 return decay<LhsEval>(fluidState.solventSaturation());
182template <
class Flu
idState,
class LhsEval>
183OPM_HOST_DEVICE LhsEval
184getSolventDensity_(
typename std::enable_if<!HasMember_solventDensity<FluidState>::value,
const FluidState&>::type,
190template <
class Flu
idState,
class LhsEval>
193 typename std::enable_if<HasMember_solventDensity<FluidState>::value,
const FluidState&>::type fluidState,
194 unsigned) ->
decltype(decay<LhsEval>(fluidState.solventDensity()))
196 return decay<LhsEval>(fluidState.solventDensity());
199template <
class Flu
idState,
class LhsEval>
200OPM_HOST_DEVICE LhsEval
201getSolventInvB_(
typename std::enable_if<!HasMember_solventInvB<FluidState>::value,
const FluidState&>::type,
207template <
class Flu
idState,
class LhsEval>
210 typename std::enable_if<HasMember_solventInvB<FluidState>::value,
const FluidState&>::type fluidState,
211 unsigned) ->
decltype(decay<LhsEval>(fluidState.solventInvB()))
213 return decay<LhsEval>(fluidState.solventInvB());
216template <
class Flu
idState,
class LhsEval>
217OPM_HOST_DEVICE LhsEval
218getRsSolw_(
typename std::enable_if<!HasMember_rsSolw<FluidState>::value,
const FluidState&>::type,
224template <
class Flu
idState,
class LhsEval>
227 typename std::enable_if<HasMember_rsSolw<FluidState>::value,
const FluidState&>::type fluidState,
228 unsigned) ->
decltype(decay<LhsEval>(fluidState.rsSolw()))
230 return decay<LhsEval>(fluidState.rsSolw());
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.