1 #ifndef DUNE_ALU3DGRIDINDEXSETS_HH
2 #define DUNE_ALU3DGRIDINDEXSETS_HH
6 #include <dune/common/stdstreams.hh>
7 #include <dune/common/bigunsignedint.hh>
8 #include <dune/common/hash.hh>
10 #include <dune/grid/common/grid.hh>
11 #include <dune/grid/common/indexidset.hh>
23 template<
int dim,
int dimworld, ALU3dGr
idElementType,
class >
26 template<
int cd,
int dim,
class Gr
idImp>
27 class ALU3dGridEntity;
35 template<
int dim,
int dimworld, ALU3dGr
idElementType elType,
class Comm >
37 :
public IndexSet< ALU3dGrid< dim, dimworld, elType, Comm >, ALU3dGridHierarchicIndexSet< dim, dimworld, elType, Comm > >
43 friend class ALU3dGrid<dim, dimworld, elType, Comm >;
54 template <
class EntityType>
55 int index (
const EntityType & ep)
const
57 enum { cd = EntityType :: codimension };
63 int index (
const typename GridType::Traits::template Codim< codim >::Entity &entity )
const
65 return GridType::getRealImplementation( entity ).getIndex();
68 template<
class Entity >
69 int subIndex (
const Entity &entity,
int i,
unsigned int codim )
const
71 return subIndex< Entity::codimension >( entity, i, codim );
76 int subIndex (
const typename GridType::Traits::template Codim< cd >::Entity &e,
int i,
unsigned int codim )
const
79 return GridType::getRealImplementation( e ).subIndex( i, codim );
84 int size ( GeometryType type )
const
86 if( elType ==
tetra && !type.isSimplex() )
return 0;
87 if( elType ==
hexa && !type.isCube() )
return 0;
93 int size (
int codim )
const
100 const std::vector<GeometryType>&
geomTypes (
int codim)
const
106 template <
class EntityType>
107 bool contains (
const EntityType &)
const {
return true; }
111 const GridType & grid_;
127 ALUMacroKey(
const A&a,
const A&b,
const A&c,
const A&d) : BaseType(a,b,c,d) {}
131 BaseType::operator = (org);
137 return ( (this->_a == org._a) &&
138 (this->_b == org._b) &&
139 (this->_c == org._c) &&
140 (this->_d == org._d) );
146 return ( (!this->
operator == (org)) && (!this->
operator <(org)) );
159 void print(std::ostream & out)
const
161 out <<
"[" << this->_a <<
"," << this->_b <<
"," << this->_c <<
"," << this->_d <<
"]";
166 std::size_t seed = 0;
167 hash_combine(seed,arg._a);
168 hash_combine(seed,arg._b);
169 hash_combine(seed,arg._c);
170 hash_combine(seed,arg._d);
175 template <
class MacroKeyImp>
183 static constexpr
int codimOffset = 300000000 ;
192 : key_(key) , nChild_(
nChild)
198 , nChild_(org.nChild_)
199 , codimLevel_(org.codimLevel_)
205 nChild_ = org.nChild_;
206 codimLevel_ = org.codimLevel_;
222 if(
equals(org))
return true;
228 if(
equals(org))
return true;
229 else return !
lesser(org);
242 const MacroKeyImp &
getKey()
const {
return key_; }
244 int codim()
const {
return codimLevel_ / codimOffset ; }
245 int level()
const {
return codimLevel_ % codimOffset ; }
249 return ( (nChild_ >= 0) && (codimLevel_ >= 0) );
258 void print(std::ostream & out)
const
260 out <<
"(" <<
getKey() <<
"," << nChild_ <<
"," << codimLevel_ <<
")";
265 std::size_t seed = hash<MacroKeyImp>()(arg.
getKey());
266 hash_combine(seed,arg.nChild_);
267 hash_combine(seed,arg.codimLevel_);
279 if(nChild_ == org.nChild_)
281 return codimLevel_ < org.codimLevel_;
284 return nChild_ < org.nChild_;
293 return ( (
getKey() == org.
getKey() ) && (nChild_ == org.nChild_)
294 && (codimLevel_ == org.codimLevel_) );
305 inline std::ostream&
operator<< (std::ostream& s,
const ALUMacroKey & key)
311 template <
class KeyImp>
312 inline std::ostream&
operator<< (std::ostream& s,
const ALUGridId<KeyImp> &
id)
323 template<
int dim,
int dimworld, ALU3dGr
idElementType elType,
class Comm >
324 class ALU3dGridGlobalIdSet
325 :
public IdSet< ALU3dGrid< dim, dimworld, elType, Comm >, ALU3dGridGlobalIdSet< dim, dimworld, elType, Comm >,
326 typename ALU3dGrid< dim, dimworld, elType, Comm >::Traits::GlobalIdType >,
329 typedef ALU3dGrid< dim, dimworld, elType, Comm > GridType;
330 typedef typename GridType::HierarchicIndexSet HierarchicIndexSetType;
332 typedef ALU3dImplTraits< elType, Comm > ImplTraitsType;
333 typedef typename ImplTraitsType::IMPLElementType IMPLElementType;
334 typedef typename ImplTraitsType::GEOElementType GEOElementType;
335 typedef typename ImplTraitsType::GEOFaceType GEOFaceType;
336 typedef typename ImplTraitsType::GEOEdgeType GEOEdgeType;
338 typedef typename ImplTraitsType::GitterImplType GitterImplType;
340 typedef typename ImplTraitsType::HElementType HElementType;
341 typedef typename ImplTraitsType::HFaceType HFaceType;
342 typedef typename ImplTraitsType::HEdgeType HEdgeType;
343 typedef typename ImplTraitsType::VertexType VertexType;
344 typedef typename ImplTraitsType::HBndSegType HBndSegType;
346 typedef EntityCount< elType > EntityCountType;
348 using ALU3DSPACE AdaptRestrictProlongType::postRefinement;
349 using ALU3DSPACE AdaptRestrictProlongType::preCoarsening;
352 typedef typename GridType::Traits::GlobalIdType IdType;
355 typedef ALUMacroKey MacroKeyType;
357 typedef ALUGridId < MacroKeyType > MacroIdType;
358 enum { numCodim = 4 };
360 typedef typename GridType::Traits::template Codim<0>::Entity EntityCodim0Type;
363 mutable std::map< int , IdType > ids_[ numCodim ];
366 const GridType & grid_;
369 const HierarchicIndexSetType & hset_;
373 enum { startOffSet_ = 0 };
379 using IdSet < GridType , ALU3dGridGlobalIdSet, IdType > :: subId;
382 ALU3dGridGlobalIdSet(
const GridType & grid)
383 : grid_(grid), hset_(grid.hierarchicIndexSet())
389 const int vxKey[4] = {0,1,3,4};
390 for(
int i=0; i<4; i++) vertexKey_[i] = vxKey[i];
397 const int vxKey[4] = {0,1,2,3};
398 for(
int i=0; i<4; i++) vertexKey_[i] = vxKey[i];
405 virtual ~ALU3dGridGlobalIdSet() {}
417 for(
int i=0 ;i<numCodim; ++i)
419 std::cout <<
"*****************************************************\n";
420 std::cout <<
"Ids for codim " << i <<
"\n";
421 std::cout <<
"*****************************************************\n";
422 for(
unsigned int k=0; k<ids_[i].size(); ++k)
424 std::cout <<
"Item[" << i <<
"," << k <<
"] has id " << ids_[i][k] <<
"\n";
426 std::cout <<
"\n\n\n";
430 template <
class IterType>
431 void checkId(
const IdType & macroId,
const IterType & idIter)
const
434 IdType
id = getId(macroId);
435 for(
int i=0 ;i<numCodim; ++i)
437 typedef typename std::map<int,IdType>::iterator IteratorType;
438 IteratorType end = ids_[i].end();
439 for(IteratorType it = ids_[i].begin(); it != end; ++it)
441 if(idIter == it)
continue;
442 const IdType & checkMId = (*it).second;
443 IdType checkId = getId(checkMId);
447 std::cout <<
id <<
" equals " << checkId << std::endl;
448 std::cout << idIter->first <<
" != " << it->first << std::endl;
450 DUNE_THROW(GridError,
" " <<
id <<
" equals " << checkId <<
"\n");
454 bool lesser = (
id < checkId);
455 bool greater = (
id > checkId);
457 if( lesser == greater )
460 DUNE_THROW(GridError,
" lesser equals greater of one id ");
468 void uniquenessCheck()
const
470 for(
int i=0 ;i<numCodim; i++)
472 typedef typename std::map<int,IdType>::iterator IteratorType;
473 IteratorType end = ids_[i].end();
474 for(IteratorType it = ids_[i].begin(); it != end; ++it)
476 const IdType &
id = (*it).second;
483 void setChunkSize(
int chunkSize )
490 for(
int i=0; i<numCodim; ++i)
495 GitterImplType &gitter = grid_.myGrid();
499 typename ALU3DSPACE AccessIterator< VertexType >::Handle fw( gitter.container() );
500 for( fw.first (); !fw.done(); fw.next() )
502 int idx = fw.item().getIndex();
503 ids_[3][idx] = buildMacroVertexId( fw.item() );
509 typedef typename ALU3DSPACE ALU3dGridLevelIteratorWrapper< 3, Ghost_Partition, Comm > IteratorType;
510 IteratorType fw (grid_ , 0 , grid_.nlinks() );
511 typedef typename IteratorType :: val_t val_t;
512 for (fw.first () ; ! fw.done () ; fw.next ())
514 val_t & item = fw.item();
516 VertexType & vx = * (item.first);
517 int idx = vx.getIndex();
518 ids_[3][idx] = buildMacroVertexId( vx );
525 typename ALU3DSPACE AccessIterator< HEdgeType >::Handle w( gitter.container() );
526 for (w.first(); !w.done(); w.next())
528 int idx = w.item().getIndex();
529 ids_[2][idx] = buildMacroEdgeId( w.item() );
530 buildEdgeIds( w.item() , ids_[2][idx] , startOffSet_ );
536 typedef typename ALU3DSPACE ALU3dGridLevelIteratorWrapper< 2, Ghost_Partition, Comm > IteratorType;
537 IteratorType fw( grid_, 0, grid_.nlinks() );
538 typedef typename IteratorType :: val_t val_t;
539 for (fw.first () ; ! fw.done () ; fw.next ())
541 val_t & item = fw.item();
543 HEdgeType & edge = * (item.first);
544 int idx = edge.getIndex();
546 ids_[2][idx] = buildMacroEdgeId( edge );
547 buildEdgeIds( edge , ids_[2][idx] , startOffSet_ );
555 typename ALU3DSPACE AccessIterator< HFaceType >::Handle w( gitter.container() );
556 for (w.first () ; ! w.done () ; w.next ())
558 int idx = w.item().getIndex();
559 ids_[1][idx] = buildMacroFaceId( w.item() );
560 buildFaceIds( w.item() , ids_[1][idx] , startOffSet_ );
565 if( grid_.comm().size() > 1 )
567 typedef typename ALU3DSPACE ALU3dGridLevelIteratorWrapper< 1, Ghost_Partition, Comm > IteratorType;
568 IteratorType fw (grid_ , 0 , grid_.nlinks() );
569 typedef typename IteratorType :: val_t val_t;
570 for (fw.first () ; ! fw.done () ; fw.next ())
572 val_t & item = fw.item();
574 HFaceType & face = * (item.first);
575 int idx = face.getIndex();
576 ids_[1][idx] = buildMacroFaceId( face );
577 buildFaceIds( face , ids_[1][idx] , startOffSet_ );
583 typename ALU3DSPACE AccessIterator< HElementType >::Handle w( gitter.container() );
584 for (w.first () ; ! w.done () ; w.next ())
586 int idx = w.item().getIndex();
587 ids_[0][idx] = buildMacroElementId( w.item() );
588 buildElementIds( w.item() , ids_[0][idx] , startOffSet_ );
593 if( grid_.comm().size() > 1 )
595 typedef typename ALU3DSPACE ALU3dGridLevelIteratorWrapper< 0, Ghost_Partition, Comm > IteratorType;
596 IteratorType fw (grid_ , 0 , grid_.nlinks() );
597 typedef typename IteratorType :: val_t val_t;
598 for (fw.first () ; ! fw.done () ; fw.next ())
600 val_t & item = fw.item();
602 HElementType & elem = * ( item.second->getGhost().first );
603 int idx = elem.getIndex();
604 ids_[0][idx] = buildMacroElementId( elem );
605 buildElementIds( elem , ids_[0][idx] , startOffSet_ );
614 #ifdef ALUGRID_CHECK_GLOBALIDSET_UNIQUENESS
615 #warning "GlobalIdSet uniqueness check enabled!"
620 IdType buildMacroVertexId(
const VertexType & item )
622 int vx[4] = { item.ident(), -1, -1, -1};
624 MacroKeyType key(vx[0],vx[1],vx[2],vx[3]);
625 return MacroIdType(key, 1, codim, startOffSet_ );
628 IdType buildMacroEdgeId(
const HEdgeType & item )
630 const GEOEdgeType & edge =
static_cast<const GEOEdgeType &
> (item);
631 int vx[4] = {-1,-1,-1,-1};
632 for(
int i=0; i<2; ++i)
634 vx[i] = edge.myvertex(i)->ident();
638 MacroKeyType key(vx[0],vx[1],vx[2],vx[3]);
639 return MacroIdType(key, 1, codim, startOffSet_ );
642 IdType buildMacroFaceId(
const HFaceType & item )
644 const GEOFaceType & face =
static_cast<const GEOFaceType &
> (item);
645 int vx[4] = {-1,-1,-1,-1};
646 for(
int i=0; i<3; ++i)
648 vx[i] = face.myvertex(i)->ident();
652 MacroKeyType key(vx[0],vx[1],vx[2],vx[3]);
653 return MacroIdType(key,1, codim, startOffSet_ );
656 IdType buildMacroElementId(
const HElementType & item )
658 const GEOElementType & elem =
static_cast<const GEOElementType &
> (item);
659 int vx[4] = {-1,-1,-1,-1};
660 for(
int i=0; i<4; ++i)
662 vx[i] = elem.myvertex(vertexKey_[i])->ident();
665 MacroKeyType key(vx[0],vx[1],vx[2],vx[3]);
666 return MacroIdType(key,1, codim, startOffSet_ );
669 template <
int cd,
class Item>
670 IdType createId(
const Item& item ,
const IdType& creatorId ,
int nChild )
675 enum { childOffSet = (dim == 2) ? 4 : ((cd == 1) && (elType ==
hexa)) ? 16 : 8 };
678 const int newChild = ((creatorId.codim()+1) * creatorId.nChild() * childOffSet ) + nChild;
680 IdType newId( creatorId.getKey() , newChild , cd, creatorId.level() + 1 );
686 void buildElementIds(
const HElementType & item ,
const IdType & macroId ,
int nChild)
689 ids_[codim][item.getIndex()] = createId<codim>(item,macroId,nChild);
691 const IdType & itemId = ids_[codim][item.getIndex()];
693 buildInteriorElementIds(item,itemId);
697 void buildInteriorElementIds(
const HElementType & item ,
const IdType & fatherId)
703 const VertexType * v = item.innerVertex() ;
705 if(v) buildVertexIds(*v,fatherId );
710 int inneredge = startOffSet_;
711 for(
const HEdgeType * e = item.innerHedge () ; e ; e = e->next ())
713 buildEdgeIds(*e,fatherId,inneredge);
720 int innerface = startOffSet_;
721 for(
const HFaceType * f = item.innerHface () ; f ; f = f->next ())
723 buildFaceIds(*f,fatherId,innerface);
730 int numChild = startOffSet_;
731 for(
const HElementType * child = item.down(); child; child =child->next() )
734 buildElementIds(*child, fatherId, numChild);
741 void buildFaceIds(
const HFaceType & face,
const IdType & fatherId ,
int innerFace )
744 ids_[codim][face.getIndex()] = createId<codim>(face,fatherId,innerFace);
745 const IdType & faceId = ids_[codim][face.getIndex()];
747 buildInteriorFaceIds(face,faceId);
751 void buildInteriorFaceIds(
const HFaceType & face,
const IdType & faceId)
757 const VertexType * v = face.innerVertex() ;
758 if(v) buildVertexIds(*v,faceId );
763 int inneredge = startOffSet_;
764 for (
const HEdgeType * e = face.innerHedge () ; e ; e = e->next ())
766 buildEdgeIds(*e,faceId ,inneredge );
773 int child = startOffSet_;
774 for(
const HFaceType * f = face.down () ; f ; f = f->next ())
777 buildFaceIds(*f,faceId,child);
784 void buildEdgeIds(
const HEdgeType & edge,
const IdType & fatherId ,
int inneredge)
787 ids_[codim][edge.getIndex()] = createId<codim>(edge,fatherId,inneredge);
788 const IdType & edgeId = ids_[codim][edge.getIndex()];
789 buildInteriorEdgeIds(edge,edgeId);
792 void buildInteriorEdgeIds(
const HEdgeType & edge,
const IdType & edgeId)
798 const VertexType * v = edge.innerVertex() ;
799 if(v) buildVertexIds(*v,edgeId );
804 int child = startOffSet_;
805 for (
const HEdgeType * e = edge.down () ; e ; e = e->next ())
808 buildEdgeIds(*e,edgeId , child );
815 void buildVertexIds(
const VertexType & vertex,
const IdType & fatherId )
819 ids_[codim][vertex.getIndex()] = createId<codim>(vertex,fatherId,1);
823 friend class ALU3dGrid< dim, dimworld, elType, Comm >;
825 const IdType & getId(
const IdType & macroId)
const
832 template <
class EntityType>
833 IdType id (
const EntityType & ep)
const
835 enum { codim = ( dim == EntityType :: codimension ) ? 3 : EntityType :: codimension };
836 alugrid_assert ( ids_[codim].find( hset_.index(ep) ) != ids_[codim].end() );
837 const IdType & macroId = ids_[codim][hset_.index(ep)];
839 return getId(macroId);
844 IdType id (
const typename GridType:: template Codim<cd> :: Entity & ep)
const
846 const unsigned int codim = ( dim == cd ) ? 3 : cd ;
847 alugrid_assert ( ids_[codim].find( hset_.index(ep) ) != ids_[codim].end() );
848 const IdType & macroId = ids_[codim][hset_.index(ep)];
850 return getId(macroId);
854 IdType subId (
const EntityCodim0Type &e,
int i,
unsigned int codim )
const
856 const int hIndex = hset_.subIndex( e, i, codim );
858 const unsigned int idCodim = ( dim == codim ) ? 3 : codim ;
859 alugrid_assert ( ids_[ idCodim ].find( hIndex ) != ids_[ idCodim ].end() );
860 const IdType ¯oId = ids_[ idCodim ][ hIndex ];
862 return getId( macroId );
866 int postRefinement( HElementType & item )
869 enum { elCodim = 0 };
870 const IdType & fatherId = ids_[elCodim][item.getIndex()];
872 buildInteriorElementIds(item, fatherId );
875 const IMPLElementType & elem =
static_cast<const IMPLElementType &
> (item);
876 for(
int i=0; i<EntityCountType::numFaces; ++i)
878 enum { faceCodim = 1 };
879 const HFaceType & face = *( elem.myhface( i ) );
880 const IdType &
id = ids_[faceCodim][face.getIndex()];
882 buildInteriorFaceIds( face,
id);
886 for(
int i=0; i<EntityCountType::numEdges; ++i)
888 enum { edgeCodim = 2 };
889 const HEdgeType & edge = *( elem.myhedge(i));
890 const IdType &
id = ids_[edgeCodim][edge.getIndex()];
892 buildInteriorEdgeIds(edge,
id);
899 int preCoarsening( HElementType & elem )
926 int preCoarsening ( HBndSegType & el ) {
return 0; }
929 int postRefinement ( HBndSegType & el ) {
return 0; }
940 template<
int dim,
int dimworld, ALU3dGr
idElementType elType,
class Comm >
941 class ALU3dGridLocalIdSet
942 :
public IdSet< ALU3dGrid< dim, dimworld, elType, Comm >, ALU3dGridLocalIdSet< dim, dimworld, elType, Comm >, int >,
945 typedef ALU3dGridLocalIdSet< dim, dimworld, elType, Comm > This;
947 typedef ALU3dImplTraits< elType, Comm > ImplTraitsType;
948 typedef typename ImplTraitsType::HElementType HElementType;
949 typedef typename ImplTraitsType::HBndSegType HBndSegType;
951 typedef ALU3dGrid< dim, dimworld, elType, Comm > GridType;
952 typedef typename GridType::HierarchicIndexSet HierarchicIndexSetType;
955 enum { codimOffSet = 300000000 };
956 typedef typename GridType::Traits::template Codim<0>::Entity EntityCodim0Type;
959 ALU3dGridLocalIdSet(
const GridType & grid) : hset_(grid.hierarchicIndexSet())
961 for(
int codim = 0; codim <= GridType::dimension; ++codim )
962 codimStart_[ codim ] = codim * codimOffSet;
965 friend class ALU3dGrid< dim, dimworld, elType, Comm >;
968 void updateIdSet() {}
970 using ALU3DSPACE AdaptRestrictProlongType :: postRefinement ;
971 using ALU3DSPACE AdaptRestrictProlongType :: preCoarsening ;
979 using IdSet < GridType , ALU3dGridLocalIdSet, IdType > :: subId;
982 template <
class EntityType>
983 int id (
const EntityType & ep)
const
985 enum { cd = EntityType :: codimension };
987 return codimStart_[cd] + hset_.index(ep);
992 int id (
const typename GridType:: template Codim<codim> :: Entity & ep)
const
996 return codimStart_[codim] + hset_.index(ep);
1000 IdType subId (
const EntityCodim0Type &e,
int i,
unsigned int codim )
const
1003 return codimStart_[ codim ] + hset_.subIndex( e, i, codim );
1007 int preCoarsening( HElementType & elem ) {
return 0; }
1009 int postRefinement( HElementType & item ) {
return 0; }
1012 int preCoarsening ( HBndSegType & el ) {
return 0; }
1015 int postRefinement ( HBndSegType & el ) {
return 0; }
1017 void setChunkSize(
int chunkSize ) {}
1021 const HierarchicIndexSetType & hset_;
1024 int codimStart_[ GridType::dimension+1 ];
#define ALU3DSPACE
Definition: alu3dinclude.hh:24
DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(), DUNE_HASH_TYPE(Dune::ALUMacroKey)) DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename MacroKeyImp)
DUNE_HASH_TYPE(Dune::ALUGridId< MacroKeyImp >)) namespace Dune
Definition: indexsets.hh:301
#define alugrid_assert(EX)
Definition: alugrid_assert.hh:20
Gitter::AdaptRestrictProlong AdaptRestrictProlongType
Definition: alu3dinclude.hh:52
Definition: alu3dinclude.hh:80
@ hexa
Definition: topology.hh:12
@ tetra
Definition: topology.hh:12
std ::ostream & operator<<(std ::ostream &out, const ALU3dGridEntitySeed< cd, GridImp > &key)
print alugrid entity key to std::stream
Definition: entityseed.hh:372
[ provides Dune::Grid ]
Definition: alugrid/3d/grid.hh:463
int hierSetSize(int cd) const
Definition: grid_inline.hh:99
static const int dimension
Definition: alugrid/3d/grid.hh:524
const std::vector< GeometryType > & geomTypes(int codim) const
deliver all geometry types used in this grid
Definition: alugrid/3d/grid.hh:1141
hierarchic index set of ALU3dGrid
Definition: indexsets.hh:38
int size(GeometryType type) const
Definition: indexsets.hh:84
int size(int codim) const
return size of indexset, i.e. maxindex+1
Definition: indexsets.hh:93
bool contains(const EntityType &) const
return true because all entities are contained in this set
Definition: indexsets.hh:107
int index(const EntityType &ep) const
return hierarchic index of given entity
Definition: indexsets.hh:55
int index(const typename GridType::Traits::template Codim< codim >::Entity &entity) const
return hierarchic index of given entity
Definition: indexsets.hh:63
GridType::Traits::template Codim< 0 >::Entity EntityCodim0Type
Definition: indexsets.hh:51
int subIndex(const Entity &entity, int i, unsigned int codim) const
Definition: indexsets.hh:69
const std::vector< GeometryType > & geomTypes(int codim) const
deliver all geometry types used in this grid
Definition: indexsets.hh:100
int subIndex(const typename GridType::Traits::template Codim< cd >::Entity &e, int i, unsigned int codim) const
return subIndex i of given entity for subEntity with codim
Definition: indexsets.hh:76
Definition: indexsets.hh:120
ALUMacroKey & operator=(const ALUMacroKey &org)
Definition: indexsets.hh:129
void extractKey(std::vector< int > &key) const
Definition: indexsets.hh:150
bool operator==(const ALUMacroKey &org) const
Definition: indexsets.hh:135
void print(std::ostream &out) const
Definition: indexsets.hh:159
friend std::size_t hash_value(const ALUMacroKey &arg)
Definition: indexsets.hh:164
ALUMacroKey(const A &a, const A &b, const A &c, const A &d)
Definition: indexsets.hh:127
ALUMacroKey(const ALUMacroKey &org)
Definition: indexsets.hh:128
bool operator>(const ALUMacroKey &org) const
Definition: indexsets.hh:144
ALUMacroKey()
Definition: indexsets.hh:126
Definition: indexsets.hh:177
bool operator!=(const ALUGridId &org) const
Definition: indexsets.hh:215
bool isValid() const
Definition: indexsets.hh:247
int level() const
Definition: indexsets.hh:245
bool operator>=(const ALUGridId &org) const
Definition: indexsets.hh:226
int codim() const
Definition: indexsets.hh:244
void print(std::ostream &out) const
Definition: indexsets.hh:258
bool operator<=(const ALUGridId &org) const
Definition: indexsets.hh:220
bool operator<(const ALUGridId &org) const
Definition: indexsets.hh:232
friend std::size_t hash_value(const ALUGridId &arg)
Definition: indexsets.hh:263
void reset()
Definition: indexsets.hh:252
ALUGridId & operator=(const ALUGridId &org)
Definition: indexsets.hh:202
const MacroKeyImp & getKey() const
Definition: indexsets.hh:242
bool equals(const ALUGridId &org) const
Definition: indexsets.hh:291
ALUGridId(const ALUGridId &org)
Definition: indexsets.hh:196
bool lesser(const ALUGridId &org) const
Definition: indexsets.hh:273
bool operator==(const ALUGridId &org) const
Definition: indexsets.hh:210
bool operator>(const ALUGridId &org) const
Definition: indexsets.hh:237
int nChild() const
Definition: indexsets.hh:243
ALUGridId()
Definition: indexsets.hh:186
ALUGridId(const MacroKeyImp &key, const int nChild, const int codim, const int level)
Definition: indexsets.hh:191