34#ifndef OPENRS_MISCIBILITYWATER_HEADER
35#define OPENRS_MISCIBILITYWATER_HEADER
38#include <opm/common/ErrorMacros.hpp>
40#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
41#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
42#include <opm/parser/eclipse/Deck/DeckItem.hpp>
52 typedef std::vector<std::vector<double> >
table_t;
56 const auto& pvtwRecord = pvtwKeyword.getRecord(0);
57 ref_press_ = pvtwRecord.getItem(
"P_REF").getSIDouble(0);
58 ref_B_ = pvtwRecord.getItem(
"WATER_VOL_FACTOR").getSIDouble(0);
59 comp_ = pvtwRecord.getItem(
"WATER_COMPRESSIBILITY").getSIDouble(0);
60 viscosity_ = pvtwRecord.getItem(
"WATER_VISCOSITY").getSIDouble(0);
62 if (pvtwRecord.getItem(
"WATER_VISCOSIBILITY").getSIDouble(0) != 0.0) {
63 OPM_THROW(std::runtime_error,
"MiscibilityWater does not support 'viscosibility'.");
79 const auto& pvcdoRecord = pvcdoKeyword.getRecord(0);
80 ref_press_ = pvcdoRecord.getItem(
"P_REF").getSIDouble(0);
81 ref_B_ = pvcdoRecord.getItem(
"OIL_VOL_FACTOR").getSIDouble(0);
82 comp_ = pvcdoRecord.getItem(
"OIL_COMPRESSIBILITY").getSIDouble(0);
83 viscosity_ = pvcdoRecord.getItem(
"OIL_VISCOSITY").getSIDouble(0);
84 if (pvcdoRecord.getItem(
"OIL_VISCOSIBILITY").getSIDouble(0) != 0.0) {
85 OPM_THROW(std::runtime_error,
"MiscibilityWater does not support 'viscosibility'.");
99 const std::vector<CompVec>&,
101 std::vector<double>& output)
const
103 int num = pressures.size();
105 output.resize(num, viscosity_);
108 virtual double B(
int ,
double press,
const surfvol_t& )
const
112 double x = comp_*(press - ref_press_);
113 return ref_B_/(1.0 + x + 0.5*x*x);
119 virtual void B(
const std::vector<PhaseVec>& pressures,
120 const std::vector<CompVec>&,
122 std::vector<double>& output)
const
124 int num = pressures.size();
127#pragma omp parallel for
128 for (
int i = 0; i < num; ++i) {
130 double x = comp_*(pressures[i][phase] - ref_press_);
131 output[i] = ref_B_/(1.0 + x + 0.5*x*x);
135 output.resize(num, ref_B_);
139 virtual double dBdp(
int region,
double press,
const surfvol_t& surfvol)
const
142 return -comp_*
B(region, press, surfvol);
148 virtual void dBdp(
const std::vector<PhaseVec>& pressures,
149 const std::vector<CompVec>& surfvols,
151 std::vector<double>& output_B,
152 std::vector<double>& output_dBdp)
const
154 B(pressures, surfvols, phase, output_B);
155 int num = pressures.size();
157 output_dBdp.resize(num);
158#pragma omp parallel for
159 for (
int i = 0; i < num; ++i) {
160 output_dBdp[i] = -comp_*output_B[i];
164 output_dBdp.resize(num, 0.0);
173 virtual void R(
const std::vector<PhaseVec>& pressures,
174 const std::vector<CompVec>&,
176 std::vector<double>& output)
const
178 int num = pressures.size();
180 output.resize(num, 0.0);
188 virtual void dRdp(
const std::vector<PhaseVec>& pressures,
189 const std::vector<CompVec>&,
191 std::vector<double>& output_R,
192 std::vector<double>& output_dRdp)
const
194 int num = pressures.size();
196 output_R.resize(num, 0.0);
198 output_dRdp.resize(num, 0.0);
Definition: MiscibilityProps.hpp:47
CompVec surfvol_t
Definition: MiscibilityProps.hpp:49
Definition: MiscibilityWater.hpp:50
void initFromPvcdo(const DeckKeyword &pvcdoKeyword)
Definition: MiscibilityWater.hpp:77
virtual double dRdp(int, double, const surfvol_t &) const
Definition: MiscibilityWater.hpp:183
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:148
virtual void R(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int, std::vector< double > &output) const
Definition: MiscibilityWater.hpp:173
std::vector< std::vector< double > > table_t
Definition: MiscibilityWater.hpp:52
virtual double R(int, double, const surfvol_t &) const
Definition: MiscibilityWater.hpp:168
virtual double getViscosity(int, double, const surfvol_t &) const
Definition: MiscibilityWater.hpp:93
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:188
MiscibilityWater(const DeckKeyword &pvtwKeyword)
Definition: MiscibilityWater.hpp:54
virtual double B(int, double press, const surfvol_t &) const
Definition: MiscibilityWater.hpp:108
virtual void getViscosity(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int, std::vector< double > &output) const
Definition: MiscibilityWater.hpp:98
MiscibilityWater(double visc)
Definition: MiscibilityWater.hpp:68
virtual void B(const std::vector< PhaseVec > &pressures, const std::vector< CompVec > &, int phase, std::vector< double > &output) const
Definition: MiscibilityWater.hpp:119
virtual ~MiscibilityWater()
Definition: MiscibilityWater.hpp:89
virtual double dBdp(int region, double press, const surfvol_t &surfvol) const
Definition: MiscibilityWater.hpp:139
Definition: BlackoilFluid.hpp:32