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