2 #ifndef DUNE_PDELAB_VARIABLEQKDGFEM_HH
3 #define DUNE_PDELAB_VARIABLEQKDGFEM_HH
5 #include <dune/geometry/type.hh>
7 #include <dune/localfunctions/common/virtualwrappers.hh>
8 #include <dune/common/array.hh>
9 #include <dune/common/shared_ptr.hh>
17 template<
class D,
class R,
int d,
int p>
18 struct InitVariableQkDGLocalFiniteElementMap
21 static void init(C & c)
24 typedef typename C::value_type ptr;
25 c[
p] = ptr(
new LocalFiniteElementVirtualImp<LFE>(LFE()));
27 InitVariableQkDGLocalFiniteElementMap<D,R,d,p-1>::init(c);
30 template<
class D,
class R,
int d>
31 struct InitVariableQkDGLocalFiniteElementMap<D,R,d,-1>
34 static void init(C & c) {}
40 template<
class M,
class D,
class R,
int d,
int maxP=6>
43 typedef typename FixedOrderLocalBasisTraits<
46 typedef LocalFiniteElementVirtualInterface<T> FiniteElementType;
51 mapper_(m), polOrder_(mapper_.
size(), defaultP), defaultP_(defaultP)
53 InitVariableQkDGLocalFiniteElementMap<D,R,d,maxP>::init(finiteElements_);
57 template<
class EntityType>
66 return *(finiteElements_[
p]);
72 return *(finiteElements_[defaultP_]);
75 template<
class EntityType>
79 unsigned int i = mapper_.map(e);
83 template<
class EntityType>
86 unsigned int i = mapper_.map(e);
87 unsigned int p = polOrder_[i];
97 std::size_t
size(GeometryType gt)
const
99 DUNE_THROW(Dune::Exception,
"This should not be called!");
104 return getFEM(maxP).localCoefficients().size();
109 std::vector<unsigned char> polOrder_;
110 unsigned int defaultP_;
111 Dune::array< Dune::shared_ptr<FiniteElementType>, maxP+1 > finiteElements_;
119 #endif //DUNE_PDELAB_VARIABLEQKDGFEM_HH
bool fixedSize() const
Definition: variableqkdgfem.hh:92
Definition: variableqkdgfem.hh:41
const Traits::FiniteElementType & getFEM(unsigned int p) const
get local basis functions for a given polynomial order
Definition: variableqkdgfem.hh:64
VariableQkDGLocalFiniteElementMap(const M &m, unsigned int defaultP)
Definition: variableqkdgfem.hh:50
std::size_t size(GeometryType gt) const
Definition: variableqkdgfem.hh:97
collect types exported by a finite element map
Definition: finiteelementmap.hh:27
const Traits::FiniteElementType & find(const EntityType &e) const
get local basis functions for entity
Definition: variableqkdgfem.hh:58
const Traits::FiniteElementType & getFEM() const
get local basis functions for the default order
Definition: variableqkdgfem.hh:70
T FiniteElementType
Type of finite element from local functions.
Definition: finiteelementmap.hh:30
FiniteElementMapTraits< FiniteElementType > Traits
Definition: variableqkdgfem.hh:48
void setOrder(const EntityType &e, unsigned int p)
Definition: variableqkdgfem.hh:76
std::size_t maxLocalSize() const
Definition: variableqkdgfem.hh:102
R p(int i, D x)
Definition: qkdg.hh:62
const E & e
Definition: interpolate.hh:172
unsigned int getOrder(const EntityType &e) const
Definition: variableqkdgfem.hh:84