1 #ifndef DUNE_FEM_ADAPTIVELEAFINDEXSET_HH
2 #define DUNE_FEM_ADAPTIVELEAFINDEXSET_HH
10 #include <type_traits>
29 template <
class Gr
idPartImp >
30 class AdaptiveLeafIndexSet;
31 template <
class Gr
idPartImp >
32 class IntersectionAdaptiveLeafIndexSet;
33 template <
class Gr
idPartImp >
34 class DGAdaptiveLeafIndexSet;
45 template<
class Gr
idPart,
class IndexSet >
55 typedef typename GridPartType :: GridType
GridType;
58 static const int dimension = GridPartType :: dimension;
64 typedef typename GridPartType :: template Codim< codim > :: EntityType
Entity;
73 typedef std::vector< GeometryType >
Types;
95 template <
class TraitsImp >
104 typedef typename GridPartType :: GridType
GridType;
130 typedef typename BaseType :: template Codim< 0 > :: Entity
ElementType;
141 template<
int codim ,
bool gr
idHasCodim >
142 struct CountElementsBase
147 count = indexSet.template countElements< codim >(
type, std::integral_constant<bool,true>() );
151 template<
int codim >
152 struct CountElementsBase< codim, false >
154 static void apply (
const ThisType &indexSet,
const GeometryType &
type,
IndexType& count )
157 count = indexSet.template countElements< codim >(
type, std::integral_constant<bool,false>() );
161 template<
int codim >
163 :
public CountElementsBase< codim, Dune::Fem::GridPartCapabilities::hasEntity< GridPartType, codim > :: v >
168 template<
int codim >
169 struct InsertSubEntities
171 static void apply ( ThisType &indexSet,
const GridElementType &element )
174 if( ! indexSet.codimAvailable( codim ) ) return ;
177 if( !indexSet.codimUsed_[ codim ] )
return;
181 const int count = element.subEntities( codim );
182 for(
int i = 0; i < count; ++i )
184 codimSet.insertSubEntity( element, i );
189 template<
int codim ,
bool gr
idHasCodim >
190 struct InsertGhostSubEntitiesBase
192 static void apply ( ThisType &indexSet,
const GridElementType &element,
193 const bool skipGhosts )
196 if( ! indexSet.codimAvailable( codim ) ) return ;
199 if( !indexSet.codimUsed_[ codim ] )
return;
203 for(
unsigned int i = 0; i < element.subEntities( codim ); ++i )
205 if( !skipGhosts || (element.partitionType() != GhostEntity) )
206 codimSet.insertGhost( element.template subEntity< codim >( i ) );
211 template<
int codim >
212 struct InsertGhostSubEntitiesBase< codim, false >
214 static void apply ( ThisType &indexSet,
const GridElementType &element,
215 const bool skipGhosts )
219 template<
int codim >
220 struct InsertGhostSubEntities
221 :
public InsertGhostSubEntitiesBase< codim, Dune::Capabilities::hasEntity < GridType, codim > :: v >
225 template<
int codim ,
bool gr
idHasCodim >
226 struct CallSetUpCodimSetBase
228 static void apply (
const int cd,
const ThisType &indexSet )
231 if( ! indexSet.codimAvailable( codim ) ) return ;
234 indexSet.template setupCodimSet< codim >(std::integral_constant<bool,true>());
238 template<
int codim >
239 struct CallSetUpCodimSetBase< codim, false >
241 static void apply (
const int cd,
const ThisType &indexSet )
244 indexSet.template setupCodimSet< codim >(std::integral_constant<bool,false>());
248 template<
int codim >
249 struct CallSetUpCodimSet
250 :
public CallSetUpCodimSetBase< codim, Dune::Capabilities::hasEntity < GridType, codim > :: v >
259 template <
int codim,
bool gr
idHasCodim >
260 struct GetSubEntityBase
262 typedef typename GridPartType :: template Codim< codim > :: EntityType Entity;
263 static Entity subEntity(
const ElementType& element,
const int subEn )
265 return element.template subEntity< codim > ( subEn );
269 template <
int codim >
270 struct GetSubEntityBase< codim, false >
272 typedef typename GridPartType :: template Codim< 0 > :: EntityType Entity;
273 static Entity subEntity(
const ElementType& element,
const int subEn )
275 DUNE_THROW(NotImplemented,
"stupid grid without entities of codim 1 used");
280 :
public GetSubEntityBase< 1, Dune::Capabilities::hasEntity < GridType, 1 > :: v >
285 typedef typename GetFaceEntity :: Entity FaceType;
288 enum { CartesianNonAdaptiveGrid = Dune::Capabilities::isCartesian<GridType>::v &&
292 enum { myType = (
numCodimensions == 1 ) ? ( (CartesianNonAdaptiveGrid) ? -1 : 665 ) : 6 };
298 static const PartitionIteratorType pitype = GridPartType :: indexSetPartitionType ;
303 std::unique_ptr< GridPartType > gridPartPtr_;
308 mutable bool codimUsed_ [ maxNumCodimension ];
311 std::vector< std::vector< GeometryType > > geomTypes_;
317 mutable bool compressed_;
326 return codim < numCodimensions && codim >= 0 ;
331 assert( codimLeafSet_[ codim ] );
333 return *codimLeafSet_[ codim ];
340 for(
const auto& codim : codimensions )
351 gridPartPtr_.reset( gridPartPtr.release() );
357 , gridPart_( gridPart )
362 codimUsed_[ 0 ] =
true;
365 for(
int codim = 1; codim < maxNumCodimension; ++codim ) codimUsed_[ codim ] =
false ;
379 typedef typename GridType :: LevelGridView MacroViewType;
380 MacroViewType macroView =
grid_.levelGridView( 0 );
381 const typename MacroViewType :: IndexSet& indexSet = macroView.indexSet();
385 for(
int codim=0; codim <=
dimension; ++codim )
387 const int size = indexSet.types( codim ).size();
389 geomTypes_[ codim ].resize(
size );
390 std::copy_n( indexSet.types( codim ).begin(),
size, geomTypes_[ codim ].begin() );
404 delete codimLeafSet_[ codim ];
405 codimLeafSet_[ codim ] = 0;
416 virtual std::string
name ()
const
418 return "AdaptiveIndexSetBase";
437 if( codimUsed_[ codim ] )
459 for(
size_t i=0; i<
types; ++i )
467 const std::vector <GeometryType> &
geomTypes (
const int codim)
const
469 assert( codim >= 0 && codim <
int(geomTypes_.size()) );
470 return geomTypes_[ codim ];
480 template <
class EntityType>
483 enum { codim = EntityType::codimension };
486 assert( codimUsed_[codim] );
522 if( CartesianNonAdaptiveGrid &&
523 grid_.comm().size() > 1 )
529 markAllBelowOld<Interior_Partition>();
530 if( pitype > Interior_Partition )
532 markAllBelowOld< pitype >();
540 markAllBelowOld< pitype > ();
544 if( pitype == All_Partition )
546 if(
grid_.comm().size() > 1 )
549 markAllUsed<Ghost_Partition>();
565 template<
class Entity >
568 return index< Entity :: codimension >( entity );
572 template<
int codim >
574 index (
const typename GridPartType::template Codim< codim >::EntityType &entity )
const
578 if( (codim != 0) && ! codimUsed_[ codim ] )
579 setupCodimSet< codim >(std::integral_constant<bool,true>());
585 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
606 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for intersections, intersectionCodim = ") << codim );
614 int subNumber,
unsigned int codim )
const
616 DUNE_THROW( NotImplemented, (
name() +
" does not support subIndices for intersections, intersectionCodim = ") << codim );
621 template<
class Entity >
624 return subIndex< Entity::codimension >( entity, subNumber, codim );
630 int subNumber,
unsigned int codim )
const
632 assert( (
int( codim ) >= cd) && (
int( codim ) <=
dimension) );
634 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
636 if( (codim != 0) && ! codimUsed_[ codim ] )
643 assert( (idx >= 0) && (idx <
IndexType( codimSet.size() )) );
666 assert( codimUsed_[codim] );
682 int oldIndex (
const int hole,
const int codim )
const
686 assert( codimUsed_[codim] );
691 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
705 int newIndex (
const int hole ,
const int codim )
const
709 assert( codimUsed_[codim] );
714 DUNE_THROW( NotImplemented, (
name() +
" does not support indices for codim = ") << codim );
743 template <PartitionIteratorType pt>
757 template <PartitionIteratorType pt>
761 template<
int codim >
762 void setupCodimSet (
const std::integral_constant<bool,true> &hasEntities)
const;
763 template<
int codim >
764 void setupCodimSet (
const std::integral_constant<bool,false> &hasEntities)
const;
771 template<
int codim >
773 template<
int codim >
778 template<
class StreamTraits >
782 template<
class StreamTraits >
795 if( ! intersection.conforming() && intersection.neighbor() )
799 if( inside.level() < outside.level() )
800 return GetFaceEntity :: subEntity( outside, intersection.indexInOutside() );
804 return GetFaceEntity :: subEntity( inside, intersection.indexInInside() );
808 template<
class TraitsImp >
812 codimLeafSet( 0 ).resize();
815 if( numCodimensions > 1 )
817 for(
int codim = 1; codim < numCodimensions; ++codim )
819 if( codimUsed_[ codim ] )
820 codimLeafSet( codim ).resize();
827 template<
class TraitsImp >
832 for(
int codim = 0; codim < numCodimensions; ++codim )
833 codimLeafSet( codim ).clearHoles();
839 if( (grid_.comm().size() == 1) || (sequence_ == dofManager_.sequence()) )
844 for(
int codim = 0; codim < numCodimensions; ++codim )
846 codimLeafSet( codim ).prepareCompress();
853 bool haveToCopy = codimLeafSet( 0 ).compress();
854 for(
int codim = 1; codim < numCodimensions; ++codim )
856 if( codimUsed_[ codim ] )
857 haveToCopy |= codimLeafSet( codim ).compress();
863 sequence_ = dofManager_.sequence();
869 template<
class TraitsImp >
876 if( entity.partitionType() == GhostEntity )
878 codimLeafSet( 0 ).insertGhost( entity );
879 const bool skipGhosts = (pitype != All_Partition);
881 if( numCodimensions > 1 )
887 codimLeafSet( 0 ).insert( entity );
889 if( numCodimensions > 1 )
894 assert( codimLeafSet( 0 ).exists( entity ) );
897 if( intersectionCodimension > 0 )
899 insertIntersections( entity );
906 template<
class TraitsImp >
910 codimLeafSet( intersectionCodimension ).resize();
912 const ElementType &element = gridPart_.convert( gridElement );
915 iit != endiit ; ++ iit )
921 FaceType face = getIntersectionFace( intersection, element );
924 codimLeafSet( intersectionCodimension ).insert(
gridEntity( face ) );
928 template<
class TraitsImp >
932 insertIndex( entity );
933 codimLeafSet( 0 ).markForRemoval( entity );
936 template<
class TraitsImp >
941 codimLeafSet( 0 ).markForRemoval( entity );
950 template<
class TraitsImp >
955 bool isNew = wasNew ;
956 typedef typename GridType::HierarchicIterator HierarchicIterator;
959 if( entity.isLeaf() )
961 insertIndex( entity );
969 insertTemporary( entity );
974 isNew = codimLeafSet( 0 ).validIndex( entity );
978 const int childLevel = entity.level() + 1;
979 const HierarchicIterator end = entity.hend( childLevel );
980 for( HierarchicIterator it = entity.hbegin( childLevel ); it != end; ++it )
981 checkHierarchy( *it, isNew );
985 template<
class TraitsImp >
986 template< PartitionIteratorType pt >
994 for(
int codim = 0; codim < numCodimensions; ++codim )
996 if( codimUsed_[ codim ] )
997 codimLeafSet( codim ).resetUsed();
1000 typedef typename GridPartType
1001 ::template Codim< 0 > :: template Partition< pt > :: IteratorType Iterator;
1003 const Iterator end = gridPart_.template end< 0, pt >();
1004 for( Iterator it = gridPart_.template begin< 0, pt >(); it != end; ++it )
1008 template<
class TraitsImp >
1015 if( CartesianNonAdaptiveGrid )
1018 for(
int codim = 0; codim < numCodimensions; ++codim )
1020 if( codimUsed_[ codim ] )
1023 codimLeafSet( codim ).clear();
1029 template<
class TraitsImp >
1038 if( CartesianNonAdaptiveGrid &&
1039 grid_.comm().size() > 1 )
1042 markAllUsed<Interior_Partition> ();
1043 if( pitype > Interior_Partition )
1044 markAllUsed< pitype >();
1050 markAllUsed< pitype > ();
1054 template<
class TraitsImp >
1055 template< PartitionIteratorType pt >
1060 for(
int codim = 0; codim < numCodimensions; ++codim )
1062 if( codimUsed_[ codim ] )
1063 codimLeafSet( codim ).resetUsed();
1067 typedef typename GridType::LevelGridView LevelGridView;
1068 LevelGridView macroView = grid_.levelGridView( 0 );
1070 typedef typename LevelGridView::template Codim< 0 >::template Partition< pt >::Iterator Iterator;
1071 const Iterator macroend = macroView.template end< 0, pt >();
1072 for( Iterator macroit = macroView.template begin< 0, pt >();
1073 macroit != macroend; ++macroit )
1074 checkHierarchy( *macroit,
false );
1078 template<
class TraitsImp >
1079 template<
int codim >
1084 if( ! codimAvailable( codim ) ) return ;
1087 codimLeafSet( codim ).resize();
1090 typedef typename GridPartType
1091 ::template Codim< codim >::template Partition< pitype > :: IteratorType Iterator;
1093 const Iterator end = gridPart_.template end< codim, pitype >();
1094 for( Iterator it = gridPart_.template begin< codim, pitype >(); it != end; ++it )
1095 codimLeafSet( codim ).insert(
gridEntity( *it ) );
1098 codimUsed_[ codim ] =
true;
1101 template<
class TraitsImp >
1102 template<
int codim >
1107 if( ! codimAvailable( codim ) ) return ;
1110 codimLeafSet( codim ).resize();
1112 typedef typename GridPartType
1113 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1115 const Iterator end = gridPart_.template end< 0, pitype >();
1116 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1120 const int subEntities = gridElement.subEntities( codim );
1121 for (
int i = 0; i < subEntities; ++i )
1123 if (! codimLeafSet( codim ).exists( gridElement, i) )
1124 codimLeafSet( codim ).insertSubEntity( gridElement, i );
1129 codimUsed_[ codim ] =
true;
1133 template<
class TraitsImp >
1138 if( intersectionCodimension < 0 ) return ;
1141 if( codimUsed_[ intersectionCodimension ] ) return ;
1144 codimLeafSet( intersectionCodimension ).resize();
1147 typedef typename GridPartType
1148 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1150 const Iterator end = gridPart_.template end< 0, pitype >();
1151 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1158 codimUsed_[ intersectionCodimension ] =
true;
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 >
1188 assert( codimAvailable( codim ) );
1191 codimLeafSet( codim ).resize();
1193 typedef typename GridPartType
1194 ::template Codim< 0 >::template Partition< pitype > :: IteratorType Iterator;
1196 typedef typename GridPartType::ctype ctype;
1198 const Iterator end = gridPart_.template end< 0, pitype >();
1200 for( Iterator it = gridPart_.template begin< 0, pitype >(); it != end; ++it )
1204 const int subEntities = gridElement.subEntities( codim );
1205 for (
int i=0; i < subEntities; ++i)
1207 if (! codimLeafSet( codim ).exists( gridElement, i) )
1209 codimLeafSet( codim ).insertSubEntity( gridElement,i );
1210 if ( Dune::ReferenceElements< ctype, dimension >::
1211 general( gridElement.type() ).type( i, codim ) == type )
1220 codimUsed_[ codim ] =
true;
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 <<
")." );
1282 assert( numCodim == numCodimensions );
1285 for(
int i = 0; i < numCodimensions; ++i )
1286 in >> codimUsed_[ i ];
1288 for(
int i = 0; i < numCodimensions; ++i )
1290 if( codimUsed_[ i ] )
1291 codimLeafSet( i ).read( in );
1295 if( grid_.comm().size() > 1 )
1296 compressed_ =
false;
1310 template<
class Gr
idPartImp >
1333 template <
class Gr
idPartImp >
1349 :
BaseType( std::move( gridPartPtr ) )
1355 return "AdaptiveLeafIndexSet";
1363 if( this->
grid_.comm().size() == 1 )
1366 assert( this->
size( codim ) == this->
grid_.size( codim ) );
1381 template<
class Gr
idPartImp >
1404 template <
class Gr
idPartImp >
1420 :
BaseType( std::move( gridPartPtr ) )
1426 return "IntersectionAdaptiveLeafIndexSet";
1434 if( this->
grid_.comm().size() == 1 )
1438 assert( this->
size( codim ) == this->
grid_.size( codim ) );
1452 template<
class Gr
idPartImp >
1474 template <
class Gr
idPartImp >
1490 :
BaseType( std::move( gridPartPtr ) )
1496 return "DGAdaptiveLeafIndexSet";
1504 if( this->
grid_.comm().size() == 1 )
1505 assert( this->
size( 0 ) == this->
grid_.size( 0 ) );
Definition: bindguard.hh:11
const GridEntityAccess< Entity >::GridEntityType & gridEntity(const Entity &entity)
Definition: gridpart.hh:412
static constexpr T min(T a)
Definition: utility.hh:93
static void apply(Args &&... args)
Definition: forloop.hh:21
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:1336
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1353
AdaptiveLeafIndexSet(std::unique_ptr< GridPartType > &&gridPartPtr)
Constructor, taking ownership of grid part pointer.
Definition: adaptiveleafindexset.hh:1348
BaseType ::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1341
bool compress()
Definition: adaptiveleafindexset.hh:1358
AdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1343
Definition: adaptiveleafindexset.hh:1407
bool compress()
Definition: adaptiveleafindexset.hh:1429
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1424
IntersectionAdaptiveLeafIndexSet(std::unique_ptr< GridPartType > &&gridPartPtr)
Constructor, taking ownership of grid part pointer.
Definition: adaptiveleafindexset.hh:1419
IntersectionAdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1414
BaseType ::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1412
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:1477
BaseType ::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:1482
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:1494
DGAdaptiveLeafIndexSet(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:1484
DGAdaptiveLeafIndexSet(std::unique_ptr< GridPartType > &&gridPartPtr)
Constructor, taking ownership of grid part pointer.
Definition: adaptiveleafindexset.hh:1489
bool compress()
Definition: adaptiveleafindexset.hh:1499
Definition: adaptiveleafindexset.hh:47
GridPartType ::GridType GridType
Definition: adaptiveleafindexset.hh:55
std::vector< GeometryType > Types
Definition: adaptiveleafindexset.hh:73
GridPart GridPartType
Definition: adaptiveleafindexset.hh:53
CodimIndexSetType ::IndexType IndexType
Definition: adaptiveleafindexset.hh:70
static const int dimension
Definition: adaptiveleafindexset.hh:58
CodimIndexSet< GridType > CodimIndexSetType
Definition: adaptiveleafindexset.hh:68
IndexSet IndexSetType
Definition: adaptiveleafindexset.hh:50
Definition: adaptiveleafindexset.hh:62
GridPartType ::template Codim< codim >::EntityType Entity
Definition: adaptiveleafindexset.hh:64
consecutive, persistent index set for the leaf level based on the grid's hierarchy index set
Definition: adaptiveleafindexset.hh:98
GridType::template Codim< 0 >::Entity GridElementType
Definition: adaptiveleafindexset.hh:108
BaseType ::Types Types
geometry type range type */
Definition: adaptiveleafindexset.hh:127
void removeIndex(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:938
void requestCodimensions(const std::vector< int > &codimensions) const
Definition: adaptiveleafindexset.hh:337
GridPartType ::GridType GridType
Definition: adaptiveleafindexset.hh:104
IndexType subIndex(const typename GridPartType::template Codim< cd >::EntityType &entity, int subNumber, unsigned int codim) const
return index for given subentity */
Definition: adaptiveleafindexset.hh:629
AdaptiveIndexSetBase(const GridPartType &gridPart)
Constructor.
Definition: adaptiveleafindexset.hh:355
virtual std::string name() const
return name of index set
Definition: adaptiveleafindexset.hh:416
virtual ~AdaptiveIndexSetBase()
Destructor.
Definition: adaptiveleafindexset.hh:399
void insertEntity(const GridElementType &entity)
please doc me */
Definition: adaptiveleafindexset.hh:500
IndexType index(const Entity &entity) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:566
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:705
bool read(InStreamInterface< StreamTraits > &in)
please doc me */
Definition: adaptiveleafindexset.hh:1257
GridPartType ::IntersectionIteratorType IntersectionIteratorType
type of intersection iterator
Definition: adaptiveleafindexset.hh:133
IndexType subIndex(const Entity &entity, int subNumber, unsigned int codim) const
return index for given subentity */
Definition: adaptiveleafindexset.hh:622
IndexType index(const typename GridPartType::template Codim< codim >::EntityType &entity) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:574
void setupIndexSet()
mark all indices of interest
Definition: adaptiveleafindexset.hh:1031
FaceType getIntersectionFace(const IntersectionType &intersection, const ElementType &inside) const
Definition: adaptiveleafindexset.hh:792
void insertIntersections(const GridElementType &entity) const
Definition: adaptiveleafindexset.hh:908
IndexType countElements(GeometryType type, const std::integral_constant< bool, false > &hasEntities) const
Definition: adaptiveleafindexset.hh:1185
void resize()
please doc me */
Definition: adaptiveleafindexset.hh:517
int oldIndex(int hole, GeometryType type) const
return old index for given hole and type */
Definition: adaptiveleafindexset.hh:674
void markAllBelowOld()
Definition: adaptiveleafindexset.hh:1057
int numberOfHoles(GeometryType type) const
return number of holes for given type */
Definition: adaptiveleafindexset.hh:654
const std::vector< GeometryType > & geomTypes(const int codim) const
*/
Definition: adaptiveleafindexset.hh:467
AdaptiveIndexSetBase(std::unique_ptr< GridPartType > &&gridPartPtr)
Constructor, taking ownership of grid part.
Definition: adaptiveleafindexset.hh:347
void setupCodimSet(const std::integral_constant< bool, true > &hasEntities) const
Definition: adaptiveleafindexset.hh:1081
void insertTemporary(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:930
Types types(const int codim) const
return range of geometry types */
Definition: adaptiveleafindexset.hh:474
int numberOfHoles(const int codim) const
return number of holes of the sets indices
Definition: adaptiveleafindexset.hh:662
void removeEntity(const GridElementType &entity)
please doc me */
Definition: adaptiveleafindexset.hh:508
static const int intersectionCodimension
intersection codimension (numCodim-1 if enabled, otherwise -1)
Definition: adaptiveleafindexset.hh:118
void markAllUsed()
Definition: adaptiveleafindexset.hh:988
int oldIndex(const int hole, const int codim) const
return old index, for dof manager only
Definition: adaptiveleafindexset.hh:682
void resizeVectors()
reallocate the vector for new size
Definition: adaptiveleafindexset.hh:810
static const int dimension
grid dimension */
Definition: adaptiveleafindexset.hh:112
CodimIndexSetType & codimLeafSet(const int codim) const
Definition: adaptiveleafindexset.hh:329
BaseType ::IndexType IndexType
index type */
Definition: adaptiveleafindexset.hh:124
FaceType getIntersectionFace(const IntersectionType &intersection) const
Definition: adaptiveleafindexset.hh:786
TraitsImp ::GridPartType GridPartType
Definition: adaptiveleafindexset.hh:103
IndexType subIndex(const IntersectionType &intersection, int subNumber, unsigned int codim) const
Definition: adaptiveleafindexset.hh:613
void checkHierarchy(const GridElementType &entity, bool wasNew)
Definition: adaptiveleafindexset.hh:953
BaseType ::template Codim< 0 >::Entity ElementType
type of codimension 0 Entity
Definition: adaptiveleafindexset.hh:130
bool contains(const EntityType &en) const
return true if entity has index */
Definition: adaptiveleafindexset.hh:481
TraitsImp ::CodimIndexSetType CodimIndexSetType
Definition: adaptiveleafindexset.hh:106
void setupIntersections() const
Definition: adaptiveleafindexset.hh:1135
void insertIndex(const GridElementType &entity)
Definition: adaptiveleafindexset.hh:871
bool write(OutStreamInterface< StreamTraits > &out) const
please doc me */
Definition: adaptiveleafindexset.hh:1229
GridPartType ::IntersectionType IntersectionType
type of intersections
Definition: adaptiveleafindexset.hh:136
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:1010
static const int numCodimensions
number of supported codimensions
Definition: adaptiveleafindexset.hh:115
IndexType index(const IntersectionType &intersection) const
Definition: adaptiveleafindexset.hh:591
IndexType size(int codim) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:448
void setupCodimSet(const std::integral_constant< bool, false > &hasEntities) const
Definition: adaptiveleafindexset.hh:1104
IndexType size(GeometryType type) const
return number of entities of given type */
Definition: adaptiveleafindexset.hh:428
bool compress()
please doc me */
Definition: adaptiveleafindexset.hh:829
int type() const
return type of index set, for GrapeDataIO
Definition: adaptiveleafindexset.hh:410
static const bool hasSingleGeometryType
true if only one geometry type is available
Definition: adaptiveleafindexset.hh:121
int newIndex(int hole, GeometryType type) const
return new index for given hole and type */
Definition: adaptiveleafindexset.hh:697
Definition: adaptiveleafindexset.hh:1313
@ intersectionCodimension
Definition: adaptiveleafindexset.hh:1319
@ numCodimensions
Definition: adaptiveleafindexset.hh:1315
@ startingCodimension
Definition: adaptiveleafindexset.hh:1317
Definition: adaptiveleafindexset.hh:1384
@ intersectionCodimension
Definition: adaptiveleafindexset.hh:1388
@ startingCodimension
Definition: adaptiveleafindexset.hh:1390
@ numCodimensions
Definition: adaptiveleafindexset.hh:1386
Definition: adaptiveleafindexset.hh:1455
@ numCodimensions
Definition: adaptiveleafindexset.hh:1457
@ intersectionCodimension
Definition: adaptiveleafindexset.hh:1461
@ startingCodimension
Definition: adaptiveleafindexset.hh:1459
Definition: codimindexset.hh:29
int IndexType
Definition: codimindexset.hh:44
interface documentation for (grid part) index sets
Definition: common/indexset.hh:104
Traits::Types Types
geometry type range type
Definition: common/indexset.hh:120
static const int dimension
grid dimension
Definition: common/indexset.hh:107
Traits::IndexType IndexType
index type
Definition: common/indexset.hh:117
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