4 #ifndef DUNE_PDELAB_ORDERING_LEAFLOCALORDERING_HH
5 #define DUNE_PDELAB_ORDERING_LEAFLOCALORDERING_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>
20 template<
typename OrderingTag,
typename FEM,
typename ES,
typename DI,
typename CI>
22 :
public TypeTree::LeafNode
39 :
BaseT(*this,backend_blocked,gfs_data)
51 return _es.gridView();
59 template<
typename CodimMask>
62 for (
typename ES::dim_type codim = 0; codim <= ES::dimension; ++codim)
63 if (_fem->hasDOFs(codim))
90 const typename Traits::DOFIndex::EntityIndex &
index)
const {
96 typedef FiniteElementInterfaceSwitch<
97 typename FEM::Traits::FiniteElement
102 FESwitch::setStore(_pfe,_fem->find(cell));
104 const typename FESwitch::Coefficients& coeffs =
105 FESwitch::coefficients(*_pfe);
110 ReferenceElements<typename Traits::EntitySet::Traits::CoordinateField,Traits::EntitySet::dimension>::general(cell.type());
112 for (std::size_t i = 0; i < coeffs.size(); ++i)
114 const LocalKey& key = coeffs.localKey(i);
115 Dune::GeometryType gt = ref_el.type(key.subEntity(),key.codim());
123 std::vector<typename Traits::SizeType>& gt_sizes)
126 std::fill(gt_sizes.begin(),gt_sizes.end(),0);
128 FESwitch::setStore(_pfe,_fem->find(cell));
130 const typename FESwitch::Coefficients& coeffs =
131 FESwitch::coefficients(*_pfe);
138 ReferenceElements<typename Traits::EntitySet::Traits::CoordinateField,Traits::EntitySet::dimension>::general(cell.type());
140 for (std::size_t i = 0; i < coeffs.size(); ++i)
142 const LocalKey& key = coeffs.localKey(i);
143 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
146 const size_type entity_index = _es.indexSet().subIndex(cell,key.subEntity(),key.codim());
153 for (size_type i = 0; i < gt_sizes.size(); ++i)
166 std::shared_ptr<const FEM> _fem;
168 typename FESwitch::Store _pfe;
172 template<
typename GFS,
typename Transformation,
typename Params>
173 struct leaf_gfs_to_local_ordering_descriptor<GFS,Transformation,
LeafOrderingTag<Params> >
176 static const bool recursive =
false;
179 typename GFS::Traits::OrderingTag,
180 typename GFS::Traits::FiniteElementMap,
181 typename GFS::Traits::EntitySet,
182 typename Transformation::DOFIndex,
183 typename Transformation::ContainerIndex
190 return transformed_type(gfs.finiteElementMapStorage(),gfs.entitySet(),
false,&
const_cast<GFS*
>(gfs));
195 return std::make_shared<transformed_type>(gfs->finiteElementMapStorage(),gfs->entitySet(),
false,
const_cast<GFS*
>(gfs.get()));
std::size_t index
Definition: interpolate.hh:97
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Tag indicating a standard ordering for a leaf GridfunctionSpace.
Definition: gridfunctionspace/tags.hh:185
Definition: gridviewordering.hh:207
Definition: gridviewordering.hh:286
Definition: leaflocalordering.hh:24
const FEM & finiteElementMap() const
Definition: leaflocalordering.hh:54
Traits::SizeType size(const typename Traits::ContainerIndex &suffix, const typename Traits::DOFIndex::EntityIndex &index) const
Returns the size for a given suffix.
Definition: leaflocalordering.hh:89
const Traits::EntitySet & entitySet() const
Definition: leaflocalordering.hh:44
const Traits::GridView & gridView() const
Definition: leaflocalordering.hh:49
void collect_used_codims(CodimMask &codims) const
Definition: leaflocalordering.hh:60
BaseT::Traits Traits
Definition: leaflocalordering.hh:36
LeafLocalOrdering(const std::shared_ptr< const FEM > &fem, const ES &es, bool backend_blocked, typename BaseT::GFSData *gfs_data)
Definition: leaflocalordering.hh:38
void setup_fixed_size_possible()
Definition: leaflocalordering.hh:72
void update_a_priori_fixed_size()
Definition: leaflocalordering.hh:67
LeafLocalOrdering< typename GFS::Traits::OrderingTag, typename GFS::Traits::FiniteElementMap, typename GFS::Traits::EntitySet, typename Transformation::DOFIndex, typename Transformation::ContainerIndex > transformed_type
Definition: leaflocalordering.hh:184
static transformed_type transform(const GFS &gfs, const Transformation &t)
Definition: leaflocalordering.hh:188
std::shared_ptr< transformed_type > transformed_storage_type
Definition: leaflocalordering.hh:186
static transformed_storage_type transform_storage(std::shared_ptr< const GFS > gfs, const Transformation &t)
Definition: leaflocalordering.hh:193
Entity-wise orderings.
Definition: localorderingbase.hh:30
std::vector< typename Traits::SizeType > _gt_entity_offsets
Definition: localorderingbase.hh:448
bool _fixed_size_possible
Definition: localorderingbase.hh:438
Traits::SizeType node_size(const Node &node, typename Traits::ContainerIndex suffix, const typename Traits::DOFIndex::EntityIndex &index) const
Gives the size for a given entity and suffix.
Definition: localorderingbase.hh:287
Traits::SizeType size(const typename Traits::DOFIndex::EntityIndex &index) const
Definition: localorderingbase.hh:229
friend struct collect_used_geometry_types_from_cell
Definition: localorderingbase.hh:46
bool _fixed_size
Definition: localorderingbase.hh:437
std::vector< bool > _gt_used
Definition: localorderingbase.hh:446
Traits::CodimFlag _codim_used
Definition: localorderingbase.hh:445
friend struct extract_per_entity_sizes_from_cell
Definition: localorderingbase.hh:49
impl::GridFunctionSpaceOrderingData< typename Traits::SizeType > GFSData
Definition: localorderingbase.hh:69
std::vector< typename Traits::SizeType > _gt_dof_offsets
Definition: localorderingbase.hh:449
static constexpr auto GT_UNUSED
Definition: localorderingbase.hh:65
std::size_t _max_local_size
Definition: localorderingbase.hh:440
std::vector< typename Traits::SizeType > _entity_dof_offsets
Definition: localorderingbase.hh:450
CI ContainerIndex
Definition: ordering/utility.hh:176
DI::size_type SizeType
Definition: ordering/utility.hh:218
Definition: ordering/utility.hh:224
typename ES::GridView GridView
Definition: ordering/utility.hh:227
ES EntitySet
Definition: ordering/utility.hh:226