opm-simulators
FlowBaseProblemProperties.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_BASE_PROBLEM_PROPERTIES_HPP
29 #define OPM_FLOW_BASE_PROBLEM_PROPERTIES_HPP
30 
31 
32 #include <opm/material/thermal/EclThermalLawManager.hpp>
33 
36 
44 
45 #if HAVE_DAMARIS
47 #endif
48 
49 #include <tuple>
50 
51 namespace Opm::Properties {
52 
53 namespace TTag {
54 
56  using InheritsFrom = std::tuple<CpGridVanguard>;
57 };
58 
59 }
60 
61 template<class TypeTag, class MyTypeTag>
63 
64 
65 
66 // The class which deals with ECL aquifers
67 template<class TypeTag, class MyTypeTag>
68 struct AquiferModel { using type = UndefinedProperty; };
69 
70 // Specify whether API tracking should be enabled (replaces PVT regions).
71 // TODO: This is not yet implemented
72 template<class TypeTag, class MyTypeTag>
74 
75 // Enable the additional checks even if compiled in debug mode (i.e., with the NDEBUG
76 // macro undefined). Next to a slightly better performance, this also eliminates some
77 // print statements in debug mode.
78 template<class TypeTag, class MyTypeTag>
80 
81 template<class TypeTag, class MyTypeTag>
83 
84 template<class TypeTag, class MyTypeTag>
86 
87 // Avoid using ElementContext-based code if possible.
88 template<class TypeTag, class MyTypeTag>
90 
91 // if thermal flux boundaries are enabled an effort is made to preserve the initial
92 // thermal gradient specified via the TEMPVD keyword
93 template<class TypeTag, class MyTypeTag>
95 
96 // The class which deals with wells
97 template<class TypeTag, class MyTypeTag>
98 struct WellModel { using type = UndefinedProperty; };
99 
100 // Tracer might be moved to the blackoil side
101 // The class that deals with the tracer
102 template<class TypeTag, class MyTypeTag>
103 struct TracerModel { using type = UndefinedProperty; };
104 
105 template <class TypeTag>
106 struct TracerModel<TypeTag, TTag::FlowBaseProblem>
107 { using type = ::Opm::TracerModel<TypeTag>; };
108 
109 template<class TypeTag, class MyTypeTag>
111 template <class TypeTag>
112 struct TemperatureModel<TypeTag, TTag::FlowBaseProblem>
114 
115 // Select the element centered finite volume method as spatial discretization
116 template<class TypeTag>
117 struct SpatialDiscretizationSplice<TypeTag, TTag::FlowBaseProblem>
118 { using type = TTag::EcfvDiscretization; };
119 
120 // use automatic differentiation to linearize the system of PDEs
121 template<class TypeTag>
122 struct LocalLinearizerSplice<TypeTag, TTag::FlowBaseProblem>
124 
125 template<class TypeTag>
126 struct BaseDiscretizationType<TypeTag, TTag::FlowBaseProblem>
128 
129 template<class TypeTag>
130 struct DiscreteFunction<TypeTag, TTag::FlowBaseProblem>
131 {
133  using type = typename BaseDiscretization::BlockVectorWrapper;
134 };
135 
136 template<class TypeTag>
137 struct GridView<TypeTag, TTag::FlowBaseProblem>
139 
140 // Set the material law for energy storage in rock
141 template<class TypeTag>
142 struct SolidEnergyLaw<TypeTag, TTag::FlowBaseProblem>
143 {
144 private:
147 
148 public:
149  using EclThermalLawManager = ::Opm::EclThermalLawManager<Scalar, FluidSystem>;
150 
151  using type = typename EclThermalLawManager::SolidEnergyLaw;
152 };
153 
154 // Set the material law for thermal conduction
155 template<class TypeTag>
156 struct ThermalConductionLaw<TypeTag, TTag::FlowBaseProblem>
157 {
158 private:
161 
162 public:
163  using EclThermalLawManager = ::Opm::EclThermalLawManager<Scalar, FluidSystem>;
164 
165  using type = typename EclThermalLawManager::ThermalConductionLaw;
166 };
167 
168 // use a slightly faster stencil class because it does not need the normals and
169 // the integration points of intersections
170 template<class TypeTag>
171 struct Stencil<TypeTag, TTag::FlowBaseProblem>
172 {
173 private:
176 
177 public:
178  using type = EcfvStencil<Scalar,
179  GridView,
180  /*needIntegrationPos=*/false,
181  /*needNormal=*/false>;
182 };
183 
184 // by default use the dummy aquifer "model"
185 template<class TypeTag>
186 struct AquiferModel<TypeTag, TTag::FlowBaseProblem> {
188 };
189 
190 // Enable diffusion
191 template<class TypeTag>
192 struct EnableDiffusion<TypeTag, TTag::FlowBaseProblem>
193 { static constexpr bool value = true; };
194 
195 // Disable dispersion
196 template<class TypeTag>
197 struct EnableDispersion<TypeTag, TTag::FlowBaseProblem>
198 { static constexpr bool value = false; };
199 
200 // Enable Convective Mixing
201 template<class TypeTag>
202 struct EnableConvectiveMixing<TypeTag, TTag::FlowBaseProblem>
203 { static constexpr bool value = true; };
204 
205 // disable API tracking
206 template<class TypeTag>
207 struct EnableApiTracking<TypeTag, TTag::FlowBaseProblem>
208 { static constexpr bool value = false; };
209 
210 template<class TypeTag>
211 struct EnableMech<TypeTag, TTag::FlowBaseProblem>
212 { static constexpr bool value = false; };
213 
214 template<class TypeTag>
215 struct EnableGeochemistry<TypeTag, TTag::FlowBaseProblem>
216 { static constexpr bool value = false; };
217 
218 // disable all extensions supported by black oil model. this should not really be
219 // necessary but it makes things a bit more explicit
220 template<class TypeTag>
221 struct EnablePolymer<TypeTag, TTag::FlowBaseProblem>
222 { static constexpr bool value = false; };
223 
224 template<class TypeTag>
225 struct EnableSolvent<TypeTag, TTag::FlowBaseProblem>
226 { static constexpr bool value = false; };
227 
228 template<class TypeTag>
229 struct EnableFoam<TypeTag, TTag::FlowBaseProblem>
230 { static constexpr bool value = false; };
231 
232 template<class TypeTag>
233 struct EnableExtbo<TypeTag, TTag::FlowBaseProblem>
234 { static constexpr bool value = false; };
235 
236 template<class TypeTag>
237 struct EnableBioeffects<TypeTag, TTag::FlowBaseProblem>
238 { static constexpr bool value = false; };
239 
240 // disable thermal flux boundaries by default
241 template<class TypeTag>
242 struct EnableThermalFluxBoundaries<TypeTag, TTag::FlowBaseProblem>
243 { static constexpr bool value = false; };
244 
245 // By default, simulators derived from the FlowBaseProblem are production simulators,
246 // i.e., experimental features must be explicitly enabled at compile time
247 template<class TypeTag>
248 struct EnableExperiments<TypeTag, TTag::FlowBaseProblem>
249 { static constexpr bool value = false; };
250 
251 // By default, we enable the debugging checks if we're compiled in debug mode
252 template<class TypeTag>
253 struct EnableDebuggingChecks<TypeTag, TTag::FlowBaseProblem>
254 { static constexpr bool value = true; };
255 
256 template<class TypeTag>
257 struct EnableHysteresis<TypeTag, TTag::FlowBaseProblem>
258 { static constexpr bool value = true; };
259 
260 template<class TypeTag>
261 struct EnableEndpointScaling<TypeTag, TTag::FlowBaseProblem>
262 { static constexpr bool value = true; };
263 
264 // Most modules are implemented only in terms of element contexts,
265 // so this must default to false.
266 template<class TypeTag>
267 struct AvoidElementContext<TypeTag, TTag::FlowBaseProblem>
268 { static constexpr bool value = false; };
269 
270 } // namespace Opm::Properties
271 
272 #endif // OPM_BASE_FLOW_PROBLEM_PROPERTIES_HPP
The material law for thermal conduction.
Definition: multiphasebaseproperties.hh:71
Definition: FlowBaseProblemProperties.hpp:103
Definition: fvbasediscretization.hh:349
The class describing the stencil of the spatial discretization.
Definition: fvbaseproperties.hh:70
A class which handles tracers as specified in by ECL.
Definition: blackoilproperties.hh:86
Enable dispersive fluxes?
Definition: multiphasebaseproperties.hh:95
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(...))
Definition: propertysystem.hh:233
Definition: FlowBaseProblemProperties.hpp:62
Definition: FlowBaseProblemProperties.hpp:68
Definition: FlowBaseProblemProperties.hpp:110
Definition: ecfvproperties.hh:41
Collects necessary output values and pass it to opm-common&#39;s ECL output.
Enable the ECL-blackoil extension for polymer.
Definition: blackoilproperties.hh:51
The base class for the finite volume discretization schemes.
Definition: fvbasediscretization.hh:87
Represents the stencil (finite volume geometry) of a single element in the ECFV discretization.
Definition: ecfvstencil.hh:68
The base class for the element-centered finite-volume discretization scheme.
Definition: FlowBaseProblemProperties.hpp:73
Definition: FlowBaseProblemProperties.hpp:55
This is a "dummy" gradient calculator which does not do anything.
This problem simulates an input file given in the data format used by the commercial ECLiPSE simulato...
a tag to mark properties as undefined
Definition: propertysystem.hh:38
The base class for the finite volume discretization schemes without adaptation.
Definition: fvbasediscretization.hh:84
A class which handles tracers as specified in by ECL.
Definition: TracerModel.hpp:69
A class which handles sequential implicit solution of the energy equation as specified in by TEMP...
Definition: TemperatureModel.hpp:175
Definition: FlowBaseProblemProperties.hpp:94
Enable the ECL-blackoil extension for solvents. ("Second gas")
Definition: blackoilproperties.hh:43
Enable the ECL-blackoil extension for foam.
Definition: blackoilproperties.hh:63
Definition: fvbaseadlocallinearizer.hh:58
Enable the ECL-blackoil extension for extended BO. ("Second gas" - alternative approach) ...
Definition: blackoilproperties.hh:47
Definition: FlowBaseProblemProperties.hpp:98
Definition: FlowBaseProblemProperties.hpp:82
Enable the ECL-blackoil extension for bioeffects (biofilm/MICP)
Definition: blackoilproperties.hh:83
Helper class for grid instantiation of ECL file-format using problems.
Enable blackoil simulation with geochemical species.
Definition: blackoilproperties.hh:90
Collects necessary output values and pass them to Damaris server processes.
Definition: fvbaseproperties.hh:55
The base class which specifies the API of aquifer models.
Definition: BaseAquiferModel.hpp:49
Specify if experimental features should be enabled or not.
Definition: fvbaseproperties.hh:245
The base class which specifies the API of aquifer models.
The Opm property system, traits with inheritance.
Definition: basicproperties.hh:107
Definition: FlowBaseProblemProperties.hpp:79
Definition: FlowBaseProblemProperties.hpp:89
Definition: fvbasediscretization.hh:272
A class which handles sequential implicit solution of the energy equation as specified in by TEMP...
The material law for the energy stored in the solid matrix.
Definition: multiphasebaseproperties.hh:63
Definition: blackoilmodel.hh:80
The splice to be used for the spatial discretization.
Definition: multiphasebaseproperties.hh:39
Enable diffusive fluxes?
Definition: multiphasebaseproperties.hh:91
Definition: fvbaseproperties.hh:77
Enable convective mixing?
Definition: multiphasebaseproperties.hh:99
Definition: FlowBaseProblemProperties.hpp:85