version 3.11-dev
Loading...
Searching...
No Matches
pq1bubble.hh
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// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12
13#ifndef DUMUX_DISCRETIZATION_PQ1BUBBLE_HH
14#define DUMUX_DISCRETIZATION_PQ1BUBBLE_HH
15
16#include <concepts>
17#include <type_traits>
18
21#include <dumux/common/concepts/variables_.hh>
23#include <dumux/common/typetraits/boundary_.hh>
24
26#include <dumux/assembly/cvfelocalresidual_.hh>
27
32
42
48
50
51namespace Dumux::Properties {
52
54// Create new type tags
55namespace TTag {
56struct PQ1BubbleBase { using InheritsFrom = std::tuple<GridProperties>; };
57struct PQ1BubbleFVBase { using InheritsFrom = std::tuple<FiniteVolumeModel,PQ1BubbleBase>; };
58struct PQ1BubbleModel { using InheritsFrom = std::tuple<PQ1BubbleFVBase>; };
59struct PQ1BubbleHybridModel { using InheritsFrom = std::tuple<PQ1BubbleBase>; };
60struct PQ1BubbleFEModel { using InheritsFrom = std::tuple<PQ1BubbleBase>; };
61} // end namespace TTag
62
64template<class TypeTag>
65struct GridGeometry<TypeTag, TTag::PQ1BubbleModel>
66{
67private:
68 static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>();
71public:
73};
74
76template<class TypeTag>
77struct GridGeometry<TypeTag, TTag::PQ1BubbleHybridModel>
78{
79private:
80 static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>();
83 using QuadTraits = PQ1BubbleQuadratureTraits<GridView>;
84 // For hybrid scheme we use two bubble functions on cubes
85 // when only using one bubble function stability issues can arise, especially for coupled problems
86 static constexpr std::size_t numCubeBubbles = 2;
88public:
90};
91
93template<class TypeTag>
94struct GridGeometry<TypeTag, TTag::PQ1BubbleFEModel>
95{
96private:
97 static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridGeometryCache>();
100public:
102};
103
104template<class TypeTag>
105struct GridVariables<TypeTag, TTag::PQ1BubbleFEModel>
106{
107private:
109 // ToDo: Do not determine enableCache by EnableGridVolumeVariablesCache
110 static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridVolumeVariablesCache>();
116public:
118};
119
121template<class TypeTag>
122struct EnableGridVolumeVariablesCache<TypeTag, TTag::PQ1BubbleFEModel> { static constexpr bool value = false; };
123
125template<class TypeTag>
126struct SolutionVector<TypeTag, TTag::PQ1BubbleFEModel> { using type = Dune::BlockVector<GetPropType<TypeTag, Properties::PrimaryVariables>>; };
127
129template<class TypeTag>
130struct JacobianMatrix<TypeTag, TTag::PQ1BubbleFEModel>
131{
132private:
135 using MatrixBlock = typename Dune::FieldMatrix<Scalar, numEq, numEq>;
136public:
138};
139
141template<class TypeTag>
152
154template<class TypeTag>
155struct FluxVariablesCache<TypeTag, TTag::PQ1BubbleModel>
156{
157private:
160public:
162};
163
165template<class TypeTag>
166struct GridFluxVariablesCache<TypeTag, TTag::PQ1BubbleModel>
167{
168private:
169 static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridFluxVariablesCache>();
171
173 using FluxVariablesCache = GetPropTypeOr<TypeTag,
174 Properties::FluxVariablesCache, FluxVariablesCaching::EmptyCache<Scalar>
175 >;
176public:
178};
179
181template<class TypeTag>
196
198template<class TypeTag>
199struct EnableGridGeometryCache<TypeTag, TTag::PQ1BubbleHybridModel> { static constexpr bool value = false; };
200
202template<class TypeTag>
203struct EnableGridVolumeVariablesCache<TypeTag, TTag::PQ1BubbleHybridModel> { static constexpr bool value = false; };
204
206template<class TypeTag>
207struct SolutionVector<TypeTag, TTag::PQ1BubbleHybridModel> { using type = Dune::BlockVector<GetPropType<TypeTag, Properties::PrimaryVariables>>; };
208
210template<class TypeTag>
211struct JacobianMatrix<TypeTag, TTag::PQ1BubbleHybridModel>
212{
213private:
216 using MatrixBlock = typename Dune::FieldMatrix<Scalar, numEq, numEq>;
217public:
219};
220
222template<class TypeTag>
223struct ElementBoundaryTypes<TypeTag, TTag::PQ1BubbleBase>
224{
225private:
228 using BoundaryTypes = typename ProblemTraits<Problem>::BoundaryTypes;
229public:
230 // Check if problem has new boundaryTypes interface
231 // then use ElementIntersectionBoundaryTypes
232 using type = std::conditional_t<
233 Dumux::Detail::hasProblemBoundaryTypesForFaceFunction<Problem, typename GG::LocalView>(),
236 >;
237};
238
239} // namespace Dumux::Properties
240
241namespace Dumux::Detail {
242
243template<class Problem>
245{
246private:
248public:
249 using GridGeometry = GG;
250 // Determine BoundaryTypes dependent on the used problem interface, either boundaryTypes(element, scv) or boundaryTypes(element, boundaryFace)
251 using BoundaryTypes = Detail::BoundaryTypes<Problem, typename GG::LocalView>::type;
252};
253
254template<class TypeTag>
255concept PQ1BubbleModel = std::is_same_v<
258>;
259
260template<class T>
262
263template<PQ1BubbleFVModel TypeTag>
265{
266private:
268 static constexpr bool usesGeneralGridVariables =
269 Dumux::Concept::GridVariables<GV> && !Dumux::Concept::FVGridVariables<GV>;
270public:
271 using type = std::conditional_t<usesGeneralGridVariables,
272 Dumux::Experimental::CVFELocalResidual<TypeTag>,
274};
275
276template<class T>
278
279template<PQ1BubbleHybridModel TypeTag>
281{ using type = Dumux::Experimental::CVFELocalResidual<TypeTag>; };
282
283template<class T>
285
286template<PQ1BubbleFEModel TypeTag>
289
290} // end namespace Dumux::Detail
291
292#endif
The element-wise residual for grid-based discretization schemes.
Boundary flag to store e.g. in sub control volume faces.
Interpolation point data related to a local basis.
Definition cvfe/interpolationpointdata.hh:161
This class stores an array of BoundaryTypes objects.
Definition cvfe/elementboundarytypes.hh:29
Flux variables cache class for control-volume finite element schemes. For control-volume finite eleme...
Definition discretization/cvfe/fluxvariablescache.hh:34
The element-wise residual for control-volume finite element schemes.
Definition cvfelocalresidual.hh:60
Base class for the grid local variables.
Definition cvfe/gridvariablescache.hh:44
A class for providing the new update interface of variables. This allows to still use the VolumesVari...
Definition variablesadapter.hh:36
This class stores an array of BoundaryTypes objects. This class is not dependent on the used discreti...
Definition elementboundarytypes.hh:30
The grid variables cache class for hybrid control-volume finite element methods.
Definition cvfe/hybrid/gridvariablescache.hh:50
Base class for the grid local variables.
Definition fem/gridvariablescache.hh:50
The grid variables class for general schemes, storing variables and data.
Definition discretization/gridvariables.hh:27
The element-wise residual for grid-based discretization schemes.
Definition assembly/localresidual.hh:39
Base class for the finite volume geometry vector for pq1bubble schemes This builds up the sub control...
Definition discretization/pq1bubble/fvgridgeometry.hh:145
Definition matrix.hh:20
Defines all properties used in Dumux.
Type traits for problem classes.
Definition pq1bubble.hh:284
Definition pq1bubble.hh:261
Definition pq1bubble.hh:277
Definition pq1bubble.hh:255
Boundary types gathered on an element.
The local element solution class for control-volume finite element methods.
The grid local variables class for control-volume finite element methods.
The grid variables cache class for hybrid control-volume finite element methods.
Classes representing interpolation point data for control-volume finite element schemes.
Calculates the element-wise residual for control-volume finite element schemes.
The default local operator than can be specialized for each discretization scheme.
Flux variables cache class for control-volume finite element schemes.
Global flux variable cache.
The grid variables class for general schemes, storing variables and data.
Base class for the finite volume geometry vector for the pq1bubble method This builds up the sub cont...
Boundary types gathered on an element.
The element variables class.
The grid local variables class for finite element methods.
Classes related to flux variables caching.
Declares properties required for finite-volume models models.
CVFEGridFluxVariablesCacheImpl< Problem, FluxVariablesCache, cachingEnabled, Traits, Detail::ScvfQuadratureRuleOrDefault_t< typename Traits::FluxVariablesCache > > CVFEGridFluxVariablesCache
Flux variable caches on a gridview.
Definition discretization/cvfe/gridfluxvariablescache.hh:59
CVFE::DefaultQuadratureTraits< GridView, ScvRule, ScvfRule, ElementRule, IntersectionRule, BoundaryFaceRule > PQ1BubbleQuadratureTraits
Quadrature rule traits for PQ1Bubble discretization.
Definition discretization/pq1bubble/fvgridgeometry.hh:100
FEGridDiscretization< GV, Traits > PQ1BubbleFEGridDiscretization
Finite element grid discretization for the PQ1Bubble method.
Definition pq1bubble/fegriddiscretization.hh:74
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:310
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition propertysystem.hh:296
typename GetPropOr< TypeTag, Property, T >::type GetPropTypeOr
get the type alias defined in the property or the type T if the property is undefined
Definition propertysystem.hh:303
constexpr bool inheritsFrom()
Return true if the given type tag inherits from the given parent type tag.
Definition propertysystem.hh:262
The available discretization methods in Dumux.
Definition discretization/pq1bubble/geometryhelper.hh:53
Definition cvfelocalresidual.hh:25
typename ProblemGridGeometryHelper< Problem >::type ProblemGridGeometry
Definition common/typetraits/problem.hh:40
Definition method.hh:20
CVFE< CVFEMethods::PQ1Bubble > PQ1Bubble
Definition method.hh:126
Type tag for numeric models.
Definition grid.hh:24
The energy balance equation for a porous solid.
Definition common/properties.hh:26
Finite element grid discretization for the PQ1Bubble method.
Definition cvfe/gridvariablescache.hh:31
CCLocalResidual< TypeTag > type
Definition ccmpfa.hh:185
Definition defaultlocaloperator.hh:19
Detail::BoundaryTypes< Problem, typename GG::LocalView >::type BoundaryTypes
Definition pq1bubble.hh:251
Definition common/typetraits/problem.hh:23
Definition cvfe/hybrid/gridvariablescache.hh:36
Definition fem/gridvariablescache.hh:36
An empty flux variables cache.
Definition fluxvariablescaching.hh:35
The default traits for the hybrid pq1bubble finite volume grid geometry Defines the scv and scvf type...
Definition discretization/pq1bubble/fvgridgeometry.hh:131
Detail::ProblemGridGeometry< Problem > GridGeometry
Definition common/typetraits/problem.hh:50
typename Detail::template ProblemTraits< Problem, typename GridGeometry::DiscretizationMethod >::BoundaryTypes BoundaryTypes
Definition common/typetraits/problem.hh:51
std::conditional_t< Dumux::Detail::hasProblemBoundaryTypesForFaceFunction< Problem, typename GG::LocalView >(), Dumux::ElementIntersectionBoundaryTypes< BoundaryTypes >, Dumux::CVFEElementBoundaryTypes< BoundaryTypes > > type
Definition pq1bubble.hh:232
CVFEFluxVariablesCache< Scalar, GridGeometry > type
Definition pq1bubble.hh:161
CVFEGridFluxVariablesCache< Problem, FluxVariablesCache, enableCache > type
Definition pq1bubble.hh:177
Dumux::Experimental::PQ1BubbleFEGridDiscretization< Scalar, GridView, enableCache > type
Definition pq1bubble.hh:101
PQ1BubbleFVGridGeometry< Scalar, GridView, enableCache, Traits > type
Definition pq1bubble.hh:89
PQ1BubbleFVGridGeometry< Scalar, GridView, enableCache > type
Definition pq1bubble.hh:72
Dumux::Experimental::GridVariables< GG, GVC > type
Definition pq1bubble.hh:117
Dumux::Experimental::GridVariables< GG, GVC > type
Definition pq1bubble.hh:194
Dumux::Detail::CVFE::CVFEGridVariablesCache< Traits, enableCache > type
Definition pq1bubble.hh:150
typename Dune::BCRSMatrix< MatrixBlock > type
Definition pq1bubble.hh:137
typename Dune::BCRSMatrix< MatrixBlock > type
Definition pq1bubble.hh:218
Dune::BlockVector< GetPropType< TypeTag, Properties::PrimaryVariables > > type
Definition pq1bubble.hh:126
Dune::BlockVector< GetPropType< TypeTag, Properties::PrimaryVariables > > type
Definition pq1bubble.hh:207
Definition pq1bubble.hh:56
std::tuple< GridProperties > InheritsFrom
Definition pq1bubble.hh:56
std::tuple< PQ1BubbleBase > InheritsFrom
Definition pq1bubble.hh:60
std::tuple< FiniteVolumeModel, PQ1BubbleBase > InheritsFrom
Definition pq1bubble.hh:57
std::tuple< PQ1BubbleBase > InheritsFrom
Definition pq1bubble.hh:59
Definition pq1bubble.hh:58
std::tuple< PQ1BubbleFVBase > InheritsFrom
Definition pq1bubble.hh:58