dune-fem  2.8-git
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 
19 namespace 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!")
44  struct GridFamily
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 
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 >
116  struct Partition
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:
145 
146  typedef typename BaseType::GridType GridType;
151 
153 
154  template< int codim >
155  struct Codim
156  : public BaseType::template Codim< codim >
157  {};
158 
159  explicit IdGridPart ( GridType &grid )
160  : AddGridViewType( this ),
161  hostGridPart_( grid ),
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 
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
const GridEntityAccess< Entity >::GridEntityType & gridEntity(const Entity &entity)
Definition: gridpart.hh:412
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:279
Codim< codim >::template Partition< pitype >::IteratorType begin() const
Definition: idgridpart.hh:200
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
const HostGridPartType & hostGridPart() const
Definition: idgridpart.hh:271
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
HostGridPartType & hostGridPart()
Definition: idgridpart.hh:273
BaseType::GridType GridType
Definition: idgridpart.hh:146
ExtraData data() const
Definition: idgridpart.hh:276
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
const CollectiveCommunicationType & comm() const
Definition: idgridpart.hh:239
IndexSetType indexSet_
Definition: idgridpart.hh:280
const GridType & grid() const
Definition: idgridpart.hh:176
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
GridType & grid()
Definition: idgridpart.hh:181
BaseType::IndexSetType IndexSetType
Definition: idgridpart.hh:147
Codim< EntitySeed::codimension >::EntityType entity(const EntitySeed &seed) const
Definition: idgridpart.hh:252
const IndexSetType & indexSet() const
Definition: idgridpart.hh:186
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
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
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
HostGridPartType::GridType::template Codim< codim >::EntitySeed EntitySeed
Definition: idgridpart.hh:68
Dune::Geometry< dimension - codim, dimensionworld, const GridFamily, IdGeometry > Geometry
Definition: idgridpart.hh:64
Definition: idgridpart.hh:108
GridFamily::Traits::template Codim< codim >::Geometry GeometryType
Definition: idgridpart.hh:109
GridFamily::Traits::template Codim< codim >::LocalGeometry LocalGeometryType
Definition: idgridpart.hh:110
GridFamily::Traits::template Codim< codim >::EntitySeed EntitySeedType
Definition: idgridpart.hh:113
GridFamily::Traits::template Codim< codim >::Entity EntityType
Definition: idgridpart.hh:112
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
HostAccessType::GridEntityType GridEntityType
Definition: idgridpart.hh:293
static const GridEntityType & gridEntity(const EntityType &entity)
Definition: idgridpart.hh:295
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