My Project
Loading...
Searching...
No Matches
ConstantCompressibilityWaterPvt.hpp
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 2 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18
19 Consult the COPYING file in the top-level source directory of this
20 module for the precise wording of the license and the list of
21 copyright holders.
22*/
27#ifndef OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP
28#define OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP
29
30#include <cstddef>
31#include <stdexcept>
32#include <vector>
33
34namespace Opm {
35
36#if HAVE_ECL_INPUT
37class EclipseState;
38class Schedule;
39#endif
40
45template <class Scalar>
47{
48public:
49#if HAVE_ECL_INPUT
54 void initFromState(const EclipseState& eclState, const Schedule&);
55#endif
56
57 void setNumRegions(size_t numRegions)
58 {
59 waterReferenceDensity_.resize(numRegions);
60 waterReferencePressure_.resize(numRegions);
61 waterReferenceFormationVolumeFactor_.resize(numRegions);
62 waterCompressibility_.resize(numRegions);
63 waterViscosity_.resize(numRegions);
64 waterViscosibility_.resize(numRegions);
65
66 for (unsigned regionIdx = 0; regionIdx < numRegions; ++regionIdx) {
67 setReferenceDensities(regionIdx, 650.0, 1.0, 1000.0);
69 setReferencePressure(regionIdx, 1e5);
70 }
71 }
72
73 void setVapPars(const Scalar, const Scalar)
74 {
75 }
76
80 void setReferenceDensities(unsigned regionIdx,
81 Scalar /*rhoRefOil*/,
82 Scalar /*rhoRefGas*/,
83 Scalar rhoRefWater)
84 { waterReferenceDensity_[regionIdx] = rhoRefWater; }
85
89 void setReferencePressure(unsigned regionIdx, Scalar p)
90 { waterReferencePressure_[regionIdx] = p; }
91
95 void setViscosity(unsigned regionIdx, Scalar muw, Scalar waterViscosibility = 0.0)
96 {
97 waterViscosity_[regionIdx] = muw;
98 waterViscosibility_[regionIdx] = waterViscosibility;
99 }
100
104 void setCompressibility(unsigned regionIdx, Scalar waterCompressibility)
105 { waterCompressibility_[regionIdx] = waterCompressibility; }
106
110 void setReferenceFormationVolumeFactor(unsigned regionIdx, Scalar BwRef)
111 { waterReferenceFormationVolumeFactor_[regionIdx] = BwRef; }
112
116 void setViscosibility(unsigned regionIdx, Scalar muComp)
117 { waterViscosibility_[regionIdx] = muComp; }
118
122 void initEnd()
123 { }
124
128 unsigned numRegions() const
129 { return waterReferenceDensity_.size(); }
130
134 template <class Evaluation>
135 Evaluation internalEnergy(unsigned,
136 const Evaluation&,
137 const Evaluation&,
138 const Evaluation&,
139 const Evaluation&) const
140 {
141 throw std::runtime_error("Requested the enthalpy of water but the thermal option is not enabled");
142 }
143
144
148 template <class Evaluation>
149 Evaluation saturatedViscosity(unsigned regionIdx,
150 const Evaluation& temperature,
151 const Evaluation& pressure,
152 const Evaluation& saltconcentration) const
153 {
154 Scalar BwMuwRef = waterViscosity_[regionIdx]*waterReferenceFormationVolumeFactor_[regionIdx];
155 const Evaluation& bw = saturatedInverseFormationVolumeFactor(regionIdx, temperature, pressure, saltconcentration);
156
157 Scalar pRef = waterReferencePressure_[regionIdx];
158 const Evaluation& Y =
159 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
160 * (pressure - pRef);
161 return BwMuwRef*bw/(1 + Y*(1 + Y/2));
162 }
166 template <class Evaluation>
167 Evaluation viscosity(unsigned regionIdx,
168 const Evaluation& temperature,
169 const Evaluation& pressure,
170 const Evaluation& Rsw,
171 const Evaluation& saltconcentration) const
172 {
173 Scalar BwMuwRef = waterViscosity_[regionIdx]*waterReferenceFormationVolumeFactor_[regionIdx];
174 const Evaluation& bw = inverseFormationVolumeFactor(regionIdx, temperature, pressure, Rsw, saltconcentration);
175
176 Scalar pRef = waterReferencePressure_[regionIdx];
177 const Evaluation& Y =
178 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
179 * (pressure - pRef);
180 return BwMuwRef*bw/(1 + Y*(1 + Y/2));
181 }
182
186 template <class Evaluation>
187 Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx,
188 const Evaluation& temperature,
189 const Evaluation& pressure,
190 const Evaluation& saltconcentration) const
191 {
192 Evaluation Rsw = 0.0;
193 return inverseFormationVolumeFactor(regionIdx, temperature, pressure, Rsw, saltconcentration);
194 }
195
199 template <class Evaluation>
200 Evaluation inverseFormationVolumeFactor(unsigned regionIdx,
201 const Evaluation& /*temperature*/,
202 const Evaluation& pressure,
203 const Evaluation& /*Rsw*/,
204 const Evaluation& /*saltconcentration*/) const
205 {
206 Scalar pRef = waterReferencePressure_[regionIdx];
207 const Evaluation& X = waterCompressibility_[regionIdx]*(pressure - pRef);
208
209 Scalar BwRef = waterReferenceFormationVolumeFactor_[regionIdx];
210
211 // TODO (?): consider the salt concentration of the brine
212 return (1.0 + X*(1.0 + X/2.0))/BwRef;
213 }
214
215 template <class Evaluation>
216 void inverseBAndMu(Evaluation& bw, Evaluation& muW, unsigned regionIdx,
217 const Evaluation& /*temperature*/,
218 const Evaluation& pressure,
219 const Evaluation& /*Rsw*/,
220 const Evaluation& /*saltconcentration*/) const{
221 inverseBAndMu(bw, muW, regionIdx,pressure);
222 }
223
224 template <class Evaluation>
225 void inverseBAndMu(Evaluation& bw, Evaluation& muW, unsigned regionIdx,
226 const Evaluation& pressure) const
227 {
228 Scalar pRef = waterReferencePressure_[regionIdx];
229 const Evaluation& X = waterCompressibility_[regionIdx]*(pressure - pRef);
230
231 Scalar BwRef = waterReferenceFormationVolumeFactor_[regionIdx];
232
233 // TODO (?): consider the salt concentration of the brine
234 bw = (1.0 + X*(1.0 + X/2.0))/BwRef;
235
236 Scalar BwMuwRef = waterViscosity_[regionIdx]*BwRef;
237
238 const Evaluation& Y =
239 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
240 * (pressure - pRef);
241 muW = BwMuwRef*bw/(1 + Y*(1 + Y/2));
242 }
243
250 template <class Evaluation>
251 Evaluation saturationPressure(unsigned /*regionIdx*/,
252 const Evaluation& /*temperature*/,
253 const Evaluation& /*Rs*/,
254 const Evaluation& /*saltconcentration*/) const
255 { return 0.0; /* this is dead water, so there isn't any meaningful saturation pressure! */ }
256
257 template <class Evaluation>
258 Evaluation diffusionCoefficient(const Evaluation& /*temperature*/,
259 const Evaluation& /*pressure*/,
260 unsigned /*compIdx*/) const
261 {
262 throw std::runtime_error("Not implemented: The PVT model does not provide a diffusionCoefficient()");
263 }
264
268 template <class Evaluation>
269 Evaluation saturatedGasDissolutionFactor(unsigned /*regionIdx*/,
270 const Evaluation& /*temperature*/,
271 const Evaluation& /*pressure*/,
272 const Evaluation& /*saltconcentration*/) const
273 { return 0.0; /* this is dead water! */ }
274
275 Scalar waterReferenceDensity(unsigned regionIdx) const
276 { return waterReferenceDensity_[regionIdx]; }
277
278 const std::vector<Scalar>& waterReferencePressure() const
279 { return waterReferencePressure_; }
280
281 const std::vector<Scalar>& waterReferenceFormationVolumeFactor() const
282 { return waterReferenceFormationVolumeFactor_; }
283
284 const std::vector<Scalar>& waterCompressibility() const
285 { return waterCompressibility_; }
286
287 const std::vector<Scalar>& waterViscosity() const
288 { return waterViscosity_; }
289
290 const std::vector<Scalar>& waterViscosibility() const
291 { return waterViscosibility_; }
292
293private:
294 std::vector<Scalar> waterReferenceDensity_;
295 std::vector<Scalar> waterReferencePressure_;
296 std::vector<Scalar> waterReferenceFormationVolumeFactor_;
297 std::vector<Scalar> waterCompressibility_;
298 std::vector<Scalar> waterViscosity_;
299 std::vector<Scalar> waterViscosibility_;
300};
301
302} // namespace Opm
303
304#endif
This class represents the Pressure-Volume-Temperature relations of the gas phase without vaporized oi...
Definition ConstantCompressibilityWaterPvt.hpp:47
void setReferenceFormationVolumeFactor(unsigned regionIdx, Scalar BwRef)
Set the water reference formation volume factor [-].
Definition ConstantCompressibilityWaterPvt.hpp:110
void setViscosibility(unsigned regionIdx, Scalar muComp)
Set the water "viscosibility" [1/ (Pa s)].
Definition ConstantCompressibilityWaterPvt.hpp:116
Evaluation saturationPressure(unsigned, const Evaluation &, const Evaluation &, const Evaluation &) const
Returns the saturation pressure of the water phase [Pa] depending on its mass fraction of the gas com...
Definition ConstantCompressibilityWaterPvt.hpp:251
Evaluation inverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &, const Evaluation &pressure, const Evaluation &, const Evaluation &) const
Returns the formation volume factor [-] of the fluid phase.
Definition ConstantCompressibilityWaterPvt.hpp:200
void setCompressibility(unsigned regionIdx, Scalar waterCompressibility)
Set the compressibility of the water phase.
Definition ConstantCompressibilityWaterPvt.hpp:104
void setReferenceDensities(unsigned regionIdx, Scalar, Scalar, Scalar rhoRefWater)
Set the water reference density [kg / m^3].
Definition ConstantCompressibilityWaterPvt.hpp:80
unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition ConstantCompressibilityWaterPvt.hpp:128
void setReferencePressure(unsigned regionIdx, Scalar p)
Set the water reference pressure [Pa].
Definition ConstantCompressibilityWaterPvt.hpp:89
void initEnd()
Finish initializing the water phase PVT properties.
Definition ConstantCompressibilityWaterPvt.hpp:122
Evaluation viscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &Rsw, const Evaluation &saltconcentration) const
Returns the dynamic viscosity [Pa s] of the fluid phase given a set of parameters.
Definition ConstantCompressibilityWaterPvt.hpp:167
void setViscosity(unsigned regionIdx, Scalar muw, Scalar waterViscosibility=0.0)
Set the viscosity and "viscosibility" of the water phase.
Definition ConstantCompressibilityWaterPvt.hpp:95
Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &saltconcentration) const
Returns the formation volume factor [-] of the fluid phase.
Definition ConstantCompressibilityWaterPvt.hpp:187
Evaluation saturatedViscosity(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:149
Evaluation internalEnergy(unsigned, const Evaluation &, const Evaluation &, const Evaluation &, const Evaluation &) const
Returns the specific enthalpy [J/kg] of water given a set of parameters.
Definition ConstantCompressibilityWaterPvt.hpp:135
Evaluation saturatedGasDissolutionFactor(unsigned, const Evaluation &, const Evaluation &, const Evaluation &) const
Returns the gas dissolution factor [m^3/m^3] of the water phase.
Definition ConstantCompressibilityWaterPvt.hpp:269
Definition EclipseState.hpp:63
Definition Schedule.hpp:88
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30