dune-pdelab  2.0.0
callswitch.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_PDELAB_LOCALOPERATOR_CALLSWITCH_HH
4 #define DUNE_PDELAB_LOCALOPERATOR_CALLSWITCH_HH
5 
6 namespace Dune {
7  namespace PDELab {
8 
9 
10  // compile time switching of function call
11  template<typename LA, bool doIt>
13  {
14  template<typename LFSU, typename LFSV, typename LocalPattern>
15  static void pattern_volume (const LA& la, const LFSU& lfsu, const LFSV& lfsv, LocalPattern& pattern)
16  {
17  }
18  template<typename LFSU, typename LFSV, typename LocalPattern>
20  ( const LA& la,
21  const LFSU& lfsu, const LFSV& lfsv,
22  LocalPattern& pattern)
23  {
24  }
25  template<typename LFSU, typename LFSV, typename LocalPattern>
26  static void pattern_skeleton (const LA& la, const LFSU& lfsu_s, const LFSV& lfsv_s,
27  const LFSU& lfsu_n, const LFSV& lfsv_n,
28  LocalPattern& pattern_sn,
29  LocalPattern& pattern_ns)
30  {
31  }
32  template<typename LFSU, typename LFSV, typename LocalPattern>
33  static void pattern_boundary(const LA& la,
34  const LFSU& lfsu_s, const LFSV& lfsv_s,
35  LocalPattern& pattern_ss)
36  {
37  }
38  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
39  static void alpha_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
40  {
41  }
42  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
43  static void alpha_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
44  {
45  }
46  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
47  static void alpha_skeleton (const LA& la, const IG& ig,
48  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
49  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
50  R& r_s, R& r_n)
51  {
52  }
53  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
54  static void alpha_boundary (const LA& la, const IG& ig,
55  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
56  R& r_s)
57  {
58  }
59 
60  template<typename EG, typename LFSV, typename R>
61  static void lambda_volume (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
62  {
63  }
64  template<typename EG, typename LFSV, typename R>
65  static void lambda_volume_post_skeleton (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
66  {
67  }
68  template<typename IG, typename LFSV, typename R>
69  static void lambda_skeleton(const LA& la, const IG& ig,
70  const LFSV& lfsv_s, const LFSV& lfsv_n,
71  R& r_s, R& r_n)
72  {
73  }
74  template<typename IG, typename LFSV, typename R>
75  static void lambda_boundary (const LA& la, const IG& ig, const LFSV& lfsv, R& r)
76  {
77  }
78 
79  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
80  static void jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
81  {
82  }
83  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
84  static void jacobian_apply_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
85  {
86  }
87  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
88  static void jacobian_apply_skeleton (const LA& la, const IG& ig,
89  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
90  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
91  Y& y_s, Y& y_n)
92  {
93  }
94  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
95  static void jacobian_apply_boundary (const LA& la, const IG& ig,
96  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
97  Y& y_s)
98  {
99  }
100  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
101  static void jacobian_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M & mat)
102  {
103  }
104  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
105  static void jacobian_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M& mat)
106  {
107  }
108  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
109  static void jacobian_skeleton (const LA& la, const IG& ig,
110  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
111  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
112  M & mat_ss, M & mat_sn,
113  M & mat_ns, M & mat_nn)
114  {
115  }
116  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
117  static void jacobian_boundary (const LA& la, const IG& ig,
118  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
119  M & mat_ss)
120  {
121  }
122  };
123  template<typename LA>
124  struct LocalAssemblerCallSwitch<LA,true>
125  {
126  template<typename LFSU, typename LFSV, typename LocalPattern>
127  static void pattern_volume (const LA& la, const LFSU& lfsu, const LFSV& lfsv, LocalPattern& pattern)
128  {
129  la.pattern_volume(lfsu,lfsv,pattern);
130  }
131  template<typename LFSU, typename LFSV, typename LocalPattern>
132  static void pattern_volume_post_skeleton
133  ( const LA& la,
134  const LFSU& lfsu, const LFSV& lfsv,
135  LocalPattern& pattern)
136  {
137  la.pattern_volume_post_skeleton(lfsu,lfsv,pattern);
138  }
139  template<typename LFSU, typename LFSV, typename LocalPattern>
140  static void pattern_skeleton (const LA& la, const LFSU& lfsu_s, const LFSV& lfsv_s,
141  const LFSU& lfsu_n, const LFSV& lfsv_n,
142  LocalPattern& pattern_sn,
143  LocalPattern& pattern_ns)
144  {
145  la.pattern_skeleton(lfsu_s,lfsv_s,lfsu_n,lfsv_n,
146  pattern_sn, pattern_ns);
147  }
148  template<typename LFSU, typename LFSV, typename LocalPattern>
149  static void pattern_boundary(const LA& la,
150  const LFSU& lfsu_s, const LFSV& lfsv_s,
151  LocalPattern& pattern_ss)
152  {
153  la.pattern_boundary(lfsu_s,lfsv_s,pattern_ss);
154  }
155 
156  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
157  static void alpha_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
158  {
159  la.alpha_volume(eg,lfsu,x,lfsv,r);
160  }
161  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
162  static void alpha_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
163  {
164  la.alpha_volume_post_skeleton(eg,lfsu,x,lfsv,r);
165  }
166  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
167  static void alpha_skeleton (const LA& la, const IG& ig,
168  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
169  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
170  R& r_s, R& r_n)
171  {
172  la.alpha_skeleton(ig,lfsu_s,x_s,lfsv_s,lfsu_n,x_n,lfsv_n,r_s,r_n);
173  }
174  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
175  static void alpha_boundary (const LA& la, const IG& ig,
176  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
177  R& r_s)
178  {
179  la.alpha_boundary(ig,lfsu_s,x_s,lfsv_s,r_s);
180  }
181 
182  template<typename EG, typename LFSV, typename R>
183  static void lambda_volume (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
184  {
185  la.lambda_volume(eg,lfsv,r);
186  }
187  template<typename EG, typename LFSV, typename R>
188  static void lambda_volume_post_skeleton (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
189  {
190  la.lambda_volume_post_skeleton(eg,lfsv,r);
191  }
192  template<typename IG, typename LFSV, typename R>
193  static void lambda_skeleton(const LA& la, const IG& ig,
194  const LFSV& lfsv_s, const LFSV& lfsv_n,
195  R& r_s, R& r_n)
196  {
197  la.lambda_skeleton(ig, lfsv_s, lfsv_n, r_s, r_n);
198  }
199  template<typename IG, typename LFSV, typename R>
200  static void lambda_boundary (const LA& la, const IG& ig, const LFSV& lfsv, R& r)
201  {
202  la.lambda_boundary(ig,lfsv,r);
203  }
204 
205  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
206  static void jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
207  {
208  la.jacobian_apply_volume(eg,lfsu,x,lfsv,y);
209  }
210  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
211  static void jacobian_apply_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
212  {
213  la.jacobian_apply_volume_post_skeleton(eg,lfsu,x,lfsv,y);
214  }
215  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
216  static void jacobian_apply_skeleton (const LA& la, const IG& ig,
217  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
218  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
219  Y& y_s, Y& y_n)
220  {
221  la.jacobian_apply_skeleton(ig,lfsu_s,x_s,lfsv_s,lfsu_n,x_n,lfsv_n,y_s,y_n);
222  }
223  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
224  static void jacobian_apply_boundary (const LA& la, const IG& ig,
225  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
226  Y& y_s)
227  {
228  la.jacobian_apply_boundary(ig,lfsu_s,x_s,lfsv_s,y_s);
229  }
230 
231  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
232  static void jacobian_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M & mat)
233  {
234  la.jacobian_volume(eg,lfsu,x,lfsv,mat);
235  }
236  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
237  static void jacobian_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M & mat)
238  {
239  la.jacobian_volume_post_skeleton(eg,lfsu,x,lfsv,mat);
240  }
241  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
242  static void jacobian_skeleton (const LA& la, const IG& ig,
243  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
244  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
245  M & mat_ss, M & mat_sn,
246  M & mat_ns, M & mat_nn)
247  {
248  la.jacobian_skeleton(ig,lfsu_s,x_s,lfsv_s,lfsu_n,x_n,lfsv_n,
249  mat_ss, mat_sn, mat_ns, mat_nn);
250  }
251  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
252  static void jacobian_boundary (const LA& la, const IG& ig,
253  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
254  M & mat_ss)
255  {
256  la.jacobian_boundary(ig,lfsu_s,x_s,lfsv_s,mat_ss);
257  }
258  };
259 
260  } // namespace PDELab
261 } // namespace Dune
262 
263 #endif // DUNE_PDELAB_LOCALOPERATOR_CALLSWITCH_HH
static void lambda_skeleton(const LA &la, const IG &ig, const LFSV &lfsv_s, const LFSV &lfsv_n, R &r_s, R &r_n)
Definition: callswitch.hh:193
static void jacobian_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, M &mat_ss)
Definition: callswitch.hh:117
static void pattern_skeleton(const LA &la, const LFSU &lfsu_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const LFSV &lfsv_n, LocalPattern &pattern_sn, LocalPattern &pattern_ns)
Definition: callswitch.hh:140
static void jacobian_apply_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, Y &y_s)
Definition: callswitch.hh:224
static void lambda_boundary(const LA &la, const IG &ig, const LFSV &lfsv, R &r)
Definition: callswitch.hh:200
static void lambda_volume_post_skeleton(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:188
static void lambda_skeleton(const LA &la, const IG &ig, const LFSV &lfsv_s, const LFSV &lfsv_n, R &r_s, R &r_n)
Definition: callswitch.hh:69
static void jacobian_apply_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:206
static void pattern_volume(const LA &la, const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern)
Definition: callswitch.hh:15
static void alpha_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, R &r_s)
Definition: callswitch.hh:175
static void jacobian_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, M &mat_ss, M &mat_sn, M &mat_ns, M &mat_nn)
Definition: callswitch.hh:109
static void alpha_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r)
Definition: callswitch.hh:43
static void jacobian_apply_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, Y &y_s)
Definition: callswitch.hh:95
static void pattern_boundary(const LA &la, const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss)
Definition: callswitch.hh:149
static void pattern_volume_post_skeleton(const LA &la, const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern)
Definition: callswitch.hh:20
static void pattern_boundary(const LA &la, const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss)
Definition: callswitch.hh:33
static void pattern_volume(const LA &la, const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern)
Definition: callswitch.hh:127
Definition: callswitch.hh:12
static void jacobian_apply_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:80
static void lambda_boundary(const LA &la, const IG &ig, const LFSV &lfsv, R &r)
Definition: callswitch.hh:75
static void jacobian_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat)
Definition: callswitch.hh:101
static void jacobian_apply_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, Y &y_s, Y &y_n)
Definition: callswitch.hh:216
static void alpha_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r)
Definition: callswitch.hh:162
static void jacobian_apply_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:211
static void pattern_skeleton(const LA &la, const LFSU &lfsu_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const LFSV &lfsv_n, LocalPattern &pattern_sn, LocalPattern &pattern_ns)
Definition: callswitch.hh:26
static void alpha_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, R &r_s, R &r_n)
Definition: callswitch.hh:47
static void lambda_volume(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:61
const IG & ig
Definition: common/constraints.hh:146
static void alpha_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, R &r_s)
Definition: callswitch.hh:54
static void jacobian_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, M &mat_ss)
Definition: callswitch.hh:252
static void lambda_volume_post_skeleton(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:65
static void jacobian_apply_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:84
static void jacobian_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, M &mat_ss, M &mat_sn, M &mat_ns, M &mat_nn)
Definition: callswitch.hh:242
static void alpha_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r)
Definition: callswitch.hh:39
static void jacobian_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat)
Definition: callswitch.hh:237
const EG & eg
Definition: common/constraints.hh:277
static void alpha_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r)
Definition: callswitch.hh:157
static void alpha_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, R &r_s, R &r_n)
Definition: callswitch.hh:167
static void jacobian_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat)
Definition: callswitch.hh:105
static void jacobian_apply_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, Y &y_s, Y &y_n)
Definition: callswitch.hh:88
static void lambda_volume(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:183
static void jacobian_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat)
Definition: callswitch.hh:232