1#ifndef DUNE_SPGRID_GRID_HH
2#define DUNE_SPGRID_GRID_HH
10#include <dune/common/parallel/mpicommunication.hh>
12#include <dune/grid/albertagrid/geometryreference.hh>
13#include <dune/grid/common/grid.hh>
14#include <dune/grid/common/adaptcallback.hh>
32 template<
class Gr
id >
38 template<
class,
class >
49 template<
class ct,
int dim,
template<
int >
class Ref =
SPIsotropicRefinement,
class Comm = MPI_Comm >
52 template<
class ct,
int dim,
template<
int >
class Ref =
SPIsotropicRefinement,
class Comm = No_Comm >
61 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
83 typedef Dune::EntityIterator< 0, const Grid, SPHierarchicIterator< const Grid, 0 > >
HierarchicIterator;
98 typedef Dune::Entity< codim, dim, const Grid, SPEntity >
Entity;
100 typedef Dune::EntitySeed< const Grid, SPEntitySeed< codim, const Grid > >
EntitySeed;
107 template< PartitionIteratorType pitype >
110 typedef Dune::EntityIterator< codim, const Grid, SPPartitionIterator< codim, const Grid > >
LevelIterator;
111 typedef Dune::EntityIterator< codim, const Grid, SPPartitionIterator< codim, const Grid > >
LeafIterator;
133 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
135 :
public GridDefaultImplementation< dim, dim, ct, SPGridFamily< ct, dim, Ref, Comm > >
138 typedef GridDefaultImplementation< dim, dim, ct, SPGridFamily< ct, dim, Ref, Comm > > Base;
170 template<
int codim >
172 : Base::template
Codim< codim >
195 typedef typename LevelGridView::Traits::GridViewImp LevelGridViewImpl;
196 typedef typename LeafGridView::Traits::GridViewImp LeafGridViewImpl;
217 return refCubes_.
get();
220 template<
int codim >
223 return refCubes_.template get< codim >();
235 int size (
const int level,
const int codim )
const
240 int size (
const int codim )
const
245 int size (
const int level,
const GeometryType &type )
const
250 int size (
const GeometryType &type )
const
257 assert( (level >= 0) && (level <=
maxLevel()) );
258 return levelGridViews_[ level ];
263 template<
int codim, PartitionIteratorType pitype >
264 typename Traits::template Codim< codim >::template Partition< pitype >::LevelIterator
265 lbegin (
const int level,
const unsigned int sweepDir = 0 )
const
268 return view.impl().template begin< codim, pitype >( sweepDir );
271 template<
int codim, PartitionIteratorType pitype >
272 typename Traits::template Codim< codim >::template Partition< pitype >::LevelIterator
273 lend (
const int level,
const unsigned int sweepDir = 0 )
const
276 return view.impl().template end< codim, pitype >( sweepDir );
279 template<
int codim >
280 typename Traits::template Codim< codim >::LevelIterator
281 lbegin (
const int level,
const unsigned int sweepDir = 0 )
const
284 return view.impl().template begin< codim >( sweepDir );
287 template<
int codim >
288 typename Traits::template Codim< codim >::LevelIterator
289 lend (
const int level,
const unsigned int sweepDir = 0 )
const
292 return view.impl().template end< codim >( sweepDir );
295 template<
int codim, PartitionIteratorType pitype >
296 typename Traits::template Codim< codim >::template Partition< pitype >::LeafIterator
300 return view.impl().template begin< codim, pitype >( sweepDir );
303 template<
int codim, PartitionIteratorType pitype >
304 typename Traits::template Codim< codim >::template Partition< pitype >::LeafIterator
305 leafend (
const unsigned int sweepDir = 0 )
const
308 return view.impl().template end< codim, pitype >( sweepDir );
311 template<
int codim >
312 typename Traits::template Codim< codim >::LeafIterator
316 return view.impl().template begin< codim >( sweepDir );
319 template<
int codim >
320 typename Traits::template Codim< codim >::LeafIterator
321 leafend (
const unsigned int sweepDir = 0 )
const
324 return view.impl().template end< codim >( sweepDir );
349 return hierarchicIndexSet_;
352 bool mark (
const int refCount,
const typename Codim< 0 >::Entity &e );
353 int getMark (
const typename Codim< 0 >::Entity &e )
const;
359 template<
class DataHandle >
360 bool adapt ( AdaptDataHandleInterface< This, DataHandle > &handle );
367 template<
class DataHandle >
369 AdaptDataHandleInterface< This, DataHandle > &handle,
382 int ghostSize (
const int level,
const int codim )
const
392 template<
class DataHandle,
class Data >
395 InterfaceType interface, CommunicationDirection dir,
399 return view.impl().communicate( data, interface, dir );
402 template<
class DataHandle,
class Data >
405 InterfaceType interface, CommunicationDirection dir )
const
408 return view.impl().communicate( data, interface, dir );
413 template<
class Seed >
418 typename EntityImpl::EntityInfo entityInfo(
gridLevel( seed.impl().level() ), seed.impl().id(), seed.impl().partitionNumber() );
419 return Entity( EntityImpl( std::move( entityInfo ) ) );
422 template<
int codim >
423 bool hasFather (
const Dune::Entity< codim, dimension, const This, SPEntity > &
entity )
const
425 return ((
entity.level() > 0) &&
entity.impl().entityInfo().hasFather());
430 return ((intersection.impl().gridLevel().level() > 0) && intersection.impl().entityInfo().hasFather());
433 template<
int codim >
434 Dune::Entity< codim, dimension, const This, SPEntity >
435 father (
const Dune::Entity< codim, dimension, const This, SPEntity > &
entity )
const
438 Dune::Entity< codim, dimension, const This, SPEntity >
father(
entity );
439 father.impl().entityInfo().up();
440 return std::move(
father );
443 Dune::Intersection< const This, SPIntersection< const This > >
447 typedef Dune::Intersection< const This, IntersectionImpl > Intersection;
450 typename IntersectionImpl::EntityInfo fatherInfo( intersection.impl().entityInfo() );
452 return Intersection( IntersectionImpl( std::move( fatherInfo ), intersection.indexInInside() ) );
462 std::size_t boundaryIndex (
const MultiIndex ¯oId,
463 const unsigned int partitionNumber,
464 const int face )
const;
466 typename Codim< 1 >::LocalGeometry localFaceGeometry (
int face )
const
469 return typename Codim< 1 >::LocalGeometry( *localFaceGeometry_[ face ] );
472 void createLocalGeometries ();
473 void setupMacroGrid ();
474 void setupBoundaryIndices ();
482 std::vector< std::unique_ptr< GridLevel > > gridLevels_;
483 std::vector< LevelGridView > levelGridViews_;
489 std::size_t boundarySize_;
490 std::vector< std::array< std::size_t, 2*dimension > > boundaryOffset_;
491 std::array< std::unique_ptr< const typename Codim< 1 >::LocalGeometryImpl >,
ReferenceCube::numFaces > localFaceGeometry_;
499 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
500 inline SPGrid< ct, dim, Ref, Comm >
504 globalMesh_( cells ),
506 leafGridView_( LeafGridViewImpl() ),
507 hierarchicIndexSet_( *this ),
510 createLocalGeometries();
515 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
520 globalMesh_( cells ),
522 leafGridView_( LeafGridViewImpl() ),
523 hierarchicIndexSet_( *this ),
526 createLocalGeometries();
531 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
536 globalMesh_( cells ),
538 leafGridView_( LeafGridViewImpl() ),
539 hierarchicIndexSet_( *this ),
542 createLocalGeometries();
547 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
552 globalMesh_( cells ),
554 leafGridView_( LeafGridViewImpl() ),
555 hierarchicIndexSet_( *this ),
558 createLocalGeometries();
563 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
565 : domain_(
std::move( other.domain_ ) ),
566 globalMesh_(
std::move( other.globalMesh_ ) ),
567 overlap_(
std::move( other.overlap_ ) ),
568 leafGridView_( LeafGridViewImpl() ),
569 hierarchicIndexSet_( *this ),
570 comm_(
std::move( other.comm_ ) )
572 createLocalGeometries();
577 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
585 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
593 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
600 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
607 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
608 template<
class DataHandle >
610 ::adapt ( AdaptDataHandleInterface< This, DataHandle > &handle )
616 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
621 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
625 for(
int i = 0; i < refCount; ++i )
627 gridLevels_.emplace_back(
new GridLevel( leafLevel(), policy ) );
628 levelGridViews_.push_back( LevelGridViewImpl( leafLevel() ) );
630 leafGridView_.impl().update( leafLevel() );
631 hierarchicIndexSet_.update();
635 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
636 template<
class DataHandle >
639 AdaptDataHandleInterface< This, DataHandle > &handle,
642 for(
int i = 0; i < refCount; ++i )
644 const LevelGridView fatherView = levelGridView( maxLevel() );
646 gridLevels_.emplace_back(
new GridLevel( leafLevel(), policy ) );
647 levelGridViews_.push_back( LevelGridViewImpl( leafLevel() ) );
649 hierarchicIndexSet_.update();
650 leafGridView_.impl().update( leafLevel() );
652 handle.preAdapt( leafLevel().size() );
654 const LevelIterator end = fatherView.template end< 0 >();
655 for( LevelIterator it = fatherView.template begin< 0 >(); it != end; ++it )
656 handle.postRefinement( *it );
662 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
670 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
674 assert( (level >= 0) && (level <
int( gridLevels_.size() )) );
675 return *gridLevels_[ level ];
679 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
683 assert( !gridLevels_.empty() );
684 return *gridLevels_.back();
688 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
691 return boundarySize_;
696 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
699 const unsigned int partitionNumber,
700 const int face )
const
702 assert( (face >= 0) && (face < 2*dimension) );
704 const LevelGridView ¯oView = levelGridView( 0 );
705 const GridLevel &gridLevel = macroView.impl().gridLevel();
706 const PartitionList &partitions = gridLevel.template partition< OverlapFront_Partition >();
707 const typename PartitionList::Partition &partition = partitions.partition( partitionNumber );
709 std::size_t index = 0;
710 std::size_t factor = 1;
711 for(
int i = 0; i < dimension; ++i )
717 const int k = (macroId[ i ] - partition.begin()[ i ]) >> 1;
718 const int w = (partition.end()[ i ] - partition.begin()[ i ]) >> 1;
719 assert( (k >= 0) && (k < w) );
720 index += std::size_t( k ) * factor;
721 factor *= std::size_t( w );
723 return index + boundaryOffset_[ partitionNumber - partitions.minNumber() ][ face ];
727 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
728 inline void SPGrid< ct, dim, Ref, Comm >::createLocalGeometries ()
732 const GlobalVector unitH( ctype( 1 ) );
733 for(
int face = 0; face < ReferenceCube::numFaces; ++face )
736 for(
int i = 0; i < dimension; ++i )
738 id += referenceCube().subId( 1, face );
739 const SPDirection< dimension > direction(
id );
741 GlobalVector origin( ctype( 0 ) );
742 origin[ face/2 ] = ctype( face & 1 );
743 const SPGeometryCache< ctype, dimension, 1 > cache( unitH, direction );
744 localFaceGeometry_[ face ].reset(
new LocalGeometryImpl( cache, origin ) );
749 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
750 inline void SPGrid< ct, dim, Ref, Comm >::setupMacroGrid ()
752 SPDecomposition< dimension > decomposition( globalMesh_, comm().size() );
754 GridLevel *leafLevel =
new GridLevel( *
this, decomposition );
755 gridLevels_.emplace_back( leafLevel );
756 levelGridViews_.push_back( LevelGridViewImpl( *leafLevel ) );
757 leafGridView_.impl().update( *leafLevel );
758 hierarchicIndexSet_.update();
759 setupBoundaryIndices();
763 template<
class ct,
int dim,
template<
int >
class Ref,
class Comm >
764 inline void SPGrid< ct, dim, Ref, Comm >::setupBoundaryIndices ()
766 const LevelGridView ¯oView = levelGridView( 0 );
767 const GridLevel &gridLevel = macroView.impl().gridLevel();
768 const PartitionList &partitions = gridLevel.template partition< OverlapFront_Partition >();
771 boundaryOffset_.resize( partitions.maxNumber() - partitions.minNumber() + 1 );
772 for(
typename PartitionList::Iterator it = partitions.begin(); it; ++it )
774 const int partitionIndex = it->number() - partitions.minNumber();
775 for(
int i = 0; i < dimension; ++i )
779 std::size_t size = 1;
780 for(
int j = 0; j < dimension; ++j )
781 size *= (i == j ? 1 : std::size_t( (it->end()[ j ] - it->begin()[ j ]) >> 1 ));
784 boundaryOffset_[ partitionIndex ][ 2*i ] = boundarySize_;
785 boundarySize_ += (it->boundary( 2*i ) ? size : 0);
788 boundaryOffset_[ partitionIndex ][ 2*i+1 ] = boundarySize_;
789 boundarySize_ += (it->boundary( 2*i+1 ) ? size : 0);
Definition: iostream.hh:7
Definition: communication.hh:24
Dune::CollectiveCommunication< Comm > CollectiveCommunication
Definition: communication.hh:25
Definition: communication.hh:77
each element is split into 2dim children.
Definition: refinement.hh:453
structured, parallel DUNE grid
Definition: grid.hh:136
Traits::template Codim< codim >::LevelIterator lend(const int level, const unsigned int sweepDir=0) const
Definition: grid.hh:289
Traits::Mesh Mesh
Definition: grid.hh:154
void globalRefine(const int refCount, const RefinementPolicy &policy=RefinementPolicy())
Definition: grid.hh:623
int size(const GeometryType &type) const
Definition: grid.hh:250
bool preAdapt()
Definition: grid.hh:594
int overlapSize(const int level, const int codim) const
Definition: grid.hh:372
bool adapt()
Definition: grid.hh:601
SPGrid(const This &)=delete
GridLevel::MultiIndex MultiIndex
Definition: grid.hh:189
Traits::GlobalIdSet GlobalIdSet
Definition: grid.hh:165
int getMark(const typename Codim< 0 >::Entity &e) const
Definition: grid.hh:587
const LocalIdSet & localIdSet() const
Definition: grid.hh:332
Base::LeafGridView LeafGridView
Definition: grid.hh:180
const HierarchicIndexSet & hierarchicIndexSet() const
Definition: grid.hh:347
const GridLevel & gridLevel(const int level) const
Definition: grid.hh:672
Traits::template Codim< codim >::LevelIterator lbegin(const int level, const unsigned int sweepDir=0) const
Definition: grid.hh:281
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafbegin(const unsigned int sweepDir=0) const
Definition: grid.hh:297
const GridLevel & leafLevel() const
Definition: grid.hh:681
Traits::LocalIdSet LocalIdSet
Definition: grid.hh:166
LeafGridView leafGridView() const
Definition: grid.hh:261
static const int dimensionworld
Definition: grid.hh:161
Traits::RefinementPolicy RefinementPolicy
Definition: grid.hh:156
SPGridFamily< ct, dim, Ref, Comm > GridFamily
Definition: grid.hh:147
SPCommunication< This, CommDataHandleIF< DataHandle, Data > > communicate(CommDataHandleIF< DataHandle, Data > &data, InterfaceType interface, CommunicationDirection dir, int level) const
Definition: grid.hh:394
Traits::template Codim< codim >::template Partition< pitype >::LeafIterator leafend(const unsigned int sweepDir=0) const
Definition: grid.hh:305
int overlapSize(const int codim) const
Definition: grid.hh:377
int ghostSize(const int codim) const
Definition: grid.hh:387
int size(const int codim) const
Definition: grid.hh:240
const LevelIndexSet & levelIndexSet(const int level) const
Definition: grid.hh:337
Traits::Refinement Refinement
Definition: grid.hh:155
Dune::Intersection< const This, SPIntersection< const This > > father(const Dune::Intersection< const This, SPIntersection< const This > > &intersection) const
Definition: grid.hh:444
const CollectiveCommunication & comm() const
Definition: grid.hh:664
Traits::template Codim< codim >::LeafIterator leafend(const unsigned int sweepDir=0) const
Definition: grid.hh:321
Traits::CollectiveCommunication CollectiveCommunication
Definition: grid.hh:168
const LeafIndexSet & leafIndexSet() const
Definition: grid.hh:342
std::size_t numBoundarySegments() const
Definition: grid.hh:689
SPCommunication< This, CommDataHandleIF< DataHandle, Data > > communicate(CommDataHandleIF< DataHandle, Data > &data, InterfaceType interface, CommunicationDirection dir) const
Definition: grid.hh:404
const ReferenceCube & referenceCube() const
Definition: grid.hh:215
ReferenceCube::ctype ctype
Definition: grid.hh:158
int size(const int level, const int codim) const
Definition: grid.hh:235
Base::LevelGridView LevelGridView
Definition: grid.hh:179
bool hasFather(const Dune::Entity< codim, dimension, const This, SPEntity > &entity) const
Definition: grid.hh:423
void postAdapt()
Definition: grid.hh:617
const GlobalIdSet & globalIdSet() const
Definition: grid.hh:327
const Domain & domain() const
Definition: grid.hh:226
LevelGridView levelGridView(int level) const
Definition: grid.hh:255
Traits::template Codim< Seed::codimension >::Entity entity(const Seed &seed) const
Definition: grid.hh:414
static const int dimension
Definition: grid.hh:160
int maxLevel() const
Definition: grid.hh:230
const Codim< codim >::ReferenceCube & referenceCube() const
Definition: grid.hh:221
LeafGridView::IndexSet LeafIndexSet
Definition: grid.hh:183
bool mark(const int refCount, const typename Codim< 0 >::Entity &e)
Definition: grid.hh:579
Traits::ReferenceCubeContainer ReferenceCubeContainer
Definition: grid.hh:151
int ghostSize(const int level, const int codim) const
Definition: grid.hh:382
Traits::ReferenceCube ReferenceCube
Definition: grid.hh:152
static const int numDirections
Definition: grid.hh:190
LevelGridView::IndexSet LevelIndexSet
Definition: grid.hh:182
GridFamily::Traits Traits
Definition: grid.hh:149
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator lend(const int level, const unsigned int sweepDir=0) const
Definition: grid.hh:273
bool hasFather(const Dune::Intersection< const This, SPIntersection< const This > > &intersection) const
Definition: grid.hh:428
SPGridLevel< This > GridLevel
Definition: grid.hh:187
Traits::template Codim< codim >::template Partition< pitype >::LevelIterator lbegin(const int level, const unsigned int sweepDir=0) const
Definition: grid.hh:265
Traits::Domain Domain
Definition: grid.hh:153
ReferenceCube::GlobalVector GlobalVector
Definition: grid.hh:163
Dune::Entity< codim, dimension, const This, SPEntity > father(const Dune::Entity< codim, dimension, const This, SPEntity > &entity) const
Definition: grid.hh:435
SPHierarchyIndexSet< const This > HierarchicIndexSet
Definition: grid.hh:185
SPGrid(const Domain &domain, const MultiIndex &cells, const CollectiveCommunication &comm=SPCommunicationTraits< Comm >::defaultComm())
Definition: grid.hh:501
Traits::template Codim< codim >::LeafIterator leafbegin(const unsigned int sweepDir=0) const
Definition: grid.hh:313
const MultiIndex & overlap() const
Definition: grid.hh:228
int size(const int level, const GeometryType &type) const
Definition: grid.hh:245
description of the computational domain
Definition: domain.hh:27
Definition: entity.hh:146
Definition: geometry.hh:87
Definition: geometry.hh:161
facility for writing and reading a SPGrid
Definition: grid.hh:33
Dune::GridView< SPGridViewTraits< const Grid > > LeafGridView
Definition: grid.hh:119
SPGrid< ct, dim, Ref, Comm > Grid
Definition: grid.hh:66
unsigned long LocalIdType
Definition: grid.hh:91
SPLocalIdSet< const Grid > LocalIdSet
Definition: grid.hh:89
SPReferenceCubeContainer< ct, dim > ReferenceCubeContainer
Definition: grid.hh:68
SPCommunicationTraits< Comm >::CollectiveCommunication CollectiveCommunication
Definition: grid.hh:75
Refinement::Policy RefinementPolicy
Definition: grid.hh:73
Ref< dim > Refinement
Definition: grid.hh:72
Dune::GridView< SPGridViewTraits< const Grid > > LevelGridView
Definition: grid.hh:118
SPDomain< ct, dim > Domain
Definition: grid.hh:70
LevelIntersection LeafIntersection
Definition: grid.hh:78
SPMesh< dim > Mesh
Definition: grid.hh:71
unsigned long GlobalIdType
Definition: grid.hh:90
SPGlobalIdSet< const Grid > GlobalIdSet
Definition: grid.hh:88
Dune::IntersectionIterator< const Grid, SPIntersectionIterator< const Grid >, SPIntersection< const Grid > > LevelIntersectionIterator
Definition: grid.hh:80
Dune::Intersection< const Grid, SPIntersection< const Grid > > LevelIntersection
Definition: grid.hh:77
Dune::EntityIterator< 0, const Grid, SPHierarchicIterator< const Grid, 0 > > HierarchicIterator
Definition: grid.hh:83
LevelIntersectionIterator LeafIntersectionIterator
Definition: grid.hh:81
LevelIndexSet LeafIndexSet
Definition: grid.hh:86
ReferenceCubeContainer::ReferenceCube ReferenceCube
Definition: grid.hh:69
SPIndexSet< const Grid > LevelIndexSet
Definition: grid.hh:85
Partition< All_Partition >::LevelIterator LevelIterator
Definition: grid.hh:114
Partition< All_Partition >::LeafIterator LeafIterator
Definition: grid.hh:115
Dune::EntitySeed< const Grid, SPEntitySeed< codim, const Grid > > EntitySeed
Definition: grid.hh:100
Dune::Geometry< dim - codim, dim, const Grid, SPGeometry > Geometry
Definition: grid.hh:104
SPLocalGeometry< dim - codim, dim, const Grid > LocalGeometryImpl
Definition: grid.hh:102
Dune::Entity< codim, dim, const Grid, SPEntity > Entity
Definition: grid.hh:98
ReferenceCubeContainer::template Codim< codim >::ReferenceCube ReferenceCube
Definition: grid.hh:96
Dune::Geometry< dim - codim, dim, const Grid, LocalGeometryReference > LocalGeometry
Definition: grid.hh:105
Dune::EntityIterator< codim, const Grid, SPPartitionIterator< codim, const Grid > > LeafIterator
Definition: grid.hh:111
Dune::EntityIterator< codim, const Grid, SPPartitionIterator< codim, const Grid > > LevelIterator
Definition: grid.hh:110
Traits::template Codim< codim >::LocalGeometryImpl LocalGeometryImpl
Definition: grid.hh:176
Traits::template Codim< codim >::ReferenceCube ReferenceCube
Definition: grid.hh:174
Definition: gridlevel.hh:35
static const unsigned int numDirections
Definition: gridlevel.hh:46
int level() const
Definition: gridlevel.hh:83
Definition: indexset.hh:19
Definition: intersection.hh:37
Definition: referencecube.hh:43
static const int numFaces
Definition: referencecube.hh:55
FieldVector< ctype, dimension > GlobalVector
Definition: referencecube.hh:51
ct ctype
Definition: referencecube.hh:47
static const int dimension
Definition: referencecube.hh:49
Definition: referencecube.hh:189
const ReferenceCube & get() const
Definition: referencecube.hh:205