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> 47 #include <string_view> 53 OPM_GENERATE_HAS_MEMBER(Rv, )
54 OPM_GENERATE_HAS_MEMBER(Rvw, )
55 OPM_GENERATE_HAS_MEMBER(Rsw, )
56 OPM_GENERATE_HAS_MEMBER(saltConcentration, )
57 OPM_GENERATE_HAS_MEMBER(saltSaturation, )
58 OPM_GENERATE_HAS_MEMBER(solventSaturation, )
59 OPM_GENERATE_HAS_MEMBER(solventDensity, )
60 OPM_GENERATE_HAS_MEMBER(solventInvB, )
61 OPM_GENERATE_HAS_MEMBER(rsSolw, )
63 template <class FluidSystem, class FluidState, class LhsEval>
64 OPM_HOST_DEVICE LhsEval
65 getRs_(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);
72 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
74 getRs_(
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());
80 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
81 OPM_HOST_DEVICE LhsEval
82 getRv_(
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);
89 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
91 getRv_(
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());
97 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
98 OPM_HOST_DEVICE LhsEval
99 getRvw_(
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);
106 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
108 getRvw_(
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());
114 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
115 OPM_HOST_DEVICE LhsEval
116 getRsw_(
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);
123 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
125 getRsw_(
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());
131 template <
class Flu
idState,
class LhsEval>
132 OPM_HOST_DEVICE LhsEval
133 getSaltConcentration_(
typename std::enable_if<!HasMember_saltConcentration<FluidState>::value,
const FluidState&>::type,
139 template <
class Flu
idState,
class LhsEval>
141 getSaltConcentration_(
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());
148 template <
class Flu
idSystem,
class Flu
idState,
class LhsEval>
149 OPM_HOST_DEVICE LhsEval
150 getSaltSaturation_(
typename std::enable_if<!HasMember_saltSaturation<FluidState>::value,
const FluidState&>::type,
156 template <
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());
165 template <
class Flu
idState,
class LhsEval>
166 OPM_HOST_DEVICE LhsEval
167 getSolventSaturation_(
typename std::enable_if<!HasMember_solventSaturation<FluidState>::value,
const FluidState&>::type,
173 template <
class Flu
idState,
class LhsEval>
175 getSolventSaturation_(
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());
182 template <
class Flu
idState,
class LhsEval>
183 OPM_HOST_DEVICE LhsEval
184 getSolventDensity_(
typename std::enable_if<!HasMember_solventDensity<FluidState>::value,
const FluidState&>::type,
190 template <
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());
199 template <
class Flu
idState,
class LhsEval>
200 OPM_HOST_DEVICE LhsEval
201 getSolventInvB_(
typename std::enable_if<!HasMember_solventInvB<FluidState>::value,
const FluidState&>::type,
207 template <
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());
216 template <
class Flu
idState,
class LhsEval>
217 OPM_HOST_DEVICE LhsEval
218 getRsSolw_(
typename std::enable_if<!HasMember_rsSolw<FluidState>::value,
const FluidState&>::type,
224 template <
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());
#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.
This macro generates a class HasMember_${MEMBER_NAME} which can be used for template specialization...
Definition: BlackOilFunctions.hpp:50
Some templates to wrap the valgrind client request macros.
The base class for all fluid systems.