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