My Project
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
76 void setReferenceDensities(unsigned regionIdx,
77 Scalar /*rhoRefOil*/,
78 Scalar /*rhoRefGas*/,
79 Scalar rhoRefWater)
80 { waterReferenceDensity_[regionIdx] = rhoRefWater; }
81
85 void setReferencePressure(unsigned regionIdx, Scalar p)
86 { waterReferencePressure_[regionIdx] = p; }
87
91 void setViscosity(unsigned regionIdx, Scalar muw, Scalar waterViscosibility = 0.0)
92 {
93 waterViscosity_[regionIdx] = muw;
94 waterViscosibility_[regionIdx] = waterViscosibility;
95 }
96
100 void setCompressibility(unsigned regionIdx, Scalar waterCompressibility)
101 { waterCompressibility_[regionIdx] = waterCompressibility; }
102
106 void setReferenceFormationVolumeFactor(unsigned regionIdx, Scalar BwRef)
107 { waterReferenceFormationVolumeFactor_[regionIdx] = BwRef; }
108
112 void setViscosibility(unsigned regionIdx, Scalar muComp)
113 { waterViscosibility_[regionIdx] = muComp; }
114
118 void initEnd()
119 { }
120
124 unsigned numRegions() const
125 { return waterReferenceDensity_.size(); }
126
130 template <class Evaluation>
131 Evaluation internalEnergy(unsigned,
132 const Evaluation&,
133 const Evaluation&,
134 const Evaluation&,
135 const Evaluation&) const
136 {
137 throw std::runtime_error("Requested the enthalpy of water but the thermal option is not enabled");
138 }
139
140
144 template <class Evaluation>
145 Evaluation saturatedViscosity(unsigned regionIdx,
146 const Evaluation& temperature,
147 const Evaluation& pressure,
148 const Evaluation& saltconcentration) const
149 {
150 Scalar BwMuwRef = waterViscosity_[regionIdx]*waterReferenceFormationVolumeFactor_[regionIdx];
151 const Evaluation& bw = saturatedInverseFormationVolumeFactor(regionIdx, temperature, pressure, saltconcentration);
152
153 Scalar pRef = waterReferencePressure_[regionIdx];
154 const Evaluation& Y =
155 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
156 * (pressure - pRef);
157 return BwMuwRef*bw/(1 + Y*(1 + Y/2));
158 }
162 template <class Evaluation>
163 Evaluation viscosity(unsigned regionIdx,
164 const Evaluation& temperature,
165 const Evaluation& pressure,
166 const Evaluation& Rsw,
167 const Evaluation& saltconcentration) const
168 {
169 Scalar BwMuwRef = waterViscosity_[regionIdx]*waterReferenceFormationVolumeFactor_[regionIdx];
170 const Evaluation& bw = inverseFormationVolumeFactor(regionIdx, temperature, pressure, Rsw, saltconcentration);
171
172 Scalar pRef = waterReferencePressure_[regionIdx];
173 const Evaluation& Y =
174 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
175 * (pressure - pRef);
176 return BwMuwRef*bw/(1 + Y*(1 + Y/2));
177 }
178
182 template <class Evaluation>
183 Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx,
184 const Evaluation& temperature,
185 const Evaluation& pressure,
186 const Evaluation& saltconcentration) const
187 {
188 Evaluation Rsw = 0.0;
189 return inverseFormationVolumeFactor(regionIdx, temperature, pressure, Rsw, saltconcentration);
190 }
191
195 template <class Evaluation>
196 Evaluation inverseFormationVolumeFactor(unsigned regionIdx,
197 const Evaluation& /*temperature*/,
198 const Evaluation& pressure,
199 const Evaluation& /*Rsw*/,
200 const Evaluation& /*saltconcentration*/) const
201 {
202 Scalar pRef = waterReferencePressure_[regionIdx];
203 const Evaluation& X = waterCompressibility_[regionIdx]*(pressure - pRef);
204
205 Scalar BwRef = waterReferenceFormationVolumeFactor_[regionIdx];
206
207 // TODO (?): consider the salt concentration of the brine
208 return (1.0 + X*(1.0 + X/2.0))/BwRef;
209 }
210
211 template <class Evaluation>
212 void inverseBAndMu(Evaluation& bw, Evaluation& muW, unsigned regionIdx,
213 const Evaluation& /*temperature*/,
214 const Evaluation& pressure,
215 const Evaluation& /*Rsw*/,
216 const Evaluation& /*saltconcentration*/) const{
217 inverseBAndMu(bw, muW, regionIdx,pressure);
218 }
219
220 template <class Evaluation>
221 void inverseBAndMu(Evaluation& bw, Evaluation& muW, unsigned regionIdx,
222 const Evaluation& pressure) const
223 {
224 Scalar pRef = waterReferencePressure_[regionIdx];
225 const Evaluation& X = waterCompressibility_[regionIdx]*(pressure - pRef);
226
227 Scalar BwRef = waterReferenceFormationVolumeFactor_[regionIdx];
228
229 // TODO (?): consider the salt concentration of the brine
230 bw = (1.0 + X*(1.0 + X/2.0))/BwRef;
231
232 Scalar BwMuwRef = waterViscosity_[regionIdx]*BwRef;
233
234 const Evaluation& Y =
235 (waterCompressibility_[regionIdx] - waterViscosibility_[regionIdx])
236 * (pressure - pRef);
237 muW = BwMuwRef*bw/(1 + Y*(1 + Y/2));
238 }
239
246 template <class Evaluation>
247 Evaluation saturationPressure(unsigned /*regionIdx*/,
248 const Evaluation& /*temperature*/,
249 const Evaluation& /*Rs*/,
250 const Evaluation& /*saltconcentration*/) const
251 { return 0.0; /* this is dead water, so there isn't any meaningful saturation pressure! */ }
252
253 template <class Evaluation>
254 Evaluation diffusionCoefficient(const Evaluation& /*temperature*/,
255 const Evaluation& /*pressure*/,
256 unsigned /*compIdx*/) const
257 {
258 throw std::runtime_error("Not implemented: The PVT model does not provide a diffusionCoefficient()");
259 }
260
264 template <class Evaluation>
265 Evaluation saturatedGasDissolutionFactor(unsigned /*regionIdx*/,
266 const Evaluation& /*temperature*/,
267 const Evaluation& /*pressure*/,
268 const Evaluation& /*saltconcentration*/) const
269 { return 0.0; /* this is dead water! */ }
270
271 Scalar waterReferenceDensity(unsigned regionIdx) const
272 { return waterReferenceDensity_[regionIdx]; }
273
274 const std::vector<Scalar>& waterReferencePressure() const
275 { return waterReferencePressure_; }
276
277 const std::vector<Scalar>& waterReferenceFormationVolumeFactor() const
278 { return waterReferenceFormationVolumeFactor_; }
279
280 const std::vector<Scalar>& waterCompressibility() const
281 { return waterCompressibility_; }
282
283 const std::vector<Scalar>& waterViscosity() const
284 { return waterViscosity_; }
285
286 const std::vector<Scalar>& waterViscosibility() const
287 { return waterViscosibility_; }
288
289private:
290 std::vector<Scalar> waterReferenceDensity_;
291 std::vector<Scalar> waterReferencePressure_;
292 std::vector<Scalar> waterReferenceFormationVolumeFactor_;
293 std::vector<Scalar> waterCompressibility_;
294 std::vector<Scalar> waterViscosity_;
295 std::vector<Scalar> waterViscosibility_;
296};
297
298} // namespace Opm
299
300#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:106
void setViscosibility(unsigned regionIdx, Scalar muComp)
Set the water "viscosibility" [1/ (Pa s)].
Definition: ConstantCompressibilityWaterPvt.hpp:112
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:247
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:196
void setCompressibility(unsigned regionIdx, Scalar waterCompressibility)
Set the compressibility of the water phase.
Definition: ConstantCompressibilityWaterPvt.hpp:100
void setReferenceDensities(unsigned regionIdx, Scalar, Scalar, Scalar rhoRefWater)
Set the water reference density [kg / m^3].
Definition: ConstantCompressibilityWaterPvt.hpp:76
unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition: ConstantCompressibilityWaterPvt.hpp:124
void setReferencePressure(unsigned regionIdx, Scalar p)
Set the water reference pressure [Pa].
Definition: ConstantCompressibilityWaterPvt.hpp:85
void initEnd()
Finish initializing the water phase PVT properties.
Definition: ConstantCompressibilityWaterPvt.hpp:118
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:163
void setViscosity(unsigned regionIdx, Scalar muw, Scalar waterViscosibility=0.0)
Set the viscosity and "viscosibility" of the water phase.
Definition: ConstantCompressibilityWaterPvt.hpp:91
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:183
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:145
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:131
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:265
Definition: EclipseState.hpp:55
Definition: Schedule.hpp:130
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30