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 GV,
typename DI,
typename CI>
22 :
public TypeTree::LeafNode
39 : BaseT(*this,backend_blocked,gfs_data)
59 this->
_fixed_size = (!OrderingTag::no_const_ordering_size) && _fem->fixedSize();
69 typedef FiniteElementInterfaceSwitch<
70 typename FEM::Traits::FiniteElement
73 void collect_used_geometry_types_from_cell(
const typename Traits::GridView::template Codim<0>::Entity& cell)
75 FESwitch::setStore(_pfe,_fem->find(cell));
77 const typename FESwitch::Coefficients& coeffs =
78 FESwitch::coefficients(*_pfe);
82 const ReferenceElement<typename Traits::GridView::ctype,Traits::GridView::dimension>& ref_el =
83 ReferenceElements<typename Traits::GridView::ctype,Traits::GridView::dimension>::general(cell.type());
85 for (std::size_t i = 0; i < coeffs.size(); ++i)
87 const LocalKey& key = coeffs.localKey(i);
88 Dune::GeometryType gt = ref_el.type(key.subEntity(),key.codim());
89 this->
_gt_used[GlobalGeometryTypeIndex::index(gt)] =
true;
95 void extract_per_entity_sizes_from_cell(
const typename Traits::GridView::template Codim<0>::Entity& cell,
96 std::vector<typename Traits::SizeType>& gt_sizes)
99 std::fill(gt_sizes.begin(),gt_sizes.end(),0);
101 FESwitch::setStore(_pfe,_fem->find(cell));
103 const typename FESwitch::Coefficients& coeffs =
104 FESwitch::coefficients(*_pfe);
110 const ReferenceElement<typename Traits::GridView::ctype,Traits::GridView::dimension>& ref_el =
111 ReferenceElements<typename Traits::GridView::ctype,Traits::GridView::dimension>::general(cell.type());
113 for (std::size_t i = 0; i < coeffs.size(); ++i)
115 const LocalKey& key = coeffs.localKey(i);
116 GeometryType gt = ref_el.type(key.subEntity(),key.codim());
117 const size_type geometry_type_index = GlobalGeometryTypeIndex::index(gt);
119 const size_type entity_index = _gv.indexSet().subIndex(cell,key.subEntity(),key.codim());
126 for (size_type i = 0; i < gt_sizes.size(); ++i)
140 std::shared_ptr<const FEM> _fem;
142 typename FESwitch::Store _pfe;
146 template<
typename GFS,
typename Transformation,
typename Params>
147 struct leaf_gfs_to_local_ordering_descriptor<GFS,Transformation,
LeafOrderingTag<Params> >
150 static const bool recursive =
false;
153 typename GFS::Traits::OrderingTag,
154 typename GFS::Traits::FiniteElementMap,
155 typename GFS::Traits::GridView,
156 typename Transformation::DOFIndex,
157 typename Transformation::ContainerIndex
164 return transformed_type(gfs.finiteElementMapStorage(),gfs.gridView(),
false,&
const_cast<GFS*
>(gfs));
167 static transformed_storage_type
transform_storage(std::shared_ptr<const GFS> gfs,
const Transformation& t)
169 return std::make_shared<transformed_type>(gfs->finiteElementMapStorage(),gfs->gridView(),
false,
const_cast<GFS*
>(gfs.get()));
179 #endif // DUNE_PDELAB_ORDERING_LEAFLOCALORDERING_HH
Definition: leaflocalordering.hh:21
std::size_t _max_local_size
Definition: localorderingbase.hh:355
Definition: gridviewordering.hh:271
DI::size_type SizeType
Definition: ordering/utility.hh:201
std::vector< typename Traits::SizeType > _gt_dof_offsets
Definition: localorderingbase.hh:364
LeafLocalOrdering(const std::shared_ptr< const FEM > &fem, const GV &gv, bool backend_blocked, typename BaseT::GFSData *gfs_data)
Definition: leaflocalordering.hh:38
bool _fixed_size
Definition: localorderingbase.hh:352
Definition: gridviewordering.hh:187
std::vector< bool > _gt_used
Definition: localorderingbase.hh:361
std::vector< typename Traits::SizeType > _entity_dof_offsets
Definition: localorderingbase.hh:365
impl::GridFunctionSpaceOrderingData< typename Traits::SizeType > GFSData
Definition: localorderingbase.hh:63
void update_a_priori_fixed_size()
Definition: leaflocalordering.hh:57
static transformed_type transform(const GFS &gfs, const Transformation &t)
Definition: leaflocalordering.hh:162
Traits::CodimFlag _codim_used
Definition: localorderingbase.hh:360
std::shared_ptr< transformed_type > transformed_storage_type
Definition: leaflocalordering.hh:160
const FEM & finiteElementMap() const
Definition: leaflocalordering.hh:52
void setPartitionSet(const std::bitset< 6 > &partitions)
Sets the set of contained partitions to the passed-in value.
Definition: partitioninfoprovider.hh:58
const Traits::GridView & gridView() const
Definition: leaflocalordering.hh:47
void setup_fixed_size_possible()
Definition: leaflocalordering.hh:62
Definition: ordering/utility.hh:208
Definition: adaptivity.hh:27
Tag indicating a standard ordering for a leaf GridfunctionSpace.
Definition: gridfunctionspace/tags.hh:216
LeafLocalOrdering< typename GFS::Traits::OrderingTag, typename GFS::Traits::FiniteElementMap, typename GFS::Traits::GridView, typename Transformation::DOFIndex, typename Transformation::ContainerIndex > transformed_type
Definition: leaflocalordering.hh:158
static transformed_storage_type transform_storage(std::shared_ptr< const GFS > gfs, const Transformation &t)
Definition: leaflocalordering.hh:167
Definition: localorderingbase.hh:20
bool _fixed_size_possible
Definition: localorderingbase.hh:353
std::vector< typename Traits::SizeType > _gt_entity_offsets
Definition: localorderingbase.hh:363
BaseT::Traits Traits
Definition: leaflocalordering.hh:36
GV GridView
Definition: ordering/utility.hh:214