4#ifndef DUNE_PDELAB_ORDERING_UTILITY_HH
5#define DUNE_PDELAB_ORDERING_UTILITY_HH
36 struct update_direct_children
37 :
public TypeTree::DirectChildrenVisitor
38 ,
public TypeTree::DynamicTraversal
41 template<
typename GFS,
typename Child,
typename TreePath,
typename ChildIndex>
42 void afterChild(
const GFS& gfs, Child& child, TreePath tp, ChildIndex childIndex)
const
57 template<
typename DOFIndex,
typename SizeType,
typename IndexType>
58 static typename std::enable_if<
59 std::is_integral<IndexType>::value
61 store(
DOFIndex& dof_index,
const GeometryType& gt, SizeType entity_index, IndexType tree_index)
64 dof_index.
entityIndex()[0] = GlobalGeometryTypeIndex::index(gt);
66 dof_index.
treeIndex().push_back(tree_index);
69 template<
typename DOFIndex,
typename SizeType,
typename IndexType>
70 static typename std::enable_if<
71 !std::is_integral<IndexType>::value
73 store(
DOFIndex& dof_index,
const GeometryType& gt, SizeType entity_index, IndexType tree_index)
75 dof_index.
entityIndex()[0] = GlobalGeometryTypeIndex::index(gt);
80 template<
typename DOFIndex,
typename SizeType,
typename IndexType>
81 static typename std::enable_if<
82 std::is_integral<IndexType>::value
84 store(
DOFIndex& dof_index, SizeType gt_index, SizeType entity_index, IndexType tree_index)
89 dof_index.
treeIndex().push_back(tree_index);
92 template<
typename DOFIndex,
typename SizeType,
typename IndexType>
93 static typename std::enable_if<
94 !std::is_integral<IndexType>::value
96 store(
DOFIndex& dof_index, SizeType gt_index, SizeType entity_index, IndexType tree_index)
107 template<
typename Index>
110 return geometry_index[0];
113 template<
typename Index>
116 return geometry_index[1];
119 template<
typename Index,
typename SizeType>
120 static void store(Index&
index,
const GeometryType& gt, SizeType entity_index)
122 index[0] = GlobalGeometryTypeIndex::index(gt);
123 index[1] = entity_index;
128 template<
typename DOFIndex>
134 template<
typename DOFIndex>
145 template<
typename DOFIndex,
typename SizeType>
146 static void store(
DOFIndex& dof_index,
const GeometryType& gt, SizeType entity_index, SizeType tree_index)
148 dof_index = entity_index;
154 template<
typename DI,
typename CI>
169 template<
typename SizeType_,
typename CI>
185 template<
typename DI,
typename CI>
207 template<
typename ES,
typename DI,
typename CI>
219 template<
typename ES,
typename DI,
typename CI>
230 template<
typename DI,
typename CI>
240 virtual void map_index_dynamic(
typename Traits::DOFIndexView di,
typename Traits::ContainerIndex& ci)
const = 0;
244 template<
typename child_type>
246 :
public TypeTree::DirectChildrenVisitor
247 ,
public TypeTree::DynamicTraversal
250 template<
typename Node,
typename Child,
typename TreePath,
typename ChildIndex>
251 void afterChild(
const Node& node, Child& child, TreePath tp, ChildIndex child_index)
256 template<
typename Node,
typename Child,
typename ChildIndex>
257 typename std::enable_if<Node::has_dynamic_ordering_children>::type
260 _children[child_index] = &child;
263 template<
typename Node,
typename Child,
typename ChildIndex>
264 typename std::enable_if<!Node::has_dynamic_ordering_children>::type
270 : _children(children)
274 std::vector<child_type*>& _children;
Define and register ordering related transformations. This header defines the two transformations gfs...
std::size_t index
Definition interpolate.hh:97
For backward compatibility – Do not use this!
Definition adaptivity.hh:28
A multi-index representing a degree of freedom in a GridFunctionSpace.
Definition dofindex.hh:148
EntityIndex & entityIndex()
Returns the index of the grid entity associated with the DOF.
Definition dofindex.hh:258
void clear()
Definition dofindex.hh:251
TreeIndex & treeIndex()
Returns the tuple of entity-local indices associated with the DOF.
Definition dofindex.hh:270
Definition simpledofindex.hh:16
Index merging algorithm for global orderings.
Definition ordering/utility.hh:22
type
Definition ordering/utility.hh:24
@ interleaved
Indices are interleaved according to a user-supplied pattern ([i1,i2],[j1,j2] -> [i1,...
Definition ordering/utility.hh:26
@ lexicographic
Lexicographically ordered ([i1,i2],[j1,j2] -> [i1,i2,j1,j2]).
Definition ordering/utility.hh:25
Definition ordering/utility.hh:55
static std::enable_if< std::is_integral< IndexType >::value >::type store(DOFIndex &dof_index, SizeType gt_index, SizeType entity_index, IndexType tree_index)
Definition ordering/utility.hh:84
static std::size_t entityIndex(const DOFIndex &dof_index)
Definition ordering/utility.hh:135
static std::enable_if<!std::is_integral< IndexType >::value >::type store(DOFIndex &dof_index, const GeometryType >, SizeType entity_index, IndexType tree_index)
Definition ordering/utility.hh:73
static std::enable_if< std::is_integral< IndexType >::value >::type store(DOFIndex &dof_index, const GeometryType >, SizeType entity_index, IndexType tree_index)
Definition ordering/utility.hh:61
static std::enable_if<!std::is_integral< IndexType >::value >::type store(DOFIndex &dof_index, SizeType gt_index, SizeType entity_index, IndexType tree_index)
Definition ordering/utility.hh:96
static std::size_t geometryType(const DOFIndex &dof_index)
Definition ordering/utility.hh:129
Definition ordering/utility.hh:105
static std::size_t entityIndex(const Index &geometry_index)
Definition ordering/utility.hh:114
static void store(Index &index, const GeometryType >, SizeType entity_index)
Definition ordering/utility.hh:120
static std::size_t geometryType(const Index &geometry_index)
Definition ordering/utility.hh:108
Definition ordering/utility.hh:143
static void store(DOFIndex &dof_index, const GeometryType >, SizeType entity_index, SizeType tree_index)
Definition ordering/utility.hh:146
Definition ordering/utility.hh:156
CI ContainerIndex
Definition ordering/utility.hh:160
DefaultDOFIndexAccessor DOFIndexAccessor
Definition ordering/utility.hh:164
DI DOFIndex
Definition ordering/utility.hh:158
std::size_t SizeType
Definition ordering/utility.hh:162
SimpleDOFIndex< SizeType_ > DOFIndex
Definition ordering/utility.hh:173
CI ContainerIndex
Definition ordering/utility.hh:175
SimpleDOFIndexAccessor DOFIndexAccessor
Definition ordering/utility.hh:179
SizeType_ SizeType
Definition ordering/utility.hh:177
Definition ordering/utility.hh:188
static const std::size_t max_dim
Definition ordering/utility.hh:192
DI::View::TreeIndex TreeIndexView
Definition ordering/utility.hh:199
DI::size_type SizeType
Definition ordering/utility.hh:201
std::bitset< max_dim > CodimFlag
Definition ordering/utility.hh:194
DI::TreeIndex TreeIndex
Definition ordering/utility.hh:196
DI::View DOFIndexView
Definition ordering/utility.hh:198
DI::size_type size_type
Definition ordering/utility.hh:202
Definition ordering/utility.hh:212
ES EntitySet
Definition ordering/utility.hh:214
typename ES::GridView GridView
Definition ordering/utility.hh:215
Definition ordering/utility.hh:222
DI::EntityIndex EntityIndex
Definition ordering/utility.hh:224
DI::View::EntityIndex EntityIndexView
Definition ordering/utility.hh:225
Definition ordering/utility.hh:232
virtual void map_index_dynamic(typename Traits::DOFIndexView di, typename Traits::ContainerIndex &ci) const =0
virtual ~VirtualOrderingBase()=default
OrderingTraits< DI, CI > Traits
Definition ordering/utility.hh:235
VirtualOrderingBase()
Definition ordering/utility.hh:237
Definition ordering/utility.hh:248
extract_child_bases(std::vector< child_type * > &children)
Definition ordering/utility.hh:269
std::enable_if<!Node::has_dynamic_ordering_children >::type extract_child(const Node &node, Child &child, ChildIndex child_index)
Definition ordering/utility.hh:265
void afterChild(const Node &node, Child &child, TreePath tp, ChildIndex child_index)
Definition ordering/utility.hh:251
std::enable_if< Node::has_dynamic_ordering_children >::type extract_child(const Node &node, Child &child, ChildIndex child_index)
Definition ordering/utility.hh:258
Dummy iterator type over DOF indices.
Definition ordering/utility.hh:290
DummyDOFIndexIterator & operator++()
Definition ordering/utility.hh:294
void push_back(size_type i)
Definition ordering/utility.hh:329
DummyDOFIndexIterator & treeIndex()
Definition ordering/utility.hh:314
DummyDOFIndexIterator & operator*()
Definition ordering/utility.hh:304
bool operator==(const DummyDOFIndexIterator &r) const
Definition ordering/utility.hh:319
std::size_t size_type
Definition ordering/utility.hh:292
DummyDOFIndexIterator & operator+=(size_type i)
Definition ordering/utility.hh:299
bool operator!=(const DummyDOFIndexIterator &r) const
Definition ordering/utility.hh:324
DummyDOFIndexIterator * operator->()
Definition ordering/utility.hh:309