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
15
17
18namespace 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.111.3 (Dec 21, 23:30, 2024)