Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp > Class Template Reference
[IndexSet and IdSet]

Index Set Interface base class. More...

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

Inheritance diagram for Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >:
Inheritance graph

List of all members.

Public Types

typedef IndexTypeImp IndexType
 The type used for the indices.

Public Member Functions

Index access from entity

template<int cc>
IndexType index (const typename remove_const< GridImp >::type::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.
template<class EntityType >
IndexType index (const EntityType &e) const
 Map entity to index. Easier to use than the above because codimension template parameter need not be supplied explicitely. The result of calling this method with an entity that is not in the index set is undefined.
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.
template<class Entity >
IndexType subIndex (const Entity &e, int i, unsigned int codim) const
 Map a subentity to an index.

Static Public Attributes

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

Access to entity set



const std::vector< GeometryType > & geomTypes (int codim) const
 Return vector with all geometry types of entities in domain of index map. Return a vector with all geometry types of a given codimension contained in the Entity set $E$.
IndexType size (GeometryType type) const
 Return total number of entities of given geometry type in entity set $E$.
IndexType 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.
template<class EntityType >
bool contains (const EntityType &e) const
 Return true if the given entity is contained in $E$.
 IndexSet ()

Detailed Description

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

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:
GridImp Type that is a model of Dune::Grid.
IndexSetImp Type that is a model of Dune::IndexSet.
IndexTypeImp The type used by IndexSetImp to store the indices

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 prefered 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 reponsible 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 Typedef Documentation


Constructor & Destructor Documentation

template<class GridImp, class IndexSetImp, class IndexTypeImp>
Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >::IndexSet (  )  [inline]

Member Function Documentation

template<class GridImp, class IndexSetImp, class IndexTypeImp>
template<int cc>
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >::index ( const typename remove_const< GridImp >::type::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:
e Reference 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.
template<class GridImp, class IndexSetImp, class IndexTypeImp>
template<class EntityType >
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >::index ( const EntityType &  e  )  const [inline]

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

Parameters:
e Reference 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.

Reimplemented in Dune::ALU3dGridHierarchicIndexSet< elType, Comm >, Dune::DefaultLevelIndexSet< GridImp >, and Dune::DefaultLeafIndexSet< GridImp >.

template<class GridImp, class IndexSetImp, class IndexTypeImp>
template<class Entity >
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >::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:
Entity type of entity (must be GridImp::Codim< cc >::Entity for some cc)
Parameters:
[in] e reference to entity
[in] i number subentity of e within the codimension
[in] codim codimension of the subentity we're interested in
Returns:
An index in the range 0 ... Max number of entities in set - 1.
template<class GridImp, class IndexSetImp, class IndexTypeImp>
template<int cc>
IndexType Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >::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:
cc codimension of the entity
Parameters:
[in] e reference to codimsion cc entity
[in] i number subentity of e within the codimension
[in] codim codimension of the subentity we're interested in (must satisfy cc <= codim <= dimension)
Returns:
An index in the range 0 ... Max number of entities in set - 1.

Reimplemented in Dune::AlbertaGridHierarchicIndexSet< dim, dimworld >, Dune::AlbertaGridIndexSet< dim, dimworld >, and Dune::IndexSetDefaultImplementation< GridImp, IndexSetImp >.


Member Data Documentation

template<class GridImp, class IndexSetImp, class IndexTypeImp>
const int Dune::IndexSet< GridImp, IndexSetImp, IndexTypeImp >::dimension = remove_const< GridImp >::type::dimension [static]

The documentation for this class was generated from the following file:

Generated on Fri Apr 29 2011 with Doxygen (ver 1.7.1) [doxygen-log,error-log].