00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00027 #ifndef OPM_ECL_TWO_PHASE_MATERIAL_PARAMS_HPP
00028 #define OPM_ECL_TWO_PHASE_MATERIAL_PARAMS_HPP
00029
00030 #include <type_traits>
00031 #include <cassert>
00032 #include <memory>
00033
00034 #include <opm/material/common/EnsureFinalized.hpp>
00035
00036 namespace Opm {
00037 enum EclTwoPhaseApproach {
00038 EclTwoPhaseGasOil,
00039 EclTwoPhaseOilWater,
00040 EclTwoPhaseGasWater
00041 };
00042
00050 template<class Traits, class GasOilParamsT, class OilWaterParamsT>
00051 class EclTwoPhaseMaterialParams : public EnsureFinalized
00052 {
00053 typedef typename Traits::Scalar Scalar;
00054 enum { numPhases = 3 };
00055 public:
00056 using EnsureFinalized :: finalize;
00057
00058
00059 typedef GasOilParamsT GasOilParams;
00060 typedef OilWaterParamsT OilWaterParams;
00061
00065 EclTwoPhaseMaterialParams()
00066 {
00067 }
00068
00069 void setApproach(EclTwoPhaseApproach newApproach)
00070 { approach_ = newApproach; }
00071
00072 EclTwoPhaseApproach approach() const
00073 { return approach_; }
00074
00078 const GasOilParams& gasOilParams() const
00079 { EnsureFinalized::check(); return *gasOilParams_; }
00080
00084 GasOilParams& gasOilParams()
00085 { EnsureFinalized::check(); return *gasOilParams_; }
00086
00090 void setGasOilParams(std::shared_ptr<GasOilParams> val)
00091 { gasOilParams_ = val; }
00092
00096 const OilWaterParams& oilWaterParams() const
00097 { EnsureFinalized::check(); return *oilWaterParams_; }
00098
00102 OilWaterParams& oilWaterParams()
00103 { EnsureFinalized::check(); return *oilWaterParams_; }
00104
00108 void setOilWaterParams(std::shared_ptr<OilWaterParams> val)
00109 { oilWaterParams_ = val; }
00110
00111 private:
00112 EclTwoPhaseApproach approach_;
00113
00114 std::shared_ptr<GasOilParams> gasOilParams_;
00115 std::shared_ptr<OilWaterParams> oilWaterParams_;
00116 };
00117 }
00118
00119 #endif