27 #ifndef OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP
28 #define OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP
33 #include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
43 template <
class Scalar>
47 typedef std::vector<std::pair<Scalar, Scalar> > SamplingPoints;
52 const std::vector<Scalar>& waterReferencePressure,
53 const std::vector<Scalar>& waterReferenceFormationVolumeFactor,
54 const std::vector<Scalar>& waterCompressibility,
55 const std::vector<Scalar>& waterViscosity,
56 const std::vector<Scalar>& waterViscosibility)
57 : waterReferenceDensity_(waterReferenceDensity)
58 , waterReferencePressure_(waterReferencePressure)
59 , waterReferenceFormationVolumeFactor_(waterReferenceFormationVolumeFactor)
60 , waterCompressibility_(waterCompressibility)
61 , waterViscosity_(waterViscosity)
62 , waterViscosibility_(waterViscosibility)
69 void initFromState(
const EclipseState& eclState,
const Schedule&)
71 const auto& pvtwTable = eclState.getTableManager().getPvtwTable();
72 const auto& densityTable = eclState.getTableManager().getDensityTable();
74 assert(pvtwTable.size() == densityTable.size());
79 for (
unsigned regionIdx = 0; regionIdx <
numRegions; ++ regionIdx) {
80 waterReferenceDensity_[regionIdx] = densityTable[regionIdx].water;
82 waterReferencePressure_[regionIdx] = pvtwTable[regionIdx].reference_pressure;
83 waterReferenceFormationVolumeFactor_[regionIdx] = pvtwTable[regionIdx].volume_factor;
84 waterCompressibility_[regionIdx] = pvtwTable[regionIdx].compressibility;
85 waterViscosity_[regionIdx] = pvtwTable[regionIdx].viscosity;
86 waterViscosibility_[regionIdx] = pvtwTable[regionIdx].viscosibility;
97 waterReferenceFormationVolumeFactor_.resize(
numRegions);
102 for (
unsigned regionIdx = 0; regionIdx <
numRegions; ++regionIdx) {
116 { waterReferenceDensity_[regionIdx] = rhoRefWater; }
122 { waterReferencePressure_[regionIdx] = p; }
127 void setViscosity(
unsigned regionIdx, Scalar muw, Scalar waterViscosibility = 0.0)
129 waterViscosity_[regionIdx] = muw;
130 waterViscosibility_[regionIdx] = waterViscosibility;
137 { waterCompressibility_[regionIdx] = waterCompressibility; }
143 { waterReferenceFormationVolumeFactor_[regionIdx] = BwRef; }
149 { waterViscosibility_[regionIdx] = muComp; }
161 {
return waterReferenceDensity_.size(); }
166 template <
class Evaluation>
169 const Evaluation&)
const
171 throw std::runtime_error(
"Requested the enthalpy of water but the thermal option is not enabled");
178 template <
class Evaluation>
180 const Evaluation& temperature,
181 const Evaluation& pressure,
182 const Evaluation& saltconcentration)
const
184 Scalar BwMuwRef = waterViscosity_[regionIdx]*waterReferenceFormationVolumeFactor_[regionIdx];
187 Scalar pRef = waterReferencePressure_[regionIdx];
188 const Evaluation& Y =
189 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
191 return BwMuwRef*bw/(1 + Y*(1 + Y/2));
197 template <
class Evaluation>
200 const Evaluation& pressure,
201 const Evaluation& )
const
204 Scalar pRef = waterReferencePressure_[regionIdx];
205 const Evaluation& X = waterCompressibility_[regionIdx]*(pressure - pRef);
207 Scalar BwRef = waterReferenceFormationVolumeFactor_[regionIdx];
210 return (1.0 + X*(1.0 + X/2.0))/BwRef;
213 const Scalar waterReferenceDensity(
unsigned regionIdx)
const
214 {
return waterReferenceDensity_[regionIdx]; }
216 const std::vector<Scalar>& waterReferencePressure()
const
217 {
return waterReferencePressure_; }
219 const std::vector<Scalar>& waterReferenceFormationVolumeFactor()
const
220 {
return waterReferenceFormationVolumeFactor_; }
222 const std::vector<Scalar>& waterCompressibility()
const
223 {
return waterCompressibility_; }
225 const std::vector<Scalar>& waterViscosity()
const
226 {
return waterViscosity_; }
228 const std::vector<Scalar>& waterViscosibility()
const
229 {
return waterViscosibility_; }
231 bool operator==(
const ConstantCompressibilityWaterPvt<Scalar>& data)
const
233 return this->waterReferenceDensity_ == data.waterReferenceDensity_ &&
234 this->waterReferencePressure() == data.waterReferencePressure() &&
235 this->waterReferenceFormationVolumeFactor() == data.waterReferenceFormationVolumeFactor() &&
236 this->waterCompressibility() == data.waterCompressibility() &&
237 this->waterViscosity() == data.waterViscosity() &&
238 this->waterViscosibility() == data.waterViscosibility();
242 std::vector<Scalar> waterReferenceDensity_;
243 std::vector<Scalar> waterReferencePressure_;
244 std::vector<Scalar> waterReferenceFormationVolumeFactor_;
245 std::vector<Scalar> waterCompressibility_;
246 std::vector<Scalar> waterViscosity_;
247 std::vector<Scalar> waterViscosibility_;
Implements a linearly interpolated scalar function that depends on one variable.
This class represents the Pressure-Volume-Temperature relations of the gas phase without vaporized oi...
Definition: ConstantCompressibilityWaterPvt.hpp:45
void setReferenceFormationVolumeFactor(unsigned regionIdx, Scalar BwRef)
Set the water reference formation volume factor [-].
Definition: ConstantCompressibilityWaterPvt.hpp:142
void setViscosibility(unsigned regionIdx, Scalar muComp)
Set the water "viscosibility" [1/ (Pa s)].
Definition: ConstantCompressibilityWaterPvt.hpp:148
Evaluation inverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &, const Evaluation &pressure, const Evaluation &) const
Returns the formation volume factor [-] of the fluid phase.
Definition: ConstantCompressibilityWaterPvt.hpp:198
void setCompressibility(unsigned regionIdx, Scalar waterCompressibility)
Set the compressibility of the water phase.
Definition: ConstantCompressibilityWaterPvt.hpp:136
void setReferenceDensities(unsigned regionIdx, Scalar, Scalar, Scalar rhoRefWater)
Set the water reference density [kg / m^3].
Definition: ConstantCompressibilityWaterPvt.hpp:112
unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition: ConstantCompressibilityWaterPvt.hpp:160
Evaluation internalEnergy(unsigned, const Evaluation &, const Evaluation &) const
Returns the specific enthalpy [J/kg] of water given a set of parameters.
Definition: ConstantCompressibilityWaterPvt.hpp:167
void setReferencePressure(unsigned regionIdx, Scalar p)
Set the water reference pressure [Pa].
Definition: ConstantCompressibilityWaterPvt.hpp:121
void initEnd()
Finish initializing the water phase PVT properties.
Definition: ConstantCompressibilityWaterPvt.hpp:154
Evaluation viscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &saltconcentration) const
Returns the dynamic viscosity [Pa s] of the fluid phase given a set of parameters.
Definition: ConstantCompressibilityWaterPvt.hpp:179
void setViscosity(unsigned regionIdx, Scalar muw, Scalar waterViscosibility=0.0)
Set the viscosity and "viscosibility" of the water phase.
Definition: ConstantCompressibilityWaterPvt.hpp:127
Implements a linearly interpolated scalar function that depends on one variable.
Definition: Tabulated1DFunction.hpp:47