3 #ifndef DUNE_GEOGRID_GRID_HH 4 #define DUNE_GEOGRID_GRID_HH 6 #include <dune/common/deprecated.hh> 23 template<
class HostGr
id >
73 template<
class HostGr
id,
class CoordFunction = DefaultCoordFunction< HostGr
id >,
class Allocator = std::allocator<
void > >
77 < HostGrid::dimension, CoordFunction::dimRange, typename HostGrid::ctype,
78 GeoGrid::GridFamily< HostGrid, CoordFunction, Allocator > >,
86 < HostGrid::dimension, CoordFunction::dimRange,
typename HostGrid::ctype,
111 typedef typename GridFamily::Traits
Traits;
120 template<
int codim >
205 typedef typename Traits::ctype
ctype;
225 GeometryGrid ( HostGrid &hostGrid, CoordFunction &coordFunction,
const Allocator &allocator = Allocator() )
226 : hostGrid_( &hostGrid ),
227 coordFunction_( &coordFunction ),
228 removeHostGrid_( false ),
229 levelIndexSets_( hostGrid_->maxLevel()+1, nullptr, allocator ),
230 storageAllocator_( allocator )
242 GeometryGrid ( HostGrid *hostGrid, CoordFunction *coordFunction,
const Allocator &allocator = Allocator() )
243 : hostGrid_( hostGrid ),
244 coordFunction_( coordFunction ),
245 removeHostGrid_( true ),
246 levelIndexSets_( hostGrid_->maxLevel()+1, nullptr, allocator ),
247 storageAllocator_( allocator )
259 GeometryGrid ( HostGrid *hostGrid,
const Allocator &allocator = Allocator() )
260 : hostGrid_( hostGrid ),
261 coordFunction_( new CoordFunction( this->hostGrid() ) ),
262 removeHostGrid_( true ),
263 levelIndexSets_( hostGrid_->maxLevel()+1, nullptr, allocator ),
264 storageAllocator_( allocator )
272 for(
unsigned int i = 0; i < levelIndexSets_.size(); ++i )
274 if( levelIndexSets_[ i ] )
275 delete( levelIndexSets_[ i ] );
278 if( removeHostGrid_ )
280 delete coordFunction_;
299 return hostGrid().maxLevel();
310 int size (
int level,
int codim )
const 354 return hostGrid().numBoundarySegments( );
361 globalIdSet_ = GlobalIdSet( hostGrid().globalIdSet() );
362 assert( globalIdSet_ );
369 localIdSet_ = LocalIdSet( hostGrid().localIdSet() );
370 assert( localIdSet_ );
376 assert( levelIndexSets_.size() == (size_t)(maxLevel()+1) );
377 if( (level < 0) || (level > maxLevel()) )
379 DUNE_THROW(
GridError,
"LevelIndexSet for nonexisting level " << level
383 LevelIndexSet *&levelIndexSet = levelIndexSets_[ level ];
385 levelIndexSet =
new LevelIndexSet( hostGrid().levelIndexSet( level ) );
386 assert( levelIndexSet );
387 return *levelIndexSet;
393 leafIndexSet_.reset( hostGrid().leafIndexSet() );
394 assert( leafIndexSet_ );
395 return leafIndexSet_;
400 hostGrid().globalRefine( refCount );
406 return hostGrid().mark( refCount, getHostEntity< 0 >( entity ) );
411 return hostGrid().getMark( getHostEntity< 0 >( entity ) );
416 return hostGrid().preAdapt();
421 bool ret = hostGrid().adapt();
428 hostGrid().postAdapt();
442 const CollectiveCommunication &
comm ()
const 444 return hostGrid().comm();
461 const bool gridChanged= hostGrid().loadBalance();
482 template<
class DataHandle,
class Data >
486 typedef GeoGrid :: CommDataHandle< Grid, DataHandleIF > WrappedDataHandle;
488 WrappedDataHandle wrappedDataHandle( *
this, datahandle );
489 const bool gridChanged = hostGrid().loadBalance( wrappedDataHandle );
515 template<
class EntitySeed >
520 return EntityImpl( *
this, seed );
531 typedef typename LevelGridView::GridViewImp ViewImp;
532 return LevelGridView( ViewImp( *
this, hostGrid().
levelGridView( level ) ) );
538 typedef typename LeafGridView::GridViewImp ViewImp;
539 return LeafGridView( ViewImp( *
this, hostGrid().
leafGridView() ) );
572 const int newNumLevels = maxLevel()+1;
573 const int oldNumLevels = levelIndexSets_.size();
575 for(
int i = newNumLevels; i < oldNumLevels; ++i )
577 if( levelIndexSets_[ i ] )
578 delete levelIndexSets_[ i ];
580 levelIndexSets_.resize( newNumLevels,
nullptr );
584 using Base::getRealImplementation;
595 template<
int codim >
599 return getRealImplementation( entity ).hostEntity();
604 return storageAllocator_.allocate( size );
609 storageAllocator_.deallocate( (
char *)p, size );
613 HostGrid *
const hostGrid_;
614 CoordFunction *coordFunction_;
615 bool removeHostGrid_;
616 mutable std::vector< LevelIndexSet *, typename Allocator::template rebind< LevelIndexSet * >::other > levelIndexSets_;
617 mutable LeafIndexSet leafIndexSet_;
618 mutable GlobalIdSet globalIdSet_;
619 mutable LocalIdSet localIdSet_;
620 mutable typename Allocator::template rebind< char >::other storageAllocator_;
628 template<
class HostGr
id,
class CoordFunction,
class Allocator >
629 template<
int codim >
631 :
public Base::template
Codim< codim >
672 template< PartitionIteratorType pitype >
706 #endif // #ifndef DUNE_GEOGRID_GRID_HH Include standard header files.
Definition: agrid.hh:58
const CoordFunction & coordFunction() const
obtain constant reference to the coordinate function
Definition: geometrygrid/grid.hh:587
static const HostGrid::template Codim< codim >::Entity & getHostEntity(const typename Codim< codim >::Entity &entity)
Definition: geometrygrid/grid.hh:597
const LocalIdSet & localIdSet() const
Definition: geometrygrid/grid.hh:366
Grid< dim, dimworld, ct, GridFamily >::LevelGridView levelGridView(const Grid< dim, dimworld, ct, GridFamily > &grid, int level)
level grid view for the given grid and level.
Definition: common/grid.hh:792
Traits::LeafIndexSet LeafIndexSet
type of leaf index set
Definition: geometrygrid/grid.hh:159
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator LevelIterator
Definition: geometrygrid/grid.hh:680
const LevelIndexSet & levelIndexSet(int level) const
Definition: geometrygrid/grid.hh:374
traits structure containing types for a codimension
Definition: geometrygrid/grid.hh:121
Traits::LeafIntersectionIterator LeafIntersectionIterator
iterator over intersections with other entities on the leaf level
Definition: geometrygrid/grid.hh:131
Definition: geometrygrid/entity.hh:58
const HostGrid & hostGrid() const
obtain constant reference to the host grid
Definition: geometrygrid/grid.hh:548
const GlobalIdSet & globalIdSet() const
Definition: geometrygrid/grid.hh:358
Traits::GlobalIdSet GlobalIdSet
type of global id set
Definition: geometrygrid/grid.hh:181
const LeafIndexSet & leafIndexSet() const
Definition: geometrygrid/grid.hh:390
GridFamily::Traits Traits
type of the grid traits
Definition: geometrygrid/grid.hh:112
Definition: geometrygrid/backuprestore.hh:21
grid wrapper replacing the geometriesGeometryGrid wraps another DUNE grid and replaces its geometry b...
Definition: declaration.hh:10
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:373
GridFamily::Traits::LevelGridView LevelGridView
type of view for level grid
Definition: geometrygrid/grid.hh:143
LevelGridView levelGridView(int level) const
View for a grid level.
Definition: geometrygrid/grid.hh:529
int size(int codim) const
obtain number of leaf entities
Definition: geometrygrid/grid.hh:321
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:75
Definition: geometrygrid/entity.hh:55
~GeometryGrid()
destructor
Definition: geometrygrid/grid.hh:270
Traits::template Codim< EntitySeed::codimension >::Entity entity(const EntitySeed &seed) const
obtain Entity from EntitySeed
Definition: geometrygrid/grid.hh:517
GridFamily::Traits::LeafGridView LeafGridView
type of view for leaf grid
Definition: geometrygrid/grid.hh:141
Definition: geometrygrid/geometry.hh:86
Traits::template Codim< codim >::Geometry Geometry
type of world geometry
Definition: geometrygrid/grid.hh:655
Partition< All_Partition >::LevelIterator LevelIterator
type of level iterator
Definition: geometrygrid/grid.hh:699
Definition: geometrygrid/intersection.hh:19
GeometryGrid(HostGrid *hostGrid, const Allocator &allocator=Allocator())
constructor
Definition: geometrygrid/grid.hh:259
Definition: identity.hh:12
size_t numBoundarySegments() const
returns the number of boundary segments within the macro grid
Definition: geometrygrid/grid.hh:352
HostGrid::ctype ctype
field type of the coordinate vector
Definition: coordfunction.hh:52
Traits::LevelIntersectionIterator LevelIntersectionIterator
iterator over intersections with other entities on the same level
Definition: geometrygrid/grid.hh:133
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:16
Definition: geometrygrid/gridfamily.hh:32
CoordFunction & coordFunction()
obtain mutable reference to the coordinate function.
Definition: geometrygrid/grid.hh:590
Definition: geometrygrid/grid.hh:24
void postAdapt()
Definition: geometrygrid/grid.hh:426
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
bool adapt()
Definition: geometrygrid/grid.hh:419
Definition: geometrygrid/gridview.hh:27
int size(int level, int codim) const
obtain number of entites on a level
Definition: geometrygrid/grid.hh:310
Definition: geometrygrid/datahandle.hh:23
provides access to host grid objects from GeometryGrid
Definition: identitygrid.hh:36
Store a reference to an entity with a minimal memory footprint.
Definition: common/entityseed.hh:23
bool mark(int refCount, const typename Codim< 0 >::Entity &entity)
Definition: geometrygrid/grid.hh:404
Definition: geometrygrid/grid.hh:673
LeafGridView leafGridView() const
View for the leaf grid.
Definition: geometrygrid/grid.hh:536
Traits::CollectiveCommunication CollectiveCommunication
communicator with all other processes having some part of the grid
Definition: geometrygrid/grid.hh:209
GeometryGrid(HostGrid *hostGrid, CoordFunction *coordFunction, const Allocator &allocator=Allocator())
constructor
Definition: geometrygrid/grid.hh:242
Partition< All_Partition >::LeafIterator LeafIterator
type of leaf iterator
Definition: geometrygrid/grid.hh:690
void * allocateStorage(std::size_t size) const
Definition: geometrygrid/grid.hh:602
Traits::template Codim< codim >::Entity Entity
type of entity
Definition: geometrygrid/grid.hh:640
actual implementation of the entity
Definition: geometrygrid/entity.hh:32
Definition: common/geometry.hh:24
Definition: geometrygrid/gridfamily.hh:48
void update()
update grid caches
Definition: geometrygrid/grid.hh:567
Traits::LocalIdSet LocalIdSet
type of local id set
Definition: geometrygrid/grid.hh:198
const CollectiveCommunication & comm() const
obtain CollectiveCommunication object
Definition: geometrygrid/grid.hh:442
bool preAdapt()
Definition: geometrygrid/grid.hh:414
int getMark(const typename Codim< 0 >::Entity &entity) const
Definition: geometrygrid/grid.hh:409
int size(int level, GeometryType type) const
obtain number of entites on a level
Definition: geometrygrid/grid.hh:334
GeometryGrid(HostGrid &hostGrid, CoordFunction &coordFunction, const Allocator &allocator=Allocator())
constructor
Definition: geometrygrid/grid.hh:225
Different resources needed by all grid implementations.
int maxLevel() const
obtain maximal grid level
Definition: geometrygrid/grid.hh:297
void deallocateStorage(void *p, std::size_t size) const
Definition: geometrygrid/grid.hh:607
int size(GeometryType type) const
obtain number of leaf entities
Definition: geometrygrid/grid.hh:343
Traits::LevelIndexSet LevelIndexSet
type of level index set
Definition: geometrygrid/grid.hh:169
Traits::HierarchicIterator HierarchicIterator
iterator over the grid hierarchy
Definition: geometrygrid/grid.hh:129
Grid< dim, dimworld, ct, GridFamily >::LeafGridView leafGridView(const Grid< dim, dimworld, ct, GridFamily > &grid)
leaf grid view for the given grid
Definition: common/grid.hh:809
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator LeafIterator
Definition: geometrygrid/grid.hh:677
Traits::template Codim< codim >::LocalGeometry LocalGeometry
type of local geometry
Definition: geometrygrid/grid.hh:665
Definition: geometrygrid/indexsets.hh:25
HostGrid & hostGrid()
obtain mutable reference to the host grid
Definition: geometrygrid/grid.hh:554
static void adapt(CoordFunctionInterface &coordFunction)
Definition: coordfunction.hh:321
void globalRefine(int refCount)
Definition: geometrygrid/grid.hh:398