4#ifndef DUNE_PDELAB_ORDERING_LOCALORDERINGBASE_HH
5#define DUNE_PDELAB_ORDERING_LOCALORDERINGBASE_HH
18 template<
typename ES,
typename DI,
typename CI>
44 template<
typename size_type>
45 friend struct ::Dune::PDELab::impl::update_ordering_data;
47 typedef std::vector<LocalOrderingBase*> ChildVector;
48 typedef typename ChildVector::iterator ChildIterator;
49 typedef typename ChildVector::const_iterator ConstChildIterator;
63 typedef impl::GridFunctionSpaceOrderingData<typename Traits::SizeType>
GFSData;
68 const typename Traits::SizeType entity_index,
69 typename Traits::TreeIndexView mi,
70 typename Traits::ContainerIndex& ci)
const
74 assert(mi.size() == 1 &&
"MultiIndex length must match GridFunctionSpace tree depth");
75 ci.push_back(mi.back());
79 const typename Traits::SizeType child_index = mi.back();
81 _children[child_index]->map_local_index(geometry_type_index,entity_index,mi.back_popped(),ci);
84 ci.push_back(child_index);
86 else if (child_index > 0)
90 const typename Traits::SizeType
index = geometry_type_index *
_child_count + child_index - 1;
95 assert(
_gt_used[geometry_type_index]);
104 template<
typename ItIn,
typename ItOut>
109 for (ItIn in = begin; in != end; ++in, ++out)
111 assert(in->size() == 1 &&
"MultiIndex length must match GridFunctionSpace tree depth");
112 out->push_back(in->treeIndex().back());
117 for (ItIn in = begin; in != end; ++in, ++out)
118 out->push_back(in->treeIndex().back());
122 for (ItIn in = begin; in != end; ++in, ++out)
124 const typename Traits::SizeType child_index = in->treeIndex().back();
125 const typename Traits::SizeType gt_index = Traits::DOFIndexAccessor::geometryType(*in);
128 const typename Traits::SizeType
index = gt_index *
_child_count + child_index - 1;
135 for (ItIn in = begin; in != end; ++in, ++out)
137 const typename Traits::SizeType child_index = in->treeIndex().back();
140 const typename Traits::SizeType gt_index = Traits::DOFIndexAccessor::geometryType(*in);
141 const typename Traits::SizeType entity_index = Traits::DOFIndexAccessor::entityIndex(*in);
152 template<
typename CIOutIterator,
typename DIOutIterator = DummyDOFIndexIterator>
153 typename Traits::SizeType
155 typename Traits::SizeType child_index,
156 CIOutIterator ci_out,
const CIOutIterator ci_end,
157 DIOutIterator di_out = DIOutIterator())
const
159 typedef typename Traits::SizeType size_type;
161 const size_type geometry_type_index = Traits::DOFIndexAccessor::GeometryIndex::geometryType(ei);
162 const size_type entity_index = Traits::DOFIndexAccessor::GeometryIndex::entityIndex(ei);
173 for (size_type i = 0; i <
size; ++i, ++ci_out, ++di_out)
175 ci_out->push_back(i);
176 di_out->treeIndex().push_back(i);
184 for (; ci_out != ci_end; ++ci_out)
186 ci_out->push_back(child_index);
189 else if (child_index > 0)
192 for (; ci_out != ci_end; ++ci_out)
194 const typename Traits::SizeType
index = geometry_type_index *
_child_count + child_index - 1;
198 for (; ci_out != ci_end; ++ci_out)
210 typename Traits::SizeType
size(
const typename Traits::DOFIndex::EntityIndex&
index)
const
213 Traits::DOFIndexAccessor::GeometryIndex::geometryType(
index),
214 Traits::DOFIndexAccessor::GeometryIndex::entityIndex(
index)
218 typename Traits::SizeType
size(
const typename Traits::SizeType geometry_type_index,
const typename Traits::SizeType entity_index)
const
233 typename Traits::SizeType
size(
const typename Traits::SizeType geometry_type_index,
const typename Traits::SizeType entity_index,
const typename Traits::SizeType child_index)
const
238 const typename Traits::SizeType
index = geometry_type_index *
_child_count + child_index;
255 typename Traits::SizeType
offset(
const typename Traits::SizeType geometry_type_index,
const typename Traits::SizeType entity_index,
const typename Traits::SizeType child_index)
const
258 assert(
_gt_used[geometry_type_index]);
265 template<
typename Node>
272 ,
_children(TypeTree::degree(node),nullptr)
285 return _gt_used[GlobalGeometryTypeIndex::index(gt)];
293 bool contains(
typename Traits::SizeType codim)
const
305 bool update_gfs_data_size(
typename Traits::SizeType&
size,
typename Traits::SizeType& block_count)
const
340 for (ConstChildIterator it =
_children.begin(),
std::size_t index
Definition interpolate.hh:97
For backward compatibility – Do not use this!
Definition adaptivity.hh:28
Definition gridviewordering.hh:46
Definition gridviewordering.hh:83
Definition gridviewordering.hh:174
Definition gridviewordering.hh:231
Definition gridviewordering.hh:324
Definition gridviewordering.hh:440
Definition localorderingbase.hh:20
LocalOrderingBase & childOrdering(typename Traits::SizeType i)
Definition localorderingbase.hh:312
void map_lfs_indices(const ItIn begin, const ItIn end, ItOut out) const
Definition localorderingbase.hh:105
Traits::SizeType maxLocalSize() const
Definition localorderingbase.hh:298
const std::size_t _child_count
Definition localorderingbase.hh:354
void setup_fixed_size_possible()
Initial setup of the flag indicating whether a fixed size ordering is possible.
Definition localorderingbase.hh:337
void disable_container_blocking()
Definition localorderingbase.hh:322
std::vector< typename Traits::SizeType > _gt_entity_offsets
Definition localorderingbase.hh:360
bool contains_geometry_type(typename Traits::SizeType gt_index) const
Definition localorderingbase.hh:288
static const bool has_dynamic_ordering_children
Definition localorderingbase.hh:53
Traits::SizeType offset(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index, const typename Traits::SizeType child_index) const
Definition localorderingbase.hh:255
bool _fixed_size_possible
Definition localorderingbase.hh:350
Traits::SizeType size(const typename Traits::DOFIndex::EntityIndex &index) const
Definition localorderingbase.hh:210
Traits::SizeType size(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index) const
Definition localorderingbase.hh:218
friend struct collect_used_geometry_types_from_cell
Definition localorderingbase.hh:36
GFSData * _gfs_data
Definition localorderingbase.hh:364
bool contains(const GeometryType >) const
Definition localorderingbase.hh:283
bool _fixed_size
Definition localorderingbase.hh:349
std::vector< bool > _gt_used
Definition localorderingbase.hh:358
bool contains(typename Traits::SizeType codim) const
Definition localorderingbase.hh:293
LocalOrderingTraits< ES, DI, CI > Traits
Definition localorderingbase.hh:57
Traits::CodimFlag _codim_used
Definition localorderingbase.hh:357
bool _container_blocked
Definition localorderingbase.hh:351
friend struct extract_per_entity_sizes_from_cell
Definition localorderingbase.hh:39
LocalOrderingBase(Node &node, bool container_blocked, GFSData *gfs_data)
Definition localorderingbase.hh:266
void map_local_index(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index, typename Traits::TreeIndexView mi, typename Traits::ContainerIndex &ci) const
Definition localorderingbase.hh:67
impl::GridFunctionSpaceOrderingData< typename Traits::SizeType > GFSData
Definition localorderingbase.hh:63
Traits::SizeType extract_entity_indices(const typename Traits::DOFIndex::EntityIndex &ei, typename Traits::SizeType child_index, CIOutIterator ci_out, const CIOutIterator ci_end, DIOutIterator di_out=DIOutIterator()) const
Definition localorderingbase.hh:154
bool fixedSize() const
Definition localorderingbase.hh:278
std::vector< typename Traits::SizeType > _gt_dof_offsets
Definition localorderingbase.hh:361
static constexpr auto GT_UNUSED
Definition localorderingbase.hh:59
static const bool consume_tree_index
Definition localorderingbase.hh:55
std::size_t _max_local_size
Definition localorderingbase.hh:352
std::vector< LocalOrderingBase * > _children
Definition localorderingbase.hh:355
Traits::SizeType size(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index, const typename Traits::SizeType child_index) const
Definition localorderingbase.hh:233
const LocalOrderingBase & childOrdering(typename Traits::SizeType i) const
Definition localorderingbase.hh:317
std::vector< typename Traits::SizeType > _entity_dof_offsets
Definition localorderingbase.hh:362
Definition ordering/utility.hh:212
Definition ordering/utility.hh:248