27 #ifndef OPM_CONSTANT_COMPRESSIBILITY_OIL_PVT_HPP
28 #define OPM_CONSTANT_COMPRESSIBILITY_OIL_PVT_HPP
36 #include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
37 #include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
45 template <
class Scalar>
49 typedef std::vector<std::pair<Scalar, Scalar> > SamplingPoints;
54 const std::vector<Scalar>& oilReferencePressure,
55 const std::vector<Scalar>& oilReferenceFormationVolumeFactor,
56 const std::vector<Scalar>& oilCompressibility,
57 const std::vector<Scalar>& oilViscosity,
58 const std::vector<Scalar>& oilViscosibility)
59 : oilReferenceDensity_(oilReferenceDensity)
60 , oilReferencePressure_(oilReferencePressure)
61 , oilReferenceFormationVolumeFactor_(oilReferenceFormationVolumeFactor)
62 , oilCompressibility_(oilCompressibility)
63 , oilViscosity_(oilViscosity)
64 , oilViscosibility_(oilViscosibility)
76 void initFromState(
const EclipseState& eclState,
const Schedule&)
78 const auto& pvcdoTable = eclState.getTableManager().getPvcdoTable();
79 const auto& densityTable = eclState.getTableManager().getDensityTable();
81 assert(pvcdoTable.size() == densityTable.size());
86 for (
unsigned regionIdx = 0; regionIdx <
numRegions; ++ regionIdx) {
87 Scalar rhoRefO = densityTable[regionIdx].oil;
88 Scalar rhoRefG = densityTable[regionIdx].gas;
89 Scalar rhoRefW = densityTable[regionIdx].water;
93 oilReferencePressure_[regionIdx] = pvcdoTable[regionIdx].reference_pressure;
94 oilReferenceFormationVolumeFactor_[regionIdx] = pvcdoTable[regionIdx].volume_factor;
95 oilCompressibility_[regionIdx] = pvcdoTable[regionIdx].compressibility;
96 oilViscosity_[regionIdx] = pvcdoTable[regionIdx].viscosity;
97 oilViscosibility_[regionIdx] = pvcdoTable[regionIdx].viscosibility;
108 oilReferenceFormationVolumeFactor_.resize(
numRegions);
113 for (
unsigned regionIdx = 0; regionIdx <
numRegions; ++regionIdx) {
126 { oilReferenceDensity_[regionIdx] = rhoRefOil; }
131 void setViscosity(
unsigned regionIdx, Scalar muo, Scalar oilViscosibility = 0.0)
133 oilViscosity_[regionIdx] = muo;
134 oilViscosibility_[regionIdx] = oilViscosibility;
141 { oilCompressibility_[regionIdx] = oilCompressibility; }
147 { oilReferencePressure_[regionIdx] = p; }
153 { oilReferenceFormationVolumeFactor_[regionIdx] = BoRef; }
159 { oilViscosibility_[regionIdx] = muComp; }
171 {
return oilViscosity_.size(); }
176 template <
class Evaluation>
180 const Evaluation&)
const
182 throw std::runtime_error(
"Requested the enthalpy of oil but the thermal option is not enabled");
189 template <
class Evaluation>
191 const Evaluation& temperature,
192 const Evaluation& pressure,
193 const Evaluation& )
const
199 template <
class Evaluation>
201 const Evaluation& temperature,
202 const Evaluation& pressure)
const
204 Scalar BoMuoRef = oilViscosity_[regionIdx]*oilReferenceFormationVolumeFactor_[regionIdx];
207 Scalar pRef = oilReferencePressure_[regionIdx];
208 const Evaluation& Y =
209 (oilCompressibility_[regionIdx] - oilViscosibility_[regionIdx])
211 return BoMuoRef*bo/(1.0 + Y*(1.0 + Y/2.0));
217 template <
class Evaluation>
219 const Evaluation& temperature,
220 const Evaluation& pressure,
221 const Evaluation& )
const
230 template <
class Evaluation>
233 const Evaluation& pressure)
const
236 Scalar pRef = oilReferencePressure_[regionIdx];
237 const Evaluation& X = oilCompressibility_[regionIdx]*(pressure - pRef);
239 Scalar BoRef = oilReferenceFormationVolumeFactor_[regionIdx];
240 return (1 + X*(1 + X/2))/BoRef;
246 template <
class Evaluation>
249 const Evaluation& )
const
255 template <
class Evaluation>
260 const Evaluation& )
const
269 template <
class Evaluation>
272 const Evaluation& )
const
275 template <
class Evaluation>
276 Evaluation diffusionCoefficient(
const Evaluation& ,
280 throw std::runtime_error(
"Not implemented: The PVT model does not provide a diffusionCoefficient()");
283 const Scalar oilReferenceDensity(
unsigned regionIdx)
const
284 {
return oilReferenceDensity_[regionIdx]; }
286 const std::vector<Scalar>& oilReferenceFormationVolumeFactor()
const
287 {
return oilReferenceFormationVolumeFactor_; }
289 const std::vector<Scalar>& oilCompressibility()
const
290 {
return oilCompressibility_; }
292 const std::vector<Scalar>& oilViscosity()
const
293 {
return oilViscosity_; }
295 const std::vector<Scalar>& oilViscosibility()
const
296 {
return oilViscosibility_; }
298 bool operator==(
const ConstantCompressibilityOilPvt<Scalar>& data)
const
300 return this->oilReferenceDensity_ == data.oilReferenceDensity_ &&
301 this->oilReferencePressure_ == data.oilReferencePressure_ &&
302 this->oilReferenceFormationVolumeFactor() == data.oilReferenceFormationVolumeFactor() &&
303 this->oilCompressibility() == data.oilCompressibility() &&
304 this->oilViscosity() == data.oilViscosity() &&
305 this->oilViscosibility() == data.oilViscosibility();
309 std::vector<Scalar> oilReferenceDensity_;
310 std::vector<Scalar> oilReferencePressure_;
311 std::vector<Scalar> oilReferenceFormationVolumeFactor_;
312 std::vector<Scalar> oilCompressibility_;
313 std::vector<Scalar> oilViscosity_;
314 std::vector<Scalar> oilViscosibility_;
This file provides a wrapper around the "final" C++-2011 statement.
Class implementing cubic splines.
Implements a linearly interpolated scalar function that depends on one variable.
This class represents the Pressure-Volume-Temperature relations of the oil phase without dissolved ga...
Definition: ConstantCompressibilityOilPvt.hpp:47
Evaluation internalEnergy(unsigned, const Evaluation &, const Evaluation &, const Evaluation &) const
Returns the specific enthalpy [J/kg] of oil given a set of parameters.
Definition: ConstantCompressibilityOilPvt.hpp:177
Evaluation saturationPressure(unsigned, const Evaluation &, const Evaluation &) const
Returns the saturation pressure of the oil phase [Pa] depending on its mass fraction of the gas compo...
Definition: ConstantCompressibilityOilPvt.hpp:270
void setViscosity(unsigned regionIdx, Scalar muo, Scalar oilViscosibility=0.0)
Set the viscosity and "viscosibility" of the oil phase.
Definition: ConstantCompressibilityOilPvt.hpp:131
void initEnd()
Finish initializing the oil phase PVT properties.
Definition: ConstantCompressibilityOilPvt.hpp:164
Evaluation saturatedGasDissolutionFactor(unsigned, const Evaluation &, const Evaluation &, const Evaluation &, const Evaluation &) const
Returns the gas dissolution factor [m^3/m^3] of the oil phase.
Definition: ConstantCompressibilityOilPvt.hpp:256
void setReferencePressure(unsigned regionIdx, Scalar p)
Set the oil reference pressure [Pa].
Definition: ConstantCompressibilityOilPvt.hpp:146
void setCompressibility(unsigned regionIdx, Scalar oilCompressibility)
Set the compressibility of the oil phase.
Definition: ConstantCompressibilityOilPvt.hpp:140
Evaluation viscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &) const
Returns the dynamic viscosity [Pa s] of gas saturated oil given a pressure and a phase composition.
Definition: ConstantCompressibilityOilPvt.hpp:190
void setReferenceDensities(unsigned regionIdx, Scalar rhoRefOil, Scalar, Scalar)
Initialize the reference densities of all fluids for a given PVT region.
Definition: ConstantCompressibilityOilPvt.hpp:122
void setViscosibility(unsigned regionIdx, Scalar muComp)
Set the oil "viscosibility" [1/ (Pa s)].
Definition: ConstantCompressibilityOilPvt.hpp:158
Evaluation inverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &) const
Returns the formation volume factor [-] of the fluid phase.
Definition: ConstantCompressibilityOilPvt.hpp:218
Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &, const Evaluation &pressure) const
Returns the formation volume factor [-] of gas saturated oil.
Definition: ConstantCompressibilityOilPvt.hpp:231
void setReferenceFormationVolumeFactor(unsigned regionIdx, Scalar BoRef)
Set the oil reference formation volume factor [-].
Definition: ConstantCompressibilityOilPvt.hpp:152
Evaluation saturatedGasDissolutionFactor(unsigned, const Evaluation &, const Evaluation &) const
Returns the gas dissolution factor [m^3/m^3] of the oil phase.
Definition: ConstantCompressibilityOilPvt.hpp:247
Evaluation saturatedViscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the dynamic viscosity [Pa s] of gas saturated oil given a pressure.
Definition: ConstantCompressibilityOilPvt.hpp:200
unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition: ConstantCompressibilityOilPvt.hpp:170
Implements a linearly interpolated scalar function that depends on one variable.
Definition: Tabulated1DFunction.hpp:47