4 #ifndef DUNE_PDELAB_ORDERING_DIRECTLEAFLOCALORDERING_HH 5 #define DUNE_PDELAB_ORDERING_DIRECTLEAFLOCALORDERING_HH 7 #include <dune/typetree/leafnode.hh> 9 #include <dune/geometry/referenceelements.hh> 10 #include <dune/localfunctions/common/interfaceswitch.hh> 11 #include <dune/localfunctions/common/localkey.hh> 24 template<
typename OrderingTag,
typename FEM,
typename ES,
typename DI,
typename CI>
26 :
public TypeTree::LeafNode
35 template<
typename size_type>
36 friend struct ::Dune::PDELab::impl::update_ordering_data;
44 typedef impl::GridFunctionSpaceOrderingData<typename Traits::SizeType> GFSData;
53 DUNE_THROW(NotImplemented,
"not implemented");
56 template<
typename ItIn,
typename ItOut>
62 template<
typename CIOutIterator,
typename DIOutIterator = DummyDOFIndexIterator>
66 CIOutIterator ci_out,
const CIOutIterator ci_end,
67 DIOutIterator di_out = DIOutIterator())
const 73 di_out->treeIndex().push_back(i);
83 Traits::DOFIndexAccessor::GeometryIndex::geometryType(index),
84 Traits::DOFIndexAccessor::GeometryIndex::entityIndex(index)
93 else if (
_gt_used[geometry_type_index])
104 DUNE_THROW(NotImplemented,
"not implemented");
109 assert(child_index == 0);
133 typedef FiniteElementInterfaceSwitch<
134 typename FEM::Traits::FiniteElement
138 void update_a_priori_fixed_size()
143 template<
typename CodimMask>
146 for (
typename ES::dim_type codim = 0; codim <= ES::dimension; ++codim)
147 if (
_fem->hasDOFs(codim))
151 template<
typename It>
159 const size_type
dim = Traits::GridView::dimension;
161 _gt_used.assign(GlobalGeometryTypeIndex::size(dim),
false);
163 for (; it != end; ++it)
167 _gt_used[GlobalGeometryTypeIndex::index(*it)] = size > 0;
175 void pre_collect_used_geometry_types_from_cell()
178 const size_type
dim = Traits::GridView::dimension;
181 _gt_used.assign(GlobalGeometryTypeIndex::size(dim),
false);
189 void collect_used_geometry_types_from_cell(
const typename Traits::GridView::template Codim<0>::Entity& cell)
193 const typename FESwitch::Coefficients& coeffs =
198 const ReferenceElement<typename Traits::GridView::ctype, Traits::GridView::dimension>& ref_el = ReferenceElements<typename Traits::GridView::ctype,Traits::GridView::dimension>::general(cell.type());
200 for (std::size_t i = 0; i < coeffs.size(); ++i)
202 const LocalKey& key = coeffs.localKey(i);
203 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
204 _gt_used[GlobalGeometryTypeIndex::index(gt)] =
true;
210 template<
typename It>
211 void allocate_entity_offset_vector(It it,
const It end)
214 for (; it != end; ++it)
216 if (
_gt_used[GlobalGeometryTypeIndex::index(*it)])
227 void extract_per_entity_sizes_from_cell(
const typename Traits::GridView::template Codim<0>::Entity& cell)
234 const typename FESwitch::Coefficients& coeffs =
239 const ReferenceElement<typename Traits::GridView::ctype,Traits::GridView::dimension>& ref_el =
240 ReferenceElements<typename Traits::GridView::ctype,Traits::GridView::dimension>::general(cell.type());
242 for (std::size_t i = 0; i < coeffs.size(); ++i)
244 const LocalKey& key = coeffs.localKey(i);
245 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
246 const size_type geometry_type_index = GlobalGeometryTypeIndex::index(gt);
248 const size_type entity_index =
_es.indexSet().subIndex(cell,key.subEntity(),key.codim());
278 void finalize_non_fixed_size_update()
340 #endif // DUNE_PDELAB_ORDERING_DIRECTLEAFLOCALORDERING_HH ES EntitySet
Definition: ordering/utility.hh:214
Definition: directleaflocalordering.hh:25
std::vector< bool > _gt_used
Definition: directleaflocalordering.hh:322
Definition: ordering/utility.hh:208
bool _fixed_size
Definition: directleaflocalordering.hh:315
DI::size_type SizeType
Definition: ordering/utility.hh:201
std::vector< typename Traits::SizeType > _gt_dof_sizes
Definition: directleaflocalordering.hh:325
Traits::CodimFlag _codim_fixed_size
Definition: directleaflocalordering.hh:321
LocalOrderingTraits< ES, DI, CI > Traits
Definition: directleaflocalordering.hh:40
Gridview ordering for leaf spaces.
Definition: leafgridviewordering.hh:18
static const int dim
Definition: adaptivity.hh:83
Definition: adaptivity.hh:27
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:102
const FEM & finiteElementMap() const
Definition: directleaflocalordering.hh:126
ES _es
Definition: directleaflocalordering.hh:314
Definition: gridviewordering.hh:80
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:107
Generic infrastructure for orderings for leaf spaces.
Definition: leaforderingbase.hh:21
shared_ptr< const FEM > _fem
Definition: directleaflocalordering.hh:311
DI::View::TreeIndex TreeIndexView
Definition: ordering/utility.hh:199
Traits::SizeType size(const typename Traits::DOFIndex::EntityIndex &index) const
Definition: directleaflocalordering.hh:80
std::vector< typename Traits::SizeType > _gt_entity_offsets
Definition: directleaflocalordering.hh:324
const Traits::EntitySet & entitySet() const
Definition: directleaflocalordering.hh:121
const bool _container_blocked
Definition: directleaflocalordering.hh:318
bool _fixed_size_possible
Definition: directleaflocalordering.hh:316
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:48
Definition: gridviewordering.hh:23
const std::string s
Definition: function.hh:1102
std::vector< typename Traits::SizeType > _local_gt_dof_sizes
Definition: directleaflocalordering.hh:327
Traits::CodimFlag _codim_used
Definition: directleaflocalordering.hh:320
std::bitset< max_dim > CodimFlag
Definition: ordering/utility.hh:194
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:64
std::vector< typename Traits::SizeType > _entity_dof_offsets
Definition: directleaflocalordering.hh:326
DirectLeafLocalOrdering(const shared_ptr< const FEM > &fem, const ES &es)
Definition: directleaflocalordering.hh:113
GFSData * _gfs_data
Definition: directleaflocalordering.hh:331
FESwitch::Store _fe_store
Definition: directleaflocalordering.hh:312
void map_lfs_indices(const ItIn begin, const ItIn end, ItOut out) const
Definition: directleaflocalordering.hh:57
Traits::SizeType size(const typename Traits::SizeType geometry_type_index, const typename Traits::SizeType entity_index) const
Definition: directleaflocalordering.hh:88
CI ContainerIndex
Definition: ordering/utility.hh:160
Traits::SizeType _max_local_size
Definition: directleaflocalordering.hh:317