My Project
Loading...
Searching...
No Matches
FlowGenericProblem.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*/
28#ifndef OPM_FLOW_GENERIC_PROBLEM_HPP
29#define OPM_FLOW_GENERIC_PROBLEM_HPP
30
31#include <opm/material/common/UniformXTabulated2DFunction.hpp>
32#include <opm/material/common/Tabulated1DFunction.hpp>
33
35
36#include <array>
37#include <cstddef>
38#include <functional>
39#include <string>
40#include <vector>
41
42namespace Dune {
43class ParameterTree;
44}
45
46namespace Opm {
47
48class Deck;
49class EclipseState;
50class Schedule;
51template<typename Grid, typename GridView> class LookUpData;
52
59template<class GridView, class FluidSystem>
61{
62public:
63 using Scalar = typename FluidSystem::Scalar;
64 using TabulatedTwoDFunction = UniformXTabulated2DFunction<Scalar>;
65 using TabulatedFunction = Tabulated1DFunction<Scalar>;
66
67 struct RockParams {
68 Scalar referencePressure;
69 Scalar compressibility;
70 };
71
72 FlowGenericProblem(const EclipseState& eclState,
73 const Schedule& schedule,
74 const GridView& gridView);
75
76
77 static FlowGenericProblem serializationTestObject(const EclipseState& eclState,
78 const Schedule& schedule,
79 const GridView& gridView);
80
84 static std::string helpPreamble(int,
85 const char **argv);
86
90 static std::string briefDescription();
91
97 static void setBriefDescription(const std::string& msg)
98 { briefDescription_ = msg; }
99
109 Scalar maxWaterSaturation(unsigned globalDofIdx) const;
110
120 Scalar minOilPressure(unsigned globalDofIdx) const;
121
127 Scalar overburdenPressure(unsigned elementIdx) const;
128
137 Scalar referencePorosity(unsigned elementIdx, unsigned timeIdx) const
138 { return referencePorosity_[timeIdx][elementIdx]; }
139
140
149 Scalar rockFraction(unsigned elementIdx, unsigned timeIdx) const;
150
155 void setPorosity(Scalar poro, unsigned elementIdx, unsigned timeIdx = 0)
156 { referencePorosity_[timeIdx][elementIdx] = poro; }
157
161 Scalar solventSaturation(unsigned elemIdx) const;
162
166 Scalar solventRsw(unsigned elemIdx) const;
167
171 Scalar drsdtcon(unsigned elemIdx, int episodeIdx) const;
172
176 Scalar polymerConcentration(unsigned elemIdx) const;
177
181 // TODO: remove this function if not called
182 Scalar polymerMolecularWeight(const unsigned elemIdx) const;
183
187 Scalar microbialConcentration(unsigned elemIdx) const;
188
192 Scalar oxygenConcentration(unsigned elemIdx) const;
193
197 Scalar ureaConcentration(unsigned elemIdx) const;
198
202 Scalar biofilmConcentration(unsigned elemIdx) const;
203
207 Scalar calciteConcentration(unsigned elemIdx) const;
208
212 unsigned pvtRegionIndex(unsigned elemIdx) const;
213
214// const std::vector<int>& pvtRegionArray() const
215// { return pvtnum_; }
216
220 unsigned satnumRegionIndex(unsigned elemIdx) const;
221
225 unsigned miscnumRegionIndex(unsigned elemIdx) const;
226
230 unsigned plmixnumRegionIndex(unsigned elemIdx) const;
231
235 Scalar maxPolymerAdsorption(unsigned elemIdx) const;
236
244 Scalar rockCompressibility(unsigned globalSpaceIdx) const;
245
254 Scalar porosity(unsigned globalSpaceIdx, unsigned timeIdx) const;
255
256 bool vapparsActive(int episodeIdx) const;
257
258 int numPressurePointsEquil() const
259 { return numPressurePointsEquil_; }
260
261 bool operator==(const FlowGenericProblem& rhs) const;
262
263 template<class Serializer>
264 void serializeOp(Serializer& serializer)
265 {
266 serializer(maxOilSaturation_);
267 serializer(polymer_);
268 serializer(maxWaterSaturation_);
269 serializer(minRefPressure_);
270 serializer(overburdenPressure_);
271 serializer(solventSaturation_);
272 serializer(solventRsw_);
273 serializer(micp_);
274 }
275
276protected:
277 void initFluidSystem_();
278
282 bool shouldWriteOutput() const
283 { return true; }
284
292 { return false; }
293
294 bool beginEpisode_(bool enableExperiments,
295 int episodeIdx);
296 void beginTimeStep_(bool enableExperiments,
297 int episodeIdx,
298 int timeStepIndex,
299 Scalar startTime,
300 Scalar time,
301 Scalar timeStepSize,
302 Scalar endTime);
303
304 void readRockParameters_(const std::vector<Scalar>& cellCenterDepths,
305 std::function<std::array<int,3>(const unsigned)> ijkIndex);
306 void readRockCompactionParameters_();
307
308 void readBlackoilExtentionsInitialConditions_(std::size_t numDof,
309 bool enableSolvent,
310 bool enablePolymer,
311 bool enablePolymerMolarWeight,
312 bool enableMICP);
313
314 void updatePvtnum_();
315 void updateSatnum_();
316 void updateMiscnum_();
317 void updatePlmixnum_();
318
319 const EclipseState& eclState_;
320 const Schedule& schedule_;
321 const GridView& gridView_;
322
323 static inline std::string briefDescription_;
324 std::array<std::vector<Scalar>, 2> referencePorosity_;
325
326 std::vector<int> pvtnum_;
327 std::vector<unsigned short> satnum_;
328 std::vector<unsigned short> miscnum_;
329 std::vector<unsigned short> plmixnum_;
330
331 std::vector<RockParams> rockParams_;
332 std::vector<unsigned short> rockTableIdx_;
333 std::vector<TabulatedTwoDFunction> rockCompPoroMultWc_;
334 std::vector<TabulatedTwoDFunction> rockCompTransMultWc_;
335 std::vector<TabulatedFunction> rockCompPoroMult_;
336 std::vector<TabulatedFunction> rockCompTransMult_;
337 std::vector<Scalar> rockCompTransMultVal_;
338
340 std::vector<Scalar> maxOilSaturation_;
341 std::vector<Scalar> maxWaterSaturation_;
342 std::vector<Scalar> minRefPressure_;
343 std::vector<Scalar> overburdenPressure_;
344 std::vector<Scalar> solventSaturation_;
345 std::vector<Scalar> solventRsw_;
347
348 // time stepping parameters
349 bool enableTuning_;
350 Scalar initialTimeStepSize_;
351 Scalar maxTimeStepAfterWellEvent_;
352
353 // equilibration parameters
354 int numPressurePointsEquil_;
355
356 bool enableDriftCompensation_;
357 bool explicitRockCompaction_;
358
359 // To lookup origin cell indices
360 using Grid = std::remove_cv_t< typename std::remove_reference<decltype(gridView_.grid())>::type>;
362 const LookUpData lookUpData_;
363
364 // \brief Function to assign the origin cell index on level zero, for a cell on the leaf grid view.
365 //
366 // For CpGrid with local grid refinement, the field property of a cell on the leaf
367 // is inherited from its parent or equivalent (when has no parent) cell on level zero.
368 std::function<unsigned(unsigned)> lookupIdxOnLevelZeroAssigner_()
369 {
370 return [this](unsigned elemIdx) { return lookUpData_.template getFieldPropIdx<Grid>(elemIdx);};
371 }
372
373private:
374 template<class T>
375 void updateNum(const std::string& name, std::vector<T>& numbers, std::size_t num_regions);
376};
377
378} // namespace Opm
379
380#endif // OPM_FLOW_GENERIC_PROBLEM_HPP
This problem simulates an input file given in the data format used by the commercial ECLiPSE simulato...
This problem simulates an input file given in the data format used by the commercial ECLiPSE simulato...
Definition FlowGenericProblem.hpp:61
void setPorosity(Scalar poro, unsigned elementIdx, unsigned timeIdx=0)
Sets the porosity of an element.
Definition FlowGenericProblem.hpp:155
Scalar maxPolymerAdsorption(unsigned elemIdx) const
Returns the max polymer adsorption value.
Definition FlowGenericProblem_impl.hpp:731
unsigned pvtRegionIndex(unsigned elemIdx) const
Returns the index the relevant PVT region given a cell index.
Definition FlowGenericProblem_impl.hpp:690
Scalar oxygenConcentration(unsigned elemIdx) const
Returns the initial oxygen concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:643
Scalar microbialConcentration(unsigned elemIdx) const
Returns the initial microbial concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:631
static std::string briefDescription()
Returns a human readable description of the problem for the help message.
Definition FlowGenericProblem_impl.hpp:126
Scalar solventRsw(unsigned elemIdx) const
Returns the initial solvent dissolved in water for a given a cell index.
Definition FlowGenericProblem_impl.hpp:594
Scalar overburdenPressure(unsigned elementIdx) const
Get the pressure of the overburden.
Definition FlowGenericProblem_impl.hpp:572
Scalar porosity(unsigned globalSpaceIdx, unsigned timeIdx) const
Direct indexed access to the porosity.
Definition FlowGenericProblem_impl.hpp:327
Scalar rockCompressibility(unsigned globalSpaceIdx) const
Direct access to rock compressibility.
Definition FlowGenericProblem_impl.hpp:312
unsigned miscnumRegionIndex(unsigned elemIdx) const
Returns the index the relevant MISC region given a cell index.
Definition FlowGenericProblem_impl.hpp:710
Scalar referencePorosity(unsigned elementIdx, unsigned timeIdx) const
Returns the porosity of an element.
Definition FlowGenericProblem.hpp:137
unsigned satnumRegionIndex(unsigned elemIdx) const
Returns the index the relevant saturation function region given a cell index.
Definition FlowGenericProblem_impl.hpp:700
Scalar rockFraction(unsigned elementIdx, unsigned timeIdx) const
Returns the rockFraction of an element.
Definition FlowGenericProblem_impl.hpp:335
Scalar maxWaterSaturation(unsigned globalDofIdx) const
Returns an element's historic maximum water phase saturation that was observed during the simulation.
Definition FlowGenericProblem_impl.hpp:550
unsigned plmixnumRegionIndex(unsigned elemIdx) const
Returns the index the relevant PLMIXNUM (for polymer module) region given a cell index.
Definition FlowGenericProblem_impl.hpp:720
Scalar solventSaturation(unsigned elemIdx) const
Returns the initial solvent saturation for a given a cell index.
Definition FlowGenericProblem_impl.hpp:583
Scalar polymerMolecularWeight(const unsigned elemIdx) const
Returns the polymer molecule weight for a given cell index.
Definition FlowGenericProblem_impl.hpp:619
Scalar biofilmConcentration(unsigned elemIdx) const
Returns the initial biofilm concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:667
Scalar drsdtcon(unsigned elemIdx, int episodeIdx) const
Returns the dynamic drsdt convective mixing value.
Scalar minOilPressure(unsigned globalDofIdx) const
Returns an element's historic minimum pressure of the oil phase that was observed during the simulati...
Definition FlowGenericProblem_impl.hpp:561
Scalar calciteConcentration(unsigned elemIdx) const
Returns the initial calcite concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:679
Scalar ureaConcentration(unsigned elemIdx) const
Returns the initial urea concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:655
bool shouldWriteOutput() const
Always returns true.
Definition FlowGenericProblem.hpp:282
static void setBriefDescription(const std::string &msg)
Specifies the string returned by briefDescription()
Definition FlowGenericProblem.hpp:97
static std::string helpPreamble(int, const char **argv)
Returns the string that is printed before the list of command line parameters in the help message.
Definition FlowGenericProblem_impl.hpp:111
bool shouldWriteRestartFile() const
Returns true if an eWoms restart file should be written to disk.
Definition FlowGenericProblem.hpp:291
Scalar polymerConcentration(unsigned elemIdx) const
Returns the initial polymer concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:607
Definition FlowGenericProblem.hpp:51
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilboundaryratevector.hh:37
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242
Definition FlowGenericProblem.hpp:67
Struct holding MICP extension data.
Definition SolutionContainers.hpp:57
Struct holding polymer extension data.
Definition SolutionContainers.hpp:37