dune-grid  2.7.0
identitygrid.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_GRID_IDENTITYGRID_HH
4 #define DUNE_GRID_IDENTITYGRID_HH
5 
10 #include <string>
11 #include <map>
12 
13 #include <dune/common/deprecated.hh>
14 #include <dune/common/parallel/communication.hh>
16 #include <dune/grid/common/grid.hh>
17 
18 // The components of the IdentityGrid interface
27 
28 namespace Dune
29 {
30  // Forward declaration
31  template <class HostGrid>
32  class IdentityGrid;
33 
34  // External forward declarations
35  template< class Grid >
37 
38  template<int dim, class HostGrid>
40  {
41 
42  public:
43 
44  typedef GridTraits<
45  dim,
46  HostGrid::dimensionworld,
60  typename HostGrid::Traits::GlobalIdSet::IdType,
62  typename HostGrid::Traits::LocalIdSet::IdType,
63  CollectiveCommunication<No_Comm>,
67  > Traits;
68 
69  };
70 
71  //**********************************************************************
72  //
73  // --IdentityGrid
74  //
75  //************************************************************************
83  template <class HostGrid>
84  class IdentityGrid
85  : public GridDefaultImplementation<HostGrid::dimension, HostGrid::dimensionworld,
86  typename HostGrid::ctype, IdentityGridFamily<HostGrid::dimension, HostGrid> >
87  {
88  friend class IdentityGridLevelIndexSet<const IdentityGrid<HostGrid> >;
89  friend class IdentityGridLeafIndexSet<const IdentityGrid<HostGrid> >;
90  friend class IdentityGridGlobalIdSet<const IdentityGrid<HostGrid> >;
91  friend class IdentityGridLocalIdSet<const IdentityGrid<HostGrid> >;
92  friend class IdentityGridHierarchicIterator<const IdentityGrid<HostGrid> >;
93  friend class IdentityGridLevelIntersectionIterator<const IdentityGrid<HostGrid> >;
94  friend class IdentityGridLeafIntersectionIterator<const IdentityGrid<HostGrid> >;
95 
96  template<int codim, PartitionIteratorType pitype, class GridImp_>
98 
99  template<int codim, PartitionIteratorType pitype, class GridImp_>
101 
102 
103  template<int codim_, int dim_, class GridImp_>
104  friend class IdentityGridEntity;
105 
106  friend struct HostGridAccess< IdentityGrid< HostGrid > >;
107 
108  public:
109 
111  typedef HostGrid HostGridType;
112 
113  //**********************************************************
114  // The Interface Methods
115  //**********************************************************
116 
119 
122 
124  typedef typename HostGrid::ctype ctype;
125 
126 
131  explicit IdentityGrid(HostGrid& hostgrid) :
132  hostgrid_(&hostgrid),
133  leafIndexSet_(*this),
134  globalIdSet_(*this),
135  localIdSet_(*this)
136  {
137  setIndices();
138  }
139 
142  {
143  // Delete level index sets
144  for (size_t i=0; i<levelIndexSets_.size(); i++)
145  if (levelIndexSets_[i])
146  delete (levelIndexSets_[i]);
147  }
148 
149 
154  int maxLevel() const {
155  return hostgrid_->maxLevel();
156  }
157 
159  template<int codim>
160  typename Traits::template Codim<codim>::LevelIterator lbegin (int level) const {
162  }
163 
164 
166  template<int codim>
167  typename Traits::template Codim<codim>::LevelIterator lend (int level) const {
169  }
170 
171 
173  template<int codim, PartitionIteratorType PiType>
174  typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator lbegin (int level) const {
176  }
177 
178 
180  template<int codim, PartitionIteratorType PiType>
181  typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator lend (int level) const {
183  }
184 
185 
187  template<int codim>
188  typename Traits::template Codim<codim>::LeafIterator leafbegin() const {
190  }
191 
192 
194  template<int codim>
195  typename Traits::template Codim<codim>::LeafIterator leafend() const {
197  }
198 
199 
201  template<int codim, PartitionIteratorType PiType>
202  typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator leafbegin() const {
204  }
205 
206 
208  template<int codim, PartitionIteratorType PiType>
209  typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator leafend() const {
211  }
212 
213 
216  int size (int level, int codim) const {
217  return hostgrid_->size(level,codim);
218  }
219 
222  size_t numBoundarySegments () const {
223  return hostgrid_->numBoundarySegments();
224  }
225 
227  int size (int codim) const {
228  return leafIndexSet().size(codim);
229  }
230 
231 
233  int size (int level, GeometryType type) const {
234  return levelIndexSets_[level]->size(type);
235  }
236 
237 
239  int size (GeometryType type) const
240  {
241  return leafIndexSet().size(type);
242  }
243 
244 
246  const typename Traits::GlobalIdSet& globalIdSet() const {
247  return globalIdSet_;
248  }
249 
250 
252  const typename Traits::LocalIdSet& localIdSet() const {
253  return localIdSet_;
254  }
255 
256 
258  const typename Traits::LevelIndexSet& levelIndexSet(int level) const
259  {
260  if (level < 0 || level > maxLevel())
261  {
262  DUNE_THROW(GridError, "levelIndexSet of nonexisting level " << level << " requested!");
263  }
264  return *levelIndexSets_[level];
265  }
266 
267 
269  const typename Traits::LeafIndexSet& leafIndexSet() const
270  {
271  return leafIndexSet_;
272  }
273 
274 
276  template < class EntitySeed >
277  typename Traits::template Codim<EntitySeed::codimension>::Entity
278  entity(const EntitySeed& seed) const
279  {
280  typedef IdentityGridEntity<
282  HostGrid::dimension,
283  const typename Traits::Grid
284  > EntityImp;
285 
286  return EntityImp(this, hostgrid_->entity(seed.impl().hostEntitySeed()));
287  }
288 
289 
292 
293 
297  void globalRefine (int refCount)
298  {
299  hostgrid_->globalRefine(refCount);
300  }
301 
312  bool mark(int refCount, const typename Traits::template Codim<0>::Entity & e)
313  {
314  return hostgrid_->mark(refCount, getHostEntity<0>(e));
315  }
316 
321  int getMark(const typename Traits::template Codim<0>::Entity & e) const
322  {
323  return hostgrid_->getMark(getHostEntity<0>(e));
324  }
325 
327  bool preAdapt() {
328  return hostgrid_->preAdapt();
329  }
330 
331 
333  bool adapt()
334  {
335  return hostgrid_->adapt();
336  }
337 
339  void postAdapt() {
340  return hostgrid_->postAdapt();
341  }
342 
346  unsigned int overlapSize(int codim) const {
347  return hostgrid_->leafGridView().overlapSize(codim);
348  }
349 
350 
352  unsigned int ghostSize(int codim) const {
353  return hostgrid_->leafGridView().ghostSize(codim);
354  }
355 
356 
358  unsigned int overlapSize(int level, int codim) const {
359  return hostgrid_->levelGridView(level).overlapSize(codim);
360  }
361 
362 
364  unsigned int ghostSize(int level, int codim) const {
365  return hostgrid_->levelGridView(level).ghostSize(codim);
366  }
367 
368 
369 #if 0
370 
375  void loadBalance(int strategy, int minlevel, int depth, int maxlevel, int minelement){
376  DUNE_THROW(NotImplemented, "IdentityGrid::loadBalance()");
377  }
378 #endif
379 
380 
382  const CollectiveCommunication<No_Comm>& comm () const
383  {
384  return ccobj;
385  }
386 
387 
388  // **********************************************************
389  // End of Interface Methods
390  // **********************************************************
391 
394  {
395  return *hostgrid_;
396  }
397 
398 
400  template <int codim>
401  const typename HostGrid::Traits::template Codim<codim>::Entity& getHostEntity(const typename Traits::template Codim<codim>::Entity& e) const
402  {
403  return e.impl().hostEntity_;
404  }
405 
406  protected:
407 
409  HostGrid* hostgrid_;
410 
411  private:
412 
414  void setIndices()
415  {
416  localIdSet_.update();
417 
418  globalIdSet_.update();
419 
420  // //////////////////////////////////////////
421  // Create the index sets
422  // //////////////////////////////////////////
423  for (int i=levelIndexSets_.size(); i<=maxLevel(); i++) {
426  levelIndexSets_.push_back(p);
427  }
428 
429  for (int i=0; i<=maxLevel(); i++)
430  if (levelIndexSets_[i])
431  levelIndexSets_[i]->update(*this, i);
432 
433  leafIndexSet_.update(*this);
434 
435  }
436 
438  CollectiveCommunication<No_Comm> ccobj;
439 
441  std::vector<IdentityGridLevelIndexSet<const IdentityGrid<HostGrid> >*> levelIndexSets_;
442 
445 
448 
451 
452  }; // end Class IdentityGrid
453 
454 
455 
456 
457  namespace Capabilities
458  {
462  template<class HostGrid, int codim>
463  struct hasEntity<IdentityGrid<HostGrid>, codim>
464  {
465  static const bool v = hasEntity<HostGrid,codim>::v;
466  };
467 
468  template<class HostGrid, int codim>
469  struct hasEntityIterator<IdentityGrid<HostGrid>, codim>
470  {
472  };
473 
477  template<class HostGrid>
479  {
481  };
482 
486  template<class HostGrid>
488  {
490  };
491  } // end namespace Capabilities
492 
493 } // namespace Dune
494 
495 #endif // DUNE_GRID_IDENTITYGRID_HH
Dune::IdentityGridFamily::Traits
GridTraits< dim, HostGrid::dimensionworld, Dune::IdentityGrid< HostGrid >, IdentityGridGeometry, IdentityGridEntity, IdentityGridLevelIterator, IdentityGridLeafIntersection, IdentityGridLevelIntersection, IdentityGridLeafIntersectionIterator, IdentityGridLevelIntersectionIterator, IdentityGridHierarchicIterator, IdentityGridLeafIterator, IdentityGridLevelIndexSet< const IdentityGrid< HostGrid > >, IdentityGridLeafIndexSet< const IdentityGrid< HostGrid > >, IdentityGridGlobalIdSet< const IdentityGrid< HostGrid > >, typename HostGrid::Traits::GlobalIdSet::IdType, IdentityGridLocalIdSet< const IdentityGrid< HostGrid > >, typename HostGrid::Traits::LocalIdSet::IdType, CollectiveCommunication< No_Comm >, DefaultLevelGridViewTraits, DefaultLeafGridViewTraits, IdentityGridEntitySeed > Traits
Definition: identitygrid.hh:67
Dune::IdentityGrid::ghostSize
unsigned int ghostSize(int codim) const
Size of the ghost cell layer on the leaf level.
Definition: identitygrid.hh:352
Dune::IdentityGrid::overlapSize
unsigned int overlapSize(int level, int codim) const
Size of the overlap on a given level.
Definition: identitygrid.hh:358
Dune::IdentityGrid::preAdapt
bool preAdapt()
returns true, if at least one entity is marked for adaption
Definition: identitygrid.hh:327
Dune::IdentityGrid::ghostSize
unsigned int ghostSize(int level, int codim) const
Size of the ghost cell layer on a given level.
Definition: identitygrid.hh:364
identitygridindexsets.hh
The index and id sets for the IdentityGrid class.
Dune::Capabilities::isLevelwiseConforming::v
static const bool v
Definition: common/capabilities.hh:105
Dune::Capabilities::hasEntityIterator
specialize with 'true' for all codims that a grid provides an iterator for (default=false)
Definition: common/capabilities.hh:71
Dune::IdentityGrid::Traits
IdentityGridFamily< HostGrid::dimension, HostGrid >::Traits Traits
the Traits
Definition: identitygrid.hh:121
Dune::IdentityGrid::overlapSize
unsigned int overlapSize(int codim) const
Size of the overlap on the leaf level.
Definition: identitygrid.hh:346
identitygridleafiterator.hh
The IdentityGridLeafIterator class.
Dune::Capabilities::isLeafwiseConforming
Specialize with 'true' if implementation guarantees a conforming leaf grid. (default=false)
Definition: common/capabilities.hh:112
Dune::IdentityGrid::leafbegin
Traits::template Codim< codim >::template Partition< PiType >::LeafIterator leafbegin() const
Iterator to first leaf entity of given codim.
Definition: identitygrid.hh:202
Dune::IdentityGridLeafIndexSet
Definition: identitygridindexsets.hh:95
Dune::Capabilities::hasEntity::v
static const bool v
Definition: common/capabilities.hh:57
Dune::IdentityGrid::entity
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
Create Entity from EntitySeed.
Definition: identitygrid.hh:278
Dune::IdentityGrid::GridFamily
IdentityGridFamily< HostGrid::dimension, HostGrid > GridFamily
type of the used GridFamily for this grid
Definition: identitygrid.hh:118
Dune::IdentityGridEntity
The implementation of entities in a IdentityGrid.
Definition: identitygridentity.hh:18
Dune::EntitySeed::impl
Implementation & impl()
access to the underlying implementation
Definition: common/entityseed.hh:57
Dune::Capabilities::hasEntity
Specialize with 'true' for all codims that a grid implements entities for. (default=false)
Definition: common/capabilities.hh:55
Dune::IdentityGridGeometry
Definition: identitygridgeometry.hh:17
Dune::IdentityGrid::comm
const CollectiveCommunication< No_Comm > & comm() const
dummy collective communication
Definition: identitygrid.hh:382
Dune::GridError
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:16
Dune::IdentityGridHierarchicIterator
Iterator over the descendants of an entity.
Definition: identitygridentity.hh:30
Dune::IdentityGrid::leafend
Traits::template Codim< codim >::LeafIterator leafend() const
one past the end of the sequence of leaf entities
Definition: identitygrid.hh:195
Dune::IdentityGrid::hostgrid_
HostGrid * hostgrid_
The host grid which contains the actual grid hierarchy structure.
Definition: identitygrid.hh:409
Dune::EntitySeed::codimension
@ codimension
Definition: common/entityseed.hh:28
Dune::IdentityGrid
Provides a meta grid that is identical to its host.
Definition: identitygrid.hh:32
Dune::IdentityGrid::ctype
HostGrid::ctype ctype
The type used to store coordinates, inherited from the HostGrid.
Definition: identitygrid.hh:124
identitygridintersectioniterator.hh
The IdentityGridLeafIntersectionIterator and IdentityGridLevelIntersectionIterator classes.
identitygridentity.hh
The IdentityGridEntity class.
Dune::Capabilities::isLeafwiseConforming::v
static const bool v
Definition: common/capabilities.hh:114
Dune::DefaultLevelGridViewTraits
Definition: defaultgridview.hh:23
Dune::IdSet
Id Set Interface.
Definition: common/grid.hh:347
Dune::IdentityGrid::size
int size(int level, int codim) const
Number of grid entities per level and codim.
Definition: identitygrid.hh:216
Dune::IdentityGridLevelIntersectionIterator
Definition: identitygridentity.hh:24
Dune::IdentityGrid::mark
bool mark(int refCount, const typename Traits::template Codim< 0 >::Entity &e)
Mark entity for refinement.
Definition: identitygrid.hh:312
Dune::IdentityGridLevelIntersection
Definition: identitygridintersections.hh:189
Dune::IdentityGrid::getHostEntity
const HostGrid::Traits::template Codim< codim >::Entity & getHostEntity(const typename Traits::template Codim< codim >::Entity &e) const
Returns the hostgrid entity encapsulated in given IdentityGrid entity.
Definition: identitygrid.hh:401
Dune::IdentityGrid::globalIdSet
const Traits::GlobalIdSet & globalIdSet() const
Access to the GlobalIdSet.
Definition: identitygrid.hh:246
Dune::IdentityGrid::IdentityGrid
IdentityGrid(HostGrid &hostgrid)
Constructor.
Definition: identitygrid.hh:131
Dune::IdentityGrid::globalRefine
void globalRefine(int refCount)
Definition: identitygrid.hh:297
identitygridleveliterator.hh
The IdentityGridLevelIterator class.
Dune::IdentityGrid::size
int size(int codim) const
number of leaf entities per codim in this process
Definition: identitygrid.hh:227
Dune::IdentityGridLocalIdSet
Definition: identitygridindexsets.hh:246
identitygridhierarchiciterator.hh
The IdentityGridHierarchicIterator class.
Dune::GridTraits::Grid
GridImp Grid
The type that implements the grid.
Definition: common/grid.hh:1067
Dune::IdentityGrid::lend
Traits::template Codim< codim >::LevelIterator lend(int level) const
one past the end on this level
Definition: identitygrid.hh:167
Dune::IdentityGrid::getHostGrid
HostGridType & getHostGrid() const
Returns the hostgrid this IdentityGrid lives in.
Definition: identitygrid.hh:393
Dune::Capabilities::hasEntityIterator::v
static const bool v
Definition: common/capabilities.hh:73
Dune::IdentityGridFamily
Definition: identitygrid.hh:39
Dune::IdentityGrid::numBoundarySegments
size_t numBoundarySegments() const
returns the number of boundary segments within the macro grid
Definition: identitygrid.hh:222
Dune::IdentityGrid::getMark
int getMark(const typename Traits::template Codim< 0 >::Entity &e) const
Return refinement mark for entity.
Definition: identitygrid.hh:321
Dune::IdentityGrid::maxLevel
int maxLevel() const
Return maximum level defined in this grid.
Definition: identitygrid.hh:154
identitygridentityseed.hh
The IdentityGridEntitySeed class.
Dune::IdentityGrid::lend
Traits::template Codim< codim >::template Partition< PiType >::LevelIterator lend(int level) const
one past the end on this level
Definition: identitygrid.hh:181
Dune::Entity::impl
Implementation & impl()
access to the underlying implementation
Definition: common/entity.hh:78
capabilities.hh
A set of traits classes to store static information about grid implementation.
Dune::IdentityGrid::leafend
Traits::template Codim< codim >::template Partition< PiType >::LeafIterator leafend() const
one past the end of the sequence of leaf entities
Definition: identitygrid.hh:209
Dune::GridDefaultImplementation
Definition: common/geometry.hh:24
Dune::IdentityGrid::lbegin
Traits::template Codim< codim >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
Definition: identitygrid.hh:160
Dune::HostGridAccess
provides access to host grid objects from GeometryGrid
Definition: identitygrid.hh:36
Dune::IdentityGrid::lbegin
Traits::template Codim< codim >::template Partition< PiType >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
Definition: identitygrid.hh:174
Dune::IdentityGrid::postAdapt
void postAdapt()
Clean up refinement markers.
Definition: identitygrid.hh:339
Dune::IdentityGrid::levelIndexSet
const Traits::LevelIndexSet & levelIndexSet(int level) const
Access to the LevelIndexSets.
Definition: identitygrid.hh:258
Dune::Capabilities::isLevelwiseConforming
Specialize with 'true' if implementation guarantees conforming level grids. (default=false)
Definition: common/capabilities.hh:103
Dune::GridTraits
A traits struct that collects all associated types of one grid model.
Definition: common/grid.hh:1064
Dune::EntitySeed
Store a reference to an entity with a minimal memory footprint.
Definition: common/entityseed.hh:23
Dune::IdentityGridLevelIndexSet
Definition: identitygridindexsets.hh:18
Dune::IdentityGrid::localIdSet
const Traits::LocalIdSet & localIdSet() const
Access to the LocalIdSet.
Definition: identitygrid.hh:252
Dune::IdentityGridLeafIterator
Iterator over all entities of a given codimension and level of a grid.
Definition: identitygridleafiterator.hh:19
identitygridgeometry.hh
The IdentityGridGeometry class and its specializations.
Dune::IdentityGrid::HostGridType
HostGrid HostGridType
Definition: identitygrid.hh:111
Dune::DefaultLeafGridViewTraits
Definition: defaultgridview.hh:206
Dune::IdentityGridEntitySeed
The EntitySeed class provides the minimal information needed to restore an Entity using the grid.
Definition: identitygridentityseed.hh:21
Dune::IdentityGridLeafIntersectionIterator
Iterator over all element neighbors.
Definition: identitygridentity.hh:27
Dune::IdentityGridLeafIntersection
An intersection with a leaf neighbor element.
Definition: identitygridintersections.hh:30
Dune::IdentityGrid::leafbegin
Traits::template Codim< codim >::LeafIterator leafbegin() const
Iterator to first leaf entity of given codim.
Definition: identitygrid.hh:188
Dune::IndexSet::size
IndexType size(GeometryType type) const
Return total number of entities of given geometry type in entity set .
Definition: indexidset.hh:220
Dune::IndexSet
Index Set Interface base class.
Definition: common/grid.hh:346
Dune::IdentityGridLevelIterator
Iterator over all entities of a given codimension and level of a grid.
Definition: identitygridentity.hh:21
Dune::IdentityGrid::size
int size(int level, GeometryType type) const
number of entities per level, codim and geometry type in this process
Definition: identitygrid.hh:233
Dune::IdentityGrid::size
int size(GeometryType type) const
number of leaf entities per codim and geometry type in this process
Definition: identitygrid.hh:239
grid.hh
Different resources needed by all grid implementations.
Dune
Include standard header files.
Definition: agrid.hh:58
Dune::VTK::GeometryType
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:180
Dune::IdentityGrid::leafIndexSet
const Traits::LeafIndexSet & leafIndexSet() const
Access to the LeafIndexSet.
Definition: identitygrid.hh:269
Dune::IdentityGrid::adapt
bool adapt()
Triggers the grid refinement process.
Definition: identitygrid.hh:333
Dune::IdentityGridGlobalIdSet
Definition: identitygridindexsets.hh:194
Dune::IdentityGrid::~IdentityGrid
~IdentityGrid()
Desctructor.
Definition: identitygrid.hh:141