dune-pdelab  2.5-dev
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 #include <dune/common/concept.hh>
7 #include <dune/common/typetraits.hh>
8 
9 namespace Dune {
10  namespace PDELab {
11 
12 #ifndef DOXYGEN
13 
14  namespace impl {
15 
16  // ********************************************************************************
17  // concept checks that test whether a local operator provides a given apply method
18  // these are used to emit better error messages for the two variants of
19  // apply methods
20  // ********************************************************************************
21 
22  template<typename... Args>
23  struct HasJacobianApplyVolume
24  {
25  template<typename LO>
26  auto require(LO&& lo) -> decltype(
27  lo.jacobian_apply_volume(std::declval<Args>()...)
28  );
29  };
30 
31  template<typename... Args>
32  struct HasJacobianApplyVolumePostSkeleton
33  {
34  template<typename LO>
35  auto require(LO&& lo) -> decltype(
36  lo.jacobian_apply_volume_post_skeleton(std::declval<Args>()...)
37  );
38  };
39 
40  template<typename... Args>
41  struct HasJacobianApplyBoundary
42  {
43  template<typename LO>
44  auto require(LO&& lo) -> decltype(
45  lo.jacobian_apply_boundary(std::declval<Args>()...)
46  );
47  };
48 
49  template<typename... Args>
50  struct HasJacobianApplySkeleton
51  {
52  template<typename LO>
53  auto require(LO&& lo) -> decltype(
54  lo.jacobian_apply_skeleton(std::declval<Args>()...)
55  );
56  };
57 
58  } // namespace impl
59 
60 #endif // DOXYGEN
61 
62  // compile time switching of function call
63  template<typename LA, bool doIt>
65  {
66  template<typename LFSU, typename LFSV, typename LocalPattern>
67  static void pattern_volume (const LA& la, const LFSU& lfsu, const LFSV& lfsv, LocalPattern& pattern)
68  {
69  }
70  template<typename LFSU, typename LFSV, typename LocalPattern>
72  ( const LA& la,
73  const LFSU& lfsu, const LFSV& lfsv,
74  LocalPattern& pattern)
75  {
76  }
77  template<typename LFSU, typename LFSV, typename LocalPattern>
78  static void pattern_skeleton (const LA& la, const LFSU& lfsu_s, const LFSV& lfsv_s,
79  const LFSU& lfsu_n, const LFSV& lfsv_n,
80  LocalPattern& pattern_sn,
81  LocalPattern& pattern_ns)
82  {
83  }
84  template<typename LFSU, typename LFSV, typename LocalPattern>
85  static void pattern_boundary(const LA& la,
86  const LFSU& lfsu_s, const LFSV& lfsv_s,
87  LocalPattern& pattern_ss)
88  {
89  }
90  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
91  static void alpha_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
92  {
93  }
94  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
95  static void alpha_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
96  {
97  }
98  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
99  static void alpha_skeleton (const LA& la, const IG& ig,
100  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
101  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
102  R& r_s, R& r_n)
103  {
104  }
105  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
106  static void alpha_boundary (const LA& la, const IG& ig,
107  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
108  R& r_s)
109  {
110  }
111 
112  template<typename EG, typename LFSV, typename R>
113  static void lambda_volume (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
114  {
115  }
116  template<typename EG, typename LFSV, typename R>
117  static void lambda_volume_post_skeleton (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
118  {
119  }
120  template<typename IG, typename LFSV, typename R>
121  static void lambda_skeleton(const LA& la, const IG& ig,
122  const LFSV& lfsv_s, const LFSV& lfsv_n,
123  R& r_s, R& r_n)
124  {
125  }
126  template<typename IG, typename LFSV, typename R>
127  static void lambda_boundary (const LA& la, const IG& ig, const LFSV& lfsv, R& r)
128  {
129  }
130 
131  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
132  static void jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
133  {
134  }
135  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
136  static void jacobian_apply_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
137  {
138  }
139  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
140  static void jacobian_apply_skeleton (const LA& la, const IG& ig,
141  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
142  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
143  Y& y_s, Y& y_n)
144  {
145  }
146  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
147  static void jacobian_apply_boundary (const LA& la, const IG& ig,
148  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
149  Y& y_s)
150  {
151  }
152 
153 
154  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
155  static void nonlinear_jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const X& z, const LFSV& lfsv, Y& y)
156  {
157  }
158  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
159  static void nonlinear_jacobian_apply_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const X& z, const LFSV& lfsv, Y& y)
160  {
161  }
162  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
163  static void nonlinear_jacobian_apply_skeleton (const LA& la, const IG& ig,
164  const LFSU& lfsu_s, const X& x_s, const X& z_s, const LFSV& lfsv_s,
165  const LFSU& lfsu_n, const X& x_n, const X& z_n, const LFSV& lfsv_n,
166  Y& y_s, Y& y_n)
167  {
168  }
169  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
170  static void nonlinear_jacobian_apply_boundary (const LA& la, const IG& ig,
171  const LFSU& lfsu_s, const X& x_s, const X& z_s, const LFSV& lfsv_s,
172  Y& y_s)
173  {
174  }
175 
176 
177  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
178  static void jacobian_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M & mat)
179  {
180  }
181  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
182  static void jacobian_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M& mat)
183  {
184  }
185  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
186  static void jacobian_skeleton (const LA& la, const IG& ig,
187  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
188  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
189  M & mat_ss, M & mat_sn,
190  M & mat_ns, M & mat_nn)
191  {
192  }
193  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
194  static void jacobian_boundary (const LA& la, const IG& ig,
195  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
196  M & mat_ss)
197  {
198  }
199  };
200  template<typename LA>
201  struct LocalAssemblerCallSwitch<LA,true>
202  {
203  template<typename LFSU, typename LFSV, typename LocalPattern>
204  static void pattern_volume (const LA& la, const LFSU& lfsu, const LFSV& lfsv, LocalPattern& pattern)
205  {
206  la.pattern_volume(lfsu,lfsv,pattern);
207  }
208  template<typename LFSU, typename LFSV, typename LocalPattern>
209  static void pattern_volume_post_skeleton
210  ( const LA& la,
211  const LFSU& lfsu, const LFSV& lfsv,
212  LocalPattern& pattern)
213  {
214  la.pattern_volume_post_skeleton(lfsu,lfsv,pattern);
215  }
216  template<typename LFSU, typename LFSV, typename LocalPattern>
217  static void pattern_skeleton (const LA& la, const LFSU& lfsu_s, const LFSV& lfsv_s,
218  const LFSU& lfsu_n, const LFSV& lfsv_n,
219  LocalPattern& pattern_sn,
220  LocalPattern& pattern_ns)
221  {
222  la.pattern_skeleton(lfsu_s,lfsv_s,lfsu_n,lfsv_n,
223  pattern_sn, pattern_ns);
224  }
225  template<typename LFSU, typename LFSV, typename LocalPattern>
226  static void pattern_boundary(const LA& la,
227  const LFSU& lfsu_s, const LFSV& lfsv_s,
228  LocalPattern& pattern_ss)
229  {
230  la.pattern_boundary(lfsu_s,lfsv_s,pattern_ss);
231  }
232 
233  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
234  static void alpha_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
235  {
236  la.alpha_volume(eg,lfsu,x,lfsv,r);
237  }
238  template<typename EG, typename LFSU, typename X, typename LFSV, typename R>
239  static void alpha_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, R& r)
240  {
241  la.alpha_volume_post_skeleton(eg,lfsu,x,lfsv,r);
242  }
243  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
244  static void alpha_skeleton (const LA& la, const IG& ig,
245  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
246  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
247  R& r_s, R& r_n)
248  {
249  la.alpha_skeleton(ig,lfsu_s,x_s,lfsv_s,lfsu_n,x_n,lfsv_n,r_s,r_n);
250  }
251  template<typename IG, typename LFSU, typename X, typename LFSV, typename R>
252  static void alpha_boundary (const LA& la, const IG& ig,
253  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
254  R& r_s)
255  {
256  la.alpha_boundary(ig,lfsu_s,x_s,lfsv_s,r_s);
257  }
258 
259  template<typename EG, typename LFSV, typename R>
260  static void lambda_volume (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
261  {
262  la.lambda_volume(eg,lfsv,r);
263  }
264  template<typename EG, typename LFSV, typename R>
265  static void lambda_volume_post_skeleton (const LA& la, const EG& eg, const LFSV& lfsv, R& r)
266  {
267  la.lambda_volume_post_skeleton(eg,lfsv,r);
268  }
269  template<typename IG, typename LFSV, typename R>
270  static void lambda_skeleton(const LA& la, const IG& ig,
271  const LFSV& lfsv_s, const LFSV& lfsv_n,
272  R& r_s, R& r_n)
273  {
274  la.lambda_skeleton(ig, lfsv_s, lfsv_n, r_s, r_n);
275  }
276  template<typename IG, typename LFSV, typename R>
277  static void lambda_boundary (const LA& la, const IG& ig, const LFSV& lfsv, R& r)
278  {
279  la.lambda_boundary(ig,lfsv,r);
280  }
281 
282 
283  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
284  static void jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
285  {
286  static_assert(
287  models<impl::HasJacobianApplyVolume<EG,LFSU,X,LFSV,Y&>,LA>(),
288  "Your local operator does not implement jacobian_apply_volume() for linear problems (without explicit Jacobian evaluation point)"
289  );
290  la.jacobian_apply_volume(eg,lfsu,x,lfsv,y);
291  }
292 
293  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
294  static void jacobian_apply_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, Y& y)
295  {
296  static_assert(
297  models<impl::HasJacobianApplyVolumePostSkeleton<EG,LFSU,X,LFSV,Y&>,LA>(),
298  "Your local operator does not implement jacobian_apply_volume_post_skeleton() for linear problems (without explicit Jacobian evaluation point)"
299  );
300  la.jacobian_apply_volume_post_skeleton(eg,lfsu,x,lfsv,y);
301  }
302 
303  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
304  static void jacobian_apply_skeleton (const LA& la, const IG& ig,
305  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
306  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
307  Y& y_s, Y& y_n)
308  {
309  static_assert(
310  models<impl::HasJacobianApplySkeleton<IG,LFSU,X,LFSV,LFSU,X,LFSV,Y&,Y&>,LA>(),
311  "Your local operator does not implement jacobian_apply_skeleton() for linear problems (without explicit Jacobian evaluation point)"
312  );
313  la.jacobian_apply_skeleton(ig,lfsu_s,x_s,lfsv_s,lfsu_n,x_n,lfsv_n,y_s,y_n);
314  }
315  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
316  static void jacobian_apply_boundary (const LA& la, const IG& ig,
317  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
318  Y& y_s)
319  {
320  static_assert(
321  models<impl::HasJacobianApplyBoundary<IG,LFSU,X,LFSV,Y&>,LA>(),
322  "Your local operator does not implement jacobian_apply_boundary() for linear problems (without explicit Jacobian evaluation point)"
323  );
324  la.jacobian_apply_boundary(ig,lfsu_s,x_s,lfsv_s,y_s);
325  }
326 
327 
328  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
329  static auto nonlinear_jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const X& z, const LFSV& lfsv, Y& y)
330  -> typename std::enable_if<models<impl::HasJacobianApplyVolume<EG,LFSU,X,X,LFSV,Y&>,LA>()>::type
331  {
332  la.jacobian_apply_volume(eg,lfsu,x,z,lfsv,y);
333  }
334 
335  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
336  static auto nonlinear_jacobian_apply_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const X& z, const LFSV& lfsv, Y& y)
337  -> typename std::enable_if<not models<impl::HasJacobianApplyVolume<EG,LFSU,X,X,LFSV,Y&>,LA>()>::type
338  {
339  static_assert(AlwaysFalse<EG>::value,"Your local operator does not implement jacobian_apply_volume() for nonlinear problems (Jacobian evaluation point given as argument)");
340  }
341 
342  template<typename EG, typename LFSU, typename X, typename LFSV, typename Y>
343  static void nonlinear_jacobian_apply_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const X& z, const LFSV& lfsv, Y& y)
344  {
345  la.jacobian_apply_volume_post_skeleton(eg,lfsu,x,z,lfsv,y);
346  }
347  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
348  static void nonlinear_jacobian_apply_skeleton (const LA& la, const IG& ig,
349  const LFSU& lfsu_s, const X& x_s, const X& z_s, const LFSV& lfsv_s,
350  const LFSU& lfsu_n, const X& x_n, const X& z_n, const LFSV& lfsv_n,
351  Y& y_s, Y& y_n)
352  {
353  la.jacobian_apply_skeleton(ig,lfsu_s,x_s,z_s,lfsv_s,lfsu_n,x_n,z_n,lfsv_n,y_s,y_n);
354  }
355  template<typename IG, typename LFSU, typename X, typename LFSV, typename Y>
356  static void nonlinear_jacobian_apply_boundary (const LA& la, const IG& ig,
357  const LFSU& lfsu_s, const X& x_s, const X& z_s, const LFSV& lfsv_s,
358  Y& y_s)
359  {
360  la.jacobian_apply_boundary(ig,lfsu_s,x_s,z_s,lfsv_s,y_s);
361  }
362 
363 
364  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
365  static void jacobian_volume (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M & mat)
366  {
367  la.jacobian_volume(eg,lfsu,x,lfsv,mat);
368  }
369  template<typename EG, typename LFSU, typename X, typename LFSV, typename M>
370  static void jacobian_volume_post_skeleton (const LA& la, const EG& eg, const LFSU& lfsu, const X& x, const LFSV& lfsv, M & mat)
371  {
372  la.jacobian_volume_post_skeleton(eg,lfsu,x,lfsv,mat);
373  }
374  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
375  static void jacobian_skeleton (const LA& la, const IG& ig,
376  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
377  const LFSU& lfsu_n, const X& x_n, const LFSV& lfsv_n,
378  M & mat_ss, M & mat_sn,
379  M & mat_ns, M & mat_nn)
380  {
381  la.jacobian_skeleton(ig,lfsu_s,x_s,lfsv_s,lfsu_n,x_n,lfsv_n,
382  mat_ss, mat_sn, mat_ns, mat_nn);
383  }
384  template<typename IG, typename LFSU, typename X, typename LFSV, typename M>
385  static void jacobian_boundary (const LA& la, const IG& ig,
386  const LFSU& lfsu_s, const X& x_s, const LFSV& lfsv_s,
387  M & mat_ss)
388  {
389  la.jacobian_boundary(ig,lfsu_s,x_s,lfsv_s,mat_ss);
390  }
391  };
392 
393  } // namespace PDELab
394 } // namespace Dune
395 
396 #endif // DUNE_PDELAB_LOCALOPERATOR_CALLSWITCH_HH
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_volume
static void jacobian_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat)
Definition: callswitch.hh:365
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::nonlinear_jacobian_apply_skeleton
static void nonlinear_jacobian_apply_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const X &z_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const X &z_n, const LFSV &lfsv_n, Y &y_s, Y &y_n)
Definition: callswitch.hh:348
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_boundary
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:385
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_boundary
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:194
Dune::PDELab::LocalAssemblerCallSwitch::pattern_skeleton
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:78
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_volume_post_skeleton
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:182
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_skeleton
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:186
Dune::PDELab::LocalAssemblerCallSwitch::pattern_volume
static void pattern_volume(const LA &la, const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern)
Definition: callswitch.hh:67
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_volume
static void jacobian_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, M &mat)
Definition: callswitch.hh:178
Dune
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::nonlinear_jacobian_apply_volume
static auto nonlinear_jacobian_apply_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const X &z, const LFSV &lfsv, Y &y) -> typename std::enable_if< not models< impl::HasJacobianApplyVolume< EG, LFSU, X, X, LFSV, Y & >, LA >()>::type
Definition: callswitch.hh:336
Dune::PDELab::LocalAssemblerCallSwitch::alpha_volume
static void alpha_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r)
Definition: callswitch.hh:91
Dune::PDELab::LocalAssemblerCallSwitch::pattern_volume_post_skeleton
static void pattern_volume_post_skeleton(const LA &la, const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern)
Definition: callswitch.hh:72
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_volume_post_skeleton
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:370
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_skeleton
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:375
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::nonlinear_jacobian_apply_volume_post_skeleton
static void nonlinear_jacobian_apply_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const X &z, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:343
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_apply_volume_post_skeleton
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:136
Dune::PDELab::LocalAssemblerCallSwitch::alpha_skeleton
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:99
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_apply_boundary
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:147
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_apply_skeleton
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:304
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::alpha_boundary
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:252
ig
const IG & ig
Definition: constraints.hh:148
Dune::PDELab::LocalAssemblerCallSwitch::nonlinear_jacobian_apply_skeleton
static void nonlinear_jacobian_apply_skeleton(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const X &z_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const X &z_n, const LFSV &lfsv_n, Y &y_s, Y &y_n)
Definition: callswitch.hh:163
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_apply_volume
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:132
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::pattern_volume
static void pattern_volume(const LA &la, const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern)
Definition: callswitch.hh:204
Dune::PDELab::LocalAssemblerCallSwitch::lambda_volume_post_skeleton
static void lambda_volume_post_skeleton(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:117
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_apply_volume
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:284
Dune::PDELab::LocalAssemblerCallSwitch::alpha_volume_post_skeleton
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:95
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::pattern_boundary
static void pattern_boundary(const LA &la, const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss)
Definition: callswitch.hh:226
Dune::PDELab::LocalAssemblerCallSwitch::lambda_volume
static void lambda_volume(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:113
Dune::PDELab::LocalAssemblerCallSwitch
Definition: callswitch.hh:64
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::alpha_volume_post_skeleton
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:239
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::lambda_skeleton
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:270
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::nonlinear_jacobian_apply_boundary
static void nonlinear_jacobian_apply_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const X &z_s, const LFSV &lfsv_s, Y &y_s)
Definition: callswitch.hh:356
Dune::PDELab::LocalAssemblerCallSwitch::nonlinear_jacobian_apply_volume
static void nonlinear_jacobian_apply_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const X &z, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:155
Dune::PDELab::LocalAssemblerCallSwitch::nonlinear_jacobian_apply_boundary
static void nonlinear_jacobian_apply_boundary(const LA &la, const IG &ig, const LFSU &lfsu_s, const X &x_s, const X &z_s, const LFSV &lfsv_s, Y &y_s)
Definition: callswitch.hh:170
value
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::nonlinear_jacobian_apply_volume
static auto nonlinear_jacobian_apply_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const X &z, const LFSV &lfsv, Y &y) -> typename std::enable_if< models< impl::HasJacobianApplyVolume< EG, LFSU, X, X, LFSV, Y & >, LA >()>::type
Definition: callswitch.hh:329
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::lambda_volume
static void lambda_volume(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:260
Dune::PDELab::LocalAssemblerCallSwitch::pattern_boundary
static void pattern_boundary(const LA &la, const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss)
Definition: callswitch.hh:85
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::alpha_volume
static void alpha_volume(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r)
Definition: callswitch.hh:234
Dune::PDELab::LocalAssemblerCallSwitch::alpha_boundary
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:106
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_apply_volume_post_skeleton
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:294
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::alpha_skeleton
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:244
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::pattern_skeleton
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:217
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::jacobian_apply_boundary
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:316
Dune::PDELab::LocalAssemblerCallSwitch::lambda_boundary
static void lambda_boundary(const LA &la, const IG &ig, const LFSV &lfsv, R &r)
Definition: callswitch.hh:127
Dune::PDELab::LocalAssemblerCallSwitch::nonlinear_jacobian_apply_volume_post_skeleton
static void nonlinear_jacobian_apply_volume_post_skeleton(const LA &la, const EG &eg, const LFSU &lfsu, const X &x, const X &z, const LFSV &lfsv, Y &y)
Definition: callswitch.hh:159
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::lambda_boundary
static void lambda_boundary(const LA &la, const IG &ig, const LFSV &lfsv, R &r)
Definition: callswitch.hh:277
Dune::PDELab::LocalAssemblerCallSwitch::jacobian_apply_skeleton
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:140
Dune::PDELab::LocalAssemblerCallSwitch< LA, true >::lambda_volume_post_skeleton
static void lambda_volume_post_skeleton(const LA &la, const EG &eg, const LFSV &lfsv, R &r)
Definition: callswitch.hh:265
Dune::PDELab::LocalAssemblerCallSwitch::lambda_skeleton
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:121