dune-fem 2.8.0
Loading...
Searching...
No Matches
idgridpart.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_GRIDPART_IDGRIDPART_HH
2#define DUNE_FEM_GRIDPART_IDGRIDPART_HH
3
4#include <dune/grid/common/gridview.hh>
5
18
19namespace Dune
20{
21
22 namespace Fem
23 {
24
25 // Internal Forward Declarations
26 // -----------------------------
27
28 template< class HostGridPartImp >
29 class IdGridPart;
30
31
32 // IdGridPartTraits
33 // ----------------
34
35 template< class HostGridPartImp >
37 {
39
42
43 // Traits for dune-grid facades ("Gen-Gurke!")
45 {
46 typedef typename HostGridPartImp::ctype ctype;
47
48 static const int dimension = HostGridPartImp::dimension;
49 static const int dimensionworld = HostGridPartImp::dimensionworld;
50
51 struct Traits
52 {
53 typedef HostGridPartImp HostGridPartType;
54
55 struct EmptyData {};
56
57 // type of data passed to entities, intersections, and iterators
58 // for IdGridPart this is just an empty place holder
60
61 template< int codim >
62 struct Codim
63 {
64 typedef Dune::Geometry< dimension - codim, dimensionworld, const GridFamily, IdGeometry > Geometry;
65 typedef Dune::Geometry< dimension - codim, dimension, const GridFamily, IdLocalGeometry > LocalGeometry;
66
67 typedef Dune::Entity< codim, dimension, const GridFamily, IdEntity > Entity;
68 typedef typename HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed;
69 };
70
73
74 typedef Dune::Intersection< const GridFamily, IntersectionImplType > LeafIntersection;
75 typedef Dune::Intersection< const GridFamily, IntersectionImplType > LevelIntersection;
76
77 typedef Dune::IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator;
78 typedef Dune::IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator;
79
80 typedef Dune::EntityIterator< 0, const GridFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator;
81 };
82
83 template< int codim >
84 struct Codim
85 : public Traits::template Codim< codim >
86 {};
87
90
92 };
94
95 typedef typename HostGridPartType::GridType GridType;
96
98
99 static const PartitionIteratorType indexSetPartitionType = HostGridPartType::indexSetPartitionType;
100 static const InterfaceType indexSetInterfaceType = HostGridPartType::indexSetInterfaceType;
101
102 typedef IdIntersectionIterator < const GridFamily > IntersectionIteratorImplType;
104 typedef IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType;
105
106 template< int codim >
107 struct Codim
108 {
109 typedef typename GridFamily::Traits::template Codim< codim >::Geometry GeometryType;
110 typedef typename GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType;
111
112 typedef typename GridFamily::Traits::template Codim< codim >::Entity EntityType;
113 typedef typename GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType;
114
115 template< PartitionIteratorType pitype >
117 {
118 typedef EntityIterator< codim, const GridFamily, IdIterator< codim, pitype, const GridFamily > > IteratorType;
119 };
120 };
121
122 typedef typename HostGridPartType::CollectiveCommunicationType CollectiveCommunicationType;
123
124 static const bool conforming = HostGridPartType::Traits::conforming;
125 };
126
127
128
129 // IdGridPart
130 // ----------
131
132 template< class HostGridPartImp >
134 : public GridPartInterface< IdGridPartTraits< HostGridPartImp > >
135 , public AddGridView< IdGridPartTraits< HostGridPartImp > >
136 {
140
142
143 public:
144 typedef typename GridFamily::Traits::HostGridPartType HostGridPartType;
145
146 typedef typename BaseType::GridType GridType;
151
153
154 template< int codim >
155 struct Codim
156 : public BaseType::template Codim< codim >
157 {};
158
160 : AddGridViewType( this ),
163 {}
164 explicit IdGridPart ( const GridViewType *gridView )
168 {}
169
171 : AddGridViewType( this ),
174 {}
175
176 const GridType &grid () const
177 {
178 return hostGridPart().grid();
179 }
180
182 {
183 return hostGridPart_.grid();
184 }
185
186 const IndexSetType &indexSet () const
187 {
188 return indexSet_;
189 }
190
191 template< int codim >
192 typename Codim< codim >::IteratorType
193 begin () const
194 {
195 return begin< codim, InteriorBorder_Partition >();
196 }
197
198 template< int codim, PartitionIteratorType pitype >
199 typename Codim< codim >::template Partition< pitype >::IteratorType
200 begin () const
201 {
202 return IdIterator< codim, pitype, const GridFamily >( data(), hostGridPart().template begin< codim, pitype >() );
203 }
204
205 template< int codim >
206 typename Codim< codim >::IteratorType
207 end () const
208 {
209 return end< codim, InteriorBorder_Partition >();
210 }
211
212 template< int codim, PartitionIteratorType pitype >
213 typename Codim< codim >::template Partition< pitype >::IteratorType
214 end () const
215 {
216 return IdIterator< codim, pitype, const GridFamily >( data(), hostGridPart().template end< codim, pitype >() );
217 }
218
219 int level () const
220 {
221 return hostGridPart().level();
222 }
223
225 {
226 return IdIntersectionIterator< const GridFamily >( data(), hostGridPart().ibegin( entity.impl().hostEntity() ) );
227 }
228
230 {
231 return IdIntersectionIterator< const GridFamily >( data(), hostGridPart().iend( entity.impl().hostEntity() ) );
232 }
233
234 int boundaryId ( const IntersectionType &intersection ) const
235 {
236 return hostGridPart().boundaryId( intersection.impl().hostIntersection() );
237 }
238
239 const CollectiveCommunicationType &comm () const { return hostGridPart().comm(); }
240
241 template< class DataHandle, class Data >
242 void communicate ( CommDataHandleIF< DataHandle, Data > &handle,
243 InterfaceType iftype, CommunicationDirection dir ) const
244 {
245 typedef CommDataHandleIF< DataHandle, Data > HostHandleType;
246 IdDataHandle< HostHandleType, GridFamily > handleWrapper( data(), handle );
247 hostGridPart().communicate( handleWrapper, iftype, dir );
248 }
249
250 template < class EntitySeed >
251 typename Codim< EntitySeed::codimension >::EntityType
252 entity ( const EntitySeed &seed ) const
253 {
255 return EntityImp( data(), hostGridPart().entity( seed ) );
256 }
257
258 // convert a grid entity to a grid part entity ("Gurke!")
259 template< class Entity >
260 MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType >
261 convert ( const Entity &entity ) const
262 {
263 // create a grid part entity from a given grid entity
264 typedef typename Codim< Entity::codimension >::EntityType EntityType;
265 typedef typename EntityType::Implementation Implementation;
266 typedef MakeableInterfaceObject< EntityType > EntityObj;
267 // here, grid part information can be passed, if necessary
268 return EntityObj( Implementation( entity ) );
269 }
270
271 const HostGridPartType &hostGridPart () const { return hostGridPart_; }
272
274
275 typedef typename GridFamily::Traits::ExtraData ExtraData;
276 ExtraData data () const { return ExtraData(); }
277
278 protected:
281 };
282
283
284
285 // GridEntityAccess for IdEntity
286 // -----------------------------
287
288 template< int codim, int dim, class GridFamily >
289 struct GridEntityAccess< Dune::Entity< codim, dim, GridFamily, IdEntity > >
290 {
291 typedef Dune::Entity< codim, dim, GridFamily, IdEntity > EntityType;
293 typedef typename HostAccessType::GridEntityType GridEntityType;
294
295 static const GridEntityType &gridEntity ( const EntityType &entity )
296 {
297 return HostAccessType::gridEntity( entity.impl().hostEntity() );
298 }
299 };
300
301
302
303 // EntitySearch for IdGridPart
304 // ---------------------------
305
306 template< class HostGridPart, int codim, PartitionIteratorType partition >
307 class EntitySearch< IdGridPart< HostGridPart >, codim, partition >
308 {
309 typedef EntitySearch< IdGridPart< HostGridPart >, codim, partition > ThisType;
310
311 public:
314
315 typedef typename GridPartType::template Codim< codim >::EntityType EntityType;
316
317 typedef typename EntityType::Geometry::GlobalCoordinate GlobalCoordinateType;
318
319 explicit EntitySearch ( const GridPartType &gridPart )
320 : hostEntitySearch_( gridPart.hostGridPart() ),
321 data_( gridPart.data() )
322 {}
323
324 EntityType operator() ( const GlobalCoordinateType &x ) const
325 {
326 typedef typename EntityType::Implementation EntityImpl;
327 return EntityImpl( data_, hostEntitySearch_( x ) );
328 }
329
330 protected:
333 };
334
335 } // namespace Fem
336
337} // namespace Dune
338
339#endif // #ifndef DUNE_FEM_GRIDPART_IDGRIDPART_HH
Definition: bindguard.hh:11
Definition: deaditerator.hh:49
Definition: deaditerator.hh:158
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
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: idgridpart.hh:136
BaseType::IntersectionIteratorType IntersectionIteratorType
Definition: idgridpart.hh:148
HostGridPartType & hostGridPart()
Definition: idgridpart.hh:273
HostGridPartType hostGridPart_
Definition: idgridpart.hh:279
Codim< codim >::template Partition< pitype >::IteratorType begin() const
Definition: idgridpart.hh:200
const GridType & grid() const
Definition: idgridpart.hh:176
const IndexSetType & indexSet() const
Definition: idgridpart.hh:186
IdGridPart(GridType &grid)
Definition: idgridpart.hh:159
MakeableInterfaceObject< typename Codim< Entity::codimension >::EntityType > convert(const Entity &entity) const
Definition: idgridpart.hh:261
void communicate(CommDataHandleIF< DataHandle, Data > &handle, InterfaceType iftype, CommunicationDirection dir) const
Definition: idgridpart.hh:242
BaseType::CollectiveCommunicationType CollectiveCommunicationType
Definition: idgridpart.hh:150
IdGridPart(const HostGridPartType &hostGridPart)
Definition: idgridpart.hh:170
int boundaryId(const IntersectionType &intersection) const
Definition: idgridpart.hh:234
IntersectionIteratorType ibegin(const typename Codim< 0 >::EntityType &entity) const
Definition: idgridpart.hh:224
IdGridPart(const GridViewType *gridView)
Definition: idgridpart.hh:164
const HostGridPartType & hostGridPart() const
Definition: idgridpart.hh:271
BaseType::GridType GridType
Definition: idgridpart.hh:146
ExtraData data() const
Definition: idgridpart.hh:276
GridType & grid()
Definition: idgridpart.hh:181
Codim< codim >::IteratorType end() const
Definition: idgridpart.hh:207
int level() const
Definition: idgridpart.hh:219
IntersectionIteratorType iend(const typename Codim< 0 >::EntityType &entity) const
Definition: idgridpart.hh:229
AddGridViewType::GridViewType GridViewType
Definition: idgridpart.hh:152
GridFamily::Traits::ExtraData ExtraData
Definition: idgridpart.hh:275
IndexSetType indexSet_
Definition: idgridpart.hh:280
Codim< codim >::template Partition< pitype >::IteratorType end() const
Definition: idgridpart.hh:214
GridFamily::Traits::HostGridPartType HostGridPartType
Definition: idgridpart.hh:144
Codim< codim >::IteratorType begin() const
Definition: idgridpart.hh:193
BaseType::IntersectionType IntersectionType
Definition: idgridpart.hh:149
BaseType::IndexSetType IndexSetType
Definition: idgridpart.hh:147
const CollectiveCommunicationType & comm() const
Definition: idgridpart.hh:239
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
Definition: idgridpart.hh:252
Definition: idgridpart.hh:37
IdIndexSet< const GridFamily > IndexSetType
Definition: idgridpart.hh:97
GridFamily::Traits::HostGridPartType HostGridPartType
Definition: idgridpart.hh:93
IdIntersectionIterator< const GridFamily > IntersectionIteratorImplType
Definition: idgridpart.hh:102
IdIntersection< const GridFamily > IntersectionImplType
Definition: idgridpart.hh:103
static const bool conforming
Definition: idgridpart.hh:124
MetaTwistUtility< typename HostGridPartImp ::TwistUtilityType > TwistUtilityType
type of twist utility
Definition: idgridpart.hh:41
static const PartitionIteratorType indexSetPartitionType
Definition: idgridpart.hh:99
HostGridPartType::GridType GridType
Definition: idgridpart.hh:95
static const InterfaceType indexSetInterfaceType
Definition: idgridpart.hh:100
IdGridPart< HostGridPartImp > GridPartType
Definition: idgridpart.hh:38
HostGridPartType::CollectiveCommunicationType CollectiveCommunicationType
Definition: idgridpart.hh:122
IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > IntersectionIteratorType
Definition: idgridpart.hh:104
Definition: idgridpart.hh:45
Traits::LeafIntersectionIterator LeafIntersectionIterator
Definition: idgridpart.hh:88
static const int dimensionworld
Definition: idgridpart.hh:49
Traits::HierarchicIterator HierarchicIterator
Definition: idgridpart.hh:91
Traits::LevelIntersectionIterator LevelIntersectionIterator
Definition: idgridpart.hh:89
static const int dimension
Definition: idgridpart.hh:48
HostGridPartImp::ctype ctype
Definition: idgridpart.hh:46
EmptyData ExtraData
Definition: idgridpart.hh:59
Dune::IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > LeafIntersectionIterator
Definition: idgridpart.hh:77
Dune::Intersection< const GridFamily, IntersectionImplType > LevelIntersection
Definition: idgridpart.hh:75
HostGridPartImp HostGridPartType
Definition: idgridpart.hh:53
DeadIntersection< const GridFamily > IntersectionImplType
Definition: idgridpart.hh:71
Dune::Intersection< const GridFamily, IntersectionImplType > LeafIntersection
Definition: idgridpart.hh:74
Dune::EntityIterator< 0, const GridFamily, DeadIterator< typename Codim< 0 >::Entity > > HierarchicIterator
Definition: idgridpart.hh:80
DeadIntersectionIterator< const GridFamily > IntersectionIteratorImplType
Definition: idgridpart.hh:72
Dune::IntersectionIterator< const GridFamily, IntersectionIteratorImplType, IntersectionImplType > LevelIntersectionIterator
Definition: idgridpart.hh:78
HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed
Definition: idgridpart.hh:68
Dune::Geometry< dimension - codim, dimension, const GridFamily, IdLocalGeometry > LocalGeometry
Definition: idgridpart.hh:65
Dune::Entity< codim, dimension, const GridFamily, IdEntity > Entity
Definition: idgridpart.hh:67
Dune::Geometry< dimension - codim, dimensionworld, const GridFamily, IdGeometry > Geometry
Definition: idgridpart.hh:64
Definition: idgridpart.hh:108
GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType
Definition: idgridpart.hh:113
GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType
Definition: idgridpart.hh:110
GridFamily::Traits::template Codim< codim >::Entity EntityType
Definition: idgridpart.hh:112
GridFamily::Traits::template Codim< codim >::Geometry GeometryType
Definition: idgridpart.hh:109
EntityIterator< codim, const GridFamily, IdIterator< codim, pitype, const GridFamily > > IteratorType
Definition: idgridpart.hh:118
Definition: idgridpart.hh:157
GridEntityAccess< typename EntityType::Implementation::HostEntityType > HostAccessType
Definition: idgridpart.hh:292
Dune::Entity< codim, dim, GridFamily, IdEntity > EntityType
Definition: idgridpart.hh:291
static const GridEntityType & gridEntity(const EntityType &entity)
Definition: idgridpart.hh:295
HostAccessType::GridEntityType GridEntityType
Definition: idgridpart.hh:293
EntitySearch(const GridPartType &gridPart)
Definition: idgridpart.hh:319
const EntitySearch< HostGridPart > hostEntitySearch_
Definition: idgridpart.hh:331
GridPartType::template Codim< codim >::EntityType EntityType
Definition: idgridpart.hh:315
GridPartType::ExtraData ExtraData
Definition: idgridpart.hh:313
IdGridPart< HostGridPart > GridPartType
Definition: idgridpart.hh:312
EntityType::Geometry::GlobalCoordinate GlobalCoordinateType
Definition: idgridpart.hh:317
Definition: gridpart/idgridpart/datahandle.hh:23
Definition: gridpart/idgridpart/geometry.hh:97
Definition: gridpart/idgridpart/geometry.hh:136
Definition: idgridpart/indexset.hh:260
Definition: idgridpart/intersection.hh:20
Definition: idgridpart/intersectioniterator.hh:22
Definition: idgridpart/iterator.hh:21