dune-fem 2.8.0
Loading...
Searching...
No Matches
geometrygridpart.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_GEOMETRYGRIDPART_HH
2#define DUNE_FEM_GRIDPART_GEOMETRYGRIDPART_HH
3
4#include <cassert>
5
6#include <dune/common/version.hh>
7
9
17
26
27namespace Dune
28{
29
30 namespace Fem
31 {
32
33 // Internal Forward Declarations
34 // -----------------------------
35
36 template< class GridFunctionType >
37 class GeometryGridPart;
38
39
40
41 // GeometryGridPartData
42 // --------------------
43
44 template< class GridFunction >
46 {
47 typedef GridFunction GridFunctionType;
48
49 GeometryGridPartData () noexcept = default;
50 GeometryGridPartData ( const GridFunctionType &gridFunction ) noexcept : gridFunction_( &gridFunction ) {}
51
52 operator const GridFunctionType & () const { assert( gridFunction_ ); return *gridFunction_; }
53
54 private:
55 const GridFunctionType *gridFunction_ = nullptr;
56 };
57
58
59
60 // GeometryGridPartFamily
61 // ----------------------
62
63 template< class GridFunction >
65 {
66 typedef GridFunction GridFunctionType;
67 typedef typename GridFunction::RangeFieldType ctype;
68
69 static const int dimension = GridFunction::GridPartType::dimension;
70 static const int dimensionworld = GridFunction::FunctionSpaceType::dimRange;
71
73
74 struct Traits
75 {
77 typedef GridFunction GridFunctionType;
78 typedef typename GridFunctionType::GridPartType HostGridPartType;
79
81
82 template< int codim >
83 struct Codim
84 {
85 typedef typename HostGridPartType::template Codim< codim >::LocalGeometryType LocalGeometry;
86
87 template< int mydim, int cdim, class Grid >
88 using GeometryImpl = std::conditional_t< mydim == dimension, ElementGeometryImpl, CompositeGeometry< ElementGeometryImpl, LocalGeometry > >;
89
90 typedef Dune::Geometry< dimension - codim, dimensionworld, const GridPartFamily, GeometryImpl > Geometry;
91
92 typedef Dune::Entity< codim, dimension, const GridPartFamily, GeometryGridPartEntity > Entity;
93 typedef typename HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed;
94 };
95
98
99 typedef Dune::Intersection< const GridPartFamily, IntersectionImplType > LeafIntersection;
100 typedef Dune::Intersection< const GridPartFamily, IntersectionImplType > LevelIntersection;
101
102 typedef Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator;
103 typedef Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator;
104
105 typedef Dune::EntityIterator< 0, const GridPartFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator;
106 };
107
108 template< int codim >
109 struct Codim
110 : public Traits::template Codim< codim >
111 {};
112
115
117 };
118
119
120
121 // GeometryGridPartTraits
122 // ----------------------
123
124 template< class GridFunction >
126 {
127 typedef GridFunction GridFunctionType;
128 typedef typename GridFunction::GridPartType HostGridPartType;
132
134
135 static const int dimension = GridFunction::GridPartType::dimension;
136 static const int dimensionworld = GridFunction::FunctionSpaceType::dimRange;
137
140
142
143 typedef typename HostGridPartType::GridType GridType;
144
145 static const PartitionIteratorType indexSetPartitionType = HostGridPartType::indexSetPartitionType;
146 static const InterfaceType indexSetInterfaceType = HostGridPartType::indexSetInterfaceType;
147
150 typedef IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType;
151
152 template< int codim >
153 struct Codim
154 {
155 typedef typename GridFamily::Traits::template Codim< codim >::Geometry GeometryType;
156 typedef typename GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType;
157
158 typedef typename GridFamily::Traits::template Codim< codim >::Entity EntityType;
159 typedef typename GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType;
160
161 template< PartitionIteratorType pitype >
163 {
164 typedef EntityIterator< codim, const GridFamily, IdIterator< codim, pitype, const GridFamily > > IteratorType;
165 };
166 };
167
168 typedef typename HostGridPartType::CollectiveCommunicationType CollectiveCommunicationType;
169 static const bool conforming = HostGridPartType::Traits::conforming;
170 };
171
172
173
174 // GeometryGridPart
175 // ----------------
176
177 template< class GridFunction >
179 : public GridPartInterface< GeometryGridPartTraits< GridFunction > >
180 , public AddGridView< GeometryGridPartTraits< GridFunction > >
181 {
182 public:
183 typedef GridFunction GridFunctionType;
185
186 private:
190
191 public:
192 typedef typename GridFunctionType::GridPartType HostGridPartType;
193 typedef typename BaseType::GridType GridType;
199
200 // the interface takes this from the grid
201 static const int dimensionworld = GridFunction::FunctionSpaceType::dimRange;
202
203 template< int codim >
204 struct Codim
205 : public BaseType::template Codim< codim >
206 {};
207
208 explicit GeometryGridPart ( const GridFunctionType &gridFunction )
209 : AddGridViewType( this ),
210 gridFunction_( gridFunction ),
211 indexSet_( hostGridPart().indexSet() )
212 {}
213
216 gridFunction_( gridFunction ),
217 indexSet_( hostGridPart().indexSet() )
218 {}
219
221 {}
222
223 const GridType &grid () const
224 {
225 return hostGridPart().grid();
226 }
227
229 {
230 return const_cast< GridType & >( hostGridPart().grid() );
231 }
232
233 const IndexSetType &indexSet () const
234 {
235 return indexSet_;
236 }
237
238 template< int codim >
239 typename Codim< codim >::IteratorType
240 begin () const
241 {
242 return begin< codim, InteriorBorder_Partition >();
243 }
244
245 template< int codim, PartitionIteratorType pitype >
246 typename Codim< codim >::template Partition< pitype >::IteratorType
247 begin () const
248 {
249 return IdIterator< codim, pitype, const GridFamily >( gridFunction_, hostGridPart().template begin< codim, pitype >() );
250 }
251
252 template< int codim >
253 typename Codim< codim >::IteratorType
254 end () const
255 {
256 return end< codim, InteriorBorder_Partition >();
257 }
258
259 template< int codim, PartitionIteratorType pitype >
260 typename Codim< codim >::template Partition< pitype >::IteratorType
261 end () const
262 {
263 return IdIterator< codim, pitype, const GridFamily >( gridFunction_, hostGridPart().template end< codim, pitype >() );
264 }
265
266 int level () const
267 {
268 return hostGridPart().level();
269 }
270
272 {
274 }
275
277 {
279 }
280
281 int boundaryId ( const IntersectionType &intersection ) const
282 {
283 return hostGridPart().boundaryId( intersection.impl().hostIntersection() );
284 }
285
286 int sequence () const
287 {
288 return hostGridPart().sequence();
289 }
290
291 const CollectiveCommunicationType &comm () const { return hostGridPart().comm(); }
292
293 template< class DataHandle, class Data >
294 void communicate ( CommDataHandleIF< DataHandle, Data > &handle,
295 InterfaceType iftype, CommunicationDirection dir ) const
296 {
297 typedef CommDataHandleIF< DataHandle, Data > HostHandleType;
298 GeometryGridPartDataHandle< GridFamily, HostHandleType > handleWrapper( handle, gridFunction_ );
299 hostGridPart().communicate( handleWrapper, iftype, dir );
300 }
301
302 // convert a grid entity to a grid part entity ("Gurke!")
303 template< class Entity >
304 MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType >
305 convert ( const Entity &entity ) const
306 {
307 // create a grid part entity from a given grid entity
308 typedef typename Codim< Entity::codimension >::EntityType EntityType;
309 typedef typename EntityType::Implementation Implementation;
310 typedef MakeableInterfaceObject< EntityType > EntityObj;
311 // here, grid part information can be passed, if necessary
312 return EntityObj( Implementation( gridFunction_, entity ) );
313 }
314 template < class EntitySeed >
315 typename Codim< EntitySeed::codimension >::EntityType
316 entity ( const EntitySeed &seed ) const
317 {
318 return convert( hostGridPart().entity(seed) );
319 }
320
322 {
323 return gridFunction_.gridPart();
324 }
325
326 private:
327 const GridFunctionType &gridFunction_;
328 IndexSetType indexSet_;
329 };
330
331
332
333 // GridEntityAccess for GeometryGridPartEntity
334 // -------------------------------------------
335
336 template< int codim, int dim, class GridFamily >
337 struct GridEntityAccess< Dune::Entity< codim, dim, GridFamily, GeometryGridPartEntity > >
338 {
339 typedef Dune::Entity< codim, dim, GridFamily, GeometryGridPartEntity > EntityType;
341 typedef typename HostAccessType::GridEntityType GridEntityType;
342
343 static const GridEntityType &gridEntity ( const EntityType &entity )
344 {
345 return HostAccessType::gridEntity( entity.impl().hostEntity() );
346 }
347 };
348
349
350
351 // EntitySearch for GeometryGridPart
352 // ---------------------------------
353
354 template< class GridFunction, int codim, PartitionIteratorType partition >
355 class EntitySearch< GeometryGridPart< GridFunction >, codim, partition >
356 : public DefaultEntitySearch< GeometryGridPart< GridFunction >, codim, partition >
357 {
360
361 public:
363
364 explicit EntitySearch ( const GridPartType &gridPart )
365 : BaseType( gridPart )
366 {}
367 };
368
369 } // namespace Fem
370
371} // namespace Dune
372
373#endif // #ifndef DUNE_FEM_GRIDPART_GEOMETRYGRIDPART_HH
Definition: bindguard.hh:11
Definition: deaditerator.hh:49
Definition: deaditerator.hh:158
Definition: entitysearch.hh:25
Definition: entitysearch.hh:131
Interface for the GridPart classes A GridPart class allows to access only a specific subset of a grid...
Definition: gridpart.hh:77
PoliciesType::GridViewType GridViewType
Definition: gridpart.hh:113
Traits::CollectiveCommunicationType CollectiveCommunicationType
Collective communication.
Definition: gridpart.hh:96
Traits::GridType GridType
type of Grid implementation
Definition: gridpart.hh:90
IntersectionIteratorType::Intersection IntersectionType
type of Intersection
Definition: gridpart.hh:111
Traits::IntersectionIteratorType IntersectionIteratorType
type of IntersectionIterator
Definition: gridpart.hh:108
Traits::IndexSetType IndexSetType
Index set implementation.
Definition: gridpart.hh:93
Definition: gridpart.hh:396
Definition: gridpart.hh:419
const GridViewType & gridView() const
Definition: gridpart.hh:441
Definition: gridpart2gridview.hh:69
MetaTwistUtility forwards the twist calls to the TwistUtility of the underlying HostTwistUtility.
Definition: metatwistutility.hh:22
Definition: sharedgeometry.hh:20
Definition: geometrygridpart.hh:181
void communicate(CommDataHandleIF< DataHandle, Data > &handle, InterfaceType iftype, CommunicationDirection dir) const
Definition: geometrygridpart.hh:294
GeometryGridPart(const GridFunctionType &gridFunction)
Definition: geometrygridpart.hh:208
GridFunctionType::GridPartType HostGridPartType
Definition: geometrygridpart.hh:192
~GeometryGridPart()
Definition: geometrygridpart.hh:220
static const int dimensionworld
Definition: geometrygridpart.hh:201
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
Definition: geometrygridpart.hh:276
Codim< codim >::IteratorType begin() const
Definition: geometrygridpart.hh:240
BaseType::IntersectionIteratorType IntersectionIteratorType
Definition: geometrygridpart.hh:195
GridType & grid()
Definition: geometrygridpart.hh:228
int boundaryId(const IntersectionType &intersection) const
Definition: geometrygridpart.hh:281
const GridType & grid() const
Definition: geometrygridpart.hh:223
GeometryGridPart(const GridFunctionType &gridFunction, const GridViewType *gridView)
Definition: geometrygridpart.hh:214
BaseType::IndexSetType IndexSetType
Definition: geometrygridpart.hh:194
Codim< codim >::template Partition< pitype >::IteratorType begin() const
Definition: geometrygridpart.hh:247
const CollectiveCommunicationType & comm() const
Definition: geometrygridpart.hh:291
Codim< codim >::IteratorType end() const
Definition: geometrygridpart.hh:254
BaseType::IntersectionType IntersectionType
Definition: geometrygridpart.hh:196
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
Definition: geometrygridpart.hh:271
BaseType::GridViewType GridViewType
Definition: geometrygridpart.hh:198
Codim< codim >::template Partition< pitype >::IteratorType end() const
Definition: geometrygridpart.hh:261
BaseType::CollectiveCommunicationType CollectiveCommunicationType
Definition: geometrygridpart.hh:197
GridFunction GridFunctionType
Definition: geometrygridpart.hh:183
int sequence() const
Definition: geometrygridpart.hh:286
AddGridView< GeometryGridPartTraits< GridFunction > > AddGridViewType
Definition: geometrygridpart.hh:184
const IndexSetType & indexSet() const
Definition: geometrygridpart.hh:233
BaseType::GridType GridType
Definition: geometrygridpart.hh:193
const HostGridPartType & hostGridPart() const
Definition: geometrygridpart.hh:321
int level() const
Definition: geometrygridpart.hh:266
MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType > convert(const Entity &entity) const
Definition: geometrygridpart.hh:305
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
Definition: geometrygridpart.hh:316
Definition: geometrygridpart.hh:46
GeometryGridPartData() noexcept=default
GridFunction GridFunctionType
Definition: geometrygridpart.hh:47
Definition: geometrygridpart.hh:65
Traits::LeafIntersectionIterator LeafIntersectionIterator
Definition: geometrygridpart.hh:113
Traits::HierarchicIterator HierarchicIterator
Definition: geometrygridpart.hh:116
static const int dimensionworld
Definition: geometrygridpart.hh:70
GridFunction GridFunctionType
Definition: geometrygridpart.hh:66
GeometryGridPartFamily< GridFunction > GridPartFamily
Definition: geometrygridpart.hh:72
Traits::LevelIntersectionIterator LevelIntersectionIterator
Definition: geometrygridpart.hh:114
GridFunction::RangeFieldType ctype
Definition: geometrygridpart.hh:67
static const int dimension
Definition: geometrygridpart.hh:69
Definition: geometrygridpart.hh:75
SharedGeometry< LocalFunctionGeometry< ConstLocalFunction< GridFunction > > > ElementGeometryImpl
Definition: geometrygridpart.hh:80
Dune::Intersection< const GridPartFamily, IntersectionImplType > LeafIntersection
Definition: geometrygridpart.hh:99
Dune::Intersection< const GridPartFamily, IntersectionImplType > LevelIntersection
Definition: geometrygridpart.hh:100
Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator
Definition: geometrygridpart.hh:102
DeadIntersectionIterator< const GridPartFamily > IntersectionIteratorImplType
Definition: geometrygridpart.hh:97
Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator
Definition: geometrygridpart.hh:103
DeadIntersection< const GridPartFamily > IntersectionImplType
Definition: geometrygridpart.hh:96
GridFunctionType::GridPartType HostGridPartType
Definition: geometrygridpart.hh:78
GridFunction GridFunctionType
Definition: geometrygridpart.hh:77
GeometryGridPartData< GridFunction > ExtraData
Definition: geometrygridpart.hh:76
Dune::EntityIterator< 0, const GridPartFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator
Definition: geometrygridpart.hh:105
Definition: geometrygridpart.hh:84
std::conditional_t< mydim==dimension, ElementGeometryImpl, CompositeGeometry< ElementGeometryImpl, LocalGeometry > > GeometryImpl
Definition: geometrygridpart.hh:88
Dune::Geometry< dimension - codim, dimensionworld, const GridPartFamily, GeometryImpl > Geometry
Definition: geometrygridpart.hh:90
Dune::Entity< codim, dimension, const GridPartFamily, GeometryGridPartEntity > Entity
Definition: geometrygridpart.hh:92
HostGridPartType::template Codim< codim >::LocalGeometryType LocalGeometry
Definition: geometrygridpart.hh:85
HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed
Definition: geometrygridpart.hh:93
Definition: geometrygridpart.hh:111
Definition: geometrygridpart.hh:126
static const bool conforming
Definition: geometrygridpart.hh:169
GeometryGridPartFamily< GridFunction > GridPartFamily
Definition: geometrygridpart.hh:130
IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType
Definition: geometrygridpart.hh:150
HostGridPartType::GridType GridType
Definition: geometrygridpart.hh:143
GeometryGridPartIntersectionIterator< const GridFamily > IntersectionIteratorImplType
Definition: geometrygridpart.hh:148
IdIndexSet< const GridPartFamily > IndexSetType
Definition: geometrygridpart.hh:141
GeometryGridPart< GridFunction > GridPartType
Definition: geometrygridpart.hh:129
GeometryGridPartIntersection< const GridFamily > IntersectionImplType
Definition: geometrygridpart.hh:149
GridFunction::GridPartType HostGridPartType
Definition: geometrygridpart.hh:128
GridFunction GridFunctionType
Definition: geometrygridpart.hh:127
static const PartitionIteratorType indexSetPartitionType
Definition: geometrygridpart.hh:145
HostGridPartType::CollectiveCommunicationType CollectiveCommunicationType
Definition: geometrygridpart.hh:168
GridPart2GridViewImpl< GridPartType > GridViewType
Definition: geometrygridpart.hh:133
static const InterfaceType indexSetInterfaceType
Definition: geometrygridpart.hh:146
MetaTwistUtility< typename HostGridPartType::TwistUtilityType > TwistUtilityType
type of twist utility
Definition: geometrygridpart.hh:139
static const int dimension
Definition: geometrygridpart.hh:135
GeometryGridPartFamily< GridFunction > GridFamily
Definition: geometrygridpart.hh:131
static const int dimensionworld
Definition: geometrygridpart.hh:136
Definition: geometrygridpart.hh:154
GridFamily::Traits::template Codim< codim >::Entity EntityType
Definition: geometrygridpart.hh:158
GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType
Definition: geometrygridpart.hh:156
GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType
Definition: geometrygridpart.hh:159
GridFamily::Traits::template Codim< codim >::Geometry GeometryType
Definition: geometrygridpart.hh:155
Definition: geometrygridpart.hh:163
EntityIterator< codim, const GridFamily, IdIterator< codim, pitype, const GridFamily > > IteratorType
Definition: geometrygridpart.hh:164
Definition: geometrygridpart.hh:206
static const GridEntityType & gridEntity(const EntityType &entity)
Definition: geometrygridpart.hh:343
GridEntityAccess< typename EntityType::Implementation::HostEntityType > HostAccessType
Definition: geometrygridpart.hh:340
HostAccessType::GridEntityType GridEntityType
Definition: geometrygridpart.hh:341
Dune::Entity< codim, dim, GridFamily, GeometryGridPartEntity > EntityType
Definition: geometrygridpart.hh:339
BaseType::GridPartType GridPartType
Definition: geometrygridpart.hh:362
EntitySearch(const GridPartType &gridPart)
Definition: geometrygridpart.hh:364
Definition: gridpart/geometrygridpart/datahandle.hh:22
Definition: geometrygridpart/intersection.hh:23
Definition: geometrygridpart/intersectioniterator.hh:21
Definition: idgridpart/indexset.hh:260
Definition: idgridpart/iterator.hh:21