DUNE-FEM (unstable)

space.hh
1#ifndef DUNE_FEM_SPACE_FINITEVOLUME_SPACE_HH
2#define DUNE_FEM_SPACE_FINITEVOLUME_SPACE_HH
3
4#include <dune/grid/common/gridenums.hh>
5
6#include <dune/fem/common/hybrid.hh>
7#include <dune/fem/function/localfunction/average.hh>
8#include <dune/fem/gridpart/common/capabilities.hh>
9#include <dune/fem/space/common/capabilities.hh>
10#include <dune/fem/space/common/commoperations.hh>
11#include <dune/fem/space/common/defaultcommhandler.hh>
12#include <dune/fem/space/common/localrestrictprolong.hh>
13#include <dune/fem/space/discontinuousgalerkin/generic.hh>
14#include <dune/fem/space/mapper/codimensionmapper.hh>
15#include <dune/fem/space/shapefunctionset/selectcaching.hh>
16
17#include "basisfunctionsets.hh"
18#include "declaration.hh"
19#include "interpolation.hh"
20
21namespace Dune
22{
23
24 namespace Fem
25 {
26
27 // FiniteVolumeSpaceTraits
28 // -----------------------
29
30 template< class FunctionSpace, class GridPart, int codim, class Storage >
31 struct FiniteVolumeSpaceTraits
32 {
33 typedef FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > DiscreteFunctionSpaceType;
34
35 typedef GridPart GridPartType;
36 typedef GridFunctionSpace< GridPartType, FunctionSpace > FunctionSpaceType;
37
38 static const int codimension = codim;
39
40 typedef typename GridPartType::template Codim< codimension >::EntityType EntityType;
41 typedef FiniteVolumeBasisFunctionSets< EntityType, typename FunctionSpaceType::RangeType > BasisFunctionSetsType;
42 typedef typename BasisFunctionSetsType::BasisFunctionSetType BasisFunctionSetType;
43
44 typedef CodimensionMapper< GridPartType, codimension > BlockMapperType;
45 typedef Hybrid::IndexRange< int, FunctionSpaceType::dimRange > LocalBlockIndices;
46
47 template <class DiscreteFunction, class Operation = DFCommunicationOperation::Copy >
48 struct CommDataHandle
49 {
50 typedef Operation OperationType;
51 typedef DefaultCommunicationHandler< DiscreteFunction, Operation > Type;
52 };
53 };
54
55
56
57 // FiniteVolumeSpace
58 // -----------------
59
60 template< class FunctionSpace, class GridPart, int codim = 0, class Storage = SimpleStorage >
61 class FiniteVolumeSpace
62 : public GenericDiscontinuousGalerkinSpace< FiniteVolumeSpaceTraits< FunctionSpace, GridPart, codim, Storage > >
63 {
64 typedef FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > ThisType;
65 typedef GenericDiscontinuousGalerkinSpace< FiniteVolumeSpaceTraits< FunctionSpace, GridPart, codim, Storage > > BaseType;
66
67 public:
69 static const int polynomialOrder = 0;
70
72 typedef typename BaseType::GridPartType GridPartType;
74 typedef typename BaseType::EntityType EntityType;
75
77 typedef typename BaseType::BasisFunctionSetsType BasisFunctionSetsType;
79 typedef typename BaseType::BasisFunctionSetType BasisFunctionSetType;
80
82 typedef FiniteVolumeLocalInterpolation< GridPart, typename BasisFunctionSetType::RangeType > InterpolationType;
83
84 explicit FiniteVolumeSpace ( GridPartType &gridPart,
85 const InterfaceType commInterface = InteriorBorder_All_Interface,
86 const CommunicationDirection commDirection = ForwardCommunication )
87 : BaseType( gridPart, BasisFunctionSetsType(), commInterface, commDirection )
88 {}
89
91 static DFSpaceIdentifier type () { return FiniteVolumeSpace_id; }
92
94 InterpolationType interpolation () const
95 {
96 return InterpolationType();
97 }
98
100 static InterpolationType interpolation ( const EntityType &entity )
101 {
102 return InterpolationType();
103 }
104
106 void extendSize( const size_t extension ) { this->blockMapper().extendSize( extension ); }
107 };
108
109
111 template <class FunctionSpaceImp, class GridPartImp, int polOrd,
112 class BaseFunctionStorageImp,
113 class VolumeQuadratureImp>
115 FiniteVolumeSpace< FunctionSpaceImp, GridPartImp, polOrd, BaseFunctionStorageImp >,
116 VolumeQuadratureImp >
118 FiniteVolumeSpace< FunctionSpaceImp, GridPartImp, polOrd, BaseFunctionStorageImp >, VolumeQuadratureImp, false /* refElemScaling */>
119 {
120 typedef FiniteVolumeSpace< FunctionSpaceImp, GridPartImp, polOrd, BaseFunctionStorageImp > DiscreteFunctionSpaceImp;
121 typedef LocalMassMatrixImplementationDgOrthoNormal< DiscreteFunctionSpaceImp, VolumeQuadratureImp, false /* refElemScaling */ > BaseType;
122 public:
123 using BaseType :: BaseType;
124 };
125
126
127
128
129
130 // DefaultLocalRestrictProlong for FiniteVolumeSpace
131 // -------------------------------------------------
132
133 template< class FunctionSpace, class GridPart, int codim, class Storage >
134 class DefaultLocalRestrictProlong< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
135 : public ConstantLocalRestrictProlong< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
136 {
137 public:
138 DefaultLocalRestrictProlong ( const FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > & )
139 {}
140 };
141
142
143
144 namespace Capabilities
145 {
146
147 template< class FunctionSpace, class GridPart, int codim, class Storage >
148 struct hasFixedPolynomialOrder< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
149 {
150 static const bool v = true;
151 };
152
153 template< class FunctionSpace, class GridPart, int codim, class Storage >
154 struct hasStaticPolynomialOrder< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
155 {
156 static const bool v = true;
157 static const int order = 0;
158 };
159
160 template< class FunctionSpace, class GridPart, int codim, class Storage >
161 struct isContinuous< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
162 {
163 static const bool v = false;
164 };
165
166 template< class FunctionSpace, class GridPart, int codim, class Storage >
167 struct isHierarchic< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
168 {
169 static const bool v = true;
170 };
171
172 template< class FunctionSpace, class GridPart, int codim, class Storage >
173 struct isLocalized< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
174 {
175 static const bool v = false; // there is no method 'shapeFunctionSet( const EntityType & )'
176 };
177
178 template< class FunctionSpace, class GridPart, int codim, class Storage >
179 struct isAdaptive< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
180 {
181 static const bool v = true;
182 };
183
184 template< class FunctionSpace, class GridPart, int codim, class Storage >
185 struct threadSafe< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
186 {
187 static const bool v = false;
188 };
189
190 template< class FunctionSpace, class GridPart, int codim, class Storage >
191 struct viewThreadSafe< FiniteVolumeSpace< FunctionSpace, GridPart, codim, Storage > >
192 {
193 static const bool v = true;
194 };
195
196 } // namespace Capabilities
197
198 } // namespace Fem
199
200} // namespace Dune
201
202#endif // #ifndef DUNE_FEM_SPACE_FINITEVOLUME_SPACE_HH
DFSpaceIdentifier type() const
return type identifier of discrete function space
Definition: discretefunctionspace.hh:294
A vector valued function space.
Definition: functionspace.hh:60
BaseType::GridPartType GridPartType
type of underlying grid part
Definition: generic.hh:40
BlockMapperType & blockMapper() const
get a reference to the block mapper
Definition: generic.hh:124
BaseType::EntityType EntityType
type of entity of codimension 0
Definition: generic.hh:42
BaseType::BasisFunctionSetType BasisFunctionSetType
type of basis function set of this space
Definition: generic.hh:49
Traits::BasisFunctionSetsType BasisFunctionSetsType
basis function sets
Definition: generic.hh:47
DG Local Mass Matrix for arbitrary spaces.
Definition: localmassmatrix.hh:939
Local Mass Matrix for arbitrary spaces.
Definition: localmassmatrix.hh:919
DFSpaceIdentifier
enumerator for identification of spaces
Definition: discretefunctionspace.hh:95
@ FiniteVolumeSpace_id
id for Finite Volume Space
Definition: discretefunctionspace.hh:99
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:170
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:86
@ ForwardCommunication
communicate as given in InterfaceType
Definition: gridenums.hh:171
@ InteriorBorder_All_Interface
send interior and border, receive all entities
Definition: gridenums.hh:88
Dune namespace.
Definition: alignedallocator.hh:13
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 27, 22:29, 2024)