1#ifndef DUNE_FEM_ADAPTIVELEAFINDEXSET_HH
2#define DUNE_FEM_ADAPTIVELEAFINDEXSET_HH
30 template <
class Gr
idPartImp >
31 class AdaptiveLeafIndexSet;
32 template <
class Gr
idPartImp >
33 class IntersectionAdaptiveLeafIndexSet;
34 template <
class Gr
idPartImp >
35 class DGAdaptiveLeafIndexSet;
46 template<
class Gr
idPart,
class IndexSet >
56 typedef typename GridPartType :: GridType
GridType;
59 static const int dimension = GridPartType :: dimension;
71 typedef typename CodimIndexSetType :: IndexType
IndexType;
74 typedef std::vector< GeometryType >
Types;
96 template <
class TraitsImp >
105 typedef typename GridPartType :: GridType
GridType;
128 typedef typename BaseType :: Types
Types;
131 typedef typename BaseType :: template Codim< 0 > :: Entity
ElementType;
142 template<
int codim ,
bool gr
idHasCodim >
143 struct CountElementsBase
148 count = indexSet.template countElements< codim >(
type, std::integral_constant<bool,true>() );
152 template<
int codim >
153 struct CountElementsBase< codim, false >
155 static void apply (
const ThisType &indexSet,
const GeometryType &
type,
IndexType& count )
158 count = indexSet.template countElements< codim >(
type, std::integral_constant<bool,false>() );
162 template<
int codim >
164 :
public CountElementsBase< codim, Dune::Fem::GridPartCapabilities::hasEntity< GridPartType, codim > :: v >
169 template<
int codim >
170 struct InsertSubEntities
172 static void apply (
const ThisType &indexSet,
const GridElementType &element )
175 if( ! indexSet.codimAvailable( codim ) ) return ;
178 if( !indexSet.codimUsed( codim ) )
return;
182 const int count = element.subEntities( codim );
183 for(
int i = 0; i < count; ++i )
185 codimSet.insertSubEntity( element, i );
190 template<
int codim ,
bool gr
idHasCodim >
191 struct InsertGhostSubEntitiesBase
193 static void apply ( ThisType &indexSet,
const GridElementType &element,
194 const bool skipGhosts )
197 if( ! indexSet.codimAvailable( codim ) ) return ;
200 if( !indexSet.codimUsed( codim ) )
return;
204 for(
unsigned int i = 0; i < element.subEntities( codim ); ++i )
206 if( !skipGhosts || (element.partitionType() != GhostEntity) )
207 codimSet.insertGhost( element.template subEntity< codim >( i ) );
212 template<
int codim >
213 struct InsertGhostSubEntitiesBase< codim, false >
215 static void apply ( ThisType &indexSet,
const GridElementType &element,
216 const bool skipGhosts )
220 template<
int codim >
221 struct InsertGhostSubEntities
222 :
public InsertGhostSubEntitiesBase< codim, Dune::Capabilities::hasEntity < GridType, codim > :: v >
226 template<
int codim ,
bool gr
idHasCodim >
227 struct CallSetUpCodimSetBase
229 static void apply (
const int cd,
const ThisType &indexSet )
232 if( ! indexSet.codimAvailable( codim ) ) return ;
234 if( cd == codim && ! indexSet.codimUsed( cd ) )
235 indexSet.template setupCodimSet< codim >(std::integral_constant<bool,true>());
239 template<
int codim >
240 struct CallSetUpCodimSetBase< codim, false >
242 static void apply (
const int cd,
const ThisType &indexSet )
244 if( cd == codim && ! indexSet.codimUsed( cd ) )
245 indexSet.template setupCodimSet< codim >(std::integral_constant<bool,false>());
249 template<
int codim >
250 struct CallSetUpCodimSet
251 :
public CallSetUpCodimSetBase< codim, Dune::Capabilities::hasEntity < GridType, codim > :: v >
260 template <
int codim,
bool gr
idHasCodim >
261 struct GetSubEntityBase
263 typedef typename GridPartType :: template Codim< codim > :: EntityType Entity;
264 static Entity subEntity(
const ElementType& element,
const int subEn )
266 return element.template subEntity< codim > ( subEn );
270 template <
int codim >
271 struct GetSubEntityBase< codim, false >
273 typedef typename GridPartType :: template Codim< 0 > :: EntityType Entity;
274 static Entity subEntity(
const ElementType& element,
const int subEn )
276 DUNE_THROW(NotImplemented,
"stupid grid without entities of codim 1 used");
281 :
public GetSubEntityBase< 1, Dune::Capabilities::hasEntity < GridType, 1 > :: v >
286 typedef typename GetFaceEntity :: Entity FaceType;
289 enum { CartesianNonAdaptiveGrid = Dune::Capabilities::isCartesian<GridType>::v &&
293 enum { myType = (
numCodimensions == 1 ) ? ( (CartesianNonAdaptiveGrid) ? -1 : 665 ) : 6 };
299 static const PartitionIteratorType pitype = GridPartType :: indexSetPartitionType ;
305 std::unique_ptr< const GridPartType > gridPartPtr_;
308 mutable std::unique_ptr< CodimIndexSetType > codimLeafSet_[
numCodimensions ];
311 std::vector< std::vector< GeometryType > > geomTypes_;
317 mutable bool compressed_;
326 return (codim < numCodimensions && codim >= 0);
338 return *codimLeafSet_[ codim ];
345 for(
const auto& codim : codimensions )
357 gridPartPtr_.reset( &gridPart_ );
363 , gridPart_( gridPart )
380 typedef typename GridType :: LevelGridView MacroViewType;
381 MacroViewType macroView =
grid_.levelGridView( 0 );
382 const typename MacroViewType :: IndexSet& indexSet = macroView.indexSet();
386 for(
int codim=0; codim <=
dimension; ++codim )
388 const int size = indexSet.types( codim ).size();
390 geomTypes_[ codim ].resize(
size );
391 std::copy_n( indexSet.types( codim ).begin(),
size, geomTypes_[ codim ].begin() );
406 virtual std::string
name ()
const
408 return "AdaptiveIndexSetBase";
449 for(
size_t i=0; i<
types; ++i )
457 const std::vector <GeometryType> &
geomTypes (
const int codim)
const
459 assert( codim >= 0 && codim <
int(geomTypes_.size()) );
460 return geomTypes_[ codim ];
470 template <
class EntityType>
473 enum { codim = EntityType::codimension };
512 if( CartesianNonAdaptiveGrid &&
513 grid_.comm().size() > 1 )
519 markAllBelowOld<Interior_Partition>();
520 if( pitype > Interior_Partition )
522 markAllBelowOld< pitype >();
530 markAllBelowOld< pitype > ();
534 if( pitype == All_Partition )
536 if(
grid_.comm().size() > 1 )
539 markAllUsed<Ghost_Partition>();
555 template<
class Entity >
558 return index< Entity :: codimension >( entity );
562 template<
int codim >
564 index (
const typename GridPartType::template Codim< codim >::EntityType &entity )
const
568 if( (codim != 0) && !
codimUsed( codim ) )
569 setupCodimSet< codim >(std::integral_constant<
bool,Dune::Capabilities::hasEntity < GridType, codim > :: v>());
575 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
596 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for intersections, intersectionCodim = ") << codim );
604 int subNumber,
unsigned int codim )
const
606 DUNE_THROW( NotImplemented, (
name() +
" does not support subIndices for intersections, intersectionCodim = ") << codim );
611 template<
class Entity >
614 return subIndex< Entity::codimension >( entity, subNumber, codim );
620 int subNumber,
unsigned int codim )
const
622 assert( (
int( codim ) >= cd) && (
int( codim ) <=
dimension) );
624 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
626 if( (codim != 0) && !
codimUsed( codim ) )
633 assert( (idx >= 0) && (idx <
IndexType( codimSet.size() )) );
680 int oldIndex (
const int hole,
const int codim )
const
689 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
703 int newIndex (
const int hole ,
const int codim )
const
712 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
741 template <PartitionIteratorType pt>
755 template <PartitionIteratorType pt>
759 template<
int codim >
760 void setupCodimSet (
const std::integral_constant<bool,true> &hasEntities)
const;
761 template<
int codim >
762 void setupCodimSet (
const std::integral_constant<bool,false> &hasEntities)
const;
769 template<
int codim >
771 template<
int codim >
776 template<
class StreamTraits >
780 template<
class StreamTraits >
793 if( ! intersection.conforming() && intersection.neighbor() )
797 if( inside.level() < outside.level() )
798 return GetFaceEntity :: subEntity( outside, intersection.indexInOutside() );
802 return GetFaceEntity :: subEntity( inside, intersection.indexInInside() );
806 template<
class TraitsImp >
810 codimLeafSet( 0 ).resize();
813 if( numCodimensions > 1 )
815 for(
int codim = 1; codim < numCodimensions; ++codim )
817 if( codimUsed( codim ) )
818 codimLeafSet( codim ).resize();
825 template<
class TraitsImp >
830 for(
int codim = 0; codim < numCodimensions; ++codim )
832 if( codimUsed( codim ) )
833 codimLeafSet( codim ).clearHoles();
840 if( (grid_.comm().size() == 1) || (sequence_ == dofManager_.sequence()) )
845 for(
int codim = 0; codim < numCodimensions; ++codim )
847 if( codimUsed( codim ) )
848 codimLeafSet( codim ).prepareCompress();
855 bool haveToCopy = codimLeafSet( 0 ).compress();
856 for(
int codim = 1; codim < numCodimensions; ++codim )
858 if( codimUsed( codim ) )
859 haveToCopy |= codimLeafSet( codim ).compress();
865 sequence_ = dofManager_.sequence();
871 template<
class TraitsImp >
878 if( entity.partitionType() == GhostEntity )
880 codimLeafSet( 0 ).insertGhost( entity );
881 const bool skipGhosts = (pitype != All_Partition);
883 if( numCodimensions > 1 )
889 codimLeafSet( 0 ).insert( entity );
891 if( numCodimensions > 1 )
896 assert( codimLeafSet( 0 ).exists( entity ) );
899 if( intersectionCodimension > 0 )
901 insertIntersections( entity );
908 template<
class TraitsImp >
912 codimLeafSet( intersectionCodimension ).resize();
914 const ElementType &element = gridPart_.convert( gridElement );
917 iit != endiit ; ++ iit )
923 FaceType face = getIntersectionFace( intersection, element );
926 codimLeafSet( intersectionCodimension ).insert(
gridEntity( face ) );
930 template<
class TraitsImp >
934 insertIndex( entity );
935 codimLeafSet( 0 ).markForRemoval( entity );
938 template<
class TraitsImp >
943 codimLeafSet( 0 ).markForRemoval( entity );
952 template<
class TraitsImp >
957 bool isNew = wasNew ;
958 typedef typename GridType::HierarchicIterator HierarchicIterator;
961 if( entity.isLeaf() )
963 insertIndex( entity );
971 insertTemporary( entity );
976 isNew = codimLeafSet( 0 ).validIndex( entity );
980 const int childLevel = entity.level() + 1;
981 const HierarchicIterator end = entity.hend( childLevel );
982 for( HierarchicIterator it = entity.hbegin( childLevel ); it != end; ++it )
983 checkHierarchy( *it, isNew );
987 template<
class TraitsImp >
988 template< PartitionIteratorType pt >
996 for(
int codim = 0; codim < numCodimensions; ++codim )
998 if( codimUsed( codim ) )
999 codimLeafSet( codim ).resetUsed();
1002 typedef typename GridPartType
1003 ::template Codim< 0 > :: template Partition< pt > :: IteratorType Iterator;
1005 const Iterator end = gridPart_.template end< 0, pt >();
1006 for( Iterator it = gridPart_.template begin< 0, pt >(); it != end; ++it )
1010 template<
class TraitsImp >
1017 if( CartesianNonAdaptiveGrid )
1020 for(
int codim = 0; codim < numCodimensions; ++codim )
1022 if( codimUsed( codim ) )
1025 codimLeafSet( codim ).clear();
1031 template<
class TraitsImp >
1040 if( CartesianNonAdaptiveGrid &&
1041 grid_.comm().size() > 1 )
1044 markAllUsed<Interior_Partition> ();
1045 if( pitype > Interior_Partition )
1046 markAllUsed< pitype >();
1052 markAllUsed< pitype > ();
1056 template<
class TraitsImp >
1057 template< PartitionIteratorType pt >
1062 for(
int codim = 0; codim < numCodimensions; ++codim )
1064 if( codimUsed( codim ) )
1065 codimLeafSet( codim ).resetUsed();
1069 typedef typename GridType::LevelGridView LevelGridView;
1070 LevelGridView macroView = grid_.levelGridView( 0 );
1072 typedef typename LevelGridView::template Codim< 0 >::template Partition< pt >::Iterator Iterator;
1073 const Iterator macroend = macroView.template end< 0, pt >();
1074 for( Iterator macroit = macroView.template begin< 0, pt >();
1075 macroit != macroend; ++macroit )
1076 checkHierarchy( *macroit,
false );
1080 template<
class TraitsImp >
1081 template<
int codim >
1086 if( ! codimAvailable( codim ) ) return ;
1089 if( ! codimLeafSet_[ codim ] )
1095 codimLeafSet( codim ).resize();
1098 typedef typename GridPartType
1099 ::template Codim< codim >::template Partition< pitype > :: IteratorType Iterator;
1101 const Iterator end = gridPart_.template end< codim, pitype >();
1102 for( Iterator it = gridPart_.template begin< codim, pitype >(); it != end; ++it )
1103 codimLeafSet( codim ).insert(
gridEntity( *it ) );
1106 template<
class TraitsImp >
1107 template<
int codim >
1112 if( ! codimAvailable( codim ) ) return ;
1115 if( ! codimLeafSet_[ codim ] )
1121 codimLeafSet( codim ).resize();
1123 typedef typename GridPartType
1124 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1126 const Iterator end = gridPart_.template end< 0, pitype >();
1127 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1131 InsertSubEntities< codim >::apply( *
this, gridElement );
1136 template<
class TraitsImp >
1141 if( intersectionCodimension < 0 ) return ;
1144 if( codimUsed( intersectionCodimension ) ) return ;
1147 codimLeafSet( intersectionCodimension ).resize();
1150 typedef typename GridPartType
1151 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1153 const Iterator end = gridPart_.template end< 0, pitype >();
1154 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1161 template<
class TraitsImp >
1162 template<
int codim >
1166 typedef typename GridPartType
1167 ::template Codim< codim > :: template Partition< pitype > :: IteratorType Iterator;
1169 const Iterator begin = gridPart_.template begin< codim, pitype >();
1170 const Iterator end = gridPart_.template end< codim, pitype >();
1172 for( Iterator it = begin; it != end; ++it )
1174 if( it->type() == type )
1182 template<
class TraitsImp >
1183 template<
int codim >
1187 if( ! codimLeafSet_[ codim ] )
1191 assert( codimAvailable( codim ) );
1194 codimLeafSet( codim ).resize();
1196 typedef typename GridPartType
1197 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1199 typedef typename GridPartType::ctype ctype;
1201 const Iterator end = gridPart_.template end< 0, pitype >();
1203 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1207 const int subEntities = gridElement.subEntities( codim );
1208 for (
int i=0; i < subEntities; ++i)
1210 if (! codimLeafSet( codim ).exists( gridElement, i) )
1212 codimLeafSet( codim ).insertSubEntity( gridElement,i );
1213 if ( Dune::ReferenceElements< ctype, dimension >::
1214 general( gridElement.type() ).type( i, codim ) == type )
1226 template<
class TraitsImp >
1227 template<
class StreamTraits >
1232 const std::string myname( name() );
1236 out << numCodimensions ;
1239 for(
int i = 0; i < numCodimensions; ++i )
1240 out << codimUsed( i );
1243 for(
int i = 0; i < numCodimensions; ++i )
1245 if( codimUsed( i ) )
1246 codimLeafSet( i ).write(
out );
1254 template<
class TraitsImp >
1255 template<
class StreamTraits >
1261 std::string storedName;
1264 std::string myname( name() );
1266 if( myname != storedName )
1268 size_t length =
std::min( myname.size(), storedName.size() );
1270 std::string found = storedName.substr(0, length-1 );
1271 DUNE_THROW( InvalidStateException,
1272 "AdaptiveIndexSetBase::read: got " << found
1273 <<
" (expected " << myname <<
")." );
1283 if( numCodim != numCodimensions )
1284 DUNE_THROW(InvalidStateException,
"AdaptiveIndexSetBase::read: got wrong number of codimensions" << numCodim <<
" instead of " << numCodimensions);
1287 for(
int i = 0; i < numCodimensions; ++i )
1289 bool codimInUse = false ;
1291 if( codimInUse && ! codimLeafSet_[ i ] )
1293 codimLeafSet_[ i ].reset(
new CodimIndexSetType( grid_, (i == intersectionCodimension ) ? 1 : i ) );
1297 for(
int i = 0; i < numCodimensions; ++i )
1299 if( codimUsed( i ) )
1300 codimLeafSet( i ).read(
in );
1304 if( grid_.comm().size() > 1 )
1305 compressed_ =
false;
1319 template<
class Gr
idPartImp >
1342 template <
class Gr
idPartImp >
1366 return "AdaptiveLeafIndexSet";
1374 if( this->
grid_.comm().size() == 1 )
1377 assert( this->
codimUsed( codim ) ? this->
size( codim ) == this->
grid_.size( codim ) :
true );
1392 template<
class Gr
idPartImp >
1415 template <
class Gr
idPartImp >
1438 return "IntersectionAdaptiveLeafIndexSet";
1446 if( this->
grid_.comm().size() == 1 )
1450 assert( this->
size( codim ) == this->
grid_.size( codim ) );
1464 template<
class Gr
idPartImp >
1486 template <
class Gr
idPartImp >
1508 return "DGAdaptiveLeafIndexSet";
1516 if( this->
grid_.comm().size() == 1 )
1517 assert( this->
size( 0 ) == this->
grid_.size( 0 ) );
double min(const Dune::Fem::Double &v, const double p)
Definition: double.hh:953
Definition: bindguard.hh:11
const GridEntityAccess< Entity >::GridEntityType & gridEntity(const Entity &entity)
Definition: gridpart.hh:412
Definition: forloop.hh:17
static DUNE_PRIVATE void apply(Args &&... args)
Definition: forloop.hh:23
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:1345
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1364
AdaptiveLeafIndexSet(const GridType *grid)
Constructor.
Definition: adaptiveleafindexset.hh:1354
BaseType::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1351
BaseType::GridType GridType
Definition: adaptiveleafindexset.hh:1350
bool compress()
Definition: adaptiveleafindexset.hh:1369
AdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1359
Definition: adaptiveleafindexset.hh:1418
bool compress()
Definition: adaptiveleafindexset.hh:1441
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1436
BaseType::GridType GridType
Definition: adaptiveleafindexset.hh:1423
BaseType::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1424
IntersectionAdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1431
IntersectionAdaptiveLeafIndexSet(const GridType *grid)
Constructor.
Definition: adaptiveleafindexset.hh:1426
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:1489
DGAdaptiveLeafIndexSet(const GridType *grid)
Constructor.
Definition: adaptiveleafindexset.hh:1497
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1506
DGAdaptiveLeafIndexSet(const GridPartType &gridPart)
Definition: adaptiveleafindexset.hh:1501
BaseType::GridType GridType
Definition: adaptiveleafindexset.hh:1494
BaseType::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1495
bool compress()
Definition: adaptiveleafindexset.hh:1511
Definition: adaptiveleafindexset.hh:48
std::vector< GeometryType > Types
Definition: adaptiveleafindexset.hh:74
GridPartType::GridType GridType
Definition: adaptiveleafindexset.hh:56
GridPart GridPartType
Definition: adaptiveleafindexset.hh:54
static const int dimension
Definition: adaptiveleafindexset.hh:59
CodimIndexSet< GridType > CodimIndexSetType
Definition: adaptiveleafindexset.hh:69
IndexSet IndexSetType
Definition: adaptiveleafindexset.hh:51
CodimIndexSetType::IndexType IndexType
Definition: adaptiveleafindexset.hh:71
Definition: adaptiveleafindexset.hh:63
GridPartType::template Codim< codim >::EntityType Entity
Definition: adaptiveleafindexset.hh:65
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:99
void removeIndex(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:940
void requestCodimensions(const std::vector< int > &codimensions) const
Definition: adaptiveleafindexset.hh:342
IndexType subIndex(const typename GridPartType::template Codim< cd >::EntityType &entity, int subNumber, unsigned int codim) const
return index for given subentity */
Definition: adaptiveleafindexset.hh:619
AdaptiveIndexSetBase(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:361
GridType::template Codim< 0 >::Entity GridElementType
Definition: adaptiveleafindexset.hh:109
TraitsImp::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:104
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:406
void insertEntity(const GridElementType &entity)
please doc me */
Definition: adaptiveleafindexset.hh:490
IndexType index(const Entity &entity) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:556
bool codimAvailable(const int codim) const
Definition: adaptiveleafindexset.hh:324
int newIndex(const int hole, const int codim) const
return new index, for dof manager only returns index
Definition: adaptiveleafindexset.hh:703
bool read(InStreamInterface< StreamTraits > &in)
please doc me */
Definition: adaptiveleafindexset.hh:1257
BaseType::template Codim< 0 >::Entity ElementType
type of codimension 0 Entity
Definition: adaptiveleafindexset.hh:131
IndexType subIndex(const Entity &entity, int subNumber, unsigned int codim) const
return index for given subentity */
Definition: adaptiveleafindexset.hh:612
IndexType index(const typename GridPartType::template Codim< codim >::EntityType &entity) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:564
void setupIndexSet()
mark all indices of interest
Definition: adaptiveleafindexset.hh:1033
FaceType getIntersectionFace(const IntersectionType &intersection, const ElementType &inside) const
Definition: adaptiveleafindexset.hh:790
void insertIntersections(const GridElementType &entity) const
Definition: adaptiveleafindexset.hh:910
IndexType countElements(GeometryType type, const std::integral_constant< bool, false > &hasEntities) const
Definition: adaptiveleafindexset.hh:1185
void resize()
please doc me */
Definition: adaptiveleafindexset.hh:507
int oldIndex(int hole, GeometryType type) const
return old index for given hole and type */
Definition: adaptiveleafindexset.hh:672
void markAllBelowOld()
Definition: adaptiveleafindexset.hh:1059
int numberOfHoles(GeometryType type) const
return number of holes for given type */
Definition: adaptiveleafindexset.hh:644
void setupCodimSet(const std::integral_constant< bool, true > &hasEntities) const
Definition: adaptiveleafindexset.hh:1083
void insertTemporary(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:932
Types types(const int codim) const
return range of geometry types */
Definition: adaptiveleafindexset.hh:464
int numberOfHoles(const int codim) const
return number of holes of the sets indices
Definition: adaptiveleafindexset.hh:661
AdaptiveIndexSetBase(const GridType *grid)
Constructor.
Definition: adaptiveleafindexset.hh:353
void removeEntity(const GridElementType &entity)
please doc me */
Definition: adaptiveleafindexset.hh:498
static const int intersectionCodimension
intersection codimension (numCodim-1 if enabled, otherwise -1)
Definition: adaptiveleafindexset.hh:119
void markAllUsed()
Definition: adaptiveleafindexset.hh:990
int oldIndex(const int hole, const int codim) const
return old index, for dof manager only
Definition: adaptiveleafindexset.hh:680
void resizeVectors()
reallocate the vector for new size
Definition: adaptiveleafindexset.hh:808
GridPartType::IntersectionType IntersectionType
type of intersections
Definition: adaptiveleafindexset.hh:137
CodimIndexSetType & codimLeafSet(const int codim) const
Definition: adaptiveleafindexset.hh:335
static const int dimension
grid dimension */
Definition: adaptiveleafindexset.hh:113
FaceType getIntersectionFace(const IntersectionType &intersection) const
Definition: adaptiveleafindexset.hh:784
IndexType subIndex(const IntersectionType &intersection, int subNumber, unsigned int codim) const
Definition: adaptiveleafindexset.hh:603
void checkHierarchy(const GridElementType &entity, bool wasNew)
Definition: adaptiveleafindexset.hh:955
GridPartType::GridType GridType
Definition: adaptiveleafindexset.hh:105
bool contains(const EntityType &en) const
return true if entity has index */
Definition: adaptiveleafindexset.hh:471
void setupIntersections() const
Definition: adaptiveleafindexset.hh:1138
void insertIndex(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:873
bool write(OutStreamInterface< StreamTraits > &out) const
please doc me */
Definition: adaptiveleafindexset.hh:1229
TraitsImp::CodimIndexSetType CodimIndexSetType
Definition: adaptiveleafindexset.hh:107
bool codimUsed(const int codim) const
Definition: adaptiveleafindexset.hh:330
IndexType countElements(GeometryType type, const std::integral_constant< bool, true > &hasEntities) const
Definition: adaptiveleafindexset.hh:1164
void clear()
clear index set (only for structured grids)
Definition: adaptiveleafindexset.hh:1012
BaseType::IndexType IndexType
index type */
Definition: adaptiveleafindexset.hh:125
BaseType::Types Types
geometry type range type */
Definition: adaptiveleafindexset.hh:128
static const int numCodimensions
number of supported codimensions
Definition: adaptiveleafindexset.hh:116
IndexType index(const IntersectionType &intersection) const
Definition: adaptiveleafindexset.hh:581
IndexType size(int codim) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:438
const std::vector< GeometryType > & geomTypes(const int codim) const
*/
Definition: adaptiveleafindexset.hh:457
void setupCodimSet(const std::integral_constant< bool, false > &hasEntities) const
Definition: adaptiveleafindexset.hh:1109
IndexType size(GeometryType type) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:418
bool compress()
please doc me */
Definition: adaptiveleafindexset.hh:827
int type() const
return type of index set, for GrapeDataIO
Definition: adaptiveleafindexset.hh:400
static const bool hasSingleGeometryType
true if only one geometry type is available
Definition: adaptiveleafindexset.hh:122
int newIndex(int hole, GeometryType type) const
return new index for given hole and type */
Definition: adaptiveleafindexset.hh:695
GridPartType::IntersectionIteratorType IntersectionIteratorType
type of intersection iterator
Definition: adaptiveleafindexset.hh:134
Definition: adaptiveleafindexset.hh:1322
@ intersectionCodimension
Definition: adaptiveleafindexset.hh:1328
@ numCodimensions
Definition: adaptiveleafindexset.hh:1324
@ startingCodimension
Definition: adaptiveleafindexset.hh:1326
Definition: adaptiveleafindexset.hh:1395
@ intersectionCodimension
Definition: adaptiveleafindexset.hh:1399
@ startingCodimension
Definition: adaptiveleafindexset.hh:1401
@ numCodimensions
Definition: adaptiveleafindexset.hh:1397
Definition: adaptiveleafindexset.hh:1467
@ numCodimensions
Definition: adaptiveleafindexset.hh:1469
@ intersectionCodimension
Definition: adaptiveleafindexset.hh:1473
@ startingCodimension
Definition: adaptiveleafindexset.hh:1471
Definition: codimindexset.hh:29
interface documentation for (grid part) index sets
Definition: common/indexset.hh:104
Definition: persistentindexset.hh:216
DofManagerType & dofManager_
Definition: persistentindexset.hh:185
const GridType & grid_
Definition: persistentindexset.hh:184
abstract interface for an output stream
Definition: streams.hh:46
abstract interface for an input stream
Definition: streams.hh:179
static const bool v
Definition: misc/capabilities.hh:152