dune-localfunctions  2.2.1
q2localcoefficients.hh
Go to the documentation of this file.
1 // -*- tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=2 sw=2 sts=2:
3 #ifndef DUNE_Q2_LOCALCOEFFICIENTS_HH
4 #define DUNE_Q2_LOCALCOEFFICIENTS_HH
5 
6 #include <cstddef>
7 #include <vector>
8 
9 #include <dune/common/exceptions.hh>
10 
12 
13 namespace Dune
14 {
15 
24 template <int dim>
26 {
27 public:
30  {
31  switch (dim) {
32 
33  case 1: {
34  li[0] = LocalKey(0,1,0); // left vertex
35  li[1] = LocalKey(0,0,0); // element
36  li[2] = LocalKey(1,1,0); // right vertex
37  break;
38  }
39 
40  case 2: {
41 
42  li[0] = LocalKey(0,2,0);
43  li[1] = LocalKey(2,1,0);
44  li[2] = LocalKey(1,2,0);
45  li[3] = LocalKey(0,1,0);
46  li[4] = LocalKey(0,0,0);
47  li[5] = LocalKey(1,1,0);
48  li[6] = LocalKey(2,2,0);
49  li[7] = LocalKey(3,1,0);
50  li[8] = LocalKey(3,2,0);
51 
52  break;
53  }
54 
55  case 3: {
56 
57  li[ 0] = LocalKey(0,3,0);
58  li[ 1] = LocalKey(6,2,0);
59  li[ 2] = LocalKey(1,3,0);
60  li[ 3] = LocalKey(4,2,0);
61  li[ 4] = LocalKey(4,1,0);
62  li[ 5] = LocalKey(5,2,0);
63  li[ 6] = LocalKey(2,3,0);
64  li[ 7] = LocalKey(7,2,0);
65  li[ 8] = LocalKey(3,3,0);
66 
67  li[ 9] = LocalKey(0,2,0);
68  li[10] = LocalKey(2,1,0);
69  li[11] = LocalKey(1,2,0);
70  li[12] = LocalKey(0,1,0);
71  li[13] = LocalKey(0,0,0);
72  li[14] = LocalKey(1,1,0);
73  li[15] = LocalKey(2,2,0);
74  li[16] = LocalKey(3,1,0);
75  li[17] = LocalKey(3,2,0);
76 
77  li[18] = LocalKey(4,3,0);
78  li[19] = LocalKey(10,2,0);
79  li[20] = LocalKey(5,3,0);
80  li[21] = LocalKey(8,2,0);
81  li[22] = LocalKey(5,1,0);
82  li[23] = LocalKey(9,2,0);
83  li[24] = LocalKey(6,3,0);
84  li[25] = LocalKey(11,2,0);
85  li[26] = LocalKey(7,3,0);
86 
87  break;
88  }
89  default:
90  DUNE_THROW(NotImplemented, "Q2LocalCoefficients for dim==" << dim);
91  }
92  }
93 
95  std::size_t size () const
96  {
97  int size = 1;
98  for (int i=0; i<dim; i++)
99  size *= 3;
100  return size;
101  }
102 
104  const LocalKey& localKey (std::size_t i) const
105  {
106  return li[i];
107  }
108 
109 private:
110  std::vector<LocalKey> li;
111 };
112 
113 }
114 
115 #endif