3 #ifndef DUNE_IDENTITYGRID_HH
4 #define DUNE_IDENTITYGRID_HH
13 #include <dune/common/parallel/collectivecommunication.hh>
14 #include <dune/grid/common/capabilities.hh>
15 #include <dune/grid/common/grid.hh>
16 #include <dune/common/timer.hh>
32 template <
class HostGr
id>
37 template<
class Gr
id >
38 struct HostGridAccess;
42 template<
int dim,
class HostGr
id>
47 HostGrid::dimensionworld,
62 typename HostGrid::Traits::GlobalIdSet::IdType,
64 typename HostGrid::Traits::LocalIdSet::IdType,
65 CollectiveCommunication<IdentityGrid<HostGrid> >,
66 DefaultLevelGridViewTraits,
67 DefaultLeafGridViewTraits,
84 template <
class HostGr
id>
86 public GridDefaultImplementation <HostGrid::dimension, HostGrid::dimensionworld, double, IdentityGridFamily<HostGrid::dimension,HostGrid> >
97 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp_>
100 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp_>
104 template<
int codim_,
int dim_,
class Gr
idImp_>
125 typedef typename HostGrid::ctype
ctype;
132 leafIndexSet_(*this),
144 for (
size_t i=0; i<levelIndexSets_.size(); i++)
145 if (levelIndexSets_[i])
146 delete (levelIndexSets_[i]);
159 typename Traits::template Codim<codim>::LevelIterator
lbegin (
int level)
const {
166 typename Traits::template Codim<codim>::LevelIterator
lend (
int level)
const {
172 template<
int codim, PartitionIteratorType PiType>
173 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lbegin (
int level)
const {
179 template<
int codim, PartitionIteratorType PiType>
180 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lend (
int level)
const {
187 typename Traits::template Codim<codim>::LeafIterator
leafbegin()
const {
194 typename Traits::template Codim<codim>::LeafIterator
leafend()
const {
200 template<
int codim, PartitionIteratorType PiType>
201 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafbegin()
const {
207 template<
int codim, PartitionIteratorType PiType>
208 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafend()
const {
215 int size (
int level,
int codim)
const {
232 int size (
int level, GeometryType type)
const {
233 return levelIndexSets_[level]->size(type);
238 int size (GeometryType type)
const
260 DUNE_THROW(GridError,
"levelIndexSet of nonexisting level " << level <<
" requested!");
261 return *levelIndexSets_[level];
268 return leafIndexSet_;
273 template <
class EntitySeed >
274 typename Traits::template Codim<EntitySeed::codimension>::EntityPointer
277 typedef typename Traits::template Codim<EntitySeed::codimension>::EntityPointer EntityPointer;
280 return EntityPointer(EntityPointerImp(
this,
hostgrid_->entityPointer(this->getRealImplementation(seed).hostEntitySeed())));
306 bool mark(
int refCount,
const typename Traits::template Codim<0>::EntityPointer & e)
308 return hostgrid_->mark(refCount, *getHostEntityPointer<0>(*e));
315 int getMark(
const typename Traits::template Codim<0>::EntityPointer & e)
const
317 return hostgrid_->getMark(*getHostEntityPointer<0>(*e));
353 return hostgrid_->overlapSize(level,codim);
359 return hostgrid_->ghostSize(level,codim);
369 void loadBalance(
int strategy,
int minlevel,
int depth,
int maxlevel,
int minelement){
370 DUNE_THROW(NotImplemented,
"IdentityGrid::loadBalance()");
384 template<
class T,
template<
class>
class P,
int codim>
385 void communicate (T& t, InterfaceType iftype, CommunicationDirection dir,
int level);
391 template<
class DataHandle>
392 void communicate (DataHandle& data, InterfaceType iftype, CommunicationDirection dir,
int level)
const
395 template<
class DataHandle>
396 void communicate (DataHandle& data, InterfaceType iftype, CommunicationDirection dir)
const
402 const CollectiveCommunication<IdentityGrid>&
comm ()
const
421 typename HostGrid::Traits::template Codim<codim>::EntityPointer
getHostEntityPointer(
const typename Traits::template Codim<codim>::Entity& e)
const
423 return this->getRealImplementation(e).hostEntity_;
443 for (
int i=levelIndexSets_.size(); i<=
maxLevel(); i++) {
446 levelIndexSets_.push_back(p);
450 if (levelIndexSets_[i])
451 levelIndexSets_[i]->update(*
this, i);
453 leafIndexSet_.
update(*
this);
458 CollectiveCommunication<IdentityGrid> ccobj;
461 std::vector<IdentityGridLevelIndexSet<const IdentityGrid<HostGrid> >*> levelIndexSets_;
477 namespace Capabilities
480 template<
class HostGr
id,
int codim>
483 static const bool v = hasEntity<HostGrid,codim>::v;
488 template<
class HostGr
id>
491 static const bool v = isParallel<HostGrid>::v;
497 template<
class HostGr
id>
500 static const bool v = isLevelwiseConforming<HostGrid>::v;
504 template<
class HostGr
id>
507 static const bool v = isLeafwiseConforming<HostGrid>::v;