dune-grid  3.0-git
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/collectivecommunication.hh>
16 #include <dune/grid/common/grid.hh>
17 
18 // The components of the IdentityGrid interface
28 
29 namespace Dune
30 {
31  // Forward declaration
32  template <class HostGrid>
33  class IdentityGrid;
34 
35  // External forward declarations
36  template< class Grid >
38 
39  template<int dim, class HostGrid>
41  {
42 
43  public:
44 
45  typedef GridTraits<
46  dim,
47  HostGrid::dimensionworld,
61  typename HostGrid::Traits::GlobalIdSet::IdType,
63  typename HostGrid::Traits::LocalIdSet::IdType,
64  CollectiveCommunication<IdentityGrid<HostGrid> >,
68  > Traits;
69 
70  };
71 
72  //**********************************************************************
73  //
74  // --IdentityGrid
75  //
76  //************************************************************************
84  template <class HostGrid>
85  class IdentityGrid
86  : public GridDefaultImplementation<HostGrid::dimension, HostGrid::dimensionworld,
87  typename HostGrid::ctype, IdentityGridFamily<HostGrid::dimension, HostGrid> >
88  {
89  friend class IdentityGridLevelIndexSet<const IdentityGrid<HostGrid> >;
90  friend class IdentityGridLeafIndexSet<const IdentityGrid<HostGrid> >;
91  friend class IdentityGridGlobalIdSet<const IdentityGrid<HostGrid> >;
92  friend class IdentityGridLocalIdSet<const IdentityGrid<HostGrid> >;
93  friend class IdentityGridHierarchicIterator<const IdentityGrid<HostGrid> >;
94  friend class IdentityGridLevelIntersectionIterator<const IdentityGrid<HostGrid> >;
95  friend class IdentityGridLeafIntersectionIterator<const IdentityGrid<HostGrid> >;
96 
97  template<int codim, PartitionIteratorType pitype, class GridImp_>
99 
100  template<int codim, PartitionIteratorType pitype, class GridImp_>
102 
103 
104  template<int codim_, int dim_, class GridImp_>
105  friend class IdentityGridEntity;
106 
107  friend struct HostGridAccess< IdentityGrid< HostGrid > >;
108 
109  public:
110 
112  typedef HostGrid HostGridType;
113 
114  //**********************************************************
115  // The Interface Methods
116  //**********************************************************
117 
120 
123 
125  typedef typename HostGrid::ctype ctype;
126 
127 
132  explicit IdentityGrid(HostGrid& hostgrid) :
133  hostgrid_(&hostgrid),
134  leafIndexSet_(*this),
135  globalIdSet_(*this),
136  localIdSet_(*this)
137  {
138  setIndices();
139  }
140 
143  {
144  // Delete level index sets
145  for (size_t i=0; i<levelIndexSets_.size(); i++)
146  if (levelIndexSets_[i])
147  delete (levelIndexSets_[i]);
148  }
149 
150 
155  int maxLevel() const {
156  return hostgrid_->maxLevel();
157  }
158 
160  template<int codim>
161  typename Traits::template Codim<codim>::LevelIterator lbegin (int level) const {
163  }
164 
165 
167  template<int codim>
168  typename Traits::template Codim<codim>::LevelIterator lend (int level) const {
170  }
171 
172 
174  template<int codim, PartitionIteratorType PiType>
175  typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator lbegin (int level) const {
177  }
178 
179 
181  template<int codim, PartitionIteratorType PiType>
182  typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator lend (int level) const {
184  }
185 
186 
188  template<int codim>
189  typename Traits::template Codim<codim>::LeafIterator leafbegin() const {
191  }
192 
193 
195  template<int codim>
196  typename Traits::template Codim<codim>::LeafIterator leafend() const {
198  }
199 
200 
202  template<int codim, PartitionIteratorType PiType>
203  typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator leafbegin() const {
205  }
206 
207 
209  template<int codim, PartitionIteratorType PiType>
210  typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator leafend() const {
212  }
213 
214 
217  int size (int level, int codim) const {
218  return hostgrid_->size(level,codim);
219  }
220 
223  size_t numBoundarySegments () const {
224  return hostgrid_->numBoundarySegments();
225  }
226 
228  int size (int codim) const {
229  return leafIndexSet().size(codim);
230  }
231 
232 
234  int size (int level, GeometryType type) const {
235  return levelIndexSets_[level]->size(type);
236  }
237 
238 
240  int size (GeometryType type) const
241  {
242  return leafIndexSet().size(type);
243  }
244 
245 
247  const typename Traits::GlobalIdSet& globalIdSet() const {
248  return globalIdSet_;
249  }
250 
251 
253  const typename Traits::LocalIdSet& localIdSet() const {
254  return localIdSet_;
255  }
256 
257 
259  const typename Traits::LevelIndexSet& levelIndexSet(int level) const
260  {
261  if (level < 0 || level > maxLevel())
262  {
263  DUNE_THROW(GridError, "levelIndexSet of nonexisting level " << level << " requested!");
264  }
265  return *levelIndexSets_[level];
266  }
267 
268 
270  const typename Traits::LeafIndexSet& leafIndexSet() const
271  {
272  return leafIndexSet_;
273  }
274 
275 
277  template < class EntitySeed >
278  typename Traits::template Codim<EntitySeed::codimension>::Entity
279  entity(const EntitySeed& seed) const
280  {
281  typedef IdentityGridEntity<
283  HostGrid::dimension,
284  const typename Traits::Grid
285  > EntityImp;
286 
287  return EntityImp(this, hostgrid_->entity(this->getRealImplementation(seed).hostEntitySeed()));
288  }
289 
290 
293 
294 
298  void globalRefine (int refCount)
299  {
300  hostgrid_->globalRefine(refCount);
301  }
302 
313  bool mark(int refCount, const typename Traits::template Codim<0>::Entity & e)
314  {
315  return hostgrid_->mark(refCount, getHostEntity<0>(e));
316  }
317 
322  int getMark(const typename Traits::template Codim<0>::Entity & e) const
323  {
324  return hostgrid_->getMark(getHostEntity<0>(e));
325  }
326 
328  bool preAdapt() {
329  return hostgrid_->preAdapt();
330  }
331 
332 
334  bool adapt()
335  {
336  return hostgrid_->adapt();
337  }
338 
340  void postAdapt() {
341  return hostgrid_->postAdapt();
342  }
343 
347  unsigned int overlapSize(int codim) const {
348  return hostgrid_->overlapSize(codim);
349  }
350 
351 
353  unsigned int ghostSize(int codim) const {
354  return hostgrid_->ghostSize(codim);
355  }
356 
357 
359  unsigned int overlapSize(int level, int codim) const {
360  return hostgrid_->overlapSize(level,codim);
361  }
362 
363 
365  unsigned int ghostSize(int level, int codim) const {
366  return hostgrid_->ghostSize(level,codim);
367  }
368 
369 
370 #if 0
371 
376  void loadBalance(int strategy, int minlevel, int depth, int maxlevel, int minelement){
377  DUNE_THROW(NotImplemented, "IdentityGrid::loadBalance()");
378  }
379 
391  template<class T, template<class> class P, int codim>
392  void communicate (T& t, InterfaceType iftype, CommunicationDirection dir, int level);
393 
398  template<class DataHandle>
399  void communicate (DataHandle& data, InterfaceType iftype, CommunicationDirection dir, int level) const
400  {}
401 
402  template<class DataHandle>
403  void communicate (DataHandle& data, InterfaceType iftype, CommunicationDirection dir) const
404  {}
405 #endif
406 
407 
410  {
411  return ccobj;
412  }
413 
414 
415  // **********************************************************
416  // End of Interface Methods
417  // **********************************************************
418 
421  {
422  return *hostgrid_;
423  }
424 
425 
427  template <int codim>
428  const typename HostGrid::Traits::template Codim<codim>::Entity& getHostEntity(const typename Traits::template Codim<codim>::Entity& e) const
429  {
430  return this->getRealImplementation(e).hostEntity_;
431  }
432 
433  protected:
434 
436  HostGrid* hostgrid_;
437 
438  private:
439 
441  void setIndices()
442  {
443  localIdSet_.update();
444 
445  globalIdSet_.update();
446 
447  // //////////////////////////////////////////
448  // Create the index sets
449  // //////////////////////////////////////////
450  for (int i=levelIndexSets_.size(); i<=maxLevel(); i++) {
453  levelIndexSets_.push_back(p);
454  }
455 
456  for (int i=0; i<=maxLevel(); i++)
457  if (levelIndexSets_[i])
458  levelIndexSets_[i]->update(*this, i);
459 
460  leafIndexSet_.update(*this);
461 
462  }
463 
465  CollectiveCommunication<IdentityGrid> ccobj;
466 
468  std::vector<IdentityGridLevelIndexSet<const IdentityGrid<HostGrid> >*> levelIndexSets_;
469 
472 
475 
478 
479  }; // end Class IdentityGrid
480 
481 
482 
483 
484  namespace Capabilities
485  {
489  template<class HostGrid, int codim>
490  struct hasEntity<IdentityGrid<HostGrid>, codim>
491  {
492  static const bool v = hasEntity<HostGrid,codim>::v;
493  };
494 
498  template<class HostGrid>
500  {
502  };
503 
507  template<class HostGrid>
509  {
511  };
512  } // end namespace Capabilities
513 
514 } // namespace Dune
515 
516 #endif // DUNE_GRID_IDENTITYGRID_HH
Dune::EntitySeed
Store a reference to an entity with a minimal memory footprint.
Definition: common/entityseed.hh:23
Dune::IdentityGrid::globalRefine
void globalRefine(int refCount)
Definition: identitygrid.hh:298
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< IdentityGrid< HostGrid > >, DefaultLevelGridViewTraits, DefaultLeafGridViewTraits, IdentityGridEntitySeed > Traits
Definition: identitygrid.hh:68
Dune::IdentityGridLocalIdSet
Definition: identitygridindexsets.hh:246
grid.hh
Different resources needed by all grid implementations.
Dune::IdentityGridEntity
The implementation of entities in a IdentityGrid.
Definition: identitygridentity.hh:18
Dune::IdentityGrid::ghostSize
unsigned int ghostSize(int level, int codim) const
Size of the ghost cell layer on a given level.
Definition: identitygrid.hh:365
identitygridindexsets.hh
The index and id sets for the IdentityGrid class.
Dune::IdentityGrid::mark
bool mark(int refCount, const typename Traits::template Codim< 0 >::Entity &e)
Mark entity for refinement.
Definition: identitygrid.hh:313
Dune::IdentityGrid::hostgrid_
HostGrid * hostgrid_
The host grid which contains the actual grid hierarchy structure.
Definition: identitygrid.hh:436
Dune::IdentityGrid::preAdapt
bool preAdapt()
returns true, if at least one entity is marked for adaption
Definition: identitygrid.hh:328
Dune::GridDefaultImplementation< HostGrid::dimension, HostGrid::dimensionworld, HostGrid::ctype, IdentityGridFamily< HostGrid::dimension, HostGrid > >::loadBalance
bool loadBalance()
default implementation of load balance does nothing and returns false
Definition: common/grid.hh:1034
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:175
Dune::EntitySeed::codimension
Definition: common/entityseed.hh:28
Dune
Include standard header files.
Definition: agrid.hh:59
identitygridleafiterator.hh
The IdentityGridLeafIterator class.
Dune::IdentityGridEntitySeed
The EntitySeed class provides the minimal information needed to restore an Entity using the grid.
Definition: identitygridentityseed.hh:21
Dune::Grid::CollectiveCommunication
GridFamily::Traits::CollectiveCommunication CollectiveCommunication
A type that is a model of Dune::CollectiveCommunication. It provides a portable way for collective co...
Definition: common/grid.hh:519
Dune::HostGridAccess
provides access to host grid objects from GeometryGrid
Definition: identitygrid.hh:37
Dune::IdentityGrid::leafbegin
Traits::template Codim< codim >::LeafIterator leafbegin() const
Iterator to first leaf entity of given codim.
Definition: identitygrid.hh:189
Dune::IdentityGrid::globalIdSet
const Traits::GlobalIdSet & globalIdSet() const
Access to the GlobalIdSet.
Definition: identitygrid.hh:247
Dune::IdentityGrid::HostGridType
HostGrid HostGridType
Definition: identitygrid.hh:112
identitygridintersectioniterator.hh
The IdentityGridLeafIntersectionIterator and IdentityGridLevelIntersectionIterator classes.
Dune::IdentityGrid::maxLevel
int maxLevel() const
Return maximum level defined in this grid.
Definition: identitygrid.hh:155
identitygridentitypointer.hh
The IdentityGridEntityPointer class.
Dune::IdentityGridLevelIntersection
Definition: identitygridintersections.hh:194
Dune::VTK::GeometryType
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
Dune::IdentityGrid
Provides a meta grid that is identical to its host.
Definition: identitygrid.hh:33
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:210
Dune::IdentityGridGlobalIdSet
Definition: identitygridindexsets.hh:194
Dune::IdentityGrid::size
int size(int codim) const
number of leaf entities per codim in this process
Definition: identitygrid.hh:228
Dune::IdentityGridLeafIterator
Iterator over all entities of a given codimension and level of a grid.
Definition: identitygridleafiterator.hh:19
Dune::IdentityGrid::size
int size(int level, int codim) const
Number of grid entities per level and codim.
Definition: identitygrid.hh:217
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:428
Dune::Capabilities::isLeafwiseConforming
Specialize with 'true' if implementation guarantees a conforming leaf grid. (default=false)
Definition: common/capabilities.hh:86
Dune::IdentityGrid::lbegin
Traits::template Codim< codim >::LevelIterator lbegin(int level) const
Iterator to first entity of given codim on level.
Definition: identitygrid.hh:161
Dune::IdentityGridLevelIndexSet
Definition: identitygridindexsets.hh:18
Dune::Grid::Codim
A Traits struct that collects all associated types of one implementation.
Definition: common/grid.hh:414
Dune::Capabilities::hasEntity
Specialize with 'true' for all codims that a grid implements entities for. (default=false)
Definition: common/capabilities.hh:55
identitygridleveliterator.hh
The IdentityGridLevelIterator class and its specializations.
identitygridhierarchiciterator.hh
The IdentityGridHierarchicIterator class.
Dune::IdentityGridLeafIntersection
An intersection with a leaf neighbor element.
Definition: identitygridintersections.hh:29
Dune::GridTraits
A traits struct that collects all associated types of one grid model.
Definition: common/grid.hh:1156
Dune::InterfaceType
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:84
Dune::IdentityGridLeafIndexSet
Definition: identitygridindexsets.hh:95
Dune::IdentityGrid::lend
Traits::template Codim< codim >::LevelIterator lend(int level) const
one past the end on this level
Definition: identitygrid.hh:168
Dune::Capabilities::isLeafwiseConforming::v
static const bool v
Definition: common/capabilities.hh:88
Dune::IdentityGrid::ctype
HostGrid::ctype ctype
The type used to store coordinates, inherited from the HostGrid.
Definition: identitygrid.hh:125
Dune::IdSet
Id Set Interface.
Definition: common/grid.hh:347
Dune::Capabilities::isLevelwiseConforming
Specialize with 'true' if implementation guarantees conforming level grids. (default=false)
Definition: common/capabilities.hh:77
Dune::IdentityGridGeometry
Definition: identitygridgeometry.hh:17
Dune::DefaultLeafGridViewTraits
Definition: defaultgridview.hh:221
Dune::IndexSet::size
IndexType size(GeometryType type) const
Return total number of entities of given geometry type in entity set .
Definition: indexidset.hh:215
capabilities.hh
A set of traits classes to store static information about grid implementation.
Dune::GridDefaultImplementation< HostGrid::dimension, HostGrid::dimensionworld, HostGrid::ctype, IdentityGridFamily< HostGrid::dimension, HostGrid > >::communicate
void communicate(CommDataHandleIF< DataHandleImp, DataTypeImp > &data, InterfaceType iftype, CommunicationDirection dir, int level) const
Definition: common/grid.hh:1023
Dune::IdentityGrid::postAdapt
void postAdapt()
Clean up refinement markers.
Definition: identitygrid.hh:340
identitygridentityseed.hh
The IdentityGridEntitySeed class.
Dune::GridDefaultImplementation
Definition: common/geometry.hh:24
Dune::IdentityGridLevelIterator
Iterator over all entities of a given codimension and level of a grid.
Definition: identitygridentity.hh:24
Dune::IndexSet
Index Set Interface base class.
Definition: common/grid.hh:346
identitygridentity.hh
The IdentityGridEntity class.
Dune::IdentityGrid::Traits
IdentityGridFamily< HostGrid::dimension, HostGrid >::Traits Traits
the Traits
Definition: identitygrid.hh:122
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:234
Dune::GridDefaultImplementation< HostGrid::dimension, HostGrid::dimensionworld, HostGrid::ctype, IdentityGridFamily< HostGrid::dimension, HostGrid > >::getRealImplementation
static std::conditional< std::is_reference< InterfaceType >::value, typename std::add_lvalue_reference< typename ReturnImplementationType< typename std::remove_reference< InterfaceType >::type >::ImplementationType >::type, typename std::remove_const< typename ReturnImplementationType< typename std::remove_reference< InterfaceType >::type >::ImplementationType >::type >::type getRealImplementation(InterfaceType &&i)
return real implementation of interface class
Definition: common/grid.hh:1119
Dune::GridTraits::Grid
GridImp Grid
The type that implements the grid.
Definition: common/grid.hh:1159
Dune::Capabilities::hasEntity::v
static const bool v
Definition: common/capabilities.hh:57
Dune::Grid::Codim::Entity
GridFamily::Traits::template Codim< cd >::Entity Entity
A type that is a model of a Dune::Entity<cd,dim,...>.
Definition: common/grid.hh:423
Dune::IdentityGrid::getHostGrid
HostGridType & getHostGrid() const
Returns the hostgrid this IdentityGrid lives in.
Definition: identitygrid.hh:420
Dune::IdentityGrid::getMark
int getMark(const typename Traits::template Codim< 0 >::Entity &e) const
Return refinement mark for entity.
Definition: identitygrid.hh:322
Dune::Capabilities::isLevelwiseConforming::v
static const bool v
Definition: common/capabilities.hh:79
Dune::IdentityGrid::localIdSet
const Traits::LocalIdSet & localIdSet() const
Access to the LocalIdSet.
Definition: identitygrid.hh:253
Dune::IdentityGrid::comm
const CollectiveCommunication< IdentityGrid > & comm() const
dummy collective communication
Definition: identitygrid.hh:409
Dune::IdentityGrid::size
int size(GeometryType type) const
number of leaf entities per codim and geometry type in this process
Definition: identitygrid.hh:240
identitygridgeometry.hh
The IdentityGridGeometry class and its specializations.
Dune::DefaultLevelGridViewTraits
Definition: defaultgridview.hh:23
Dune::IdentityGrid::leafIndexSet
const Traits::LeafIndexSet & leafIndexSet() const
Access to the LeafIndexSet.
Definition: identitygrid.hh:270
Dune::IdentityGrid::numBoundarySegments
size_t numBoundarySegments() const
returns the number of boundary segments within the macro grid
Definition: identitygrid.hh:223
Dune::IdentityGrid::levelIndexSet
const Traits::LevelIndexSet & levelIndexSet(int level) const
Access to the LevelIndexSets.
Definition: identitygrid.hh:259
Dune::IdentityGrid::overlapSize
unsigned int overlapSize(int level, int codim) const
Size of the overlap on a given level.
Definition: identitygrid.hh:359
Dune::IdentityGrid::leafend
Traits::template Codim< codim >::LeafIterator leafend() const
one past the end of the sequence of leaf entities
Definition: identitygrid.hh:196
Dune::IdentityGridLeafIntersectionIterator
Iterator over all element neighbors.
Definition: identitygridentity.hh:30
Dune::IdentityGrid::entity
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
Create Entity from EntitySeed.
Definition: identitygrid.hh:279
Dune::GridError
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:16
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:182
Dune::IdentityGrid::~IdentityGrid
~IdentityGrid()
Desctructor.
Definition: identitygrid.hh:142
Dune::IdentityGrid::overlapSize
unsigned int overlapSize(int codim) const
Size of the overlap on the leaf level.
Definition: identitygrid.hh:347
Dune::IdentityGridHierarchicIterator
Iterator over the descendants of an entity.
Definition: identitygridentity.hh:33
Dune::CommunicationDirection
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:168
Dune::IdentityGrid::leafbegin
Traits::template Codim< codim >::template Partition< PiType >::LeafIterator leafbegin() const
Iterator to first leaf entity of given codim.
Definition: identitygrid.hh:203
Dune::IdentityGrid::ghostSize
unsigned int ghostSize(int codim) const
Size of the ghost cell layer on the leaf level.
Definition: identitygrid.hh:353
Dune::IdentityGridFamily
Definition: identitygrid.hh:40
Dune::IdentityGrid::adapt
bool adapt()
Triggers the grid refinement process.
Definition: identitygrid.hh:334
Dune::IdentityGrid::IdentityGrid
IdentityGrid(HostGrid &hostgrid)
Constructor.
Definition: identitygrid.hh:132
Dune::IdentityGrid::GridFamily
IdentityGridFamily< HostGrid::dimension, HostGrid > GridFamily
type of the used GridFamily for this grid
Definition: identitygrid.hh:119
Dune::IdentityGridLevelIntersectionIterator
Definition: identitygridentity.hh:27