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))
79 typedef FiniteElementInterfaceSwitch<
80 typename FEM::Traits::FiniteElement
83 void collect_used_geometry_types_from_cell(
const typename Traits::EntitySet::Element& cell)
85 FESwitch::setStore(_pfe,_fem->find(cell));
87 const typename FESwitch::Coefficients& coeffs =
88 FESwitch::coefficients(*_pfe);
93 ReferenceElements<typename Traits::EntitySet::Traits::CoordinateField,Traits::EntitySet::dimension>::general(cell.type());
95 for (std::size_t i = 0; i < coeffs.size(); ++i)
97 const LocalKey& key = coeffs.localKey(i);
98 Dune::GeometryType gt = ref_el.type(key.subEntity(),key.codim());
99 this->
_gt_used[GlobalGeometryTypeIndex::index(gt)] =
true;
105 void extract_per_entity_sizes_from_cell(
const typename Traits::EntitySet::Element& cell,
106 std::vector<typename Traits::SizeType>& gt_sizes)
109 std::fill(gt_sizes.begin(),gt_sizes.end(),0);
111 FESwitch::setStore(_pfe,_fem->find(cell));
113 const typename FESwitch::Coefficients& coeffs =
114 FESwitch::coefficients(*_pfe);
121 ReferenceElements<typename Traits::EntitySet::Traits::CoordinateField,Traits::EntitySet::dimension>::general(cell.type());
123 for (std::size_t i = 0; i < coeffs.size(); ++i)
125 const LocalKey& key = coeffs.localKey(i);
126 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
127 const size_type geometry_type_index = GlobalGeometryTypeIndex::index(gt);
129 const size_type entity_index = _es.indexSet().subIndex(cell,key.subEntity(),key.codim());
136 for (size_type i = 0; i < gt_sizes.size(); ++i)
158 std::shared_ptr<const FEM> _fem;
160 typename FESwitch::Store _pfe;
164 template<
typename GFS,
typename Transformation,
typename Params>
165 struct leaf_gfs_to_local_ordering_descriptor<GFS,Transformation,
LeafOrderingTag<Params> >
168 static const bool recursive =
false;
171 typename GFS::Traits::OrderingTag,
172 typename GFS::Traits::FiniteElementMap,
173 typename GFS::Traits::EntitySet,
174 typename Transformation::DOFIndex,
175 typename Transformation::ContainerIndex
182 return transformed_type(gfs.finiteElementMapStorage(),gfs.entitySet(),
false,&
const_cast<GFS*
>(gfs));
185 static transformed_storage_type
transform_storage(std::shared_ptr<const GFS> gfs,
const Transformation& t)
187 return std::make_shared<transformed_type>(gfs->finiteElementMapStorage(),gfs->entitySet(),
false,
const_cast<GFS*
>(gfs.get()));
197 #endif // DUNE_PDELAB_ORDERING_LEAFLOCALORDERING_HH Traits::CodimFlag _codim_used
Definition: localorderingbase.hh:355
Definition: ordering/utility.hh:208
bool _fixed_size_possible
Definition: localorderingbase.hh:348
Definition: gridviewordering.hh:204
const Traits::GridView & gridView() const
Definition: leaflocalordering.hh:49
std::size_t _max_local_size
Definition: localorderingbase.hh:350
std::vector< typename Traits::SizeType > _entity_dof_offsets
Definition: localorderingbase.hh:360
LeafLocalOrdering< typename GFS::Traits::OrderingTag, typename GFS::Traits::FiniteElementMap, typename GFS::Traits::EntitySet, typename Transformation::DOFIndex, typename Transformation::ContainerIndex > transformed_type
Definition: leaflocalordering.hh:176
static transformed_type transform(const GFS &gfs, const Transformation &t)
Definition: leaflocalordering.hh:180
Definition: gridviewordering.hh:283
bool _fixed_size
Definition: localorderingbase.hh:347
const FEM & finiteElementMap() const
Definition: leaflocalordering.hh:54
typename ES::GridView GridView
Definition: ordering/utility.hh:215
std::size_t SizeType
Definition: ordering/utility.hh:162
impl::GridFunctionSpaceOrderingData< typename Traits::SizeType > GFSData
Definition: localorderingbase.hh:61
std::vector< bool > _gt_used
Definition: localorderingbase.hh:356
Definition: localorderingbase.hh:19
BaseT::Traits Traits
Definition: leaflocalordering.hh:36
const Traits::EntitySet & entitySet() const
Definition: leaflocalordering.hh:44
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
std::vector< typename Traits::SizeType > _gt_dof_offsets
Definition: localorderingbase.hh:359
ES EntitySet
Definition: ordering/utility.hh:214
Tag indicating a standard ordering for a leaf GridfunctionSpace.
Definition: gridfunctionspace/tags.hh:183
void update_a_priori_fixed_size()
Definition: leaflocalordering.hh:67
Definition: leaflocalordering.hh:21
static transformed_storage_type transform_storage(std::shared_ptr< const GFS > gfs, const Transformation &t)
Definition: leaflocalordering.hh:185
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
std::vector< typename Traits::SizeType > _gt_entity_offsets
Definition: localorderingbase.hh:358
void collect_used_codims(CodimMask &codims) const
Definition: leaflocalordering.hh:60
std::shared_ptr< transformed_type > transformed_storage_type
Definition: leaflocalordering.hh:178