1 #ifndef DUNE_IDENTITYGRID_HH
2 #define DUNE_IDENTITYGRID_HH
11 #include <dune/common/collectivecommunication.hh>
12 #include <dune/grid/common/capabilities.hh>
13 #include <dune/grid/common/grid.hh>
14 #include <dune/common/timer.hh>
30 template <
class HostGr
id>
35 template<
class Gr
id >
40 template<
int dim,
class HostGr
id>
45 HostGrid::dimensionworld,
60 typename HostGrid::Traits::GlobalIdSet::IdType,
62 typename HostGrid::Traits::LocalIdSet::IdType,
63 CollectiveCommunication<IdentityGrid<HostGrid> >,
64 DefaultLevelGridViewTraits,
65 DefaultLeafGridViewTraits,
82 template <
class HostGr
id>
84 public GridDefaultImplementation <HostGrid::dimension, HostGrid::dimensionworld, double, IdentityGridFamily<HostGrid::dimension,HostGrid> >
95 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp_>
98 template<
int codim, PartitionIteratorType pitype,
class Gr
idImp_>
102 template<
int codim_,
int dim_,
class Gr
idImp_>
123 typedef typename HostGrid::ctype
ctype;
130 leafIndexSet_(*this),
142 for (
size_t i=0; i<levelIndexSets_.size(); i++)
143 if (levelIndexSets_[i])
144 delete (levelIndexSets_[i]);
157 typename Traits::template Codim<codim>::LevelIterator
lbegin (
int level)
const{
164 typename Traits::template Codim<codim>::LevelIterator
lend (
int level)
const{
170 template<
int codim, PartitionIteratorType PiType>
171 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lbegin (
int level)
const{
177 template<
int codim, PartitionIteratorType PiType>
178 typename Traits::template Codim<codim>::template Partition<PiType>::LevelIterator
lend (
int level)
const{
185 typename Traits::template Codim<codim>::LeafIterator
leafbegin()
const {
192 typename Traits::template Codim<codim>::LeafIterator
leafend()
const {
198 template<
int codim, PartitionIteratorType PiType>
199 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafbegin()
const {
205 template<
int codim, PartitionIteratorType PiType>
206 typename Traits::template Codim<codim>::template Partition<PiType>::LeafIterator
leafend()
const {
213 int size (
int level,
int codim)
const {
230 int size (
int level, GeometryType type)
const {
231 return levelIndexSets_[level]->size(type);
236 int size (GeometryType type)
const
258 DUNE_THROW(GridError,
"levelIndexSet of nonexisting level " << level <<
" requested!");
259 return *levelIndexSets_[level];
266 return leafIndexSet_;
271 template <
class EntitySeed >
272 typename Traits::template Codim<EntitySeed::codimension>::EntityPointer
275 typedef typename Traits::template Codim<EntitySeed::codimension>::EntityPointer EntityPointer;
278 return EntityPointer(EntityPointerImp(
this,
hostgrid_->entityPointer(seed.hostEntitySeed())));
304 bool mark(
int refCount,
const typename Traits::template Codim<0>::EntityPointer & e)
306 return hostgrid_->mark(refCount, *getHostEntityPointer<0>(*e));
313 int getMark(
const typename Traits::template Codim<0>::EntityPointer & e)
const
315 return hostgrid_->getMark(*getHostEntityPointer<0>(*e));
351 return hostgrid_->overlapSize(level,codim);
357 return hostgrid_->ghostSize(level,codim);
367 void loadBalance(
int strategy,
int minlevel,
int depth,
int maxlevel,
int minelement){
368 DUNE_THROW(NotImplemented,
"IdentityGrid::loadBalance()");
382 template<
class T,
template<
class>
class P,
int codim>
383 void communicate (T& t, InterfaceType iftype, CommunicationDirection dir,
int level);
389 template<
class DataHandle>
390 void communicate (DataHandle& data, InterfaceType iftype, CommunicationDirection dir,
int level)
const
393 template<
class DataHandle>
394 void communicate (DataHandle& data, InterfaceType iftype, CommunicationDirection dir)
const
400 const CollectiveCommunication<IdentityGrid>&
comm ()
const
419 typename HostGrid::Traits::template Codim<codim>::EntityPointer
getHostEntityPointer(
const typename Traits::template Codim<codim>::Entity& e)
const
421 return getRealImplementation(e).hostEntity_;
441 for (
int i=levelIndexSets_.size(); i<=
maxLevel(); i++) {
444 levelIndexSets_.push_back(p);
448 if (levelIndexSets_[i])
449 levelIndexSets_[i]->update(*
this, i);
451 leafIndexSet_.
update(*
this);
456 CollectiveCommunication<IdentityGrid> ccobj;
459 std::vector<IdentityGridLevelIndexSet<const IdentityGrid<HostGrid> >*> levelIndexSets_;
475 namespace Capabilities
478 template<
class HostGr
id,
int codim>
481 static const bool v = hasEntity<HostGrid,codim>::v;
486 template<
class HostGr
id>
489 static const bool v = isParallel<HostGrid>::v;
495 template<
class HostGr
id>
498 static const bool v = isLevelwiseConforming<HostGrid>::v;
502 template<
class HostGr
id>
505 static const bool v = isLeafwiseConforming<HostGrid>::v;