2 #ifndef DUNE_PDELAB_FINITEELEMENTMAP_VARIABLEQKDGFEM_HH 3 #define DUNE_PDELAB_FINITEELEMENTMAP_VARIABLEQKDGFEM_HH 8 #include <dune/geometry/type.hh> 10 #include <dune/localfunctions/common/virtualwrappers.hh> 18 template<
class D,
class R,
int d,
int p>
19 struct InitVariableQkDGLocalFiniteElementMap
22 static void init(C & c)
24 typedef Dune::QkDGLocalFiniteElement<D,R,p,d> LFE;
25 typedef typename C::value_type ptr;
26 c[
p] = ptr(
new LocalFiniteElementVirtualImp<LFE>(LFE()));
28 InitVariableQkDGLocalFiniteElementMap<D,R,d,p-1>::init(c);
31 template<
class D,
class R,
int d>
32 struct InitVariableQkDGLocalFiniteElementMap<D,R,d,-1>
35 static void init(C & c) {}
41 template<
class M,
class D,
class R,
int d,
int maxP=6>
44 typedef typename QkDGLocalFiniteElement<D,R,0,d>::Traits::LocalBasisType::Traits T;
46 typedef LocalFiniteElementVirtualInterface<T> FiniteElementType;
51 static constexpr
int dimension = d;
54 mapper_(m), polOrder_(mapper_.size(), defaultP), defaultP_(defaultP)
56 InitVariableQkDGLocalFiniteElementMap<D,R,d,maxP>::init(finiteElements_);
60 template<
class EntityType>
63 return getFEM(getOrder(e));
69 return *(finiteElements_[
p]);
75 return *(finiteElements_[defaultP_]);
78 template<
class EntityType>
82 unsigned int i = mapper_.map(e);
86 template<
class EntityType>
89 unsigned int i = mapper_.map(e);
90 unsigned int p = polOrder_[i];
105 std::size_t
size(GeometryType gt)
const 107 DUNE_THROW(Dune::Exception,
"This should not be called!");
112 return getFEM(maxP).localCoefficients().size();
117 std::vector<unsigned char> polOrder_;
118 unsigned int defaultP_;
119 std::array< std::shared_ptr<FiniteElementType>, maxP+1 > finiteElements_;
126 #endif // DUNE_PDELAB_FINITEELEMENTMAP_VARIABLEQKDGFEM_HH void setOrder(const EntityType &e, unsigned int p)
Definition: variableqkdgfem.hh:79
const Entity & e
Definition: localfunctionspace.hh:120
const Traits::FiniteElementType & find(const EntityType &e) const
get local basis functions for entity
Definition: variableqkdgfem.hh:61
VariableQkDGLocalFiniteElementMap(const M &m, unsigned int defaultP)
Definition: variableqkdgfem.hh:53
T FiniteElementType
Type of finite element from local functions.
Definition: finiteelementmap.hh:30
const Traits::FiniteElementType & getFEM(unsigned int p) const
get local basis functions for a given polynomial order
Definition: variableqkdgfem.hh:67
FiniteElementMapTraits< FiniteElementType > Traits
Definition: variableqkdgfem.hh:48
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
static constexpr bool hasDOFs(int codim)
Definition: variableqkdgfem.hh:100
static constexpr bool fixedSize()
Definition: variableqkdgfem.hh:95
Definition: variableqkdgfem.hh:42
unsigned int getOrder(const EntityType &e) const
Definition: variableqkdgfem.hh:87
collect types exported by a finite element map
Definition: finiteelementmap.hh:27
const Traits::FiniteElementType & getFEM() const
get local basis functions for the default order
Definition: variableqkdgfem.hh:73
const P & p
Definition: constraints.hh:147
std::size_t maxLocalSize() const
Definition: variableqkdgfem.hh:110
std::size_t size(GeometryType gt) const
Definition: variableqkdgfem.hh:105