4 #ifndef DUNE_PDELAB_ORDERING_DIRECTLEAFLOCALORDERING_HH
5 #define DUNE_PDELAB_ORDERING_DIRECTLEAFLOCALORDERING_HH
7 #include <dune/typetree/leafnode.hh>
9 #include <dune/common/nullptr.hh>
10 #include <dune/geometry/referenceelements.hh>
11 #include <dune/localfunctions/common/interfaceswitch.hh>
12 #include <dune/localfunctions/common/localkey.hh>
26 template<
typename OrderingTag,
typename FEM,
typename GV,
typename DI,
typename CI>
28 :
public TypeTree::LeafNode
38 template<
typename size_type>
39 friend struct ::Dune::PDELab::impl::update_ordering_data;
47 typedef impl::GridFunctionSpaceOrderingData<typename Traits::SizeType> GFSData;
56 DUNE_THROW(NotImplemented,
"not implemented");
59 template<
typename ItIn,
typename ItOut>
65 template<
typename CIOutIterator,
typename DIOutIterator = DummyDOFIndexIterator>
69 CIOutIterator ci_out,
const CIOutIterator ci_end,
70 DIOutIterator di_out = DIOutIterator())
const
76 di_out->treeIndex().push_back(i);
86 Traits::DOFIndexAccessor::GeometryIndex::geometryType(index),
87 Traits::DOFIndexAccessor::GeometryIndex::entityIndex(index)
96 else if (
_gt_used[geometry_type_index])
107 DUNE_THROW(NotImplemented,
"not implemented");
112 assert(child_index == 0);
139 typedef FiniteElementInterfaceSwitch<
140 typename FEM::Traits::FiniteElement
144 void update_a_priori_fixed_size()
146 _fixed_size = (!OrderingTag::no_const_ordering_size) &&
_fem->fixedSize();
149 template<
typename It>
150 void update_fixed_size(It it,
const It end)
157 const size_type
dim = Traits::GridView::dimension;
159 _gt_used.assign(GlobalGeometryTypeIndex::size(dim),
false);
161 for (; it != end; ++it)
165 _gt_used[GlobalGeometryTypeIndex::index(*it)] = size > 0;
173 void pre_collect_used_geometry_types_from_cell()
176 const size_type dim = Traits::GridView::dimension;
179 _gt_used.assign(GlobalGeometryTypeIndex::size(dim),
false);
187 void collect_used_geometry_types_from_cell(
const typename Traits::GridView::template Codim<0>::Entity& cell)
191 const typename FESwitch::Coefficients& coeffs =
196 const ReferenceElement<typename Traits::GridView::ctype, Traits::GridView::dimension>& ref_el = ReferenceElements<typename Traits::GridView::ctype,Traits::GridView::dimension>::general(cell.type());
198 for (std::size_t i = 0; i < coeffs.size(); ++i)
200 const LocalKey& key = coeffs.localKey(i);
201 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
202 _gt_used[GlobalGeometryTypeIndex::index(gt)] =
true;
208 template<
typename It>
209 void allocate_entity_offset_vector(It it,
const It end)
212 for (; it != end; ++it)
214 if (
_gt_used[GlobalGeometryTypeIndex::index(*it)])
225 void extract_per_entity_sizes_from_cell(
const typename Traits::GridView::template Codim<0>::Entity& cell)
232 const typename FESwitch::Coefficients& coeffs =
237 const ReferenceElement<typename Traits::GridView::ctype,Traits::GridView::dimension>& ref_el =
238 ReferenceElements<typename Traits::GridView::ctype,Traits::GridView::dimension>::general(cell.type());
240 for (std::size_t i = 0; i < coeffs.size(); ++i)
242 const LocalKey& key = coeffs.localKey(i);
243 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
244 const size_type geometry_type_index = GlobalGeometryTypeIndex::index(gt);
246 const size_type entity_index =
_gv.indexSet().subIndex(cell,key.subEntity(),key.codim());
269 void finalize_non_fixed_size_update()
331 #endif // DUNE_PDELAB_ORDERING_DIRECTLEAFLOCALORDERING_HH
GFSData * _gfs_data
Definition: directleaflocalordering.hh:322
Generic infrastructure for orderings for leaf spaces.
Definition: leaforderingbase.hh:21
bool _fixed_size_possible
Definition: directleaflocalordering.hh:307
Traits::SizeType offset(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index, const typename Traits::SizeType child_index) const
Definition: directleaflocalordering.hh:110
Traits::SizeType _max_local_size
Definition: directleaflocalordering.hh:308
Traits::SizeType size(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index) const
Definition: directleaflocalordering.hh:91
std::vector< bool > _gt_used
Definition: directleaflocalordering.hh:313
DI::size_type SizeType
Definition: ordering/utility.hh:201
Traits::CodimFlag _codim_fixed_size
Definition: directleaflocalordering.hh:312
std::vector< typename Traits::SizeType > _gt_dof_sizes
Definition: directleaflocalordering.hh:316
Traits::CodimFlag _codim_used
Definition: directleaflocalordering.hh:311
Definition: directleaflocalordering.hh:27
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: directleaflocalordering.hh:67
std::vector< typename Traits::SizeType > _gt_entity_offsets
Definition: directleaflocalordering.hh:315
DirectLeafLocalOrdering(const shared_ptr< const FEM > &fem, const GV &gv)
Definition: directleaflocalordering.hh:116
Gridview ordering for leaf spaces.
Definition: leafgridviewordering.hh:18
FESwitch::Store _fe_store
Definition: directleaflocalordering.hh:303
CI ContainerIndex
Definition: ordering/utility.hh:160
const FEM & finiteElementMap() const
Definition: directleaflocalordering.hh:132
void map_lfs_indices(const ItIn begin, const ItIn end, ItOut out) const
Definition: directleaflocalordering.hh:60
shared_ptr< const FEM > _fem
Definition: directleaflocalordering.hh:302
DI::View::TreeIndex TreeIndexView
Definition: ordering/utility.hh:199
void setPartitionSet(const std::bitset< 6 > &partitions)
Sets the set of contained partitions to the passed-in value.
Definition: partitioninfoprovider.hh:58
const bool _container_blocked
Definition: directleaflocalordering.hh:309
std::vector< typename Traits::SizeType > _entity_dof_offsets
Definition: directleaflocalordering.hh:317
std::bitset< max_dim > CodimFlag
Definition: ordering/utility.hh:194
Definition: ordering/utility.hh:208
Definition: adaptivity.hh:27
Traits::SizeType size(const typename Traits::DOFIndex::EntityIndex &index) const
Definition: directleaflocalordering.hh:83
static const int dim
Definition: adaptivity.hh:83
LocalOrderingTraits< GV, DI, CI > Traits
Definition: directleaflocalordering.hh:43
Mixin class for providing information about contained grid partitions.
Definition: partitioninfoprovider.hh:22
const std::string s
Definition: function.hh:1102
bool _fixed_size
Definition: directleaflocalordering.hh:306
const Traits::GridView & gridView() const
Definition: directleaflocalordering.hh:127
Traits::SizeType size(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index, const typename Traits::SizeType child_index) const
Definition: directleaflocalordering.hh:105
std::vector< typename Traits::SizeType > _local_gt_dof_sizes
Definition: directleaflocalordering.hh:318
GV _gv
Definition: directleaflocalordering.hh:305
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: directleaflocalordering.hh:51
GV GridView
Definition: ordering/utility.hh:214