DUNE PDELab (git)

Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp > Class Template Reference

Index Set Interface base class. More...

#include <dune/grid/common/indexidset.hh>

Classes

struct  Codim
 Export the type of the entity used as parameter in the index(...) method. More...
 

Public Types

typedef IndexTypeImp IndexType
 The type used for the indices.
 
typedef TypesImp Types
 iterator range for geometry types in domain
 

Public Member Functions

Index access from entity
template<int cc>
IndexType index (const typename Traits::template Codim< cc >::Entity &e) const
 Map entity to index. The result of calling this method with an entity that is not in the index set is undefined. More...
 
template<class Entity >
IndexType index (const Entity &e) const
 Map entity to index. Easier to use than the above because codimension template parameter need not be supplied explicitly. The result of calling this method with an entity that is not in the index set is undefined. More...
 
template<int cc>
IndexType subIndex (const typename Traits::template Codim< cc >::Entity &e, int i, unsigned int codim) const
 Map a subentity to an index. More...
 
template<class Entity >
IndexType subIndex (const Entity &e, int i, unsigned int codim) const
 Map a subentity to an index. More...
 

Static Public Attributes

static const int dimension = std::remove_const< GridImp >::type::dimension
 dimension of the grid (maximum allowed codimension)
 

Access to entity set

Types types (int codim) const
 obtain all geometry types of entities in domain More...
 
auto size (GeometryType type) const
 Return total number of entities of given geometry type in entity set \(E\). More...
 
auto size (int codim) const
 Return total number of entities of given codim in the entity set \(E\). This is simply a sum over all geometry types. More...
 
template<class Entity >
bool contains (const Entity &e) const
 Return true if the given entity is contained in \(E\). More...
 
 IndexSet (const IndexSet &)=delete
 Forbid the copy constructor.
 
IndexSetoperator= (const IndexSet &)=delete
 Forbid the assignment operator.
 
 IndexSet ()=default
 

Detailed Description

template<class GridImp, class IndexSetImp, class IndexTypeImp, class TypesImp>
class Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >

Index Set Interface base class.

This class template is used as a base class for all index set implementations. It uses the Barton-Nackman trick to ensure conformity to the interface.

Template Parameters
GridImpType that is a model of Dune::Grid.
IndexSetImpType that is a model of Dune::IndexSet.
IndexTypeImpThe type used by IndexSetImp to store the indices
TypesImpiterator range for all geometry types in domain

Overview

An index set provides a map

\[ m : E \to \mathbf{N}\]

where \(E\) is a subset of the entities of a grid and \(\mathbf{N}\) is the set of natural numbers (including 0).

We define the subsets

\[ E_g^c = \{e\in E \ | \ \textrm{$e$ has codimension $c$ and geometry type $g$} \}.\]

The index map \(m\) has the following properties:

  • It is unique within the subsets \(E_g^c\), i.e. for any \(e,e^\prime\in E_g^c\) we have \(e\neq e^\prime \rightarrow m(e)\neq m(e^\prime)\).
  • It is consecutive and zero-starting within the subsets \(E_g^c\), i.e. we have \(0\leq m(e) < |E_g^c|\) for any \(e\in E_g^c\).

Index sets are used to assign user defined data (e.g. degrees of freedom of a discretization) to entities of the grid. For efficiency reasons the preferred data structure for user data is the array. In order to access the data from the entity, its index (with respect to an index set - there may be several) is evaluated and used as an index to an array (or some other container providing random access).

Usually an index set is not used directly but a Mapper is used to compute the array index from the information supplied by an index set.

It is important to note that the index assigned to an entity may change during grid modification (i.e. refinement or dynamic load balancing). The user is responsible for reorganizing the information stored in the external arrays appropriately. In order to do this the IdSet concept is supplied.

Level index

Index set where \(E\) corresponds to all entities of a given grid level. All grid implementations provide level indices.

Leaf Index

Index set where \(E\) corresponds to all entities of the leaf grid. All grid implementations provide a leaf index.

