dune-localfunctions  2.2.1
prismp2localinterpolation.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil -*-
2 #ifndef DUNE_PRISM_P2_LOCALINTERPOLATION_HH
3 #define DUNE_PRISM_P2_LOCALINTERPOLATION_HH
4 
5 #include <vector>
6 
7 namespace Dune
8 {
9  template<class LB>
11  {
12  public:
13 
15  template<typename F, typename C>
16  void interpolate (const F& f, std::vector<C>& out) const
17  {
18  typename LB::Traits::RangeType y;
19 
20  out.resize(18);
21  typename LB::Traits::DomainType x;
22 
23  x[0] = 0.0; x[1] = 0.0; x[2] = 0.0;
24  f.evaluate(x,y); out[0] = y;
25 
26  x[0] = 1.0; x[1] = 0.0; x[2] = 0.0;
27  f.evaluate(x,y); out[1] = y;
28 
29  x[0] = 0.0; x[1] = 1.0; x[2] = 0.0;
30  f.evaluate(x,y); out[2] = y;
31 
32  x[0] = 0.0; x[1] = 0.0; x[2] = 1.0;
33  f.evaluate(x,y); out[3] = y;
34 
35  x[0] = 1.0; x[1] = 0.0; x[2] = 1.0;
36  f.evaluate(x,y); out[4] = y;
37 
38  x[0] = 0.0; x[1] = 1.0; x[2] = 1.0;
39  f.evaluate(x,y); out[5] = y;
40 
41  x[0] = 0.0; x[1] = 0.0; x[2] = 0.5;
42  f.evaluate(x,y); out[6] = y;
43 
44  x[0] = 1.0; x[1] = 0.0; x[2] = 0.5;
45  f.evaluate(x,y); out[7] = y;
46 
47  x[0] = 0; x[1] = 1.0; x[2] = 0.5;
48  f.evaluate(x,y); out[8] = y;
49 
50  x[0] = 0.5; x[1] = 0.0; x[2] = 0.0;
51  f.evaluate(x,y); out[9] = y;
52 
53  x[0] = 0.0; x[1] = 0.5; x[2] = 0.0;
54  f.evaluate(x,y); out[10] = y;
55 
56  x[0] = 0.5; x[1] = 0.5; x[2] = 0.0;
57  f.evaluate(x,y); out[11] = y;
58 
59  x[0] = 0.5; x[1] = 0.0; x[2] = 1.0;
60  f.evaluate(x,y); out[12] = y;
61 
62  x[0] = 0.0; x[1] = 0.5; x[2] = 1.0;
63  f.evaluate(x,y); out[13] = y;
64 
65  x[0] = 0.5; x[1] = 0.5; x[2] = 1.0;
66  f.evaluate(x,y); out[14] = y;
67 
68  x[0] = 0.5; x[1] = 0.0; x[2] = 0.5;
69  f.evaluate(x,y); out[15] = y;
70 
71  x[0] = 0.0; x[1] = 0.5; x[2] = 0.5;
72  f.evaluate(x,y); out[16] = y;
73 
74  x[0] = 0.5; x[1] = 0.5; x[2] = 0.5;
75  f.evaluate(x,y); out[17] = y;
76  }
77 
78  };
79 }
80 
81 #endif