dune-pdelab 2.7-git
Loading...
Searching...
No Matches
Namespaces | Classes | Enumerations | Functions

Map between DOFIndex and ContainerIndex. More...

Collaboration diagram for Ordering:

Namespaces

namespace  Dune::PDELab::ordering
 
namespace  Dune::PDELab::interleaved_ordering
 
namespace  Dune::PDELab::lexicographic_ordering
 

Classes

class  Dune::PDELab::ChunkedBlockOrdering< Ordering >
 Ordering that permutes top-level ContainerIndex entries. More...
 
struct  Dune::PDELab::power_gfs_to_local_ordering_descriptor< GFS, Transformation, ordering::Chunked< U > >
 
struct  Dune::PDELab::composite_gfs_to_local_ordering_descriptor< GFS, Transformation, ordering::Chunked< U > >
 
class  Dune::PDELab::DirectLeafLocalOrdering< OrderingTag, FEM, ES, DI, CI >
 
class  Dune::PDELab::PowerEntityBlockedLocalOrdering< ChildOrdering, k >
 
struct  Dune::PDELab::power_gfs_to_local_ordering_descriptor< GFS, Transformation, EntityBlockedOrderingTag >
 
struct  Dune::PDELab::power_gfs_to_entityblocked_ordering_descriptor< GFS, Transformation >
 
class  Dune::PDELab::CompositeEntityBlockedLocalOrdering< Children >
 
struct  Dune::PDELab::composite_gfs_to_local_ordering_descriptor< GFS, Transformation, EntityBlockedOrderingTag >
 
struct  Dune::PDELab::composite_gfs_to_entityblocked_ordering_descriptor< GFS, Transformation >
 
struct  Dune::PDELab::collect_used_codims< Codims >
 
struct  Dune::PDELab::collect_a_priori_fixed_size
 
struct  Dune::PDELab::update_fixed_size< ES >
 
struct  Dune::PDELab::pre_collect_used_geometry_types
 
struct  Dune::PDELab::collect_used_geometry_types_from_cell_visitor< Cell >
 
struct  Dune::PDELab::post_collect_used_geometry_types< ES >
 
struct  Dune::PDELab::extract_per_entity_sizes_from_cell_visitor< ES >
 
struct  Dune::PDELab::post_extract_per_entity_sizes< ES >
 
class  Dune::PDELab::GridViewOrdering< LocalOrdering >
 Transforms a local ordering (entity-wise order) into a global ordering. More...
 
class  Dune::PDELab::PowerInterleavedOrdering< DI, CI, Child, k >
 
struct  Dune::PDELab::power_gfs_to_interleaved_ordering_descriptor< GFS, Transformation >
 
class  Dune::PDELab::CompositeInterleavedOrdering< DI, CI, Children >
 
struct  Dune::PDELab::composite_gfs_to_interleaved_ordering_descriptor< GFS, Transformation >
 
class  Dune::PDELab::LeafGridViewOrdering< LocalOrdering >
 Gridview ordering for leaf spaces. More...
 
struct  Dune::PDELab::direct_leaf_gfs_to_gridview_ordering_descriptor< GFS, Transformation >
 
class  Dune::PDELab::LeafLocalOrdering< OrderingTag, FEM, ES, DI, CI >
 
struct  Dune::PDELab::leaf_gfs_to_local_ordering_descriptor< GFS, Transformation, LeafOrderingTag< Params > >
 
class  Dune::PDELab::LeafOrderingBase< LocalOrdering >
 Generic infrastructure for orderings for leaf spaces. More...
 
class  Dune::PDELab::PowerLexicographicOrdering< DI, CI, Child, k >
 
struct  Dune::PDELab::power_gfs_to_lexicographic_ordering_descriptor< GFS, Transformation >
 
class  Dune::PDELab::CompositeLexicographicOrdering< DI, CI, Children >
 Interface for merging index spaces. More...
 
struct  Dune::PDELab::composite_gfs_to_lexicographic_ordering_descriptor< GFS, Transformation >
 
class  Dune::PDELab::LocalOrderingBase< ES, DI, CI >
 Entity-wise orderings. More...
 
class  Dune::PDELab::OrderingBase< DI, CI >
 
class  Dune::PDELab::PermutedOrdering< Ordering >
 Ordering that permutes top-level ContainerIndex entries. More...
 
struct  Dune::PDELab::power_gfs_to_local_ordering_descriptor< GFS, Transformation, ordering::Permuted< U > >
 
struct  Dune::PDELab::composite_gfs_to_local_ordering_descriptor< GFS, Transformation, ordering::Permuted< U > >
 
