4#ifndef DUNE_PDELAB_ORDERING_GRIDVIEWORDERING_HH
5#define DUNE_PDELAB_ORDERING_GRIDVIEWORDERING_HH
7#include <dune/typetree/typetree.hh>
22 template<
typename Codims>
24 :
public TypeTree::TreeVisitor
25 ,
public TypeTree::DynamicTraversal
28 template<
typename Node,
typename TreePath>
29 void leaf(Node& node, TreePath tp)
31 node.collect_used_codims(
codims);
44 :
public TypeTree::TreeVisitor
45 ,
public TypeTree::DynamicTraversal
48 template<
typename Node,
typename TreePath>
49 void leaf(Node& node, TreePath tp)
51 node.update_a_priori_fixed_size();
52 any =
any || node._fixed_size;
53 all =
all && node._fixed_size;
56 template<
typename Node,
typename TreePath>
57 void pre(Node& node, TreePath tp)
const
59 node._fixed_size =
true;
62 template<
typename Node,
typename Child,
typename TreePath,
typename ChildIndex>
63 void afterChild(Node& node,
const Child& child, TreePath tp, ChildIndex childIndex)
const
65 node._fixed_size = node._fixed_size && child._fixed_size;
81 :
public TypeTree::TreeVisitor
82 ,
public TypeTree::DynamicTraversal
85 template<
typename Node,
typename TreePath>
86 void leaf(Node& node, TreePath tp)
const
90 typedef typename Node::Traits::SizeType size_type;
91 const size_type
dim = ES::dimension;
92 node._codim_used.reset();
93 node._gt_used.assign(GlobalGeometryTypeIndex::size(
dim),
false);
94 node._gt_dof_offsets.assign(GlobalGeometryTypeIndex::size(
dim),0);
95 for (
const auto& gt :
es.indexSet().types())
97 size_type size = node.finiteElementMap().size(gt);
98 node._gt_dof_offsets[GlobalGeometryTypeIndex::index(gt)] = size;
99 node._gt_used[GlobalGeometryTypeIndex::index(gt)] = size > 0;
100 node._codim_used[
dim - gt.dim()] = node._codim_used[
dim - gt.dim()] || (size > 0);
102 node._max_local_size = node.finiteElementMap().maxLocalSize();
106 template<
typename Node,
typename TreePath>
107 void pre(Node& node, TreePath tp)
const
109 if (node._fixed_size)
111 typedef typename Node::Traits::SizeType size_type;
112 const size_type
dim = ES::dimension;
113 node._codim_used.reset();
114 node._gt_used.assign(Dune::GlobalGeometryTypeIndex::size(
dim),
false);
115 node._gt_dof_offsets.assign(Dune::GlobalGeometryTypeIndex::size(
dim) * TypeTree::degree(node),0);
116 node._max_local_size = 0;
120 template<
typename Node,
typename Child,
typename TreePath,
typename ChildIndex>
121 void afterChild(Node& node,
const Child& child, TreePath tp, ChildIndex childIndex)
const
123 if (node._fixed_size)
125 node._codim_used |= child._codim_used;
127 std::transform(node._gt_used.begin(),
129 child._gt_used.begin(),
130 node._gt_used.begin(),
131 std::logical_or<bool>());
133 node._max_local_size += child._max_local_size;
135 typedef typename Node::Traits::SizeType size_type;
137 const size_type per_gt_size = child._child_count > 0 ? child._child_count : 1;
138 const size_type size_offset = child._child_count > 0 ? child._child_count - 1 : 0;
140 for (size_type gt = 0; gt < Dune::GlobalGeometryTypeIndex::size(ES::dimension); ++gt)
141 node._gt_dof_offsets[gt * TypeTree::degree(node) + childIndex] = child._gt_dof_offsets[gt * per_gt_size + size_offset];
145 template<
typename Node,
typename TreePath>
146 void post(Node& node, TreePath tp)
const
148 if (node._fixed_size)
150 typedef typename std::vector<typename Node::Traits::SizeType>::iterator iterator;
152 iterator next_gt_it = node._gt_dof_offsets.begin() + TypeTree::degree(node);
153 const iterator end_it = node._gt_dof_offsets.end();
155 for (iterator it = node._gt_dof_offsets.begin();
157 it += TypeTree::degree(node), next_gt_it += TypeTree::degree(node))
158 std::partial_sum(it,next_gt_it,it);
172 :
public TypeTree::TreeVisitor
173 ,
public TypeTree::DynamicTraversal
176 template<
typename Node,
typename TreePath>
177 void leaf(Node& node, TreePath tp)
const
179 if (!node._fixed_size)
181 node._codim_used.reset();
182 node._gt_used.assign(Dune::GlobalGeometryTypeIndex::size(
dim),
false);
183 node._gt_dof_offsets.assign(Dune::GlobalGeometryTypeIndex::size(
dim) * std::max(node._child_count,
static_cast<std::size_t
>(1)),Node::GT_UNUSED);
184 node._gt_entity_offsets.assign(Dune::GlobalGeometryTypeIndex::size(
dim) + 1,0);
188 template<
typename Node,
typename TreePath>
189 void pre(Node& node, TreePath tp)
const
203 template<
typename Cell>
205 :
public TypeTree::TreeVisitor
206 ,
public TypeTree::DynamicTraversal
209 template<
typename Node,
typename TreePath>
210 void leaf(Node& node, TreePath tp)
const
212 if (!node._fixed_size)
213 node.collect_used_geometry_types_from_cell(
cell);
218 ,
ref_el(
Dune::ReferenceElements<typename Cell::Geometry::ctype,Cell::dimension>::general(cell_.type()))
222 Dune::ReferenceElement<typename Cell::Geometry>
ref_el;
227 template<
typename ES>
229 :
public TypeTree::TreeVisitor
230 ,
public TypeTree::DynamicTraversal
233 template<
typename Node,
typename TreePath>
234 void leaf(Node& node, TreePath tp)
const
236 if (!node._fixed_size)
238 typedef typename Node::Traits::SizeType size_type;
240 for (
const auto& gt :
es.indexSet().types())
242 if (node._gt_used[Dune::GlobalGeometryTypeIndex::index(gt)])
243 node._gt_entity_offsets[Dune::GlobalGeometryTypeIndex::index(gt) + 1] =
es.indexSet().size(gt);
246 std::partial_sum(node._gt_entity_offsets.begin(),node._gt_entity_offsets.end(),node._gt_entity_offsets.begin());
247 node._entity_dof_offsets.assign(node._gt_entity_offsets.back() * std::max(node._child_count,
static_cast<size_type
>(1)),0);
248 node.setup_fixed_size_possible();
252 template<
typename Node,
typename Child,
typename TreePath,
typename ChildIndex>
253 void afterChild(Node& node,
const Child& child, TreePath tp, ChildIndex childIndex)
const
255 if (!node._fixed_size)
257 node._codim_used |= child._codim_used;
259 std::transform(node._gt_used.begin(),
261 child._gt_used.begin(),
262 node._gt_used.begin(),
263 std::logical_or<bool>());
267 template<
typename Node,
typename TreePath>
268 void post(Node& node, TreePath tp)
const
282 template<
typename ES>
284 :
public TypeTree::TreeVisitor
285 ,
public TypeTree::DynamicTraversal
288 static const std::size_t
dim = ES::dimension;
289 typedef typename ES::template Codim<0>::Entity
Cell;
292 template<
typename Node,
typename TreePath>
293 void leaf(Node& node, TreePath tp)
295 if (!node._fixed_size)
296 node.extract_per_entity_sizes_from_cell(*
cell,
gt_sizes);
309 ref_el = referenceElement(cell_.geometry());
314 Dune::ReferenceElement<typename Cell::Geometry>
ref_el;
320 template<
typename ES>
322 :
public TypeTree::TreeVisitor
323 ,
public TypeTree::DynamicTraversal
329 template<
typename Node,
typename TreePath>
330 void leaf(Node& node, TreePath tp)
const
332 if (!node._fixed_size)
335 for (
auto& size : node._gt_dof_offsets)
336 if (size == Node::GT_UNUSED)
338 if (node._fixed_size_possible)
340 node._entity_dof_offsets = std::vector<typename Node::Traits::SizeType>();
341 node._fixed_size =
true;
346 template<
typename Node,
typename TreePath>
347 void pre(Node& node, TreePath tp)
const
349 if (!node._fixed_size)
351 node._fixed_size_possible =
true;
352 node._max_local_size = 0;
357 template<
typename Node,
typename Child,
typename TreePath,
typename ChildIndex>
358 void afterChild(Node& node,
const Child& child, TreePath tp, ChildIndex childIndex)
const
360 if (!node._fixed_size)
362 node._fixed_size_possible = node._fixed_size_possible && child._fixed_size;
363 node._max_local_size += child._max_local_size;
368 template<
typename Node,
typename TreePath>
369 void post(Node& node, TreePath tp)
const
371 if (!node._fixed_size)
374 typedef typename Node::Traits::SizeType size_type;
375 const size_type
dim = ES::dimension;
377 if (node._fixed_size_possible)
380 for (size_type gt = 0; gt < GlobalGeometryTypeIndex::size(ES::dimension); ++gt)
382 for (size_type child_index = 0; child_index < TypeTree::degree(node); ++child_index)
384 const size_type per_gt_size = node.childOrdering(child_index)._child_count > 0 ? node.childOrdering(child_index)._child_count : 1;
385 const size_type size_offset = node.childOrdering(child_index)._child_count > 0 ? node.childOrdering(child_index)._child_count - 1 : 0;
387 node._gt_dof_offsets[gt * TypeTree::degree(node) + child_index] = node.childOrdering(child_index)._gt_dof_offsets[gt * per_gt_size + size_offset];
391 typedef typename std::vector<typename Node::Traits::SizeType>::iterator iterator;
393 const iterator end_it = node._gt_dof_offsets.end();
395 for (iterator it = node._gt_dof_offsets.begin();
397 it += TypeTree::degree(node))
398 std::partial_sum(it,it + TypeTree::degree(node),it);
400 node._fixed_size =
true;
404 typedef typename Node::Traits::SizeType size_type;
407 for (size_type geometry_type_index = 0; geometry_type_index < GlobalGeometryTypeIndex::size(
dim); ++geometry_type_index)
409 if (!node._gt_used[geometry_type_index])
411 const size_type entity_count = node._gt_entity_offsets[geometry_type_index+1] - node._gt_entity_offsets[geometry_type_index];
412 for (size_type entity_index = 0; entity_index < entity_count; ++entity_index)
415 for (size_type child_index = 0; child_index < TypeTree::degree(node); ++child_index)
416 node._entity_dof_offsets[
index++] = (carry += node.childOrdering(child_index).size(geometry_type_index,entity_index));
433 template<
typename LocalOrdering>
435 :
public TypeTree::CompositeNode<LocalOrdering>
437 typename LocalOrdering::Traits::ContainerIndex>
438 ,
public OrderingBase<typename LocalOrdering::Traits::DOFIndex,
439 typename LocalOrdering::Traits::ContainerIndex>
442 typedef typename LocalOrdering::Traits
Traits;
450 typedef TypeTree::CompositeNode<LocalOrdering> NodeT;
452 typename LocalOrdering::Traits::DOFIndex,
453 typename LocalOrdering::Traits::ContainerIndex
456 using EntitySet =
typename Traits::EntitySet;
466 bool container_blocked,
468 const EntitySet &entity_Set)
469 : NodeT(local_ordering),
470 BaseT(*this, container_blocked, gfs_data, this), _es(entity_Set) {
482 : NodeT(r.nodeStorage())
485 , _gt_dof_offsets(r._gt_dof_offsets)
486 , _gt_entity_offsets(r._gt_entity_offsets)
487 , _entity_dof_offsets(r._entity_dof_offsets)
492 GridViewOrdering(GridViewOrdering&& r)
493 : NodeT(r.nodeStorage())
494 , BaseT(
std::move(r))
495 , _es(
std::move(r._es))
496 , _gt_dof_offsets(
std::move(r._gt_dof_offsets))
497 , _gt_entity_offsets(
std::move(r._gt_entity_offsets))
498 , _entity_dof_offsets(
std::move(r._entity_dof_offsets))
503 virtual ~GridViewOrdering()
override =
default;
514 typename Traits::SizeType
size(
typename Traits::ContainerIndex suffix)
const
516 using size_type =
typename Traits::SizeType;
517 if (suffix.size() == Traits::ContainerIndex::max_depth)
519 if (suffix.size() == 0)
523 typename Traits::DOFIndex::EntityIndex entity_index;
526 auto back_index = suffix.back();
528 if (_container_blocked) {
530 auto gt_begin = _fixed_size ? _gt_dof_offsets.begin() : _gt_entity_offsets.begin();
531 auto gt_end = _fixed_size ? _gt_dof_offsets.end() : _gt_entity_offsets.end();
532 auto gt_it = std::prev(std::upper_bound(gt_begin, gt_end, back_index));
533 size_type gt = std::distance(gt_begin, gt_it);
534 assert(back_index >= *gt_it);
535 size_type ei = back_index - *gt_it;
536 Traits::DOFIndexAccessor::GeometryIndex::store(entity_index,gt,ei);
538 auto dof_begin = _fixed_size ? _gt_dof_offsets.begin() : _entity_dof_offsets.begin();
539 auto dof_end = _fixed_size ? _gt_dof_offsets.end() : _entity_dof_offsets.end();
540 auto dof_it = std::prev(std::upper_bound(dof_begin, dof_end, back_index));
541 size_type dof_dist = std::distance(dof_begin, dof_it);
544 Traits::DOFIndexAccessor::GeometryIndex::store(entity_index,dof_dist,~size_type{0});
546 auto gt_begin = _gt_entity_offsets.begin();
547 auto gt_end = _gt_entity_offsets.end();
548 auto gt_it = std::prev(std::upper_bound(gt_begin, gt_end, dof_dist));
549 size_type gt = std::distance(gt_begin, gt_it);
550 assert(dof_dist >= *gt_it);
551 size_type ei = dof_dist - *gt_it;
552 Traits::DOFIndexAccessor::GeometryIndex::store(entity_index,gt,ei);
561 return this->
template child<0>();
566 return this->
template child<0>();
569 virtual void map_index_dynamic(
typename Traits::DOFIndexView di,
typename Traits::ContainerIndex& ci)
const override
574 typename Traits::ContainerIndex
mapIndex(
const typename Traits::DOFIndex& di)
const
576 typename Traits::ContainerIndex ci;
581 void mapIndex(
typename Traits::DOFIndexView di,
typename Traits::ContainerIndex& ci)
const
583 typedef typename Traits::SizeType size_type;
584 const size_type geometry_type_index = Traits::DOFIndexAccessor::geometryType(di);
585 const size_type entity_index = Traits::DOFIndexAccessor::entityIndex(di);
586 localOrdering().map_local_index(geometry_type_index,entity_index,di.treeIndex(),ci);
587 if (_container_blocked)
591 ci.push_back(_gt_dof_offsets[geometry_type_index] + entity_index);
595 ci.push_back(_gt_entity_offsets[geometry_type_index] + entity_index);
602 ci.back() += _gt_dof_offsets[geometry_type_index] + entity_index *
localOrdering().size(geometry_type_index,entity_index);
606 ci.back() += _entity_dof_offsets[_gt_entity_offsets[geometry_type_index] + entity_index];
611 template<
typename ItIn,
typename ItOut>
614 typedef typename Traits::SizeType size_type;
615 if (_container_blocked)
618 for (ItIn in = begin; in != end; ++in, ++out)
620 const size_type geometry_type_index = Traits::DOFIndexAccessor::geometryType(*in);
621 const size_type entity_index = Traits::DOFIndexAccessor::entityIndex(*in);
622 out->push_back(_gt_dof_offsets[geometry_type_index] + entity_index);
625 for (ItIn in = begin; in != end; ++in, ++out)
627 const size_type geometry_type_index = Traits::DOFIndexAccessor::geometryType(*in);
628 const size_type entity_index = Traits::DOFIndexAccessor::entityIndex(*in);
629 out->push_back(_gt_entity_offsets[geometry_type_index] + entity_index);
632 else if (_fixed_size)
634 for (ItIn in = begin; in != end; ++in, ++out)
636 const size_type geometry_type_index = Traits::DOFIndexAccessor::geometryType(*in);
637 const size_type entity_index = Traits::DOFIndexAccessor::entityIndex(*in);
638 out->back() += _gt_dof_offsets[geometry_type_index] + entity_index *
localOrdering().size(geometry_type_index,entity_index);
643 for (ItIn in = begin; in != end; ++in, ++out)
645 const size_type geometry_type_index = Traits::DOFIndexAccessor::geometryType(*in);
646 const size_type entity_index = Traits::DOFIndexAccessor::entityIndex(*in);
647 out->back() += _entity_dof_offsets[_gt_entity_offsets[geometry_type_index] + entity_index];
652 template<
typename CIOutIterator>
653 typename Traits::SizeType
655 typename Traits::SizeType child_index,
656 CIOutIterator ci_out,
const CIOutIterator ci_end)
const
658 typedef typename Traits::SizeType size_type;
660 const size_type geometry_type_index = Traits::DOFIndexAccessor::GeometryIndex::geometryType(ei);
661 const size_type entity_index = Traits::DOFIndexAccessor::GeometryIndex::entityIndex(ei);
663 if (_container_blocked)
666 for (; ci_out != ci_end; ++ci_out)
668 ci_out->push_back(_gt_dof_offsets[geometry_type_index] + entity_index);
671 for (; ci_out != ci_end; ++ci_out)
673 ci_out->push_back(_gt_entity_offsets[geometry_type_index] + entity_index);
676 else if (_fixed_size)
678 for (; ci_out != ci_end; ++ci_out)
680 ci_out->back() += _gt_dof_offsets[geometry_type_index] + entity_index *
localOrdering().size(geometry_type_index,entity_index);
685 for (; ci_out != ci_end; ++ci_out)
687 ci_out->back() += _entity_dof_offsets[_gt_entity_offsets[geometry_type_index] + entity_index];
698 typedef typename Traits::SizeType size_type;
699 using ES =
typename Traits::EntitySet;
700 const size_type
dim = ES::dimension;
702 typename ES::CodimMask codims;
707 for (
typename ES::dim_type codim = 0; codim <= ES::dimension; ++codim)
708 if (codims.test(codim))
718 const size_type gt_index_count = GlobalGeometryTypeIndex::size(ES::dimension);
720 if (fixed_size_collector.
any)
726 if (!fixed_size_collector.
all)
730 using Element =
typename ES::template Codim<0>::Entity;
732 for (
const auto& element : elements(_es))
741 for (
const auto& element : elements(_es))
754 _gt_dof_offsets.assign(gt_index_count + 1,0);
760 for (
const auto& gt : _es.indexSet().types())
762 const size_type gt_index = GlobalGeometryTypeIndex::index(gt);
764 const size_type gt_entity_count = _es.indexSet().size(gt);
765 _size += gt_size * gt_entity_count;
766 if (_container_blocked)
767 gt_size = gt_size > 0;
768 _gt_dof_offsets[gt_index + 1] = gt_size * gt_entity_count;
771 std::partial_sum(_gt_dof_offsets.begin(),_gt_dof_offsets.end(),_gt_dof_offsets.begin());
772 _block_count = _gt_dof_offsets.back();
774 _codim_fixed_size.set();
779 _gt_entity_offsets.assign(gt_index_count + 1,0);
781 for (
const auto& gt : _es.indexSet().types())
785 const size_type gt_index = GlobalGeometryTypeIndex::index(gt);
786 _gt_entity_offsets[gt_index + 1] = _es.indexSet().size(gt);
789 std::partial_sum(_gt_entity_offsets.begin(),_gt_entity_offsets.end(),_gt_entity_offsets.begin());
790 _entity_dof_offsets.assign(_gt_entity_offsets.back()+1,0);
795 for (size_type gt_index = 0; gt_index < GlobalGeometryTypeIndex::size(
dim); ++gt_index)
799 const size_type entity_count = _gt_entity_offsets[gt_index + 1] - _gt_entity_offsets[gt_index];
800 for (size_type entity_index = 0; entity_index < entity_count; ++entity_index)
803 _entity_dof_offsets[++
index] = (carry +=
size);
804 _block_count += (
size > 0);
807 _size = _entity_dof_offsets.back();
809 if (!_container_blocked)
810 _block_count = _size;
812 _codim_fixed_size.reset();
830 typename Traits::EntitySet _es;
831 std::vector<typename Traits::SizeType> _gt_dof_offsets;
832 std::vector<typename Traits::SizeType> _gt_entity_offsets;
833 std::vector<typename Traits::SizeType> _entity_dof_offsets;
static const int dim
Definition: adaptivity.hh:84
std::size_t index
Definition: interpolate.hh:97
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Definition: gridviewordering.hh:26
void leaf(Node &node, TreePath tp)
Definition: gridviewordering.hh:29
Codims & codims
Definition: gridviewordering.hh:38
collect_used_codims(Codims &codims_)
Definition: gridviewordering.hh:34
Definition: gridviewordering.hh:46
bool any
Definition: gridviewordering.hh:73
void leaf(Node &node, TreePath tp)
Definition: gridviewordering.hh:49
bool all
Definition: gridviewordering.hh:74
void afterChild(Node &node, const Child &child, TreePath tp, ChildIndex childIndex) const
Definition: gridviewordering.hh:63
collect_a_priori_fixed_size()
Definition: gridviewordering.hh:68
void pre(Node &node, TreePath tp) const
Definition: gridviewordering.hh:57
Definition: gridviewordering.hh:83
update_fixed_size(const ES es_)
Definition: gridviewordering.hh:162
void leaf(Node &node, TreePath tp) const
Definition: gridviewordering.hh:86
void post(Node &node, TreePath tp) const
Definition: gridviewordering.hh:146
ES es
Definition: gridviewordering.hh:166
void afterChild(Node &node, const Child &child, TreePath tp, ChildIndex childIndex) const
Definition: gridviewordering.hh:121
void pre(Node &node, TreePath tp) const
Definition: gridviewordering.hh:107
Definition: gridviewordering.hh:174
pre_collect_used_geometry_types(std::size_t dimension)
Definition: gridviewordering.hh:194
void pre(Node &node, TreePath tp) const
Definition: gridviewordering.hh:189
const std::size_t dim
Definition: gridviewordering.hh:198
void leaf(Node &node, TreePath tp) const
Definition: gridviewordering.hh:177
Definition: gridviewordering.hh:207
void leaf(Node &node, TreePath tp) const
Definition: gridviewordering.hh:210
collect_used_geometry_types_from_cell_visitor(const Cell &cell_)
Definition: gridviewordering.hh:216
const Cell & cell
Definition: gridviewordering.hh:221
Dune::ReferenceElement< typename Cell::Geometry > ref_el
Definition: gridviewordering.hh:222
Definition: gridviewordering.hh:231
void leaf(Node &node, TreePath tp) const
Definition: gridviewordering.hh:234
post_collect_used_geometry_types(const ES &es_)
Definition: gridviewordering.hh:273
ES es
Definition: gridviewordering.hh:277
void post(Node &node, TreePath tp) const
Definition: gridviewordering.hh:268
void afterChild(Node &node, const Child &child, TreePath tp, ChildIndex childIndex) const
Definition: gridviewordering.hh:253
Definition: gridviewordering.hh:286
void set_cell(const Cell &cell_)
Definition: gridviewordering.hh:306
ES es
Definition: gridviewordering.hh:312
static const std::size_t dim
Definition: gridviewordering.hh:288
Dune::ReferenceElement< typename Cell::Geometry > ref_el
Definition: gridviewordering.hh:314
extract_per_entity_sizes_from_cell_visitor(const ES &es_)
Definition: gridviewordering.hh:299
const Cell * cell
Definition: gridviewordering.hh:313
std::vector< size_type > gt_sizes
Definition: gridviewordering.hh:315
std::size_t size_type
Definition: gridviewordering.hh:290
ES::template Codim< 0 >::Entity Cell
Definition: gridviewordering.hh:289
void leaf(Node &node, TreePath tp)
Definition: gridviewordering.hh:293
Definition: gridviewordering.hh:324
void afterChild(Node &node, const Child &child, TreePath tp, ChildIndex childIndex) const
Definition: gridviewordering.hh:358
void post(Node &node, TreePath tp) const
Definition: gridviewordering.hh:369
post_extract_per_entity_sizes(const ES &es_)
Definition: gridviewordering.hh:424
void pre(Node &node, TreePath tp) const
Definition: gridviewordering.hh:347
ES es
Definition: gridviewordering.hh:428
std::vector< GeometryType > GTVector
Definition: gridviewordering.hh:326
void leaf(Node &node, TreePath tp) const
Definition: gridviewordering.hh:330
Transforms a local ordering (entity-wise order) into a global ordering.
Definition: gridviewordering.hh:440
LocalOrdering::Traits Traits
Definition: gridviewordering.hh:442
virtual void map_index_dynamic(typename Traits::DOFIndexView di, typename Traits::ContainerIndex &ci) const override
Definition: gridviewordering.hh:569
void mapIndex(typename Traits::DOFIndexView di, typename Traits::ContainerIndex &ci) const
Definition: gridviewordering.hh:581
bool fixedSize() const
Definition: orderingbase.hh:209
static const bool has_dynamic_ordering_children
Definition: gridviewordering.hh:444
void update()
Definition: gridviewordering.hh:695
Traits::SizeType extract_entity_indices(const typename Traits::DOFIndex::EntityIndex &ei, typename Traits::SizeType child_index, CIOutIterator ci_out, const CIOutIterator ci_end) const
Definition: gridviewordering.hh:654
GridViewOrdering(const typename NodeT::NodeStorage &local_ordering, bool container_blocked, typename BaseT::GFSData *gfs_data, const EntitySet &entity_Set)
Construct ordering object.
Definition: gridviewordering.hh:465
const LocalOrdering & localOrdering() const
Definition: gridviewordering.hh:564
LocalOrdering & localOrdering()
Definition: gridviewordering.hh:559
static const bool consume_tree_index
Definition: gridviewordering.hh:446
void map_lfs_indices(const ItIn begin, const ItIn end, ItOut out) const
Definition: gridviewordering.hh:612
Traits::SizeType size() const
Definition: orderingbase.hh:61
Traits::ContainerIndex mapIndex(const typename Traits::DOFIndex &di) const
Definition: gridviewordering.hh:574
Traits::SizeType size(typename Traits::ContainerIndex suffix) const
Gives the size for a given suffix.
Definition: gridviewordering.hh:514
Definition: orderingbase.hh:21
Dune::PDELab::impl::GridFunctionSpaceOrderingData< typename Traits::SizeType > GFSData
Definition: orderingbase.hh:32
Traits::CodimFlag _codim_fixed_size
Definition: orderingbase.hh:285
bool fixedSize() const
Definition: orderingbase.hh:209
Traits::CodimFlag _codim_used
Definition: orderingbase.hh:284
std::size_t _size
Definition: orderingbase.hh:288
void setDelegate(const VirtualOrderingBase< LocalOrdering::Traits::DOFIndex, LocalOrdering::Traits::ContainerIndex > *delegate)
Set the delegate called in mapIndex().
Definition: orderingbase.hh:227
Traits::SizeType size() const
Definition: orderingbase.hh:61
std::size_t _max_local_size
Definition: orderingbase.hh:287
std::size_t _block_count
Definition: orderingbase.hh:289
bool contains(typename Traits::SizeType codim) const
Definition: orderingbase.hh:204
bool _fixed_size
Definition: orderingbase.hh:274
const bool _container_blocked
Definition: orderingbase.hh:275
Definition: ordering/utility.hh:243