27 #ifndef OPM_ECL_MULTIPLEXER_MATERIAL_PARAMS_HPP 28 #define OPM_ECL_MULTIPLEXER_MATERIAL_PARAMS_HPP 35 #include <type_traits> 43 enum EclMultiplexerApproach {
57 template<
class Traits,
class GasOilMaterialLawT,
class OilWaterMaterialLawT>
60 typedef typename Traits::Scalar Scalar;
61 enum { numPhases = 3 };
68 typedef typename Stone1Material::Params Stone1Params;
69 typedef typename Stone2Material::Params Stone2Params;
70 typedef typename DefaultMaterial::Params DefaultParams;
71 typedef typename TwoPhaseMaterial::Params TwoPhaseParams;
73 template <
class ParamT>
76 inline void operator () (
void* ptr )
78 delete static_cast< ParamT*
> (ptr);
82 typedef std::shared_ptr< void > ParamPointerType;
97 setApproach( other.approach() );
103 setApproach( other.approach() );
107 void setApproach(EclMultiplexerApproach newApproach)
109 assert(realParams_ == 0);
110 approach_ = newApproach;
112 switch (approach()) {
113 case EclStone1Approach:
114 realParams_ = ParamPointerType(
new Stone1Params, Deleter< Stone1Params > () );
117 case EclStone2Approach:
118 realParams_ = ParamPointerType(
new Stone2Params, Deleter< Stone2Params > () );
121 case EclDefaultApproach:
122 realParams_ = ParamPointerType(
new DefaultParams, Deleter< DefaultParams > () );
125 case EclTwoPhaseApproach:
126 realParams_ = ParamPointerType(
new TwoPhaseParams, Deleter< TwoPhaseParams > () );
131 EclMultiplexerApproach approach()
const 132 {
return approach_; }
135 template <EclMultiplexerApproach approachV>
136 typename std::enable_if<approachV == EclStone1Approach, Stone1Params>::type&
139 assert(approach() == approachV);
140 return this->
template castTo<Stone1Params>();
143 template <EclMultiplexerApproach approachV>
144 typename std::enable_if<approachV == EclStone1Approach, const Stone1Params>::type&
145 getRealParams()
const 147 assert(approach() == approachV);
148 return this->
template castTo<Stone1Params>();
152 template <EclMultiplexerApproach approachV>
153 typename std::enable_if<approachV == EclStone2Approach, Stone2Params>::type&
156 assert(approach() == approachV);
157 return this->
template castTo<Stone2Params>();
160 template <EclMultiplexerApproach approachV>
161 typename std::enable_if<approachV == EclStone2Approach, const Stone2Params>::type&
162 getRealParams()
const 164 assert(approach() == approachV);
165 return this->
template castTo<Stone2Params>();
169 template <EclMultiplexerApproach approachV>
170 typename std::enable_if<approachV == EclDefaultApproach, DefaultParams>::type&
173 assert(approach() == approachV);
174 return this->
template castTo<DefaultParams>();
177 template <EclMultiplexerApproach approachV>
178 typename std::enable_if<approachV == EclDefaultApproach, const DefaultParams>::type&
179 getRealParams()
const 181 assert(approach() == approachV);
182 return this->
template castTo<DefaultParams>();
186 template <EclMultiplexerApproach approachV>
187 typename std::enable_if<approachV == EclTwoPhaseApproach, TwoPhaseParams>::type&
190 assert(approach() == approachV);
191 return this->
template castTo<TwoPhaseParams>();
194 template <EclMultiplexerApproach approachV>
195 typename std::enable_if<approachV == EclTwoPhaseApproach, const TwoPhaseParams>::type&
196 getRealParams()
const 198 assert(approach() == approachV);
199 return this->
template castTo<TwoPhaseParams>();
203 template <
class ParamT>
206 return *(
static_cast<ParamT *
> (realParams_.operator->()));
209 template <
class ParamT>
210 const ParamT& castTo()
const 212 return *(
static_cast<const ParamT *
> (realParams_.operator->()));
215 EclMultiplexerApproach approach_;
216 ParamPointerType realParams_;
Implements a multiplexer class that provides ECL saturation functions for twophase simulations...
Multiplexer implementation for the parameters required by the multiplexed three-phase material law...
Definition: EclMultiplexerMaterialParams.hpp:58
Implements the second phase capillary pressure/relperm law suggested by Stone as used by the ECLipse ...
Implements the second phase capillary pressure/relperm law suggested by Stone as used by the ECLipse ...
Definition: Air_Mesitylene.hpp:33
EclMultiplexerMaterialParams()
The multiplexer constructor.
Definition: EclMultiplexerMaterialParams.hpp:90
Implements the second phase capillary pressure/relperm law suggested by Stone as used by the ECLipse ...
Definition: EclStone2Material.hpp:61
Implements the second phase capillary pressure/relperm law suggested by Stone as used by the ECLipse ...
Definition: EclStone1Material.hpp:60
Default implementation for asserting finalization of parameter objects.
void finalize()
Mark the object as finalized.
Definition: EnsureFinalized.hpp:77
Default implementation for asserting finalization of parameter objects.
Definition: EnsureFinalized.hpp:46
Implements the default three phase capillary pressure law used by the ECLipse simulator.
Definition: EclDefaultMaterial.hpp:61
Implements a multiplexer class that provides ECL saturation functions for twophase simulations...
Definition: EclTwoPhaseMaterial.hpp:57
Implements the default three phase capillary pressure law used by the ECLipse simulator.