class  Dune::PDELab::SingleCodimLeafOrdering< GV, DI, CI >
 
struct  Dune::PDELab::leaf_gfs_to_ordering_descriptor< GFS, Transformation, SingleCodimMapper >
 
class  Dune::PDELab::SubOrdering< BaseOrdering_, TreePath >
 A view on a subtree of a multi-component ordering. More...
 
struct  Dune::PDELab::MergeMode
 Index merging algorithm for global orderings. More...
 
struct  Dune::PDELab::DefaultDOFIndexAccessor
 
struct  Dune::PDELab::SimpleDOFIndexAccessor
 
struct  Dune::PDELab::SimpleOrderingTraits< DI, CI, CIOrder >
 
struct  Dune::PDELab::SimpleOrderingTraits< SimpleDOFIndex< SizeType_ >, CI, CIOrder >
 
struct  Dune::PDELab::OrderingTraits< DI, CI, CIOrder >
 
struct  Dune::PDELab::LocalOrderingTraits< ES, DI, CI, CIOrder >
 
struct  Dune::PDELab::GridViewOrderingTraits< ES, DI, CI >
 
class  Dune::PDELab::VirtualOrderingBase< DI, CI >
 
struct  Dune::PDELab::extract_child_bases< child_type >
 
struct  Dune::PDELab::DummyDOFIndexIterator
 Dummy iterator type over DOF indices. More...
 
struct  Dune::PDELab::SizeProviderAdapter< Size, ContainerIndex_, OriginOrder >
 Adapter to create a size provider from an ordering. More...
 

Enumerations

enum class  Dune::PDELab::MultiIndexOrder { Dune::PDELab::MultiIndexOrder::Inner2Outer , Dune::PDELab::MultiIndexOrder::Outer2Inner }
 Information about order semantics on multi-indices. More...
 

Functions

template<typename GFS , typename Transformation >
power_gfs_to_entityblocked_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_power_gfs_to_ordering_descriptor (GFS *, Transformation *, EntityBlockedOrderingTag *)
 
template<typename GFS , typename Transformation >
composite_gfs_to_entityblocked_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_composite_gfs_to_ordering_descriptor (GFS *, Transformation *, EntityBlockedOrderingTag *)
 
template<typename GFS , typename Transformation >
power_gfs_to_interleaved_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_power_gfs_to_ordering_descriptor (GFS *, Transformation *, InterleavedOrderingTag *)
 
template<typename GFS , typename Transformation >
composite_gfs_to_interleaved_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_composite_gfs_to_ordering_descriptor (GFS *, Transformation *, InterleavedOrderingTag *)
 
template<typename GFS , typename Transformation , typename Params >
direct_leaf_gfs_to_gridview_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_leaf_gfs_to_ordering_descriptor (GFS *, Transformation *, LeafOrderingTag< Params > *)
 
template<typename GFS , typename Transformation >
power_gfs_to_lexicographic_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_power_gfs_to_ordering_descriptor (GFS *, Transformation *, LexicographicOrderingTag *)
 
template<typename GFS , typename Transformation >
composite_gfs_to_lexicographic_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_composite_gfs_to_ordering_descriptor (GFS *, Transformation *, LexicographicOrderingTag *)
 
template<class Ordering >
 Dune::PDELab::SizeProviderAdapter (const std::shared_ptr< const Ordering > &ordering) -> SizeProviderAdapter< typename Ordering::Traits::SizeType, typename Ordering::Traits::ContainerIndex, Ordering::Traits::ContainerIndexOrder >
 template deduction guide for orderings More...
 

Detailed Description

Map between DOFIndex and ContainerIndex.

Overview

The main purpose of the ordering library is to provide mappings from DOFIndex to ContainerIndex.

Ordering Tree

A final ordering is a type tree that is very similar to the Grid Function Space Tree. The ordering tree has the same structure but may have additional intermediate nodes. However, a main difference is that intermediate nodes are added in order to account for additional node transformations to the ContainerIndex.

Tree example:

Power GFS node --> * * |\ |\ | \ * * <– Additional intermediate node e.g. GV ordering nodes | \ | \ Leaf GFS node --> * * * * <– e.g. Local ordering nodes

Possible intermediate nodes:

Ordering Node

The main task of an ordering node is to modify or add the last index of a partially constructed ContainerIndex based on a part of a DOFIndex.

### Local Ordering Tree

