3 #ifndef DUNE_GEOGRID_GRID_HH
4 #define DUNE_GEOGRID_GRID_HH
6 #include <dune/common/nullptr.hh>
7 #include <dune/common/static_assert.hh>
24 template<
class HostGr
id >
74 template<
class HostGr
id,
class CoordFunction = DefaultCoordFunction< HostGr
id >,
class Allocator = std::allocator<
void > >
78 < HostGrid::dimension, CoordFunction::dimRange, typename HostGrid::ctype,
79 GeoGrid::GridFamily< HostGrid, CoordFunction, Allocator > >,
87 < HostGrid::dimension, CoordFunction::dimRange,
typename HostGrid::ctype,
114 typedef typename GridFamily::Traits
Traits;
123 template<
int codim >
144 template< PartitionIteratorType pitype >
217 typedef typename Traits::ctype
ctype;
238 : hostGrid_( &hostGrid ),
239 coordFunction_( coordFunction ),
240 removeHostGrid_( false ),
241 levelIndexSets_( hostGrid_->
maxLevel()+1, nullptr, allocator ),
242 storageAllocator_( allocator )
254 GeometryGrid ( HostGrid *hostGrid, CoordFunction *coordFunction,
const Allocator &allocator = Allocator() )
255 : hostGrid_( hostGrid ),
256 coordFunction_( *coordFunction ),
257 removeHostGrid_( true ),
258 levelIndexSets_( hostGrid_->
maxLevel()+1, nullptr, allocator ),
259 storageAllocator_( allocator )
266 for(
unsigned int i = 0; i < levelIndexSets_.size(); ++i )
268 if( levelIndexSets_[ i ] )
269 delete( levelIndexSets_[ i ] );
272 if( removeHostGrid_ )
274 delete &coordFunction_;
304 int size (
int level,
int codim )
const
348 return hostGrid().numBoundarySegments( );
352 template<
int codim >
355 return levelView( level ).template begin< codim >();
358 template<
int codim >
361 return levelView( level ).template end< codim >();
364 template<
int codim, PartitionIteratorType pitype >
365 typename Codim< codim >::template Partition< pitype >::LevelIterator
368 return levelView( level ).template begin< codim, pitype >();
371 template<
int codim, PartitionIteratorType pitype >
372 typename Codim< codim >::template Partition< pitype >::LevelIterator
375 return levelView( level ).template end< codim, pitype >();
378 template<
int codim >
381 return leafView().template begin< codim >();
384 template<
int codim >
387 return leafView().template end< codim >();
390 template<
int codim, PartitionIteratorType pitype >
391 typename Codim< codim >::template Partition< pitype >::LeafIterator
394 return leafView().template begin< codim, pitype >();
397 template<
int codim, PartitionIteratorType pitype >
398 typename Codim< codim >::template Partition< pitype >::LeafIterator
401 return leafView().template end< codim, pitype >();
408 assert( globalIdSet_ );
416 assert( localIdSet_ );
422 assert( levelIndexSets_.size() == (size_t)(
maxLevel()+1) );
423 if( (level < 0) || (level >
maxLevel()) )
425 DUNE_THROW(
GridError,
"LevelIndexSet for nonexisting level " << level
432 assert( levelIndexSet );
440 assert( leafIndexSet_ );
441 return leafIndexSet_;
446 hostGrid().globalRefine( refCount );
452 return hostGrid().mark( refCount, getHostEntity< 0 >( entity ) );
457 return hostGrid().getMark( getHostEntity< 0 >( entity ) );
486 return leafView().overlapSize( codim );
495 return leafView().ghostSize( codim );
505 return levelView( level ).overlapSize( codim );
515 return levelView( level ).ghostSize( codim );
531 template<
class DataHandle,
class Data >
537 levelView( level ).communicate( dataHandle, interface, direction );
552 template<
class DataHandle,
class Data >
557 leafView().communicate( dataHandle, interface, direction );
587 const bool gridChanged=
hostGrid().loadBalance();
608 template<
class DataHandle,
class Data >
609 bool loadBalance ( CommDataHandleIF< DataHandle, Data > &datahandle )
611 typedef CommDataHandleIF< DataHandle, Data > DataHandleIF;
612 typedef GeoGrid :: CommDataHandle< Grid, DataHandleIF > WrappedDataHandle;
614 WrappedDataHandle wrappedDataHandle( *
this, datahandle );
615 const bool gridChanged =
hostGrid().loadBalance( wrappedDataHandle );
623 template<
class EntitySeed >
624 typename Traits::template Codim< EntitySeed::codimension >::EntityPointer
628 return EntityPointerImpl( *
this, seed );
637 template< PartitionIteratorType pitype >
641 typedef typename View::GridViewImp ViewImp;
645 template< PartitionIteratorType pitype >
648 return levelView<pitype>(level);
652 template< PartitionIteratorType pitype >
656 typedef typename View::GridViewImp ViewImp;
660 template< PartitionIteratorType pitype >
663 return leafGridView<pitype>();
669 typedef typename LevelGridView::GridViewImp ViewImp;
682 typedef typename LeafGridView::GridViewImp ViewImp;
719 const int newNumLevels =
maxLevel()+1;
720 const int oldNumLevels = levelIndexSets_.size();
722 for(
int i = newNumLevels; i < oldNumLevels; ++i )
724 if( levelIndexSets_[ i ] )
725 delete levelIndexSets_[ i ];
727 levelIndexSets_.resize( newNumLevels,
nullptr );
737 return coordFunction_;
740 template<
int codim >
741 static const typename HostGrid::template Codim< codim >::Entity &
744 return getRealImplementation( entity ).hostEntity();
749 return storageAllocator_.allocate( size );
754 storageAllocator_.deallocate( (
char *)p, size );
758 HostGrid *
const hostGrid_;
759 CoordFunction &coordFunction_;
760 bool removeHostGrid_;
761 mutable std::vector< LevelIndexSet *, typename Allocator::template rebind< LevelIndexSet * >::other > levelIndexSets_;
765 mutable typename Allocator::template rebind< char >::other storageAllocator_;
773 template<
class HostGr
id,
class CoordFunction,
class Allocator >
774 template<
int codim >
775 struct GeometryGrid< HostGrid, CoordFunction, Allocator >::Codim
776 :
public Base::template Codim< codim >
823 template< PartitionIteratorType pitype >
857 #endif // #ifndef DUNE_GEOGRID_GRID_HH
void deallocateStorage(void *p, std::size_t size) const
Definition: geometrygrid/grid.hh:752
Codim< codim >::LeafIterator leafbegin() const
Definition: geometrygrid/grid.hh:379
int ghostSize(int codim) const
obtain size of ghost region for the leaf grid
Definition: geometrygrid/grid.hh:493
Definition: geometrygrid/datahandle.hh:20
void communicate(CommDataHandleIF< DataHandle, Data > &dataHandle, InterfaceType interface, CommunicationDirection direction, int level) const
communicate information on a grid level
Definition: geometrygrid/grid.hh:532
Definition: geometrygrid/gridfamily.hh:51
Partition< All_Partition >::LevelIterator LevelIterator
type of leaf iterator
Definition: geometrygrid/grid.hh:850
static ReturnImplementationType< InterfaceType >::ImplementationType & getRealImplementation(InterfaceType &i)
return real implementation of interface class
Definition: common/grid.hh:1223
GridFamily::Traits::template Partition< pitype >::LevelGridView LevelGridView
Definition: geometrygrid/grid.hh:148
bool mark(int refCount, const typename Codim< 0 >::Entity &entity)
Definition: geometrygrid/grid.hh:450
GeometryType
Type representing VTK's entity geometry types.
Definition: common.hh:178
traits structure containing types for a codimension
Definition: geometrygrid/grid.hh:124
Partition< pitype >::LevelGridView levelGridView(int level) const
Definition: geometrygrid/grid.hh:646
Traits::LevelIndexSet LevelIndexSet
type of level index set
Definition: geometrygrid/grid.hh:181
Definition: geometrygrid/grid.hh:25
Definition: geometrygrid/gridview.hh:27
void update()
update grid caches
Definition: geometrygrid/grid.hh:714
int size(int level, int codim) const
obtain number of entites on a level
Definition: geometrygrid/grid.hh:304
Partition< All_Partition >::LeafIterator LeafIterator
type of level iterator
Definition: geometrygrid/grid.hh:841
Traits::template Codim< codim >::Entity Entity
type of entity
Definition: geometrygrid/grid.hh:785
~GeometryGrid()
destructor
Definition: geometrygrid/grid.hh:264
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator LeafIterator
Definition: geometrygrid/grid.hh:828
CommunicationDirection
Define a type for communication direction parameter.
Definition: gridenums.hh:164
Traits::ctype ctype
type of vector coordinates (e.g., double)
Definition: geometrygrid/grid.hh:218
GeometryGrid(HostGrid *hostGrid, CoordFunction *coordFunction, const Allocator &allocator=Allocator())
constructor
Definition: geometrygrid/grid.hh:254
Definition: identity.hh:12
void postAdapt()
Definition: geometrygrid/grid.hh:472
Partition< pitype >::LeafGridView leafGridView() const
Definition: geometrygrid/grid.hh:661
const HostGrid & hostGrid() const
Definition: geometrygrid/grid.hh:696
Types for GridView.
Definition: geometrygrid/grid.hh:145
Partition< All_Partition >::LevelGridView LevelGridView
View types for All_Partition.
Definition: geometrygrid/grid.hh:154
size_t numBoundarySegments() const
returns the number of boundary segments within the macro grid
Definition: geometrygrid/grid.hh:346
bool adapt()
Definition: geometrygrid/grid.hh:465
const GlobalIdSet & globalIdSet() const
Definition: geometrygrid/grid.hh:404
static const HostGrid::template Codim< codim >::Entity & getHostEntity(const typename Codim< codim >::Entity &entity)
Definition: geometrygrid/grid.hh:742
const LevelIndexSet & levelIndexSet(int level) const
Definition: geometrygrid/grid.hh:420
static void adapt(CoordFunctionInterface &coordFunction)
Definition: coordfunction.hh:284
Traits::GlobalIdSet GlobalIdSet
type of global id set
Definition: geometrygrid/grid.hh:193
Codim< codim >::template Partition< pitype >::LevelIterator lend(int level) const
Definition: geometrygrid/grid.hh:373
Traits::HierarchicIterator HierarchicIterator
iterator over the grid hierarchy
Definition: geometrygrid/grid.hh:132
Codim< codim >::LeafIterator leafend() const
Definition: geometrygrid/grid.hh:385
Codim< codim >::LevelIterator lbegin(int level) const
Definition: geometrygrid/grid.hh:353
void globalRefine(int refCount)
Definition: geometrygrid/grid.hh:444
Definition: geometrygrid/entitypointer.hh:37
LevelGridView levelView(int level) const
View for a grid level for All_Partition.
Definition: geometrygrid/grid.hh:667
void * allocateStorage(std::size_t size) const
Definition: geometrygrid/grid.hh:747
void communicate(CommDataHandleIF< DataHandle, Data > &dataHandle, InterfaceType interface, CommunicationDirection direction) const
communicate information on leaf entities
Definition: geometrygrid/grid.hh:553
CommDataHandleIF describes the features of a data handle for communication in parallel runs using the...
Definition: datahandleif.hh:74
int maxLevel() const
obtain maximal grid level
Definition: geometrygrid/grid.hh:291
const LocalIdSet & localIdSet() const
Definition: geometrygrid/grid.hh:412
Definition: geometrygrid/intersection.hh:20
Traits::template Codim< EntitySeed::codimension >::EntityPointer entityPointer(const EntitySeed &seed) const
obtain EntityPointer from EntitySeed.
Definition: geometrygrid/grid.hh:625
LeafGridView leafView() const
View for the leaf grid for All_Partition.
Definition: geometrygrid/grid.hh:680
actual implementation of the entity
Definition: geometrygrid/entity.hh:34
Base class for exceptions in Dune grid modules.
Definition: exceptions.hh:16
HostGrid & hostGrid()
Definition: geometrygrid/grid.hh:701
const CollectiveCommunication & comm() const
obtain CollectiveCommunication object
Definition: geometrygrid/grid.hh:568
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:386
LeafGridView leafGridView() const
Definition: geometrygrid/grid.hh:686
int overlapSize(int level, int codim) const
obtain size of overlap region for a grid level
Definition: geometrygrid/grid.hh:503
int size(int codim) const
obtain number of leaf entities
Definition: geometrygrid/grid.hh:315
Partition< pitype >::LevelGridView levelView(int level) const
View for a grid level.
Definition: geometrygrid/grid.hh:638
GeometryGrid(HostGrid &hostGrid, CoordFunction &coordFunction, const Allocator &allocator=Allocator())
constructor
Definition: geometrygrid/grid.hh:237
bool preAdapt()
Definition: geometrygrid/grid.hh:460
Definition: geometrygrid/grid.hh:824
Traits::template Codim< codim >::Geometry Geometry
type of world geometry
Definition: geometrygrid/grid.hh:806
int ghostSize(int level, int codim) const
obtain size of ghost region for a grid level
Definition: geometrygrid/grid.hh:513
Traits::LevelIntersectionIterator LevelIntersectionIterator
iterator over intersections with other entities on the same level
Definition: geometrygrid/grid.hh:136
const CoordFunction & coordFunction() const
Definition: geometrygrid/grid.hh:735
int getMark(const typename Codim< 0 >::Entity &entity) const
Definition: geometrygrid/grid.hh:455
Store a reference to an entity with a minimal memory footprint.
Definition: common/entityseed.hh:23
int size(int level, GeometryType type) const
obtain number of entites on a level
Definition: geometrygrid/grid.hh:328
Different resources needed by all grid implementations.
Codim< codim >::template Partition< pitype >::LeafIterator leafbegin() const
Definition: geometrygrid/grid.hh:392
Definition: geometrygrid/entitypointer.hh:25
Codim< codim >::template Partition< pitype >::LeafIterator leafend() const
Definition: geometrygrid/grid.hh:399
GridFamily::Traits::template Partition< pitype >::LeafGridView LeafGridView
Definition: geometrygrid/grid.hh:150
Definition: common/geometry.hh:24
Codim< codim >::LevelIterator lend(int level) const
Definition: geometrygrid/grid.hh:359
GridFamily::Traits Traits
type of the grid traits
Definition: geometrygrid/grid.hh:115
int size(GeometryType type) const
obtain number of leaf entities
Definition: geometrygrid/grid.hh:337
Definition: geometrygrid/datahandle.hh:71
Definition: geometrygrid/entity.hh:57
LevelGridView levelGridView(int level) const
Definition: geometrygrid/grid.hh:674
InterfaceType
Parameter to be used for the communication functions.
Definition: gridenums.hh:80
Partition< All_Partition >::LeafGridView LeafGridView
Definition: geometrygrid/grid.hh:155
Traits::LeafIndexSet LeafIndexSet
type of leaf index set
Definition: geometrygrid/grid.hh:171
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator LevelIterator
Definition: geometrygrid/grid.hh:831
provides access to host grid objects
Definition: hostgridaccess.hh:25
const LeafIndexSet & leafIndexSet() const
Definition: geometrygrid/grid.hh:436
Definition: geometrygrid/backuprestore.hh:22
Partition< pitype >::LeafGridView leafView() const
View for the leaf grid.
Definition: geometrygrid/grid.hh:653
Traits::LeafIntersectionIterator LeafIntersectionIterator
iterator over intersections with other entities on the leaf level
Definition: geometrygrid/grid.hh:134
Definition: geometrygrid/geometry.hh:84
grid wrapper replacing the geometriesGeometryGrid wraps another DUNE grid and replaces its geometry b...
Definition: geometrygrid/declaration.hh:10
Codim< codim >::template Partition< pitype >::LevelIterator lbegin(int level) const
Definition: geometrygrid/grid.hh:366
Definition: geometrygrid/indexsets.hh:25
Traits::template Codim< codim >::LocalGeometry LocalGeometry
type of local geometry
Definition: geometrygrid/grid.hh:816
Traits::LocalIdSet LocalIdSet
type of local id set
Definition: geometrygrid/grid.hh:210
Traits::template Codim< codim >::EntityPointer EntityPointer
type of entity pointer
Definition: geometrygrid/grid.hh:791
Traits::CollectiveCommunication CollectiveCommunication
communicator with all other processes having some part of the grid
Definition: geometrygrid/grid.hh:221
Definition: geometrygrid/entity.hh:60
int overlapSize(int codim) const
obtain size of overlap region for the leaf grid
Definition: geometrygrid/grid.hh:484