1 #ifndef DUNE_FEM_ADAPTIVELEAFINDEXSET_HH 2 #define DUNE_FEM_ADAPTIVELEAFINDEXSET_HH 10 #include <type_traits> 12 #include <dune/common/forloop.hh> 30 template <
class Gr
idPartImp >
32 template <
class Gr
idPartImp >
34 template <
class Gr
idPartImp >
46 template<
class Gr
idPart,
class IndexSet >
56 typedef typename GridPartType :: GridType
GridType;
59 static const int dimension = GridPartType :: dimension;
74 typedef std::vector< GeometryType >
Types;
96 template <
class TraitsImp >
105 typedef typename GridPartType :: GridType
GridType;
116 static const int numCodimensions = TraitsImp :: numCodimensions ;
119 static const int intersectionCodimension = TraitsImp :: intersectionCodimension ;
122 static const bool hasSingleGeometryType = Dune::Capabilities::hasSingleGeometryType< GridType > :: v ;
142 template<
int codim ,
bool gr
idHasCodim >
143 struct CountElementsBase
145 static void apply (
const ThisType &indexSet,
const GeometryType &type, IndexType& count )
147 if( type.dim() == dimension - codim )
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 )
157 if( type.dim() == dimension - codim )
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 ( ThisType &indexSet,
const GridElementType &element )
178 if( !indexSet.codimUsed_[ codim ] )
return;
180 CodimIndexSetType &codimSet = indexSet.
codimLeafSet( codim );
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 )
200 if( !indexSet.codimUsed_[ codim ] )
return;
202 CodimIndexSetType &codimSet = indexSet.
codimLeafSet( codim );
204 for(
unsigned int i = 0; i < element.subEntities( codim ); ++i )
206 if( !skipGhosts || (element.partitionType() != GhostEntity) )
207 codimSet.insertGhost(
make_entity( 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 )
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 )
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 make_entity( 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 };
296 enum { maxNumCodimension = ((dimension + 1) > numCodimensions) ? dimension + 2 : numCodimensions+1 };
299 static const PartitionIteratorType pitype = GridPartType :: indexSetPartitionType ;
302 const GridPartType& gridPart_;
304 mutable CodimIndexSetType* codimLeafSet_[ numCodimensions ];
306 mutable bool codimUsed_ [ maxNumCodimension ];
309 std::vector< std::vector< GeometryType > > geomTypes_;
315 mutable bool compressed_;
318 using BaseType::grid_;
319 using BaseType::dofManager_;
324 return codim < numCodimensions && codim >= 0 ;
329 assert( codimLeafSet_[ codim ] );
331 return *codimLeafSet_[ codim ];
337 : BaseType( gridPart.grid() )
338 , gridPart_( gridPart )
339 , sequence_( dofManager_.sequence() )
343 codimUsed_[ 0 ] =
true;
346 for(
int codim = 1; codim < maxNumCodimension; ++codim ) codimUsed_[ codim ] =
false ;
349 for(
int codim = 0; codim < numCodimensions; ++codim )
351 if( codim == intersectionCodimension )
360 typedef typename GridType :: LevelGridView MacroViewType;
361 MacroViewType macroView = grid_.levelGridView( 0 );
362 const typename MacroViewType :: IndexSet& indexSet = macroView.indexSet();
365 geomTypes_.resize( dimension+1 );
366 for(
int codim=0; codim <=
dimension; ++codim )
368 const int size = indexSet.types( codim ).size();
370 geomTypes_[ codim ].resize( size );
371 std::copy_n( indexSet.types( codim ).begin(), size, geomTypes_[ codim ].begin() );
383 for(
int codim = 0; codim < numCodimensions; ++codim )
385 delete codimLeafSet_[ codim ];
386 codimLeafSet_[ codim ] = 0;
397 virtual std::string
name ()
const 399 return "AdaptiveIndexSetBase";
409 IndexType
size ( GeometryType type )
const 411 const int codim = dimension - type.dim();
414 const bool onlySingleGeometryType = hasSingleGeometryType || ( geomTypes( codim ).size() == 1 ) ;
416 if( codimAvailable( codim ) && onlySingleGeometryType )
418 if( codimUsed_[ codim ] )
419 return type == geomTypes( codim )[ 0 ] ? codimLeafSet( codim ).size() : 0;
423 IndexType count = 0 ;
424 ForLoop< CountElements, 0, dimension > :: apply( *
this, type, count );
429 IndexType
size (
int codim )
const 431 assert( codim < numCodimensions );
432 if( intersectionCodimension > 0 && codim == intersectionCodimension )
434 return codimLeafSet( codim ).size();
438 IndexType count = 0 ;
439 const size_t types = geomTypes( codim ).size();
440 for(
size_t i=0; i<types; ++i )
442 count += size( geomTypes( codim )[ i ] );
448 const std::vector <GeometryType> &
geomTypes (
const int codim)
const 450 assert( codim >= 0 && codim <
int(geomTypes_.size()) );
451 return geomTypes_[ codim ];
455 Types
types(
const int codim )
const 457 return geomTypes( codim );
461 template <
class EntityType>
464 enum { codim = EntityType::codimension };
465 if( codimAvailable( codim ) )
467 assert( codimUsed_[codim] );
468 return codimLeafSet( codim ).exists(
gridEntity( en ) );
485 insertIndex( entity );
491 removeIndex( entity );
495 void resizeVectors ();
503 if( CartesianNonAdaptiveGrid &&
504 grid_.comm().size() > 1 )
510 markAllBelowOld<Interior_Partition>();
511 if( pitype > Interior_Partition )
513 markAllBelowOld< pitype >();
521 markAllBelowOld< pitype > ();
525 if( pitype == All_Partition )
527 if( grid_.comm().size() > 1 )
530 markAllUsed<Ghost_Partition>();
546 template<
class Entity >
549 return index< Entity :: codimension >( entity );
553 template<
int codim >
555 index (
const typename GridPartType::template Codim< codim >::EntityType &entity )
const 557 if( codimAvailable( codim ) )
559 if( (codim != 0) && ! codimUsed_[ codim ] )
560 setupCodimSet< codim >(std::integral_constant<bool,true>());
562 return codimLeafSet( codim ).index(
gridEntity( entity ) );
566 DUNE_THROW( NotImplemented, (name() +
" does not support indices for codim = ") << codim );
572 IndexType
index (
const IntersectionType &intersection )
const 574 enum { codim = intersectionCodimension };
575 if( codimAvailable( codim ) )
578 setupIntersections();
581 FaceType face = getIntersectionFace( intersection );
583 return codimLeafSet( codim ).index(
gridEntity( face ) );
587 DUNE_THROW( NotImplemented, (name() +
" does not support indices for intersections, intersectionCodim = ") << codim );
595 int subNumber,
unsigned int codim )
const 597 DUNE_THROW( NotImplemented, (name() +
" does not support subIndices for intersections, intersectionCodim = ") << codim );
602 template<
class Entity >
603 IndexType
subIndex (
const Entity &entity,
int subNumber,
unsigned int codim )
const 605 return subIndex< Entity::codimension >( entity, subNumber, codim );
610 IndexType
subIndex (
const typename GridPartType::template Codim< cd >::EntityType &entity,
611 int subNumber,
unsigned int codim )
const 613 assert( (
int( codim ) >= cd) && (
int( codim ) <= dimension) );
614 if( !codimAvailable( codim ) )
615 DUNE_THROW( NotImplemented, (name() +
" does not support indices for codim = ") << codim );
617 if( (codim != 0) && ! codimUsed_[ codim ] )
618 ForLoop< CallSetUpCodimSet, 0, dimension >::apply( codim, *
this );
620 const CodimIndexSetType &codimSet = codimLeafSet( codim );
621 const IndexType idx = codimSet.subIndex(
gridEntity( entity ), subNumber );
622 assert( (idx >= 0) && (idx <
IndexType( codimSet.size() )) );
635 const int codim = dimension - type.dim();
636 assert( hasSingleGeometryType || geomTypes( codim ).size() == 1 );
637 return numberOfHoles( codim );
643 if( codimAvailable( codim ) && codimUsed_[codim] )
645 assert( codimUsed_[codim] );
646 return codimLeafSet( codim ).numberOfHoles();
655 const int codim = dimension - type.dim();
656 assert( hasSingleGeometryType || geomTypes( codim ).size() == 1 );
657 return oldIndex( hole, codim );
661 int oldIndex (
const int hole,
const int codim )
const 663 if( codimAvailable( codim ) )
665 assert( codimUsed_[codim] );
666 return codimLeafSet( codim ).oldIndex( hole );
670 DUNE_THROW( NotImplemented, (name() +
" does not support indices for codim = ") << codim );
678 const int codim = dimension - type.dim();
679 assert( hasSingleGeometryType || geomTypes( codim ).size() == 1 );
680 return newIndex( hole, codim );
684 int newIndex (
const int hole ,
const int codim )
const 686 if( codimAvailable( codim ) )
688 assert( codimUsed_[codim] );
689 return codimLeafSet( codim ).newIndex( hole );
693 DUNE_THROW( NotImplemented, (name() +
" does not support indices for codim = ") << codim );
707 void insertIndex (
const GridElementType &entity );
710 void insertIntersections (
const GridElementType &entity )
const;
713 void insertTemporary (
const GridElementType &entity );
716 void removeIndex (
const GridElementType &entity );
719 void checkHierarchy (
const GridElementType &entity,
bool wasNew );
722 template <PartitionIteratorType pt>
729 void setupIndexSet ();
736 template <PartitionIteratorType pt>
737 void markAllBelowOld ();
740 template<
int codim >
741 void setupCodimSet (
const std::integral_constant<bool,true> &hasEntities)
const;
742 template<
int codim >
743 void setupCodimSet (
const std::integral_constant<bool,false> &hasEntities)
const;
746 void setupIntersections ()
const;
750 template<
int codim >
751 inline IndexType countElements ( GeometryType type,
const std::integral_constant<bool,true> &hasEntities )
const;
752 template<
int codim >
753 inline IndexType countElements ( GeometryType type,
const std::integral_constant<bool,false> &hasEntities )
const;
757 template<
class StreamTraits >
761 template<
class StreamTraits >
767 ElementType inside =
make_entity( intersection.inside() );
768 return getIntersectionFace( intersection, inside );
772 const ElementType& inside )
const 774 if( ! intersection.conforming() && intersection.neighbor() )
776 ElementType outside =
make_entity( intersection.outside() );
778 if( inside.level() < outside.level() )
779 return GetFaceEntity :: subEntity( outside, intersection.indexInOutside() );
783 return GetFaceEntity :: subEntity( inside, intersection.indexInInside() );
787 template<
class TraitsImp >
791 codimLeafSet( 0 ).resize();
794 if( numCodimensions > 1 )
796 for(
int codim = 1; codim < numCodimensions; ++codim )
798 if( codimUsed_[ codim ] )
799 codimLeafSet( codim ).resize();
806 template<
class TraitsImp >
811 for(
int codim = 0; codim < numCodimensions; ++codim )
812 codimLeafSet( codim ).clearHoles();
818 if( (grid_.comm().size() == 1) || (sequence_ == dofManager_.sequence()) )
823 for(
int codim = 0; codim < numCodimensions; ++codim )
825 codimLeafSet( codim ).prepareCompress();
832 bool haveToCopy = codimLeafSet( 0 ).compress();
833 for(
int codim = 1; codim < numCodimensions; ++codim )
835 if( codimUsed_[ codim ] )
836 haveToCopy |= codimLeafSet( codim ).compress();
842 sequence_ = dofManager_.sequence();
848 template<
class TraitsImp >
855 if( entity.partitionType() == GhostEntity )
857 codimLeafSet( 0 ).insertGhost( entity );
858 const bool skipGhosts = (pitype != All_Partition);
860 if( numCodimensions > 1 )
861 ForLoop< InsertGhostSubEntities, 1, dimension >::apply( *
this, entity, skipGhosts );
866 codimLeafSet( 0 ).insert( entity );
868 if( numCodimensions > 1 )
869 ForLoop< InsertSubEntities, 1, dimension >::apply( *
this, entity );
873 assert( codimLeafSet( 0 ).exists( entity ) );
876 if( intersectionCodimension > 0 )
878 insertIntersections( entity );
885 template<
class TraitsImp >
889 codimLeafSet( intersectionCodimension ).resize();
891 const ElementType &element = gridPart_.convert( gridElement );
894 iit != endiit ; ++ iit )
900 FaceType face = getIntersectionFace( intersection, element );
903 codimLeafSet( intersectionCodimension ).insert(
gridEntity( face ) );
907 template<
class TraitsImp >
911 insertIndex( entity );
912 codimLeafSet( 0 ).markForRemoval( entity );
915 template<
class TraitsImp >
920 codimLeafSet( 0 ).markForRemoval( entity );
929 template<
class TraitsImp >
934 bool isNew = wasNew ;
935 typedef typename GridType::HierarchicIterator HierarchicIterator;
938 if( entity.isLeaf() )
940 insertIndex( entity );
948 insertTemporary( entity );
953 isNew = codimLeafSet( 0 ).validIndex( entity );
957 const int childLevel = entity.level() + 1;
958 const HierarchicIterator end = entity.hend( childLevel );
959 for( HierarchicIterator it = entity.hbegin( childLevel ); it != end; ++it )
960 checkHierarchy( *it, isNew );
964 template<
class TraitsImp >
965 template< PartitionIteratorType pt >
973 for(
int codim = 0; codim < numCodimensions; ++codim )
975 if( codimUsed_[ codim ] )
976 codimLeafSet( codim ).resetUsed();
979 typedef typename GridPartType
980 ::template Codim< 0 > :: template Partition< pt > :: IteratorType Iterator;
982 const Iterator end = gridPart_.template end< 0, pt >();
983 for( Iterator it = gridPart_.template begin< 0, pt >(); it != end; ++it )
987 template<
class TraitsImp >
994 if( CartesianNonAdaptiveGrid )
997 for(
int codim = 0; codim < numCodimensions; ++codim )
999 if( codimUsed_[ codim ] )
1002 codimLeafSet( codim ).clear();
1008 template<
class TraitsImp >
1018 if( CartesianNonAdaptiveGrid &&
1019 grid_.comm().size() > 1 )
1022 markAllUsed<Interior_Partition> ();
1023 if( pitype > Interior_Partition )
1024 markAllUsed< pitype >();
1030 markAllUsed< pitype > ();
1034 template<
class TraitsImp >
1035 template< PartitionIteratorType pt >
1040 for(
int codim = 0; codim < numCodimensions; ++codim )
1042 if( codimUsed_[ codim ] )
1043 codimLeafSet( codim ).resetUsed();
1047 typedef typename GridType :: template Partition< All_Partition > :: LevelGridView LevelGridView ;
1048 LevelGridView macroView = grid_.levelGridView( 0 );
1050 typedef typename LevelGridView::template Codim< 0 >::template Partition< pt >::Iterator Iterator;
1051 const Iterator macroend = macroView.template end< 0, pt >();
1052 for( Iterator macroit = macroView.template begin< 0, pt >();
1053 macroit != macroend; ++macroit )
1054 checkHierarchy( *macroit,
false );
1058 template<
class TraitsImp >
1059 template<
int codim >
1064 if( ! codimAvailable( codim ) ) return ;
1067 codimLeafSet( codim ).resize();
1070 typedef typename GridPartType
1071 ::template Codim< codim >::template Partition< pitype > :: IteratorType Iterator;
1073 const Iterator end = gridPart_.template end< codim, pitype >();
1074 for( Iterator it = gridPart_.template begin< codim, pitype >(); it != end; ++it )
1075 codimLeafSet( codim ).insert(
gridEntity( *it ) );
1078 codimUsed_[ codim ] =
true;
1081 template<
class TraitsImp >
1082 template<
int codim >
1087 if( ! codimAvailable( codim ) ) return ;
1090 codimLeafSet( codim ).resize();
1092 typedef typename GridPartType
1093 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1095 const Iterator end = gridPart_.template end< 0, pitype >();
1096 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1100 const int subEntities = gridElement.subEntities( codim );
1101 for (
int i = 0; i < subEntities; ++i )
1103 if (! codimLeafSet( codim ).exists( gridElement, i) )
1104 codimLeafSet( codim ).insertSubEntity( gridElement, i );
1109 codimUsed_[ codim ] =
true;
1113 template<
class TraitsImp >
1118 if( intersectionCodimension < 0 ) return ;
1121 if( codimUsed_[ intersectionCodimension ] ) return ;
1124 codimLeafSet( intersectionCodimension ).resize();
1127 typedef typename GridPartType
1128 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1130 const Iterator end = gridPart_.template end< 0, pitype >();
1131 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1138 codimUsed_[ intersectionCodimension ] =
true;
1141 template<
class TraitsImp >
1142 template<
int codim >
1146 typedef typename GridPartType
1147 ::template Codim< codim > :: template Partition< pitype > :: IteratorType Iterator;
1149 const Iterator begin = gridPart_.template begin< codim, pitype >();
1150 const Iterator end = gridPart_.template end< codim, pitype >();
1152 for( Iterator it = begin; it != end; ++it )
1154 if( it->type() == type )
1162 template<
class TraitsImp >
1163 template<
int codim >
1168 assert( codimAvailable( codim ) );
1171 codimLeafSet( codim ).resize();
1173 typedef typename GridPartType
1174 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1176 typedef typename GridPartType::ctype ctype;
1178 const Iterator end = gridPart_.template end< 0, pitype >();
1180 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1184 const int subEntities = gridElement.subEntities( codim );
1185 for (
int i=0; i < subEntities; ++i)
1187 if (! codimLeafSet( codim ).exists( gridElement, i) )
1189 codimLeafSet( codim ).insertSubEntity( gridElement,i );
1190 if ( Dune::ReferenceElements< ctype, dimension >::
1191 general( gridElement.type() ).type( i, codim ) == type )
1200 codimUsed_[ codim ] =
true;
1206 template<
class TraitsImp >
1207 template<
class StreamTraits >
1212 const std::string myname( name() );
1216 out << numCodimensions ;
1219 for(
int i = 0; i < numCodimensions; ++i )
1220 out << codimUsed_[ i ];
1223 for(
int i = 0; i < numCodimensions; ++i )
1225 if( codimUsed_[ i ] )
1226 codimLeafSet( i ).write( out );
1234 template<
class TraitsImp >
1235 template<
class StreamTraits >
1241 std::string storedName;
1244 std::string myname( name() );
1246 if( myname != storedName )
1248 size_t length =
std::min( myname.size(), storedName.size() );
1250 std::string found = storedName.substr(0, length-1 );
1251 DUNE_THROW( InvalidStateException,
1252 "AdaptiveIndexSetBase::read: got " << found
1253 <<
" (expected " << myname <<
")." );
1262 assert( numCodim == numCodimensions );
1265 for(
int i = 0; i < numCodimensions; ++i )
1266 in >> codimUsed_[ i ];
1268 for(
int i = 0; i < numCodimensions; ++i )
1270 if( codimUsed_[ i ] )
1271 codimLeafSet( i ).read( in );
1275 if( grid_.comm().size() > 1 )
1276 compressed_ =
false;
1290 template<
class Gr
idPartImp >
1295 enum { numCodimensions = GridPartImp :: dimension + 1 };
1297 enum { startingCodimension = 0 };
1299 enum { intersectionCodimension = -1 };
1313 template <
class Gr
idPartImp >
1324 : BaseType(gridPart)
1330 return "AdaptiveLeafIndexSet";
1335 const bool compressed = BaseType::compress();
1338 if( this->grid_.comm().size() == 1 )
1340 for(
int codim = Traits::startingCodimension; codim < Traits::numCodimensions; ++codim )
1341 assert( this->size( codim ) == this->grid_.size( codim ) );
1343 #endif // #ifndef NDEBUG 1356 template<
class Gr
idPartImp >
1361 enum { numCodimensions = GridPartImp :: dimension + 2 };
1363 enum { intersectionCodimension = numCodimensions - 1 };
1365 enum { startingCodimension = 0 };
1379 template <
class Gr
idPartImp >
1390 : BaseType(gridPart)
1396 return "IntersectionAdaptiveLeafIndexSet";
1401 const bool compressed = BaseType::compress();
1404 if( this->grid_.comm().size() == 1 )
1406 for(
int codim = Traits::startingCodimension; codim < Traits::numCodimensions; ++codim )
1407 if( codim != Traits::intersectionCodimension )
1408 assert( this->size( codim ) == this->grid_.size( codim ) );
1410 #endif // #ifndef NDEBUG 1422 template<
class Gr
idPartImp >
1427 enum { numCodimensions = 1 };
1429 enum { startingCodimension = 0 };
1431 enum { intersectionCodimension = -1 };
1444 template <
class Gr
idPartImp >
1455 : BaseType(gridPart)
1461 return "DGAdaptiveLeafIndexSet";
1466 const bool compressed = BaseType::compress();
1469 if( this->grid_.comm().size() == 1 )
1470 assert( this->size( 0 ) == this->grid_.size( 0 ) );
1471 #endif // #ifndef NDEBUG 1481 #endif // #ifndef DUNE_FEM_ADAPTIVELEAFINDEXSET_HH Definition: persistentindexset.hh:24
int numberOfHoles(const int codim) const
return number of holes of the sets indices
Definition: adaptiveleafindexset.hh:641
CodimIndexSet< GridType > CodimIndexSetType
Definition: adaptiveleafindexset.hh:69
BaseType::IndexType IndexType
index type */
Definition: adaptiveleafindexset.hh:125
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1394
Definition: adaptiveleafindexset.hh:1423
Definition: misc/capabilities.hh:152
interface documentation for (grid part) index sets
Definition: common/indexset.hh:25
IndexType index(const IntersectionType &intersection) const
Definition: adaptiveleafindexset.hh:572
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1459
bool compress()
Definition: adaptiveleafindexset.hh:1464
static constexpr T min(T a)
Definition: utility.hh:81
void clear()
clear index set (only for structured grids)
Definition: adaptiveleafindexset.hh:989
GridPartType::IntersectionIteratorType IntersectionIteratorType
type of intersection iterator
Definition: adaptiveleafindexset.hh:134
Definition: adaptiveleafindexset.hh:47
TraitsImp::CodimIndexSetType CodimIndexSetType
Definition: adaptiveleafindexset.hh:107
int newIndex(int hole, GeometryType type) const
return new index for given hole and type */
Definition: adaptiveleafindexset.hh:676
bool write(OutStreamInterface< StreamTraits > &out) const
please doc me */
Definition: adaptiveleafindexset.hh:1209
const std::vector< GeometryType > & geomTypes(const int codim) const
return vector of geometry types used of given codimension */
Definition: adaptiveleafindexset.hh:448
static const int dimension
Definition: adaptiveleafindexset.hh:59
IndexType subIndex(const Entity &entity, int subNumber, unsigned int codim) const
return index for given subentity */
Definition: adaptiveleafindexset.hh:603
IndexSet IndexSetType
Definition: adaptiveleafindexset.hh:51
CodimIndexSetType & codimLeafSet(const int codim) const
Definition: adaptiveleafindexset.hh:327
IndexType subIndex(const IntersectionType &intersection, int subNumber, unsigned int codim) const
Definition: adaptiveleafindexset.hh:594
void insertEntity(const GridElementType &entity)
please doc me */
Definition: adaptiveleafindexset.hh:481
IndexType index(const Entity &entity) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:547
void insertIntersections(const GridElementType &entity) const
Definition: adaptiveleafindexset.hh:887
GridPartType::template Codim< codim >::EntityType Entity
Definition: adaptiveleafindexset.hh:65
AdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1323
virtual ~AdaptiveIndexSetBase()
Destructor.
Definition: adaptiveleafindexset.hh:380
IndexType size(int codim) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:429
GridPartType::IntersectionType IntersectionType
type of intersections
Definition: adaptiveleafindexset.hh:137
BaseType::Types Types
geometry type range type */
Definition: adaptiveleafindexset.hh:128
void resize()
please doc me */
Definition: adaptiveleafindexset.hh:498
void setupCodimSet(const std::integral_constant< bool, true > &hasEntities) const
Definition: adaptiveleafindexset.hh:1061
bool read(InStreamInterface< StreamTraits > &in)
please doc me */
Definition: adaptiveleafindexset.hh:1237
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set ...
Definition: adaptiveleafindexset.hh:35
void insertTemporary(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:909
int newIndex(const int hole, const int codim) const
return new index, for dof manager only returns index
Definition: adaptiveleafindexset.hh:684
Dune::EntityPointer< Grid, Implementation >::Entity make_entity(const Dune::EntityPointer< Grid, Implementation > &entityPointer)
Definition: compatibility.hh:23
void setupIntersections() const
Definition: adaptiveleafindexset.hh:1115
GridPart GridPartType
Definition: adaptiveleafindexset.hh:54
GridPartType::GridType GridType
Definition: adaptiveleafindexset.hh:56
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set ...
Definition: adaptiveleafindexset.hh:97
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:397
void markAllBelowOld()
Definition: adaptiveleafindexset.hh:1037
Definition: coordinate.hh:4
FaceType getIntersectionFace(const IntersectionType &intersection, const ElementType &inside) const
Definition: adaptiveleafindexset.hh:771
std::vector< GeometryType > Types
Definition: adaptiveleafindexset.hh:74
abstract interface for an input stream
Definition: streams.hh:177
IndexType countElements(GeometryType type, const std::integral_constant< bool, true > &hasEntities) const
Definition: adaptiveleafindexset.hh:1144
bool compress()
please doc me */
Definition: adaptiveleafindexset.hh:808
BaseType::template Codim< 0 >::Entity ElementType
type of codimension 0 Entity
Definition: adaptiveleafindexset.hh:131
bool codimAvailable(const int codim) const
Definition: adaptiveleafindexset.hh:322
int type() const
return type of index set, for GrapeDataIO
Definition: adaptiveleafindexset.hh:391
BaseType::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1321
AdaptiveIndexSetBase(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:336
int numberOfHoles(GeometryType type) const
return number of holes for given type */
Definition: adaptiveleafindexset.hh:633
void insertIndex(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:850
Definition: adaptiveleafindexset.hh:62
Definition: adaptiveleafindexset.hh:1357
CodimIndexSetType::IndexType IndexType
Definition: adaptiveleafindexset.hh:71
GridPartType::GridType GridType
Definition: adaptiveleafindexset.hh:105
bool compress()
Definition: adaptiveleafindexset.hh:1399
void removeIndex(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:917
void resizeVectors()
reallocate the vector for new size
Definition: adaptiveleafindexset.hh:789
const GridEntityAccess< Entity >::GridEntityType & gridEntity(const Entity &entity)
Definition: gridpart.hh:410
Types types(const int codim) const
return range of geometry types */
Definition: adaptiveleafindexset.hh:455
BaseType::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1452
bool contains(const EntityType &en) const
return true if entity has index */
Definition: adaptiveleafindexset.hh:462
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set ...
Definition: adaptiveleafindexset.hh:31
BaseType::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1387
void setupIndexSet()
mark all indices of interest
Definition: adaptiveleafindexset.hh:1010
Definition: codimindexset.hh:30
GridType::template Codim< 0 >::Entity GridElementType
Definition: adaptiveleafindexset.hh:109
IntersectionAdaptiveLeafIndexSetTraits< GridPartImp >::IndexType IndexType
index type
Definition: common/indexset.hh:123
IndexType size(GeometryType type) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:409
int IndexType
Definition: codimindexset.hh:46
DGAdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1454
TraitsImp::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:104
FaceType getIntersectionFace(const IntersectionType &intersection) const
Definition: adaptiveleafindexset.hh:765
Definition: adaptiveleafindexset.hh:33
IndexType index(const typename GridPartType::template Codim< codim >::EntityType &entity) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:555
int oldIndex(const int hole, const int codim) const
return old index, for dof manager only
Definition: adaptiveleafindexset.hh:661
IntersectionAdaptiveLeafIndexSetTraits< GridPartImp >::Types Types
geometry type range type
Definition: common/indexset.hh:126
IndexType subIndex(const typename GridPartType::template Codim< cd >::EntityType &entity, int subNumber, unsigned int codim) const
return index for given subentity */
Definition: adaptiveleafindexset.hh:610
void markAllUsed()
Definition: adaptiveleafindexset.hh:967
void removeEntity(const GridElementType &entity)
please doc me */
Definition: adaptiveleafindexset.hh:489
abstract interface for an output stream
Definition: streams.hh:44
IntersectionAdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1389
int oldIndex(int hole, GeometryType type) const
return old index for given hole and type */
Definition: adaptiveleafindexset.hh:653
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1328
Definition: adaptiveleafindexset.hh:1291
void checkHierarchy(const GridElementType &entity, bool wasNew)
Definition: adaptiveleafindexset.hh:932
bool compress()
Definition: adaptiveleafindexset.hh:1333