opm-simulators
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>
60class FlowGenericProblem
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 return rockFraction_[timeIdx][elementIdx];
151 };
152
157 void setPorosity(Scalar poro, unsigned elementIdx, unsigned timeIdx = 0)
158 { referencePorosity_[timeIdx][elementIdx] = poro; }
159
163 Scalar solventSaturation(unsigned elemIdx) const;
164
168 Scalar solventRsw(unsigned elemIdx) const;
169
173 Scalar polymerConcentration(unsigned elemIdx) const;
174
178 // TODO: remove this function if not called
179 Scalar polymerMolecularWeight(const unsigned elemIdx) const;
180
184 Scalar microbialConcentration(unsigned elemIdx) const;
185
189 Scalar oxygenConcentration(unsigned elemIdx) const;
190
194 Scalar ureaConcentration(unsigned elemIdx) const;
195
199 Scalar biofilmVolumeFraction(unsigned elemIdx) const;
200
204 Scalar calciteVolumeFraction(unsigned elemIdx) const;
205
209 unsigned pvtRegionIndex(unsigned elemIdx) const;
210
211// const std::vector<int>& pvtRegionArray() const
212// { return pvtnum_; }
213
217 unsigned satnumRegionIndex(unsigned elemIdx) const;
218
222 unsigned miscnumRegionIndex(unsigned elemIdx) const;
223
227 unsigned plmixnumRegionIndex(unsigned elemIdx) const;
228
232 Scalar maxPolymerAdsorption(unsigned elemIdx) const;
233
241 Scalar rockCompressibility(unsigned globalSpaceIdx) const;
242
251 Scalar porosity(unsigned globalSpaceIdx, unsigned timeIdx) const;
252
253 bool vapparsActive(int episodeIdx) const;
254
255 int numPressurePointsEquil() const
256 { return numPressurePointsEquil_; }
257
258 bool operator==(const FlowGenericProblem& rhs) const;
259
260 template<class Serializer>
261 void serializeOp(Serializer& serializer)
262 {
263 serializer(maxOilSaturation_);
264 serializer(polymer_);
265 serializer(maxWaterSaturation_);
266 serializer(minRefPressure_);
267 serializer(overburdenPressure_);
268 serializer(solventSaturation_);
269 serializer(solventRsw_);
270 serializer(bioeffects_);
271 }
272
273protected:
274 void initFluidSystem_();
275
279 bool shouldWriteOutput() const
280 { return true; }
281
289 { return false; }
290
291 bool beginEpisode_(bool enableExperiments,
292 int episodeIdx);
293 void beginTimeStep_(bool enableExperiments,
294 int episodeIdx,
295 int timeStepIndex,
296 Scalar startTime,
297 Scalar time,
298 Scalar timeStepSize,
299 Scalar endTime);
300
301 void readRockParameters_(const std::vector<Scalar>& cellCenterDepths,
302 std::function<std::array<int,3>(const unsigned)> ijkIndex);
303 void readRockCompactionParameters_();
304
305 void readBlackoilExtentionsInitialConditions_(std::size_t numDof,
306 bool enableSolvent,
307 bool enablePolymer,
308 bool enablePolymerMolarWeight,
309 bool enableBioeffects,
310 bool enableMICP);
311
312 void updatePvtnum_();
313 void updateSatnum_();
314 void updateMiscnum_();
315 void updatePlmixnum_();
316
317 const EclipseState& eclState_;
318 const Schedule& schedule_;
319 const GridView& gridView_;
320
321 static inline std::string briefDescription_;
322 std::array<std::vector<Scalar>, 2> referencePorosity_;
323 std::array<std::vector<Scalar>, 2> rockFraction_;
324
325 std::vector<int> pvtnum_;
326 std::vector<unsigned short> satnum_;
327 std::vector<unsigned short> miscnum_;
328 std::vector<unsigned short> plmixnum_;
329
330 std::vector<RockParams> rockParams_;
331 std::vector<unsigned short> rockTableIdx_;
332 std::vector<TabulatedTwoDFunction> rockCompPoroMultWc_;
333 std::vector<TabulatedTwoDFunction> rockCompTransMultWc_;
334 std::vector<TabulatedFunction> rockCompPoroMult_;
335 std::vector<TabulatedFunction> rockCompTransMult_;
336 std::vector<Scalar> rockCompTransMultVal_;
337
339 std::vector<Scalar> maxOilSaturation_;
340 std::vector<Scalar> maxWaterSaturation_;
341 std::vector<Scalar> minRefPressure_;
342 std::vector<Scalar> overburdenPressure_;
343 std::vector<Scalar> solventSaturation_;
344 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 enableDriftCompensationTemp_{false};
358 bool explicitRockCompaction_;
359
360 // To lookup origin cell indices
361 using Grid = std::remove_cv_t< typename std::remove_reference<decltype(gridView_.grid())>::type>;
362 using LookUpData = Opm::LookUpData<Grid,GridView>;
363 const LookUpData lookUpData_;
364
365 // \brief Function to assign the origin cell index on level zero, for a cell on the leaf grid view.
366 //
367 // For CpGrid with local grid refinement, the field property of a cell on the leaf
368 // is inherited from its parent or equivalent (when has no parent) cell on level zero.
369 std::function<unsigned(unsigned)> lookupIdxOnLevelZeroAssigner_()
370 {
371 return [this](unsigned elemIdx) { return lookUpData_.template getFieldPropIdx<Grid>(elemIdx);};
372 }
373
374private:
375 template<class T>
376 void updateNum(const std::string& name, std::vector<T>& numbers, std::size_t num_regions);
377};
378
379} // namespace Opm
380
381#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:157
Scalar maxPolymerAdsorption(unsigned elemIdx) const
Returns the max polymer adsorption value.
Definition FlowGenericProblem_impl.hpp:733
unsigned pvtRegionIndex(unsigned elemIdx) const
Returns the index the relevant PVT region given a cell index.
Definition FlowGenericProblem_impl.hpp:692
Scalar oxygenConcentration(unsigned elemIdx) const
Returns the initial oxygen concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:645
Scalar microbialConcentration(unsigned elemIdx) const
Returns the initial microbial concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:633
static std::string briefDescription()
Returns a human readable description of the problem for the help message.
Definition FlowGenericProblem_impl.hpp:130
Scalar solventRsw(unsigned elemIdx) const
Returns the initial solvent dissolved in water for a given a cell index.
Definition FlowGenericProblem_impl.hpp:596
Scalar overburdenPressure(unsigned elementIdx) const
Get the pressure of the overburden.
Definition FlowGenericProblem_impl.hpp:574
Scalar porosity(unsigned globalSpaceIdx, unsigned timeIdx) const
Direct indexed access to the porosity.
Definition FlowGenericProblem_impl.hpp:338
Scalar rockCompressibility(unsigned globalSpaceIdx) const
Direct access to rock compressibility.
Definition FlowGenericProblem_impl.hpp:323
unsigned miscnumRegionIndex(unsigned elemIdx) const
Returns the index the relevant MISC region given a cell index.
Definition FlowGenericProblem_impl.hpp:712
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:702
Scalar maxWaterSaturation(unsigned globalDofIdx) const
Returns an element's historic maximum water phase saturation that was observed during the simulation.
Definition FlowGenericProblem_impl.hpp:552
Scalar rockFraction(unsigned elementIdx, unsigned timeIdx) const
Returns the rockFraction of an element.
Definition FlowGenericProblem.hpp:149
Scalar calciteVolumeFraction(unsigned elemIdx) const
Returns the initial calcite volume fraction for a given a cell index.
Definition FlowGenericProblem_impl.hpp:681
unsigned plmixnumRegionIndex(unsigned elemIdx) const
Returns the index the relevant PLMIXNUM (for polymer module) region given a cell index.
Definition FlowGenericProblem_impl.hpp:722
Scalar solventSaturation(unsigned elemIdx) const
Returns the initial solvent saturation for a given a cell index.
Definition FlowGenericProblem_impl.hpp:585
Scalar polymerMolecularWeight(const unsigned elemIdx) const
Returns the polymer molecule weight for a given cell index.
Definition FlowGenericProblem_impl.hpp:621
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:563
Scalar ureaConcentration(unsigned elemIdx) const
Returns the initial urea concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:657
bool shouldWriteOutput() const
Always returns true.
Definition FlowGenericProblem.hpp:279
static void setBriefDescription(const std::string &msg)
Specifies the string returned by briefDescription().
Definition FlowGenericProblem.hpp:97
Scalar biofilmVolumeFraction(unsigned elemIdx) const
Returns the initial biofilm volume fraction for a given a cell index.
Definition FlowGenericProblem_impl.hpp:669
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:115
bool shouldWriteRestartFile() const
Returns true if an eWoms restart file should be written to disk.
Definition FlowGenericProblem.hpp:288
Scalar polymerConcentration(unsigned elemIdx) const
Returns the initial polymer concentration for a given a cell index.
Definition FlowGenericProblem_impl.hpp:609
Definition FlowGenericProblem.hpp:51
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilbioeffectsmodules.hh:45
Struct holding MICP extension data.
Definition SolutionContainers.hpp:57
Struct holding CO2 and H2 extension data.
Definition SolutionContainers.hpp:84
Definition FlowGenericProblem.hpp:67
Struct holding polymer extension data.
Definition SolutionContainers.hpp:37