34 #ifndef OPENRS_MISCIBILITYWATER_HEADER
35 #define OPENRS_MISCIBILITYWATER_HEADER
38 #include <opm/common/ErrorMacros.hpp>
48 typedef std::vector<std::vector<double> >
table_t;
52 auto pvtwRecord = pvtwKeyword->getRecord(0);
53 ref_press_ = pvtwRecord->getItem(
"P_REF")->getSIDouble(0);
54 ref_B_ = pvtwRecord->getItem(
"WATER_VOL_FACTOR")->getSIDouble(0);
55 comp_ = pvtwRecord->getItem(
"WATER_COMPRESSIBILITY")->getSIDouble(0);
56 viscosity_ = pvtwRecord->getItem(
"WATER_VISCOSITY")->getSIDouble(0);
58 if (pvtwRecord->getItem(
"WATER_VISCOSIBILITY")->getSIDouble(0) != 0.0) {
59 OPM_THROW(std::runtime_error,
"MiscibilityWater does not support 'viscosibility'.");
75 auto pvcdoRecord = pvcdoKeyword->getRecord(0);
76 ref_press_ = pvcdoRecord->getItem(
"P_REF")->getSIDouble(0);
77 ref_B_ = pvcdoRecord->getItem(
"OIL_VOL_FACTOR")->getSIDouble(0);
78 comp_ = pvcdoRecord->getItem(
"OIL_COMPRESSIBILITY")->getSIDouble(0);
79 viscosity_ = pvcdoRecord->getItem(
"OIL_VISCOSITY")->getSIDouble(0);
80 if (pvcdoRecord->getItem(
"OIL_VISCOSIBILITY")->getSIDouble(0) != 0.0) {
81 OPM_THROW(std::runtime_error,
"MiscibilityWater does not support 'viscosibility'.");
95 const std::vector<CompVec>&,
97 std::vector<double>& output)
const
99 int num = pressures.size();
101 output.resize(num, viscosity_);
104 virtual double B(
int ,
double press,
const surfvol_t& )
const
108 double x = comp_*(press - ref_press_);
109 return ref_B_/(1.0 + x + 0.5*x*x);
115 virtual void B(
const std::vector<PhaseVec>& pressures,
116 const std::vector<CompVec>&,
118 std::vector<double>& output)
const
120 int num = pressures.size();
123 #pragma omp parallel for
124 for (
int i = 0; i < num; ++i) {
126 double x = comp_*(pressures[i][phase] - ref_press_);
127 output[i] = ref_B_/(1.0 + x + 0.5*x*x);
131 output.resize(num, ref_B_);
135 virtual double dBdp(
int region,
double press,
const surfvol_t& surfvol)
const
138 return -comp_*
B(region, press, surfvol);
144 virtual void dBdp(
const std::vector<PhaseVec>& pressures,
145 const std::vector<CompVec>& surfvols,
147 std::vector<double>& output_B,
148 std::vector<double>& output_dBdp)
const
150 B(pressures, surfvols, phase, output_B);
151 int num = pressures.size();
153 output_dBdp.resize(num);
154 #pragma omp parallel for
155 for (
int i = 0; i < num; ++i) {
156 output_dBdp[i] = -comp_*output_B[i];
160 output_dBdp.resize(num, 0.0);
169 virtual void R(
const std::vector<PhaseVec>& pressures,
170 const std::vector<CompVec>&,
172 std::vector<double>& output)
const
174 int num = pressures.size();
176 output.resize(num, 0.0);
184 virtual void dRdp(
const std::vector<PhaseVec>& pressures,
185 const std::vector<CompVec>&,
187 std::vector<double>& output_R,
188 std::vector<double>& output_dRdp)
const
190 int num = pressures.size();
192 output_R.resize(num, 0.0);
194 output_dRdp.resize(num, 0.0);
206 #endif // OPENRS_MISCIBILITYWATER_HEADER
void initFromPvcdo(DeckKeywordConstPtr pvcdoKeyword)
Definition: MiscibilityWater.hpp:73
Definition: MiscibilityWater.hpp:45
virtual double dBdp(int region, double press, const surfvol_t &surfvol) const
Definition: MiscibilityWater.hpp:135
virtual double dRdp(int, double, const surfvol_t &) const
Definition: MiscibilityWater.hpp:179
Definition: BlackoilFluid.hpp:31
virtual ~MiscibilityWater()
Definition: MiscibilityWater.hpp:85
std::vector< std::vector< double > > table_t
Definition: MiscibilityWater.hpp:48
virtual void getViscosity(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int, std::vector< double > &output) const
Definition: MiscibilityWater.hpp:94
MiscibilityWater(double visc)
Definition: MiscibilityWater.hpp:64
CompVec surfvol_t
Definition: MiscibilityProps.hpp:49
virtual double R(int, double, const surfvol_t &) const
Definition: MiscibilityWater.hpp:164
virtual void B(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int phase, std::vector< double > &output) const
Definition: MiscibilityWater.hpp:115
virtual void dRdp(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int, std::vector< double > &output_R, std::vector< double > &output_dRdp) const
Definition: MiscibilityWater.hpp:184
MiscibilityWater(DeckKeywordConstPtr pvtwKeyword)
Definition: MiscibilityWater.hpp:50
virtual void R(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int, std::vector< double > &output) const
Definition: MiscibilityWater.hpp:169
Definition: MiscibilityProps.hpp:46
virtual double B(int, double press, const surfvol_t &) const
Definition: MiscibilityWater.hpp:104
virtual double getViscosity(int, double, const surfvol_t &) const
Definition: MiscibilityWater.hpp:89
virtual void dBdp(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &surfvols, int phase, std::vector< double > &output_B, std::vector< double > &output_dBdp) const
Definition: MiscibilityWater.hpp:144