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