The local ordering is a special kind of ordering tree where all
ContainerIndex for a given entity index are ordered consecutively
starting at index `0`. Notice that it is an ordering itself and also
work as described above, but because their indexation starts at `0`,
they are placed at the bottom of the tree so that other ordering nodes
can merge them in a meaningful way.

### Grid View Ordering Node

This kind of node holds **one** local ordering tree as a child and puts the
local ordering ContainerIndex in context of all the entities in an entity
set. Typically, this node keeps a list of offsets for each entity index.
This offset is added or appendend to the last index of the ContainerIndex
created by the local ordering.

## Size of sub-blocks

The ContainerIndex is meant to access a container. However, in an arbitrarily
nested container, every sub-block container may have a different size
necessary to store every possible ContainerIndex from the ordering. To solve
this, the ordering root node offers a `size(ContainerIdex)` method that
gives a size for every possible container.

In particular, it computes the size required for a given suffix of a
ContainerIndex. We say that the container index is a complete
MultiIndex path to the container and that a suffix is a partial
MultiIndex refering to the outer containers of a system of nested
containers (e.g. vector of vectors).

For example, posible suffixes to the container index `{1,4,10}` are
`{}`, `{10}`, and  `{4,10}`, and each of these suffixes will
yield different sizes that are big enough to accommodate all possible
sub-suffixes. Following the example above, the sizes should be at least
11, 5, and 2. The `size(ContainerIndex)` method also accepts full container
index (i.e. full MultiIndex `{1,4,10}`), but since containers are not
expected to be blocked further down, it returns 0.

In dune-function terms, the root ordering node will act as a size provider.
However, notice that order of the `SizePrefix` has the same semantics as the
`ContainerIndex` and need to be reversed when used with dune-functions
algorithms. See SizeProviderAdapter for more details on this.

### Computation of sizes

The comuptation of sizes should be thought as an inverse of the
ContainerIndex transformation. For a ContainerIndex suffix, it traverses
the tree top to bottom. Since the ContainerIndex encodes the ordering path
to an leaf node by either adding an offset or by appending a tree path, the
calculation on each node consumes the last index of the suffix in
the same way as it was created, and tries to find an offset range where
such index is contained. Once this range is found, the tree path down the
tree may be reconstrcted or the size of the offset range may be returned if
all indices where consumed.

@see SizeProviderAdapter
@see MultiIndex
@see DOFIndex

Enumeration Type Documentation

◆ MultiIndexOrder

enum class Dune::PDELab::MultiIndexOrder
strong

Information about order semantics on multi-indices.

Enumerator
Inner2Outer 

indices are ordered from inner to outer container: {inner,...,outer}

Outer2Inner 

indices are ordered from outer to inner container: {outer,...,inner}

Function Documentation

◆ register_composite_gfs_to_ordering_descriptor() [1/3]

template<typename GFS , typename Transformation >
composite_gfs_to_entityblocked_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_composite_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
EntityBlockedOrderingTag  
)

◆ register_composite_gfs_to_ordering_descriptor() [2/3]

template<typename GFS , typename Transformation >
composite_gfs_to_interleaved_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_composite_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
InterleavedOrderingTag  
)

◆ register_composite_gfs_to_ordering_descriptor() [3/3]

template<typename GFS , typename Transformation >
composite_gfs_to_lexicographic_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_composite_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
LexicographicOrderingTag  
)

◆ register_leaf_gfs_to_ordering_descriptor()

template<typename GFS , typename Transformation , typename Params >
direct_leaf_gfs_to_gridview_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_leaf_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
LeafOrderingTag< Params > *   
)

◆ register_power_gfs_to_ordering_descriptor() [1/3]

template<typename GFS , typename Transformation >
power_gfs_to_entityblocked_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_power_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
EntityBlockedOrderingTag  
)

◆ register_power_gfs_to_ordering_descriptor() [2/3]

template<typename GFS , typename Transformation >
power_gfs_to_interleaved_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_power_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
InterleavedOrderingTag  
)

◆ register_power_gfs_to_ordering_descriptor() [3/3]

template<typename GFS , typename Transformation >
power_gfs_to_lexicographic_ordering_descriptor< GFS, Transformation > Dune::PDELab::register_power_gfs_to_ordering_descriptor ( GFS *  ,
Transformation *  ,
LexicographicOrderingTag  
)

◆ SizeProviderAdapter()

template<class Ordering >
Dune::PDELab::SizeProviderAdapter ( const std::shared_ptr< const Ordering > &  ordering) -> SizeProviderAdapter< typename Ordering::Traits::SizeType, typename Ordering::Traits::ContainerIndex, Ordering::Traits::ContainerIndexOrder >

template deduction guide for orderings