5#ifndef DUNE_GEOGRID_GRID_HH
6#define DUNE_GEOGRID_GRID_HH
10#include <dune/common/shared_ptr.hh>
27 template<
class HostGr
id >
77 template<
class HostGr
id,
class CoordFunction = DefaultCoordFunction< HostGr
id >,
class Allocator = std::allocator<
void > >
81 < HostGrid::dimension, CoordFunction::dimRange, typename HostGrid::ctype,
82 GeoGrid::GridFamily< HostGrid, CoordFunction, Allocator > >,
90 < HostGrid::dimension, CoordFunction::dimRange,
typename HostGrid::ctype,
116 typedef typename GridFamily::Traits
Traits;
124 template<
int codim >
210 typedef typename Traits::ctype
ctype;
230 : hostGrid_(
Dune::stackobject_to_shared_ptr(
hostGrid) ),
232 levelIndexSets_( hostGrid_->
maxLevel()+1 ),
233 storageAllocator_( allocator )
248 levelIndexSets_( hostGrid_->
maxLevel()+1 ),
249 storageAllocator_( allocator )
263 coordFunction_(
std::make_shared<CoordFunction>( this->
hostGrid() ) ),
264 levelIndexSets_( hostGrid_->
maxLevel()+1 ),
265 storageAllocator_( allocator )
295 int size (
int level,
int codim )
const
319 int size (
int level, GeometryType type )
const
328 int size ( GeometryType type )
const
339 return hostGrid().numBoundarySegments( );
347 assert( globalIdSet_ );
355 assert( localIdSet_ );
361 assert( levelIndexSets_.size() == (
size_t)(
maxLevel()+1) );
362 if( (level < 0) || (level >
maxLevel()) )
364 DUNE_THROW(
GridError,
"LevelIndexSet for nonexisting level " << level
368 auto& levelIndexSetPtr = levelIndexSets_[ level ];
369 if( !levelIndexSetPtr )
371 assert( levelIndexSetPtr );
372 return *levelIndexSetPtr;
379 assert( leafIndexSet_ );
380 return leafIndexSet_;
385 hostGrid().globalRefine( refCount );
389 bool mark (
int refCount,
const typename Codim< 0 >::Entity &entity_ )
394 int getMark (
const typename Codim< 0 >::Entity &entity_ )
const
446 const bool gridChanged=
hostGrid().loadBalance();
467 template<
class DataHandle,
class Data >
468 bool loadBalance ( CommDataHandleIF< DataHandle, Data > &datahandle )
470 typedef CommDataHandleIF< DataHandle, Data > DataHandleIF;
471 typedef GeoGrid :: CommDataHandle< Grid, DataHandleIF > WrappedDataHandle;
473 WrappedDataHandle wrappedDataHandle( *
this, datahandle );
474 const bool gridChanged =
hostGrid().loadBalance( wrappedDataHandle );
500 template<
class EntitySeed >
504 typedef typename Traits::template Codim< EntitySeed::codimension >::EntityImpl EntityImpl;
505 return EntityImpl( *
this, seed );
516 typedef typename LevelGridView::GridViewImp ViewImp;
523 typedef typename LeafGridView::GridViewImp ViewImp;
557 levelIndexSets_.resize(
maxLevel()+1 );
570 template<
int codim >
571 static const typename HostGrid::template Codim< codim >::Entity &
574 return entity.impl().hostEntity();
579 return storageAllocator_.allocate(
size );
584 storageAllocator_.deallocate( (
char *)p,
size );
588 std::shared_ptr<HostGrid>
const hostGrid_;
589 std::shared_ptr<CoordFunction> coordFunction_;
590 mutable std::vector<std::unique_ptr<LevelIndexSet>> levelIndexSets_;
594 mutable typename std::allocator_traits<Allocator>::template rebind_alloc< char > storageAllocator_;
602 template<
class HostGr
id,
class CoordFunction,
class Allocator >
603 template<
int codim >
605 :
public Base::template
Codim< codim >
646 template< PartitionIteratorType pitype >
652 typedef typename Traits::template Codim< codim >
653 ::template Partition< pitype >::LevelIterator
664 typedef typename Partition< All_Partition >::LeafIterator
LeafIterator;
673 typedef typename Partition< All_Partition >::LevelIterator
LevelIterator;
Include standard header files.
Definition agrid.hh:60
Wrapper class for entities.
Definition common/entity.hh:66
Store a reference to an entity with a minimal memory footprint.
Definition common/entityseed.hh:26
Base class for exceptions in Dune grid modules.
Definition exceptions.hh:20
Definition common/grid.hh:848
Definition geometrygrid/backuprestore.hh:27
static void adapt(CoordFunctionInterface &)
Definition coordfunction.hh:326
Definition geometrygrid/datahandle.hh:27
const LeafIndexSet & leafIndexSet() const
Definition geometrygrid/grid.hh:375
int maxLevel() const
Definition geometrygrid/grid.hh:282
friend class GeoGrid::Geometry
Definition geometrygrid/grid.hh:97
CoordFunction & coordFunction()
obtain mutable reference to the coordinate function.
Definition geometrygrid/grid.hh:565
int size(int codim) const
obtain number of leaf entities
Definition geometrygrid/grid.hh:306
int size(int level, GeometryType type) const
obtain number of entities on a level
Definition geometrygrid/grid.hh:319
friend struct HostGridAccess
Definition geometrygrid/grid.hh:103
const CoordFunction & coordFunction() const
Definition geometrygrid/grid.hh:562
void postAdapt()
Definition geometrygrid/grid.hh:411
static const HostGrid::template Codim< codim >::Entity & getHostEntity(const typename Codim< codim >::Entity &entity)
Definition geometrygrid/grid.hh:572
LeafGridView leafGridView() const
View for the leaf grid.
Definition geometrygrid/grid.hh:521
Traits::LevelIntersectionIterator LevelIntersectionIterator
Definition geometrygrid/grid.hh:137
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
obtain Entity from EntitySeed
Definition geometrygrid/grid.hh:502
LevelGridView levelGridView(int level) const
View for a grid level.
Definition geometrygrid/grid.hh:514
const LocalIdSet & localIdSet() const
Definition geometrygrid/grid.hh:351
GeometryGrid(std::shared_ptr< HostGrid > hostGrid, std::shared_ptr< CoordFunction > coordFunction, const Allocator &allocator=Allocator())
constructor
Definition geometrygrid/grid.hh:245
int size(int level, int codim) const
obtain number of entities on a level
Definition geometrygrid/grid.hh:295
Traits::LeafIndexSet LeafIndexSet
Definition geometrygrid/grid.hh:163
bool adapt()
Definition geometrygrid/grid.hh:404
const GlobalIdSet & globalIdSet() const
Definition geometrygrid/grid.hh:343
Traits::HierarchicIterator HierarchicIterator
Definition geometrygrid/grid.hh:133
Traits::Communication Communication
Definition geometrygrid/grid.hh:213
bool mark(int refCount, const typename Codim< 0 >::Entity &entity_)
Definition geometrygrid/grid.hh:389
const HostGrid & hostGrid() const
Definition geometrygrid/grid.hh:533
Traits::ctype ctype
Definition geometrygrid/grid.hh:210
const Communication & comm() const
obtain Communication object
Definition geometrygrid/grid.hh:427
GridFamily::Traits Traits
Definition geometrygrid/grid.hh:116
GridFamily::Traits::LevelGridView LevelGridView
Definition geometrygrid/grid.hh:147
HostGrid & hostGrid()
obtain mutable reference to the host grid
Definition geometrygrid/grid.hh:539
Traits::LevelIndexSet LevelIndexSet
Definition geometrygrid/grid.hh:173
int getMark(const typename Codim< 0 >::Entity &entity_) const
Definition geometrygrid/grid.hh:394
Traits::LocalIdSet LocalIdSet
Definition geometrygrid/grid.hh:202
void deallocateStorage(void *p, std::size_t size) const
Definition geometrygrid/grid.hh:582
Traits::GlobalIdSet GlobalIdSet
Definition geometrygrid/grid.hh:185
Traits::LeafIntersectionIterator LeafIntersectionIterator
Definition geometrygrid/grid.hh:135
void globalRefine(int refCount)
Definition geometrygrid/grid.hh:383
GeometryGrid(std::shared_ptr< HostGrid > hostGrid, const Allocator &allocator=Allocator())
constructor
Definition geometrygrid/grid.hh:261
GridFamily::Traits::LeafGridView LeafGridView
Definition geometrygrid/grid.hh:145
bool preAdapt()
Definition geometrygrid/grid.hh:399
size_t numBoundarySegments() const
returns the number of boundary segments within the macro grid
Definition geometrygrid/grid.hh:337
int size(GeometryType type) const
obtain number of leaf entities
Definition geometrygrid/grid.hh:328
const LevelIndexSet & levelIndexSet(int level) const
Definition geometrygrid/grid.hh:359
GeometryGrid(HostGrid &hostGrid, CoordFunction &coordFunction, const Allocator &allocator=Allocator())
constructor
Definition geometrygrid/grid.hh:229
void update()
update grid caches
Definition geometrygrid/grid.hh:552
void * allocateStorage(std::size_t size) const
Definition geometrygrid/grid.hh:577
actual implementation of the entity
Definition geometrygrid/entity.hh:34
Definition iterator.hh:374
Definition geometrygrid/intersectioniterator.hh:21
Definition geometrygrid/geometry.hh:89
Definition geometrygrid/grid.hh:30
traits structure containing types for a codimension
Definition geometrygrid/grid.hh:606
Definition geometrygrid/grid.hh:648
Definition geometrygrid/gridfamily.hh:35
Definition geometrygrid/gridfamily.hh:51
Definition geometrygrid/gridview.hh:91
IdenticalCoordFunction(Args &...)
Definition identity.hh:26
Definition geometrygrid/indexsets.hh:29
Definition geometrygrid/intersection.hh:22
Different resources needed by all grid implementations.
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator LevelIterator
Definition geometrygrid/grid.hh:654
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator LeafIterator
Definition geometrygrid/grid.hh:651