dune-fem 2.8.0
Loading...
Searching...
No Matches
geogridpart.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_GEOGRIDPART_HH
2#define DUNE_FEM_GRIDPART_GEOGRIDPART_HH
3
4#include <cassert>
5
6#include <dune/grid/common/gridview.hh>
7
20
21namespace Dune
22{
23
24 namespace Fem
25 {
26
27 // Internal Forward Declarations
28 // -----------------------------
29
30 template< class CoordFunction >
31 class GeoGridPart;
32
33 template< class CoordFunction >
34 struct GeoGridPartFamily;
35
36
37
38 // GeoGridPartData
39 // ---------------
40
41 template< class CoordFunction >
43 {
44 typedef CoordFunction CoordFunctionType;
45
46 GeoGridPartData () = default;
47 GeoGridPartData ( const CoordFunctionType &coordFunction ) : coordFunction_( &coordFunction ) {}
48
49 operator const CoordFunctionType & () const { assert( coordFunction_ ); return *coordFunction_; }
50
51 private:
52 const CoordFunctionType *coordFunction_ = nullptr;
53 };
54
55
56
57 // GeoGridPartFamily
58 // -----------------
59
60 // Traits for dune-grid facades ("Gen-Gurke!")
61 template< class CoordFunction >
63 {
64 typedef typename CoordFunction::RangeFieldType ctype;
65
66 static const int dimension = CoordFunction::GridPartType::dimension;
67 static const int dimensionworld = CoordFunction::FunctionSpaceType::dimRange;
68
70
71 struct Traits
72 {
74 typedef CoordFunction CoordFunctionType;
75
76 typedef typename CoordFunctionType::GridPartType HostGridPartType;
77
78 template< int codim >
79 struct Codim
80 {
81 typedef Dune::Geometry< dimension - codim, dimensionworld, const GridPartFamily, GeoGeometry > Geometry;
82 typedef typename HostGridPartType::template Codim< codim >::LocalGeometryType LocalGeometry;
83
84 typedef Dune::Entity< codim, dimension, const GridPartFamily, GeoEntity > Entity;
85 typedef typename HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed;
86 };
87
90
91 typedef Dune::Intersection< const GridPartFamily, IntersectionImplType > LeafIntersection;
92 typedef Dune::Intersection< const GridPartFamily, IntersectionImplType > LevelIntersection;
93
94 typedef Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator;
95 typedef Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator;
96
97 typedef Dune::EntityIterator< 0, const GridPartFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator;
98 };
99
100 template< int codim >
101 struct Codim
102 : public Traits::template Codim< codim >
103 {};
104
107
109 };
110
111
112
113 template< class CoordFunction >
115 {
119
120 typedef typename GridPartFamily::Traits::HostGridPartType HostGridPartType;
121
122 typedef typename HostGridPartType::GridType GridType;
123
126
128
129 static const PartitionIteratorType indexSetPartitionType = HostGridPartType::indexSetPartitionType;
130 static const InterfaceType indexSetInterfaceType = HostGridPartType::indexSetInterfaceType;
131
134
135 typedef IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType;
136
137 template< int codim >
138 struct Codim
139 {
140 typedef typename GridPartFamily::Traits::template Codim< codim >::Geometry GeometryType;
141 typedef typename GridPartFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType;
142
143 typedef typename GridPartFamily::Traits::template Codim< codim >::Entity EntityType;
144
145 typedef typename GridPartFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType;
146
147 template< PartitionIteratorType pitype >
149 {
150 typedef EntityIterator< codim, const GridPartFamily, IdIterator< codim, pitype, const GridPartFamily > > IteratorType;
151 };
152 };
153
154 typedef typename HostGridPartType::CollectiveCommunicationType CollectiveCommunicationType;
155
156 static const bool conforming = HostGridPartType::Traits::conforming;
157 };
158
159
160
161 // GeoGridPart
162 // -----------
163
164 template< class CoordFunction >
166 : public GridPartInterface< GeoGridPartTraits< CoordFunction > >
167 {
170
172
173 public:
174 typedef typename GridPartFamily::Traits::HostGridPartType HostGridPartType;
175
176 typedef CoordFunction CoordFunctionType;
177
178 typedef typename BaseType::GridType GridType;
183
184 template< int codim >
185 struct Codim
186 : public BaseType::template Codim< codim >
187 {};
188
190 : coordFunction_( coordFunction ),
191 indexSet_( hostGridPart().indexSet() )
192 {}
193
194 const GridType &grid () const
195 {
196 return hostGridPart().grid();
197 }
198
200 {
201 return const_cast< GridType & >( hostGridPart().grid() );
202 }
203
204 const IndexSetType &indexSet () const
205 {
206 return indexSet_;
207 }
208
209 template< int codim >
210 typename Codim< codim >::IteratorType
211 begin () const
212 {
213 return begin< codim, InteriorBorder_Partition >();
214 }
215
216 template< int codim, PartitionIteratorType pitype >
217 typename Codim< codim >::template Partition< pitype >::IteratorType
218 begin () const
219 {
220 return IdIterator< codim, pitype, const GridPartFamily >( coordFunction_, hostGridPart().template begin< codim, pitype >() );
221 }
222
223 template< int codim >
224 typename Codim< codim >::IteratorType
225 end () const
226 {
227 return end< codim, InteriorBorder_Partition >();
228 }
229
230 template< int codim, PartitionIteratorType pitype >
231 typename Codim< codim >::template Partition< pitype >::IteratorType
232 end () const
233 {
234 return IdIterator< codim, pitype, const GridPartFamily >( coordFunction_, hostGridPart().template end< codim, pitype >() );
235 }
236
237 int level () const
238 {
239 return hostGridPart().level();
240 }
241
243 {
245 }
246
248 {
250 }
251
252 int boundaryId ( const IntersectionType &intersection ) const
253 {
254 return hostGridPart().boundaryId( intersection.impl().hostIntersection() );
255 }
256
257 const CollectiveCommunicationType &comm () const { return hostGridPart().comm(); }
258
259 template< class DataHandle, class Data >
260 void communicate ( CommDataHandleIF< DataHandle, Data > &handle,
261 InterfaceType iftype, CommunicationDirection dir ) const
262 {
263 typedef CommDataHandleIF< DataHandle, Data > HostHandleType;
264 GeoDataHandle< GridPartFamily, HostHandleType > handleWrapper( coordFunction_, handle );
265 hostGridPart().communicate( handleWrapper, iftype, dir );
266 }
267
268 template< class LocalFunction >
269 typename Codim< 0 >::EntityType
271 const LocalFunction &localCoordFunction ) const
272 {
273 return typename Codim< 0 >::EntityType::Implementation( entity.impl(), localCoordFunction );
274 }
275
276 template < class EntitySeed >
277 typename Codim< EntitySeed::codimension >::EntityType
278 entity ( const EntitySeed &seed ) const
279 {
281 ::Implementation( coordFunction_, hostGridPart().entity( seed ) );
282 }
283
284 // convert a grid entity to a grid part entity ("Gurke!")
285 template< class Entity >
286 MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType >
287 convert ( const Entity &entity ) const
288 {
289 // create a grid part entity from a given grid entity
290 typedef typename Codim< Entity::codimension >::EntityType EntityType;
291 typedef typename EntityType::Implementation Implementation;
292 typedef MakeableInterfaceObject< EntityType > EntityObj;
293
294 // here, grid part information can be passed, if necessary
295 return EntityObj( Implementation( coordFunction_, entity ) );
296 }
297
298 // return reference to the coordfunction
299 const CoordFunctionType &coordFunction () const { return coordFunction_; }
300
301 // return reference to the host grid part
303 {
304 return coordFunction_.gridPart();
305 }
306
307 // return reference to the host grid part
309 {
310 return const_cast< HostGridPartType & >( coordFunction_.gridPart() );
311 }
312
313 private:
314 const CoordFunctionType &coordFunction_;
315 IndexSetType indexSet_;
316 };
317
318
319
320 // GridEntityAccess for GeoEntity
321 // ------------------------------
322
323 template< int codim, int dim, class GridFamily >
324 struct GridEntityAccess< Dune::Entity< codim, dim, GridFamily, GeoEntity > >
325 {
326 typedef Dune::Entity< codim, dim, GridFamily, GeoEntity > EntityType;
328 typedef typename HostAccessType::GridEntityType GridEntityType;
329
330 static const GridEntityType &gridEntity ( const EntityType &entity )
331 {
332 return HostAccessType::gridEntity( entity.impl().hostEntity() );
333 }
334 };
335
336
337
338 // EntitySearch for GeoGridPart
339 // ----------------------------
340
341 template< class CoordFunction, int codim, PartitionIteratorType partition >
342 class EntitySearch< GeoGridPart< CoordFunction >, codim, partition >
343 : public DefaultEntitySearch< GeoGridPart< CoordFunction >, codim, partition >
344 {
345 typedef EntitySearch< GeoGridPart< CoordFunction >, codim, partition > ThisType;
347
348 public:
350
351 explicit EntitySearch ( const GridPartType &gridPart )
352 : BaseType( gridPart )
353 {}
354 };
355
356 } // namespace Fem
357
358} // namespace Dune
359
360#endif // #ifndef DUNE_FEM_GRIDPART_GEOGRIDPART_HH
Definition: bindguard.hh:11
interface for local functions
Definition: localfunction.hh:77
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
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
Definition: gridpart.hh:396
MetaTwistUtility forwards the twist calls to the TwistUtility of the underlying HostTwistUtility.
Definition: metatwistutility.hh:22
Definition: geogridpart.hh:167
Codim< codim >::template Partition< pitype >::IteratorType begin() const
Definition: geogridpart.hh:218
void communicate(CommDataHandleIF< DataHandle, Data > &handle, InterfaceType iftype, CommunicationDirection dir) const
Definition: geogridpart.hh:260
Codim< 0 >::EntityType exchangeGeometry(const typename Codim< 0 >::EntityType &entity, const LocalFunction &localCoordFunction) const
Definition: geogridpart.hh:270
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
Definition: geogridpart.hh:242
const HostGridPartType & hostGridPart() const
Definition: geogridpart.hh:302
HostGridPartType & hostGridPart()
Definition: geogridpart.hh:308
int boundaryId(const IntersectionType &intersection) const
Definition: geogridpart.hh:252
const CoordFunctionType & coordFunction() const
Definition: geogridpart.hh:299
BaseType::IntersectionType IntersectionType
Definition: geogridpart.hh:181
GeoGridPart(const CoordFunctionType &coordFunction)
Definition: geogridpart.hh:189
Codim< codim >::IteratorType begin() const
Definition: geogridpart.hh:211
BaseType::CollectiveCommunicationType CollectiveCommunicationType
Definition: geogridpart.hh:182
BaseType::IntersectionIteratorType IntersectionIteratorType
Definition: geogridpart.hh:180
CoordFunction CoordFunctionType
Definition: geogridpart.hh:176
int level() const
Definition: geogridpart.hh:237
GridPartFamily::Traits::HostGridPartType HostGridPartType
Definition: geogridpart.hh:174
const GridType & grid() const
Definition: geogridpart.hh:194
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
Definition: geogridpart.hh:278
const IndexSetType & indexSet() const
Definition: geogridpart.hh:204
Codim< codim >::template Partition< pitype >::IteratorType end() const
Definition: geogridpart.hh:232
Codim< codim >::IteratorType end() const
Definition: geogridpart.hh:225
BaseType::GridType GridType
Definition: geogridpart.hh:178
BaseType::IndexSetType IndexSetType
Definition: geogridpart.hh:179
const CollectiveCommunicationType & comm() const
Definition: geogridpart.hh:257
GridType & grid()
Definition: geogridpart.hh:199
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
Definition: geogridpart.hh:247
MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType > convert(const Entity &entity) const
Definition: geogridpart.hh:287
Definition: geogridpart.hh:63
static const int dimensionworld
Definition: geogridpart.hh:67
static const int dimension
Definition: geogridpart.hh:66
CoordFunction::RangeFieldType ctype
Definition: geogridpart.hh:64
Traits::HierarchicIterator HierarchicIterator
Definition: geogridpart.hh:108
GeoGridPartFamily< CoordFunction > GridPartFamily
Definition: geogridpart.hh:69
Traits::LeafIntersectionIterator LeafIntersectionIterator
Definition: geogridpart.hh:105
Traits::LevelIntersectionIterator LevelIntersectionIterator
Definition: geogridpart.hh:106
Definition: geogridpart.hh:43
GeoGridPartData(const CoordFunctionType &coordFunction)
Definition: geogridpart.hh:47
CoordFunction CoordFunctionType
Definition: geogridpart.hh:44
Definition: geogridpart.hh:72
GeoGridPartData< CoordFunction > ExtraData
Definition: geogridpart.hh:73
DeadIntersectionIterator< const GridPartFamily > IntersectionIteratorImplType
Definition: geogridpart.hh:89
DeadIntersection< const GridPartFamily > IntersectionImplType
Definition: geogridpart.hh:88
Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator
Definition: geogridpart.hh:94
Dune::IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator
Definition: geogridpart.hh:95
CoordFunctionType::GridPartType HostGridPartType
Definition: geogridpart.hh:76
Dune::Intersection< const GridPartFamily, IntersectionImplType > LevelIntersection
Definition: geogridpart.hh:92
Dune::EntityIterator< 0, const GridPartFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator
Definition: geogridpart.hh:97
Dune::Intersection< const GridPartFamily, IntersectionImplType > LeafIntersection
Definition: geogridpart.hh:91
CoordFunction CoordFunctionType
Definition: geogridpart.hh:74
Definition: geogridpart.hh:80
HostGridPartType::template Codim< codim >::LocalGeometryType LocalGeometry
Definition: geogridpart.hh:82
Dune::Geometry< dimension - codim, dimensionworld, const GridPartFamily, GeoGeometry > Geometry
Definition: geogridpart.hh:81
Dune::Entity< codim, dimension, const GridPartFamily, GeoEntity > Entity
Definition: geogridpart.hh:84
HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed
Definition: geogridpart.hh:85
Definition: geogridpart.hh:103
Definition: geogridpart.hh:115
IdIndexSet< const GridPartFamily > IndexSetType
Definition: geogridpart.hh:127
static const InterfaceType indexSetInterfaceType
Definition: geogridpart.hh:130
GeoGridPart< CoordFunction > GridPartType
Definition: geogridpart.hh:116
GeoGridPartFamily< CoordFunction > GridPartFamily
Definition: geogridpart.hh:117
IntersectionIterator< const GridPartFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType
Definition: geogridpart.hh:135
GeoGridPartFamily< CoordFunction > GridFamily
Definition: geogridpart.hh:118
GridPartFamily::Traits::HostGridPartType HostGridPartType
Definition: geogridpart.hh:120
HostGridPartType::GridType GridType
Definition: geogridpart.hh:122
static const bool conforming
Definition: geogridpart.hh:156
GeoIntersectionIterator< const GridPartFamily > IntersectionIteratorImplType
Definition: geogridpart.hh:133
GeoIntersection< const GridPartFamily > IntersectionImplType
Definition: geogridpart.hh:132
HostGridPartType::CollectiveCommunicationType CollectiveCommunicationType
Definition: geogridpart.hh:154
MetaTwistUtility< typename HostGridPartType ::TwistUtilityType > TwistUtilityType
type of twist utility
Definition: geogridpart.hh:125
static const PartitionIteratorType indexSetPartitionType
Definition: geogridpart.hh:129
Definition: geogridpart.hh:139
GridPartFamily::Traits::template Codim< codim >::Geometry GeometryType
Definition: geogridpart.hh:140
GridPartFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType
Definition: geogridpart.hh:145
GridPartFamily::Traits::template Codim< codim >::Entity EntityType
Definition: geogridpart.hh:143
GridPartFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType
Definition: geogridpart.hh:141
EntityIterator< codim, const GridPartFamily, IdIterator< codim, pitype, const GridPartFamily > > IteratorType
Definition: geogridpart.hh:150
Definition: geogridpart.hh:187
Dune::Entity< codim, dim, GridFamily, GeoEntity > EntityType
Definition: geogridpart.hh:326
GridEntityAccess< typename EntityType::Implementation::HostEntityType > HostAccessType
Definition: geogridpart.hh:327
static const GridEntityType & gridEntity(const EntityType &entity)
Definition: geogridpart.hh:330
HostAccessType::GridEntityType GridEntityType
Definition: geogridpart.hh:328
BaseType::GridPartType GridPartType
Definition: geogridpart.hh:349
EntitySearch(const GridPartType &gridPart)
Definition: geogridpart.hh:351
Definition: gridpart/geogridpart/datahandle.hh:22
Definition: gridpart/geogridpart/geometry.hh:57
Definition: geogridpart/intersection.hh:20
Definition: geogridpart/intersectioniterator.hh:22
Definition: idgridpart/indexset.hh:260
Definition: idgridpart/iterator.hh:21