Dune Core Modules (unstable)

refinedp1localbasis.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 // SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
4 // SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
5 #ifndef DUNE_REFINED_P1_LOCALBASIS_HH
6 #define DUNE_REFINED_P1_LOCALBASIS_HH
7 
12 #include <numeric>
13 
14 #include <dune/common/fmatrix.hh>
15 
17 
18 namespace Dune
19 {
20  template<class D, class R, int dim>
21  class RefinedP1LocalBasis
22  : public RefinedSimplexLocalBasis<D,dim>
23  {
24  public:
25  RefinedP1LocalBasis()
26  {
27  DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim > 3.");
28  }
29  };
30 
53  template<class D, class R>
54  class RefinedP1LocalBasis<D,R,1>
55  : public RefinedSimplexLocalBasis<D,1>
56  {
57  public:
61 
63  static constexpr unsigned int size ()
64  {
65  return 3;
66  }
67 
69  inline void evaluateFunction (const typename Traits::DomainType& in,
70  std::vector<typename Traits::RangeType>& out) const
71  {
72  out.resize(3);
73 
74  int subElement;
75  typename Traits::DomainType local;
76  this->getSubElement(in, subElement, local);
77 
78  switch (subElement) {
79  case 0 :
80 
81  out[0] = 1 - local[0];
82  out[1] = local[0];
83  out[2] = 0;
84  break;
85 
86  case 1 :
87 
88  out[0] = 0;
89  out[1] = 1 - local[0];
90  out[2] = local[0];
91  break;
92 
93  }
94 
95  }
96 
98  inline void
99  evaluateJacobian (const typename Traits::DomainType& in, // position
100  std::vector<typename Traits::JacobianType>& out) const // return value
101  {
102  out.resize(3);
103 
104  int subElement;
105  typename Traits::DomainType local;
106  this->getSubElement(in, subElement, local);
107 
108  switch (subElement) {
109  case 0 :
110 
111  out[0][0][0] = -2;
112  out[1][0][0] = 2;
113  out[2][0][0] = 0;
114  break;
115 
116  case 1 :
117 
118  out[0][0][0] = 0;
119  out[1][0][0] = -2;
120  out[2][0][0] = 2;
121  break;
122 
123  }
124  }
125 
127  void partial (const std::array<unsigned int, 1>& order,
128  const typename Traits::DomainType& in, // position
129  std::vector<typename Traits::RangeType>& out) const // return value
130  {
131  auto totalOrder = order[0];
132  if (totalOrder == 0) {
133  evaluateFunction(in, out);
134  } else if (totalOrder == 1)
135  {
136  out.resize(3);
137 
138  int subElement;
139  typename Traits::DomainType local;
140  this->getSubElement(in, subElement, local);
141 
142  switch (subElement) {
143  case 0:
144  out[0] = -2;
145  out[1] = 2;
146  out[2] = 0;
147  break;
148  case 1:
149  out[0] = 0;
150  out[1] = -2;
151  out[2] = 2;
152  break;
153  }
154  } else {
155  out.resize(3);
156  out[0] = out[1] = out[2] = 0;
157  }
158  }
159 
163  static constexpr unsigned int order ()
164  {
165  return 1;
166  }
167 
168  };
169 
195  template<class D, class R>
196  class RefinedP1LocalBasis<D,R,2>
197  : public RefinedSimplexLocalBasis<D,2>
198  {
199  public:
203 
205  static constexpr unsigned int size ()
206  {
207  return 6;
208  }
209 
211  inline void evaluateFunction (const typename Traits::DomainType& in,
212  std::vector<typename Traits::RangeType>& out) const
213  {
214  out.resize(6);
215 
216  int subElement;
217  typename Traits::DomainType local;
218  this->getSubElement(in, subElement, local);
219 
220  switch (subElement) {
221  case 0 :
222 
223  out[0] = 1 - local[0] - local[1];
224  out[1] = local[0];
225  out[2] = 0;
226  out[3] = local[1];
227  out[4] = 0;
228  out[5] = 0;
229  break;
230 
231  case 1 :
232 
233  out[0] = 0;
234  out[1] = 1 - local[0] - local[1];
235  out[2] = local[0];
236  out[3] = 0;
237  out[4] = local[1];
238  out[5] = 0;
239  break;
240 
241  case 2 :
242 
243  out[0] = 0;
244  out[1] = 0;
245  out[2] = 0;
246  out[3] = 1 - local[0] - local[1];
247  out[4] = local[0];
248  out[5] = local[1];
249  break;
250  case 3 :
251 
252  out[0] = 0;
253  out[1] = local[1];
254  out[2] = 0;
255  out[3] = local[0];
256  out[4] = 1 - local[0] - local[1];
257  out[5] = 0;
258  }
259 
260  }
261 
263  inline void
264  evaluateJacobian (const typename Traits::DomainType& in, // position
265  std::vector<typename Traits::JacobianType>& out) const // return value
266  {
267  out.resize(6);
268 
269  int subElement;
270  typename Traits::DomainType local;
271  this->getSubElement(in, subElement, local);
272 
273  switch (subElement) {
274  case 0 :
275 
276  out[0][0][0] = -2; out[0][0][1] = -2;
277  out[1][0][0] = 2; out[1][0][1] = 0;
278  out[2][0][0] = 0; out[2][0][1] = 0;
279  out[3][0][0] = 0; out[3][0][1] = 2;
280  out[4][0][0] = 0; out[4][0][1] = 0;
281  out[5][0][0] = 0; out[5][0][1] = 0;
282  break;
283 
284  case 1 :
285 
286  out[0][0][0] = 0; out[0][0][1] = 0;
287  out[1][0][0] = -2; out[1][0][1] = -2;
288  out[2][0][0] = 2; out[2][0][1] = 0;
289  out[3][0][0] = 0; out[3][0][1] = 0;
290  out[4][0][0] = 0; out[4][0][1] = 2;
291  out[5][0][0] = 0; out[5][0][1] = 0;
292  break;
293 
294  case 2 :
295 
296  out[0][0][0] = 0; out[0][0][1] = 0;
297  out[1][0][0] = 0; out[1][0][1] = 0;
298  out[2][0][0] = 0; out[2][0][1] = 0;
299  out[3][0][0] = -2; out[3][0][1] = -2;
300  out[4][0][0] = 2; out[4][0][1] = 0;
301  out[5][0][0] = 0; out[5][0][1] = 2;
302  break;
303  case 3 :
304 
305  out[0][0][0] = 0; out[0][0][1] = 0;
306  out[1][0][0] = 0; out[1][0][1] = -2;
307  out[2][0][0] = 0; out[2][0][1] = 0;
308  out[3][0][0] = -2; out[3][0][1] = 0;
309  out[4][0][0] = 2; out[4][0][1] = 2;
310  out[5][0][0] = 0; out[5][0][1] = 0;
311  }
312  }
313 
315  void partial (const std::array<unsigned int, 2>& order,
316  const typename Traits::DomainType& in, // position
317  std::vector<typename Traits::RangeType>& out) const // return value
318  {
319  auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
320  if (totalOrder == 0) {
321  evaluateFunction(in, out);
322  } else if (totalOrder == 1) {
323  int subElement;
324  typename Traits::DomainType local;
325  this->getSubElement(in, subElement, local);
326 
327  auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
328  out.resize(size());
329 
330  for (std::size_t i = 0; i < size(); ++i)
331  out[i] = 0;
332 
333  switch (direction) {
334  case 0: // direction == 0
335 
336  switch (subElement) {
337  case 0 :
338  out[0] = -2;
339  out[1] = 2;
340  break;
341  case 1 :
342  out[1] = -2;
343  out[2] = 2;
344  break;
345  case 2 :
346  out[3] = -2;
347  out[4] = 2;
348  break;
349  case 3 :
350  out[3] = -2;
351  out[4] = 2;
352  }
353  break;
354 
355  case 1: // direction == 1
356 
357  switch (subElement) {
358  case 0 :
359  out[0] = -2;
360  out[3] = 2;
361  break;
362  case 1 :
363  out[1] = -2;
364  out[4] = 2;
365  break;
366  case 2 :
367  out[3] = -2;
368  out[5] = 2;
369  break;
370  case 3 :
371  out[1] = -2;
372  out[4] = 2;
373  }
374  break;
375 
376  default:
377  DUNE_THROW(RangeError, "Component out of range.");
378  }
379  } else {
380  out.resize(size());
381  for (std::size_t i = 0; i < size(); ++i)
382  out[i] = 0;
383  }
384  }
385 
389  static constexpr unsigned int order ()
390  {
391  return 1;
392  }
393 
394  };
395 
425  template<class D, class R>
426  class RefinedP1LocalBasis<D,R,3>
427  : public RefinedSimplexLocalBasis<D,3>
428  {
429  public:
433 
435  static constexpr unsigned int size ()
436  {
437  return 10;
438  }
439 
441  inline void evaluateFunction (const typename Traits::DomainType& in,
442  std::vector<typename Traits::RangeType>& out) const
443  {
444  out.resize(10);
445 
446  int subElement;
447  typename Traits::DomainType local;
448  this->getSubElement(in, subElement, local);
449 
450  switch (subElement) {
451  case 0 :
452 
453  out[0] = 1 - local[0] - local[1] - local[2];
454  out[1] = local[0];
455  out[2] = 0;
456  out[3] = local[1];
457  out[4] = 0;
458  out[5] = 0;
459  out[6] = local[2];
460  out[7] = 0;
461  out[8] = 0;
462  out[9] = 0;
463  break;
464 
465  case 1 :
466 
467  out[0] = 0;
468  out[1] = 1 - local[0] - local[1] -local[2];
469  out[2] = local[0];
470  out[3] = 0;
471  out[4] = local[1];
472  out[5] = 0;
473  out[6] = 0;
474  out[7] = local[2];
475  out[8] = 0;
476  out[9] = 0;
477  break;
478 
479  case 2 :
480 
481  out[0] = 0;
482  out[1] = 0;
483  out[2] = 0;
484  out[3] = 1 - local[0] - local[1] -local[2];
485  out[4] = local[0];
486  out[5] = local[1];
487  out[6] = 0;
488  out[7] = 0;
489  out[8] = local[2];
490  out[9] = 0;
491  break;
492 
493  case 3 :
494 
495  out[0] = 0;
496  out[1] = 0;
497  out[2] = 0;
498  out[3] = 0;
499  out[4] = 0;
500  out[5] = 0;
501  out[6] = 1 - local[0] - local[1] -local[2];
502  out[7] = local[0];
503  out[8] = local[1];
504  out[9] = local[2];
505  break;
506 
507  case 4 :
508 
509  out[0] = 0;
510  out[1] = 1 - local[0] - local[1] -local[2];
511  out[2] = 0;
512  out[3] = local[0];
513  out[4] = 0;
514  out[5] = 0;
515  out[6] = local[1];
516  out[7] = local[2];
517  out[8] = 0;
518  out[9] = 0;
519  break;
520 
521  case 5 :
522 
523  out[0] = 0;
524  out[1] = local[1];
525  out[2] = 0;
526  out[3] = local[0];
527  out[4] = 1 - local[0] - local[1] -local[2];
528  out[5] = 0;
529  out[6] = 0;
530  out[7] = local[2];
531  out[8] = 0;
532  out[9] = 0;
533  break;
534 
535  case 6 :
536 
537  out[0] = 0;
538  out[1] = 0;
539  out[2] = 0;
540  out[3] = 1 - local[0] - local[1] -local[2];
541  out[4] = 0;
542  out[5] = 0;
543  out[6] = local[0];
544  out[7] = local[1];
545  out[8] = local[2];
546  out[9] = 0;
547  break;
548 
549  case 7 :
550 
551  out[0] = 0;
552  out[1] = 0;
553  out[2] = 0;
554  out[3] = 1 - local[0] - local[1] -local[2];
555  out[4] = local[2];
556  out[5] = 0;
557  out[6] = 0;
558  out[7] = local[1];
559  out[8] = local[0];
560  out[9] = 0;
561  break;
562  }
563 
564  }
565 
567  inline void
568  evaluateJacobian (const typename Traits::DomainType& in, // position
569  std::vector<typename Traits::JacobianType>& out) const // return value
570  {
571  out.resize(10);
572 
573  int subElement;
574  typename Traits::DomainType local;
575  this->getSubElement(in, subElement, local);
576 
577  switch (subElement) {
578  case 0 :
579 
580  out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2;
581  out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0;
582  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
583  out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
584  out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
585  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
586  out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2;
587  out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
588  out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
589  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
590  break;
591 
592  case 1 :
593 
594  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
595  out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2;
596  out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0;
597  out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
598  out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0;
599  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
600  out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
601  out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
602  out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
603  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
604  break;
605 
606  case 2 :
607 
608  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
609  out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
610  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
611  out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
612  out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0;
613  out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0;
614  out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
615  out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
616  out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2;
617  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
618  break;
619 
620  case 3 :
621 
622  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
623  out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
624  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
625  out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
626  out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
627  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
628  out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2;
629  out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
630  out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0;
631  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2;
632  break;
633 
634  case 4 :
635 
636  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
637  out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
638  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
639  out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
640  out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
641  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
642  out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
643  out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2;
644  out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
645  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
646  break;
647 
648  case 5 :
649 
650  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
651  out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
652  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
653  out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0;
654  out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
655  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
656  out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
657  out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
658  out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
659  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
660  break;
661 
662  case 6 :
663 
664  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
665  out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
666  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
667  out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2;
668  out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
669  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
670  out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
671  out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
672  out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
673  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
674  break;
675 
676  case 7 :
677 
678  out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
679  out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
680  out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
681  out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
682  out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
683  out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
684  out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
685  out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0;
686  out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
687  out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
688  break;
689  }
690  }
691 
693  void partial (const std::array<unsigned int, 3>& order,
694  const typename Traits::DomainType& in, // position
695  std::vector<typename Traits::RangeType>& out) const // return value
696  {
697  auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
698  if (totalOrder == 0) {
699  evaluateFunction(in, out);
700  } else if (totalOrder == 1) {
701  int subElement;
702  typename Traits::DomainType local;
703  this->getSubElement(in, subElement, local);
704 
705  auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
706  out.resize(size());
707 
708  for (std::size_t i = 0; i < size(); ++i)
709  out[i] = 0;
710 
711  switch (direction) {
712  case 0: // direction == 0
713 
714  switch (subElement) {
715  case 0 :
716  out[0] = -2;
717  out[1] = 2;
718  break;
719  case 1 :
720  out[1] = -2;
721  out[2] = 2;
722  break;
723  case 2 :
724  out[3] = -2;
725  out[4] = 2;
726  break;
727  case 3 :
728  out[6] = -2;
729  out[7] = 2;
730  break;
731  case 4 :
732  out[6] = -2;
733  out[7] = 2;
734  break;
735  case 5 :
736  out[3] = -2;
737  out[4] = 2;
738  break;
739  case 6 :
740  out[6] = -2;
741  out[7] = 2;
742  break;
743  case 7 :
744  out[3] = -2;
745  out[4] = 2;
746  break;
747  }
748  break;
749 
750  case 1: // direction == 1
751 
752  switch (subElement) {
753  case 0 :
754  out[0] = -2;
755  out[3] = 2;
756  break;
757  case 1 :
758  out[1] = -2;
759  out[4] = 2;
760  break;
761  case 2 :
762  out[3] = -2;
763  out[5] = 2;
764  break;
765  case 3 :
766  out[6] = -2;
767  out[8] = 2;
768  break;
769  case 4 :
770  out[1] = -2;
771  out[3] = 2;
772  out[6] = -2;
773  break;
774  case 5 :
775  out[1] = -2;
776  out[4] = 2;
777  break;
778  case 6 :
779  out[6] = -2;
780  out[8] = 2;
781  break;
782  case 7 :
783  out[3] = -2;
784  out[4] = 2;
785  out[7] = -2;
786  out[8] = 2;
787  break;
788  }
789  break;
790 
791  case 2: // direction == 2
792 
793  switch (subElement) {
794  case 0 :
795  out[0] = -2;
796  out[6] = 2;
797  break;
798  case 1 :
799  out[1] = -2;
800  out[7] = 2;
801  break;
802  case 2 :
803  out[3] = -2;
804  out[8] = 2;
805  break;
806  case 3 :
807  out[6] = -2;
808  out[9] = 2;
809  break;
810  case 4 :
811  out[1] = -2;
812  out[7] = 2;
813  break;
814  case 5 :
815  out[1] = -2;
816  out[7] = 2;
817  break;
818  case 6 :
819  out[3] = -2;
820  out[8] = 2;
821  break;
822  case 7 :
823  out[3] = -2;
824  out[8] = 2;
825  break;
826  }
827  break;
828 
829  default:
830  DUNE_THROW(RangeError, "Component out of range.");
831  }
832  } else {
833  out.resize(size());
834  for (std::size_t i = 0; i < size(); ++i)
835  out[i] = 0;
836  }
837  }
838 
842  static constexpr unsigned int order ()
843  {
844  return 1;
845  }
846 
847  };
848 }
849 #endif
A dense n x m matrix.
Definition: fmatrix.hh:117
vector space out of a tensor product of fields.
Definition: fvector.hh:95
Default exception for dummy implementations.
Definition: exceptions.hh:263
Default exception class for range errors.
Definition: exceptions.hh:254
LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
export type traits for function signature
Definition: refinedp1localbasis.hh:60
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: refinedp1localbasis.hh:99
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition: refinedp1localbasis.hh:163
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: refinedp1localbasis.hh:69
void partial(const std::array< unsigned int, 1 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition: refinedp1localbasis.hh:127
static constexpr unsigned int size()
number of shape functions
Definition: refinedp1localbasis.hh:63
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: refinedp1localbasis.hh:264
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
export type traits for function signature
Definition: refinedp1localbasis.hh:202
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: refinedp1localbasis.hh:211
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition: refinedp1localbasis.hh:315
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition: refinedp1localbasis.hh:389
static constexpr unsigned int size()
number of shape functions
Definition: refinedp1localbasis.hh:205
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition: refinedp1localbasis.hh:693
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition: refinedp1localbasis.hh:441
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition: refinedp1localbasis.hh:432
static constexpr unsigned int size()
number of shape functions
Definition: refinedp1localbasis.hh:435
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition: refinedp1localbasis.hh:842
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition: refinedp1localbasis.hh:568
Implements a matrix constructed from a given type representing a field and compile-time given number ...
#define DUNE_THROW(E, m)
Definition: exceptions.hh:218
constexpr T accumulate(Range &&range, T value, F &&f)
Accumulate values.
Definition: hybridutilities.hh:279
Dune namespace.
Definition: alignedallocator.hh:13
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition: integersequence.hh:75
Contains a base class for LocalBasis classes based on uniform refinement.
Type traits for LocalBasisVirtualInterface.
Definition: localbasis.hh:35
D DomainType
domain type
Definition: localbasis.hh:43
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 27, 22:29, 2024)