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