Dune Core Modules (2.9.0)

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