dune-pdelab  2.4-dev
variableqkdgfem.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PDELAB_VARIABLEQKDGFEM_HH
3 #define DUNE_PDELAB_VARIABLEQKDGFEM_HH
4 
5 #include <memory>
6 
7 #include <dune/geometry/type.hh>
8 
9 #include <dune/localfunctions/common/virtualwrappers.hh>
10 #include <dune/common/array.hh>
11 #include "finiteelementmap.hh"
12 #include "qkdg.hh"
13 
14 namespace Dune {
15  namespace PDELab {
16 
17  namespace {
18  template<class D, class R, int d, int p>
19  struct InitVariableQkDGLocalFiniteElementMap
20  {
21  template<typename C>
22  static void init(C & c)
23  {
25  typedef typename C::value_type ptr;
26  c[p] = ptr(new LocalFiniteElementVirtualImp<LFE>(LFE()));
27 
28  InitVariableQkDGLocalFiniteElementMap<D,R,d,p-1>::init(c);
29  }
30  };
31  template<class D, class R, int d>
32  struct InitVariableQkDGLocalFiniteElementMap<D,R,d,-1>
33  {
34  template<typename C>
35  static void init(C & c) {}
36  };
37  }
38 
41  template<class M, class D, class R, int d, int maxP=6>
43  {
44  typedef typename FixedOrderLocalBasisTraits<
47  typedef LocalFiniteElementVirtualInterface<T> FiniteElementType;
48  public:
50 
51  VariableQkDGLocalFiniteElementMap (const M & m, unsigned int defaultP) :
52  mapper_(m), polOrder_(mapper_.size(), defaultP), defaultP_(defaultP)
53  {
54  InitVariableQkDGLocalFiniteElementMap<D,R,d,maxP>::init(finiteElements_);
55  }
56 
58  template<class EntityType>
59  const typename Traits::FiniteElementType& find (const EntityType& e) const
60  {
61  return getFEM(getOrder(e));
62  }
63 
65  const typename Traits::FiniteElementType& getFEM (unsigned int p) const
66  {
67  return *(finiteElements_[p]);
68  }
69 
71  const typename Traits::FiniteElementType& getFEM () const
72  {
73  return *(finiteElements_[defaultP_]);
74  }
75 
76  template<class EntityType>
77  void setOrder (const EntityType& e, unsigned int p)
78  {
79  assert(p <= maxP);
80  unsigned int i = mapper_.map(e);
81  polOrder_[i] = p;
82  }
83 
84  template<class EntityType>
85  unsigned int getOrder (const EntityType& e) const
86  {
87  unsigned int i = mapper_.map(e);
88  unsigned int p = polOrder_[i];
89  assert(p <= maxP);
90  return p;
91  }
92 
93  bool fixedSize() const
94  {
95  return false;
96  }
97 
98  std::size_t size(GeometryType gt) const
99  {
100  DUNE_THROW(Dune::Exception,"This should not be called!");
101  }
102 
103  std::size_t maxLocalSize() const
104  {
105  return getFEM(maxP).localCoefficients().size();
106  }
107 
108  private:
109  const M & mapper_;
110  std::vector<unsigned char> polOrder_;
111  unsigned int defaultP_;
112  Dune::array< std::shared_ptr<FiniteElementType>, maxP+1 > finiteElements_;
113  };
114 
115 
116  }
117 }
118 
119 #endif //DUNE_PDELAB_VARIABLEQKDGFEM_HH
const Traits::FiniteElementType & find(const EntityType &e) const
get local basis functions for entity
Definition: variableqkdgfem.hh:59
Definition: qkdg.hh:299
const E & e
Definition: interpolate.hh:172
VariableQkDGLocalFiniteElementMap(const M &m, unsigned int defaultP)
Definition: variableqkdgfem.hh:51
std::size_t size(GeometryType gt) const
Definition: variableqkdgfem.hh:98
const Traits::FiniteElementType & getFEM() const
get local basis functions for the default order
Definition: variableqkdgfem.hh:71
const Traits::FiniteElementType & getFEM(unsigned int p) const
get local basis functions for a given polynomial order
Definition: variableqkdgfem.hh:65
Definition: variableqkdgfem.hh:42
T FiniteElementType
Type of finite element from local functions.
Definition: finiteelementmap.hh:30
void setOrder(const EntityType &e, unsigned int p)
Definition: variableqkdgfem.hh:77
std::size_t maxLocalSize() const
Definition: variableqkdgfem.hh:103
Definition: adaptivity.hh:27
collect types exported by a finite element map
Definition: finiteelementmap.hh:27
bool fixedSize() const
Definition: variableqkdgfem.hh:93
const P & p
Definition: constraints.hh:146
FiniteElementMapTraits< FiniteElementType > Traits
Definition: variableqkdgfem.hh:49
unsigned int getOrder(const EntityType &e) const
Definition: variableqkdgfem.hh:85