Member Function Documentation

◆ contains()

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
template<class Entity >
bool Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::contains ( const Entity e) const
inline

Return true if the given entity is contained in \(E\).

Note
If the input element e is not an element of the grid, then the result of contains() is undefined.

◆ index() [1/2]

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
template<class Entity >
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::index ( const Entity e) const
inline

Map entity to index. Easier to use than the above because codimension template parameter need not be supplied explicitly. The result of calling this method with an entity that is not in the index set is undefined.

Parameters
eReference to codim cc entity. Since entity knows its codimension, automatic extraction is possible.
Returns
An index in the range 0 ... Max number of entities in set - 1.

References Dune::Entity< cd, dim, GridImp, EntityImp >::codimension.

◆ index() [2/2]

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
template<int cc>
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::index ( const typename Traits::template Codim< cc >::Entity &  e) const
inline

Map entity to index. The result of calling this method with an entity that is not in the index set is undefined.

Parameters
eReference to codim cc entity, where cc is the template parameter of the function.
Returns
An index in the range 0 ... Max number of entities in set - 1.

◆ size() [1/2]

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
auto Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::size ( GeometryType  type) const
inline

Return total number of entities of given geometry type in entity set \(E\).

Parameters
[in]typeA valid geometry type.
Returns
number of entities (type is auto determined by the implementation. std::size_t is the expected return type).

Referenced by Dune::IdentityGrid< HostGrid >::size(), Dune::OneDGrid::size(), and Dune::UGGrid< dim >::size().

◆ size() [2/2]

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
auto Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::size ( int  codim) const
inline

Return total number of entities of given codim in the entity set \(E\). This is simply a sum over all geometry types.

Parameters
[in]codimA valid codimension
Returns
number of entities (type is auto determined by the implementation. std::size_t is the expected return type).

◆ subIndex() [1/2]

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
template<class Entity >
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::subIndex ( const Entity e,
int  i,
unsigned int  codim 
) const
inline

Map a subentity to an index.

The result of calling this method with an entity that is not in the index set is undefined.

Note
This method exists for convenience only. It extracts the codimension from the type of the entity, which can be guessed by the compiler.
Template Parameters
Entitytype of entity (must be GridImp::Codim< cc >::Entity for some cc)
Parameters
[in]ereference to entity
[in]inumber subentity of e within the codimension
[in]codimcodimension of the subentity we're interested in
Note
The parameter codim denotes the codimension with respect to the grid, i.e., it must satisfy cc <= codim <= dimension.
Returns
An index in the range 0 ... Max number of entities in set - 1.

References Dune::Entity< cd, dim, GridImp, EntityImp >::codimension.

◆ subIndex() [2/2]

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
template<int cc>
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::subIndex ( const typename Traits::template Codim< cc >::Entity &  e,
int  i,
unsigned int  codim 
) const
inline

Map a subentity to an index.

The result of calling this method with an entity that is not in the index set is undefined.

Template Parameters
cccodimension of the entity
Parameters
[in]ereference to codimension cc entity
[in]inumber subentity of e within the codimension
[in]codimcodimension of the subentity we're interested in
Note
The parameter codim denotes the codimension with respect to the grid, i.e., it must satisfy cc <= codim <= dimension.
Returns
An index in the range 0 ... Max number of entities in set - 1.

◆ types()

template<class GridImp , class IndexSetImp , class IndexTypeImp , class TypesImp >
Types Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp, TypesImp >::types ( int  codim) const
inline

obtain all geometry types of entities in domain

This method returns an iterator range (something that behaves like Dune::IteratorRange) visiting all geometry types of codimension codim in the domain of the index map exactly once. The iterator must implement the concept of a forward iterator (in the sense of the STL). The elements in the iterator range are required to be of type Dune::GeometryType.

Parameters
[in]codima valid codimension
Returns
iterator range over Const reference to a vector of geometry types.

The documentation for this class was generated from the following files:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 12, 23:30, 2024)