7#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
8#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH
12#include <dune/geometry/referenceelements.hh>
14#include <dune/common/typetree/traversal.hh>
45template<
class Gr
idView>
48 static const int dim = GridView::dimension;
68 template<
class LocalView>
69 SubEntityDOFs&
bind(
const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
72 containedDOFs_.clear();
73 dofIsContained_.assign(localView.size(),
false);
75 auto re = Dune::referenceElement<double,dim>(localView.element().type());
77 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](
auto&& node,
auto&& ) {
80 const auto& localCoefficients = node.finiteElement().localCoefficients();
81 std::size_t localSize = localCoefficients.size();
82 for(std::size_t i=0; i<localSize; ++i)
84 auto localKey = localCoefficients.localKey(i);
85 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))
87 containedDOFs_.push_back(node.localIndex(i));
88 dofIsContained_[node.localIndex(i)] = true;
110 template<
class LocalView,
class Intersection>
113 return bind(localView, intersection.indexInInside(), 1);
119 return containedDOFs_.cbegin();
125 return containedDOFs_.cend();
131 return containedDOFs_.size();
135 decltype(
auto)
operator[](std::size_t i)
const
137 return containedDOFs_[i];
143 return dofIsContained_[localIndex];
148 std::vector<std::size_t> containedDOFs_;
149 std::vector<bool> dofIsContained_;
193template<
class LocalView>
194auto subEntityDOFs(
const LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
196 using GridView =
typename LocalView::GridView;
198 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);
222template<
class LocalView,
class Intersection>
223auto subEntityDOFs(
const LocalView& localView,
const Intersection& intersection)
225 using GridView =
typename LocalView::GridView;
auto subEntityDOFs(const T &)
Create SubEntityDOFs object.
Definition subentitydofs.hh:167
Definition monomialset.hh:19
Definition monomialset.hh:19
Range of DOFs associated to sub-entity.
Definition subentitydofs.hh:47
auto begin() const
Create begin iterator for access to range of contained local indices.
Definition subentitydofs.hh:117
auto size() const
Return number of contained DOFs.
Definition subentitydofs.hh:129
SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)
Bind SubEntityDOFs object to LocalView and sub-entity.
Definition subentitydofs.hh:111
bool contains(std::size_t localIndex) const
Check if given local index is contained in this range of DOFs.
Definition subentitydofs.hh:141
auto end() const
Create end iterator for access to range of contained local indices.
Definition subentitydofs.hh:123
SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)
Bind SubEntityDOFs object to LocalView and sub-entity.
Definition subentitydofs.hh:69