PACMAN 0.1.0
Portable Algorithms for Coupling, Mapping, and Adaptive iNterpolation
Loading...
Searching...
No Matches
FESkinTools.hpp
Go to the documentation of this file.
1//
2// This file is subject to the terms and conditions defined in
3// file 'LICENSE', which is part of this source code package.
4//
5
6#pragma once
7
8#include <vector>
9
10#include "common/transfer.hxx"
11#include "common/types.hpp"
12
22namespace PACMAN {
23namespace FiniteElements {
24
29 switch (type) {
30 // LCOV_EXCL_START
33 return 0;
34 // LCOV_EXCL_STOP
37 return 1;
42 return 2;
51 return 3;
52 }
53 // LCOV_EXCL_START
54 return -1;
55 // LCOV_EXCL_STOP
56};
57
62
63 switch (type) {
64 // LCOV_EXCL_START
66 return -1;
68 return 1;
69 // LCOV_EXCL_STOP
71 return 2;
73 return 2;
74 // LCOV_EXCL_START
76 return -1;
78 return -1;
80 return -1;
82 return -1;
84 return -1;
86 return -1;
88 return -1;
90 return -1;
92 return -1;
94 return -1;
96 return -1;
98 return -1;
99 default:
100 return -1;
101 // LCOV_EXCL_STOP
102 }
103};
104
109
110 switch (type) {
111 // LCOV_EXCL_START
113 return -1;
115 return -1;
117 return 1;
119 return 1;
120 // LCOV_EXCL_STOP
122 return 3;
124 return 4;
126 return 3;
128 return 4;
129 // LCOV_EXCL_START
131 return -1;
133 return -1;
135 return -1;
137 return -1;
139 return -1;
141 return -1;
143 return -1;
145 return -1;
146 default:
147 return -1;
148 // LCOV_EXCL_STOP
149 }
150};
151
156 switch (type) {
157 // LCOV_EXCL_START
159 return -1;
161 return -1;
163 return -1;
165 return -1;
167 return 1;
169 return 1;
171 return 1;
173 return 1;
174 // LCOV_EXCL_STOP
176 return 4;
178 return 6;
180 return 5;
182 return 5;
184 return 4;
186 return 6;
188 return 5;
190 return 5;
191 // LCOV_EXCL_START
192 default:
193 return -1;
194 // LCOV_EXCL_STOP
195 }
196};
197
203template <int_t Dim>
205 switch (Dim) {
206 case 1:
207 return getNbFaceDim1(type);
208 case 2:
209 return getNbFaceDim2(type);
210 case 3:
211 return getNbFaceDim3(type);
212 // LCOV_EXCL_START
213 default:
214 assert(false);
215 return -1;
216 // LCOV_EXCL_STOP
217 }
218};
219static std::vector<offset_t> elemDim1LinearFacesPaddedOffsets{
220 // FOR OFFSETING
221 0,
222 // VTK_EMPTY_CELL
223 0,
224 // VTK_VERTEX
225 1,
226 // VTK_LINE
227 3,
228 // VTK_QUADRATIC_EDGE
229 5,
230 // VTK_TRIANGLE
231 5,
232 // VTK_QUAD
233 5,
234 // VTK_QUADRATIC_TRIANGLE
235 5,
236 // VTK_QUADRATIC_QUAD
237 5,
238 // VTK_TETRA
239 5,
240 // VTK_HEXAHEDRON
241 5,
242 // VTK_WEDGE
243 5,
244 // VTK_PYRAMID
245 5,
246 // VTK_QUADRATIC_TETRA
247 5,
248 // VTK_QUADRATIC_HEXAHEDRON
249 5,
250 // VTK_QUADRATIC_WEDGE
251 5,
252 // VTK_QUADRATIC_PYRAMID
253 5};
254static std::vector<shortint_t> elemDim1LinearFacesPaddedEntries{
255 // VTK_EMPTY_CELL
256
257 // VTK_VERTEX
258 0,
259 // VTK_LINE
260 0, 1,
261 // VTK_QUADRATIC_EDGE
262 0, 1,
263 // VTK_TRIANGLE
264
265 // VTK_QUAD
266
267 // VTK_QUADRATIC_TRIANGLE
268
269 // VTK_QUADRATIC_QUAD
270
271 // VTK_TETRA
272
273 // VTK_HEXAHEDRON
274
275 // VTK_WEDGE
276
277 // VTK_PYRAMID
278
279 // VTK_QUADRATIC_TETRA
280
281 // VTK_QUADRATIC_HEXAHEDRON
282
283 // VTK_QUADRATIC_WEDGE
284
285 // VTK_QUADRATIC_PYRAMID
286
287};
288static std::vector<offset_t> elemDim2LinearFacesPaddedOffsets{
289
290 // FOR OFFSETING
291 0,
292 // VTK_EMPTY_CELL
293 0,
294 // VTK_VERTEX
295 0,
296 // VTK_LINE
297 2,
298 // VTK_QUADRATIC_EDGE
299 4,
300 // VTK_TRIANGLE
301 10,
302 // VTK_QUAD
303 18,
304 // VTK_QUADRATIC_TRIANGLE
305 24,
306 // VTK_QUADRATIC_QUAD
307 32,
308 // VTK_TETRA
309 32,
310 // VTK_HEXAHEDRON
311 32,
312 // VTK_WEDGE
313 32,
314 // VTK_PYRAMID
315 32,
316 // VTK_QUADRATIC_TETRA
317 32,
318 // VTK_QUADRATIC_HEXAHEDRON
319 32,
320 // VTK_QUADRATIC_WEDGE
321 32,
322 // VTK_QUADRATIC_PYRAMID
323 32,
324};
325static std::vector<shortint_t> elemDim2LinearFacesPaddedEntries{
326 // VTK_EMPTY_CELL
327
328 // VTK_VERTEX
329
330 // VTK_LINE
331 /*face 0*/ 0, 1,
332 // VTK_QUADRATIC_EDGE
333 /*face 0*/ 0, 1,
334 // VTK_TRIANGLE
335 /*face 0*/ 0, 1,
336 /*face 1*/ 1, 2,
337 /*face 2*/ 2, 0,
338 // VTK_QUAD
339 /*face 0*/ 0, 1,
340 /*face 1*/ 1, 2,
341 /*face 2*/ 2, 3,
342 /*face 3*/ 3, 0,
343 // VTK_QUADRATIC_TRIANGLE
344 /*face 0*/ 0, 1,
345 /*face 1*/ 1, 2,
346 /*face 2*/ 2, 0,
347 // VTK_QUADRATIC_QUAD
348 /*face 0*/ 0, 1,
349 /*face 1*/ 1, 2,
350 /*face 2*/ 2, 3,
351 /*face 3*/ 3, 0,
352 // VTK_TETRA
353
354 // VTK_HEXAHEDRON
355
356 // VTK_WEDGE
357
358 // VTK_PYRAMID
359
360 // VTK_QUADRATIC_TETRA
361
362 // VTK_QUADRATIC_HEXAHEDRON
363
364 // VTK_QUADRATIC_WEDGE
365
366 // VTK_QUADRATIC_PYRAMID
367
368};
369static std::vector<offset_t> elemDim3LinearFacesPaddedOffsets{
370 // FOR OFFSETING
371 0,
372 // VTK_EMPTY_CELL
373 0,
374 // VTK_VERTEX
375 0,
376 // VTK_LINE
377 0,
378 // VTK_QUADRATIC_EDGE
379 0,
380 // VTK_TRIANGLE
381 4,
382 // VTK_QUAD
383 8,
384 // VTK_QUADRATIC_TRIANGLE
385 12,
386 // VTK_QUADRATIC_QUAD
387 16,
388 // VTK_TETRA
389 32,
390 // VTK_HEXAHEDRON
391 56,
392 // VTK_WEDGE
393 76,
394 // VTK_PYRAMID
395 96,
396 // VTK_QUADRATIC_TETRA
397 112,
398 // VTK_QUADRATIC_HEXAHEDRON
399 136,
400 // VTK_QUADRATIC_WEDGE
401 156,
402 // VTK_QUADRATIC_PYRAMID
403 176,
404};
405static std::vector<shortint_t> elemDim3LinearFacesPaddedEntries{
406 // VTK_EMPTY_CELL
407
408 // VTK_VERTEX
409
410 // VTK_LINE
411
412 // VTK_QUADRATIC_EDGE
413
414 // VTK_TRIANGLE
415 /*face 0*/ 0, 1, 2, -1,
416 // VTK_QUAD
417 /*face 0*/ 0, 1, 2, 3,
418 // VTK_QUADRATIC_TRIANGLE
419 /*face 0*/ 0, 1, 2, -1,
420 // VTK_QUADRATIC_QUAD
421 /*face 0*/ 0, 1, 2, 3,
422 // VTK_TETRA
423 /*face 0*/ 0, 1, 2, -1,
424 /*face 1*/ 0, 1, 3, -1,
425 /*face 2*/ 1, 3, 2, -1,
426 /*face 3*/ 0, 3, 2, -1,
427 // VTK_HEXAHEDRON
428 /*face 0*/ 0, 1, 2, 3,
429 /*face 1*/ 4, 5, 6, 7,
430 /*face 2*/ 0, 3, 7, 4,
431 /*face 3*/ 1, 2, 6, 5,
432 /*face 4*/ 0, 1, 5, 4,
433 /*face 5*/ 3, 2, 6, 7,
434 // VTK_WEDGE
435 /*face 0*/ 0, 1, 2, -1,
436 /*face 1*/ 3, 4, 5, -1,
437 /*face 2*/ 0, 1, 4, 3,
438 /*face 3*/ 1, 2, 5, 4,
439 /*face 4*/ 0, 2, 5, 3,
440 // VTK_PYRAMID
441 /*face 0*/ 0, 1, 2, 3,
442 /*face 1*/ 0, 1, 4, -1,
443 /*face 2*/ 0, 4, 3, -1,
444 /*face 3*/ 2, 4, 3, -1,
445 /*face 4*/ 1, 2, 4, -1,
446 // VTK_QUADRATIC_TETRA
447 /*face 0*/ 0, 1, 2, -1,
448 /*face 1*/ 0, 1, 3, -1,
449 /*face 2*/ 1, 3, 2, -1,
450 /*face 3*/ 0, 3, 2, -1,
451 // VTK_QUADRATIC_HEXAHEDRON
452 /*face 0*/ 0, 1, 2, 3,
453 /*face 1*/ 4, 5, 6, 7,
454 /*face 2*/ 0, 3, 7, 4,
455 /*face 3*/ 1, 2, 6, 5,
456 /*face 4*/ 0, 1, 5, 4,
457 /*face 5*/ 3, 2, 6, 7,
458 // VTK_QUADRATIC_WEDGE
459 /*face 0*/ 0, 1, 2, -1,
460 /*face 1*/ 3, 4, 5, -1,
461 /*face 2*/ 0, 1, 4, 3,
462 /*face 3*/ 1, 2, 5, 4,
463 /*face 4*/ 0, 2, 5, 3,
464 // VTK_QUADRATIC_PYRAMID
465 /*face 0*/ 0, 1, 2, 3,
466 /*face 1*/ 0, 1, 4, -1,
467 /*face 2*/ 0, 4, 3, -1,
468 /*face 3*/ 2, 4, 3, -1,
469 /*face 4*/ 1, 2, 4, -1};
470
474inline std::vector<offset_t>
476 switch (dimension) {
477 case 1:
479 case 2:
481 case 3:
483 // LCOV_EXCL_START
484 default:
485 assert(false);
486 return std::vector<offset_t>();
487 // LCOV_EXCL_STOP
488 }
489};
494inline std::vector<shortint_t>
496 switch (dimension) {
497 case 1:
499 case 2:
501 case 3:
503 // LCOV_EXCL_START
504 default:
505 assert(false);
506 return std::vector<shortint_t>();
507 // LCOV_EXCL_STOP
508 }
509};
510//=== triangularization
511static std::vector<offset_t> elemDim1TriFacesOffsets{
512 // FOR OFFSETING
513 0,
514 // VTK_EMPTY_CELL
515 0,
516 // VTK_VERTEX
517 1,
518 // VTK_LINE
519 3,
520 // VTK_QUADRATIC_EDGE
521 6,
522 // VTK_TRIANGLE
523 6,
524 // VTK_QUAD
525 6,
526 // VTK_QUADRATIC_TRIANGLE
527 6,
528 // VTK_QUADRATIC_QUAD
529 6,
530 // VTK_TETRA
531 6,
532 // VTK_HEXAHEDRON
533 6,
534 // VTK_WEDGE
535 6,
536 // VTK_PYRAMID
537 6,
538 // VTK_QUADRATIC_TETRA
539 6,
540 // VTK_QUADRATIC_HEXAHEDRON
541 6,
542 // VTK_QUADRATIC_WEDGE
543 6,
544 // VTK_QUADRATIC_PYRAMID
545 6,
546};
547
548static std::vector<shortint_t> elemDim1TriFacesEntries{
549 // VTK_EMPTY_CELL
550
551 // VTK_VERTEX
552 /*face0*/ 0,
553 // VTK_LINE
554 /*face0*/ 0,
555 /*face1*/ 1,
556 // VTK_QUADRATIC_EDGE
557 /*face0*/ 0,
558 /*face1*/ 1,
559 /*face2*/ 2,
560 // VTK_TRIANGLE
561
562 // VTK_QUAD
563
564 // VTK_QUADRATIC_TRIANGLE
565
566 // VTK_QUADRATIC_QUAD
567
568 // VTK_TETRA
569
570 // VTK_HEXAHEDRON
571
572 // VTK_WEDGE
573
574 // VTK_PYRAMID
575
576 // VTK_QUADRATIC_TETRA
577
578 // VTK_QUADRATIC_HEXAHEDRON
579
580 // VTK_QUADRATIC_WEDGE
581
582 // VTK_QUADRATIC_PYRAMID
583
584};
585
586static std::vector<offset_t> elemDim2TriFacesOffsets{
587 // FOR OFFSETING
588 0,
589 // VTK_EMPTY_CELL
590 0,
591 // VTK_VERTEX
592 0,
593 // VTK_LINE
594 2,
595 // VTK_QUADRATIC_EDGE
596 6,
597 // VTK_TRIANGLE
598 12,
599 // VTK_QUAD
600 20,
601 // VTK_QUADRATIC_TRIANGLE
602 32,
603 // VTK_QUADRATIC_QUAD
604 48,
605 // VTK_TETRA
606 48,
607 // VTK_HEXAHEDRON
608 48,
609 // VTK_WEDGE
610 48,
611 // VTK_PYRAMID
612 48,
613 // VTK_QUADRATIC_TETRA
614 48,
615 // VTK_QUADRATIC_HEXAHEDRON
616 48,
617 // VTK_QUADRATIC_WEDGE
618 48,
619 // VTK_QUADRATIC_PYRAMID
620 48,
621};
622static std::vector<shortint_t> elemDim2TriFacesEntries{
623
624 // VTK_EMPTY_CELL
625
626 // VTK_VERTEX
627
628 // VTK_LINE
629 /*face0*/ 0, 1,
630 // VTK_QUADRATIC_EDGE
631 /*face0*/ 0, 1,
632 /*face1*/ 1, 2,
633 // VTK_TRIANGLE
634 /*face0*/ 0, 1,
635 /*face1*/ 1, 2,
636 /*face2*/ 2, 0,
637 // VTK_QUAD
638 /*face0*/ 0, 1,
639 /*face1*/ 1, 2,
640 /*face2*/ 2, 3,
641 /*face3*/ 3, 0,
642 // VTK_QUADRATIC_TRIANGLE
643 /*face0*/ 0, 3,
644 /*face1*/ 3, 1,
645 /*face2*/ 1, 4,
646 /*face3*/ 4, 2,
647 /*face4*/ 2, 5,
648 /*face5*/ 5, 0,
649 // VTK_QUADRATIC_QUAD
650 /*face0*/ 0, 4,
651 /*face1*/ 4, 1,
652 /*face2*/ 1, 5,
653 /*face3*/ 5, 2,
654 /*face4*/ 2, 6,
655 /*face5*/ 6, 3,
656 /*face6*/ 3, 7,
657 /*face7*/ 7, 0,
658 // VTK_TETRA
659
660 // VTK_HEXAHEDRON
661
662 // VTK_WEDGE
663
664 // VTK_PYRAMID
665
666 // VTK_QUADRATIC_TETRA
667
668 // VTK_QUADRATIC_HEXAHEDRON
669
670 // VTK_QUADRATIC_WEDGE
671
672 // VTK_QUADRATIC_PYRAMID
673
674};
675static std::vector<offset_t> elemDim3TriFacesOffsets{
676 // FOR OFFSETING
677 0,
678 // VTK_EMPTY_CELL
679 0,
680 // VTK_VERTEX
681 0,
682 // VTK_LINE
683 0,
684 // VTK_QUADRATIC_EDGE
685 0,
686 // VTK_TRIANGLE
687 3,
688 // VTK_QUAD
689 9,
690 // VTK_QUADRATIC_TRIANGLE
691 21,
692 // VTK_QUADRATIC_QUAD
693 39,
694 // VTK_TETRA
695 51,
696 // VTK_HEXAHEDRON
697 87,
698 // VTK_WEDGE
699 111,
700 // VTK_PYRAMID
701 129,
702 // VTK_QUADRATIC_TETRA
703 177,
704 // VTK_QUADRATIC_HEXAHEDRON
705 285,
706 // VTK_QUADRATIC_WEDGE
707 363,
708 // VTK_QUADRATIC_PYRAMID
709 429,
710};
711static std::vector<shortint_t> elemDim3TriFacesEntries{
712 // VTK_EMPTY_CELL
713
714 // VTK_VERTEX
715
716 // VTK_LINE
717
718 // VTK_QUADRATIC_EDGE
719
720 // VTK_TRIANGLE
721 /*face0*/ 0, 1, 2,
722 // VTK_QUAD
723 /*face0*/ 0, 1, 2, 0, 2, 3,
724 // VTK_QUADRATIC_TRIANGLE
725 /*face0*/ 0, 3, 5, 1, 4, 3, 2, 5, 4, 3, 4, 5,
726 // VTK_QUADRATIC_QUAD
727 /*face0*/ 0, 4, 7, 3, 7, 6, 4, 6, 7, 1, 5, 4, 2, 6, 5, 4, 5, 6,
728 // VTK_TETRA
729 /*face0*/ 0, 1, 2,
730 /*face1*/ 0, 1, 3,
731 /*face2*/ 1, 3, 2,
732 /*face3*/ 0, 3, 2,
733 // VTK_HEXAHEDRON
734 /*face0*/ 0, 1, 2, 0, 2, 3,
735 /*face1*/ 4, 5, 6, 4, 6, 7,
736 /*face2*/ 0, 3, 4, 3, 7, 4,
737 /*face3*/ 1, 2, 5, 2, 6, 5,
738 /*face4*/ 0, 1, 4, 1, 5, 4,
739 /*face5*/ 3, 2, 7, 2, 6, 7,
740 // VTK_WEDGE
741 /*face0*/ 0, 1, 2,
742 /*face1*/ 3, 4, 5,
743 /*face2*/ 0, 1, 4, 0, 4, 3,
744 /*face3*/ 1, 2, 4, 2, 5, 4,
745 /*face4*/ 0, 2, 3, 2, 5, 3,
746 // VTK_PYRAMID
747 /*face0*/ 0, 1, 2, 0, 2, 3,
748 /*face1*/ 0, 1, 4,
749 /*face2*/ 0, 4, 3,
750 /*face3*/ 2, 4, 3,
751 /*face4*/ 1, 2, 4,
752 // VTK_QUADRATIC_TETRA
753 /*face0*/ 0, 4, 6, 2, 6, 5, 1, 5, 4, 4, 5, 6,
754 /*face1*/ 0, 4, 7, 3, 7, 8, 1, 8, 4, 4, 8, 7,
755 /*face2*/ 1, 8, 5, 3, 9, 8, 2, 5, 9, 5, 8, 9,
756 /*face3*/ 0, 7, 6, 2, 6, 9, 3, 9, 7, 6, 7, 9,
757 // VTK_QUADRATIC_HEXAHEDRON
758 /*face0*/ 0, 8, 11, 11, 10, 3, 8, 10, 11, 8, 1, 9, 2, 10, 9, 8, 9, 10,
759 /*face1*/ 4, 12, 15, 15, 14, 7, 12, 14, 15, 12, 5, 13, 6, 14, 13, 12, 13,
760 14,
761 /*face2*/ 0, 11, 16, 16, 15, 4, 11, 15, 16, 3, 19, 11, 7, 15, 19, 11, 19,
762 15,
763 /*face3*/ 1, 9, 17, 17, 13, 5, 9, 13, 17, 2, 18, 9, 6, 13, 18, 9, 18, 13,
764 /*face4*/ 0, 8, 16, 16, 12, 4, 8, 12, 16, 1, 17, 8, 17, 13, 12, 8, 17, 12,
765 /*face5*/ 3, 10, 19, 19, 14, 7, 10, 14, 19, 2, 18, 10, 6, 14, 18, 10, 18,
766 14,
767 // VTK_QUADRATIC_WEDGE
768 /*face0*/ 0, 6, 8, 1, 7, 6, 2, 8, 7, 6, 7, 8,
769 /*face1*/ 3, 9, 11, 4, 10, 9, 5, 11, 10, 9, 10, 11,
770 /*face2*/ 0, 6, 12, 12, 9, 3, 6, 9, 12, 1, 13, 6, 4, 9, 13, 6, 13, 9,
771 /*face3*/ 1, 7, 13, 4, 13, 10, 7, 10, 13, 2, 14, 7, 5, 10, 14, 7, 14, 10,
772 /*face4*/ 0, 8, 12, 12, 11, 3, 8, 11, 12, 2, 14, 8, 5, 11, 14, 8, 14, 11,
773 // VTK_QUADRATIC_PYRAMID
774 /*face0*/ 0, 5, 8, 8, 7, 3, 5, 7, 8, 1, 6, 5, 6, 2, 7, 5, 6, 7,
775 /*face1*/ 0, 5, 9, 9, 10, 4, 1, 10, 5, 5, 10, 9,
776 /*face2*/ 0, 9, 8, 3, 8, 12, 4, 12, 9, 8, 9, 12,
777 /*face3*/ 3, 7, 12, 2, 11, 7, 4, 12, 11, 7, 11, 12,
778 /*face4*/ 1, 6, 10, 2, 11, 6, 4, 10, 11, 6, 11, 10};
779
783inline std::vector<offset_t> getTriFacesOffsets(const int_t dimension) {
784 switch (dimension) {
785 case 1:
787 case 2:
789 case 3:
791 // LCOV_EXCL_START
792 default:
793 assert(false);
794 return std::vector<offset_t>();
795 // LCOV_EXCL_STOP
796 }
797};
801inline std::vector<shortint_t> getTriFacesEntries(const int_t dimension) {
802 switch (dimension) {
803 case 1:
805 case 2:
807 case 3:
809 // LCOV_EXCL_START
810 default:
811 assert(false);
812 return std::vector<shortint_t>();
813 // LCOV_EXCL_STOP
814 }
815};
816static std::vector<offset_t> elemDim1TriLocFacesOffsets{
817 // FOR OFFSETING
818 0,
819 // VTK_EMPTY_CELL
820 0,
821 // VTK_VERTEX
822 2,
823 // VTK_LINE
824 5,
825 // VTK_QUADRATIC_EDGE
826 9,
827 // VTK_TRIANGLE
828 9,
829 // VTK_QUAD
830 9,
831 // VTK_QUADRATIC_TRIANGLE
832 9,
833 // VTK_QUADRATIC_QUAD
834 9,
835 // VTK_TETRA
836 9,
837 // VTK_HEXAHEDRON
838 9,
839 // VTK_WEDGE
840 9,
841 // VTK_PYRAMID
842 9,
843 // VTK_QUADRATIC_TETRA
844 9,
845 // VTK_QUADRATIC_HEXAHEDRON
846 9,
847 // VTK_QUADRATIC_WEDGE
848 9,
849 // VTK_QUADRATIC_PYRAMID
850 9,
851};
852
853static std::vector<shortint_t> elemDim1TriLocFacesEntries{
854 // VTK_EMPTY_CELL
855
856 // VTK_VERTEX
857 0, 1,
858 // VTK_LINE
859 0, 1, 2,
860 // VTK_QUADRATIC_EDGE
861 0, 1, 2, 3,
862 // VTK_TRIANGLE
863
864 // VTK_QUAD
865
866 // VTK_QUADRATIC_TRIANGLE
867
868 // VTK_QUADRATIC_QUAD
869
870 // VTK_TETRA
871
872 // VTK_HEXAHEDRON
873
874 // VTK_WEDGE
875
876 // VTK_PYRAMID
877
878 // VTK_QUADRATIC_TETRA
879
880 // VTK_QUADRATIC_HEXAHEDRON
881
882 // VTK_QUADRATIC_WEDGE
883
884 // VTK_QUADRATIC_PYRAMID
885
886};
887
888static std::vector<offset_t> elemDim2TriLocFacesOffsets{
889 // FOR OFFSETING
890 0,
891 // VTK_EMPTY_CELL
892 0,
893 // VTK_VERTEX
894 0,
895 // VTK_LINE
896 2,
897 // VTK_QUADRATIC_EDGE
898 4,
899 // VTK_TRIANGLE
900 8,
901 // VTK_QUAD
902 13,
903 // VTK_QUADRATIC_TRIANGLE
904 17,
905 // VTK_QUADRATIC_QUAD
906 22,
907 // VTK_TETRA
908 22,
909 // VTK_HEXAHEDRON
910 22,
911 // VTK_WEDGE
912 22,
913 // VTK_PYRAMID
914 22,
915 // VTK_QUADRATIC_TETRA
916 22,
917 // VTK_QUADRATIC_HEXAHEDRON
918 22,
919 // VTK_QUADRATIC_WEDGE
920 22,
921 // VTK_QUADRATIC_PYRAMID
922 22,
923};
924static std::vector<shortint_t> elemDim2TriLocFacesEntries{
925 // VTK_EMPTY_CELL
926
927 // VTK_VERTEX
928
929 // VTK_LINE
930 0, 2,
931 // VTK_QUADRATIC_EDGE
932 0, 4,
933 // VTK_TRIANGLE
934 0, 2, 4, 6,
935 // VTK_QUAD
936 0, 2, 4, 6, 8,
937 // VTK_QUADRATIC_TRIANGLE
938 0, 4, 8, 12,
939 // VTK_QUADRATIC_QUAD
940 0, 4, 8, 12, 16,
941 // VTK_TETRA
942
943 // VTK_HEXAHEDRON
944
945 // VTK_WEDGE
946
947 // VTK_PYRAMID
948
949 // VTK_QUADRATIC_TETRA
950
951 // VTK_QUADRATIC_HEXAHEDRON
952
953 // VTK_QUADRATIC_WEDGE
954
955 // VTK_QUADRATIC_PYRAMID
956
957};
958
959static std::vector<offset_t> elemDim3TriLocFacesOffsets{
960 // FOR OFFSETING
961 0,
962 // VTK_EMPTY_CELL
963 0,
964 // VTK_VERTEX
965 0,
966 // VTK_LINE
967 0,
968 // VTK_QUADRATIC_EDGE
969 0,
970 // VTK_TRIANGLE
971 2,
972 // VTK_QUAD
973 4,
974 // VTK_QUADRATIC_TRIANGLE
975 6,
976 // VTK_QUADRATIC_QUAD
977 8,
978 // VTK_TETRA
979 13,
980 // VTK_HEXAHEDRON
981 20,
982 // VTK_WEDGE
983 26,
984 // VTK_PYRAMID
985 32,
986 // VTK_QUADRATIC_TETRA
987 37,
988 // VTK_QUADRATIC_HEXAHEDRON
989 44,
990 // VTK_QUADRATIC_WEDGE
991 50,
992 // VTK_QUADRATIC_PYRAMID
993 56,
994};
995
996static std::vector<shortint_t> elemDim3TriLocFacesEntries{
997 // VTK_EMPTY_CELL
998
999 // VTK_VERTEX
1000
1001 // VTK_LINE
1002
1003 // VTK_QUADRATIC_EDGE
1004
1005 // VTK_TRIANGLE
1006 0, 3,
1007 // VTK_QUAD
1008 0, 6,
1009 // VTK_QUADRATIC_TRIANGLE
1010 0, 12,
1011 // VTK_QUADRATIC_QUAD
1012 0, 18,
1013 // VTK_TETRA
1014 0, 3, 6, 9, 12,
1015 // VTK_HEXAHEDRON
1016 0, 6, 12, 18, 24, 30, 36,
1017 // VTK_WEDGE
1018 0, 3, 6, 12, 18, 24,
1019 // VTK_PYRAMID
1020 0, 6, 9, 12, 15, 18,
1021 // VTK_QUADRATIC_TETRA
1022 0, 12, 24, 36, 48,
1023 // VTK_QUADRATIC_HEXAHEDRON
1024 0, 18, 36, 54, 72, 90, 108,
1025 // VTK_QUADRATIC_WEDGE
1026 0, 12, 24, 42, 60, 78,
1027 // VTK_QUADRATIC_PYRAMID
1028 0, 18, 30, 42, 54, 66};
1029
1033inline std::vector<offset_t> getTriLocFacesOffsets(const int_t dimension) {
1034 switch (dimension) {
1035 case 1:
1037 case 2:
1039 case 3:
1041 // LCOV_EXCL_START
1042 default:
1043 assert(false);
1044 return std::vector<offset_t>();
1045 // LCOV_EXCL_STOP
1046 }
1047};
1051inline std::vector<shortint_t> getTriLocFacesEntries(const int_t dimension) {
1052 switch (dimension) {
1053 case 1:
1055 case 2:
1057 case 3:
1059 // LCOV_EXCL_START
1060 default:
1061 assert(false);
1062 return std::vector<shortint_t>();
1063 // LCOV_EXCL_STOP
1064 }
1065};
1066
1067}; // namespace FiniteElements
1068} // namespace PACMAN
static std::vector< shortint_t > elemDim2TriLocFacesEntries
static std::vector< offset_t > elemDim2TriLocFacesOffsets
static std::vector< offset_t > elemDim1TriLocFacesOffsets
static std::vector< offset_t > elemDim3TriLocFacesOffsets
static std::vector< shortint_t > elemDim2TriFacesEntries
static std::vector< offset_t > elemDim2TriFacesOffsets
static std::vector< offset_t > elemDim1TriFacesOffsets
KOKKOS_INLINE_FUNCTION shortint_t getNbFaceDim1(const CellType &type)
Return the number of faces for 1D skin extraction tables.
static std::vector< shortint_t > elemDim1TriLocFacesEntries
std::vector< offset_t > getLinearFacesPaddedOffsets(const int_t dimension)
Get padded linear-face offset table for a given dimension.
KOKKOS_INLINE_FUNCTION shortint_t getNbFace(const CellType &type)
Dimension-dispatched helper returning face count for one cell type.
std::vector< shortint_t > getLinearFacesPaddedEntries(const int_t dimension)
Get padded linear-face entry table for a given dimension.
static std::vector< offset_t > elemDim2LinearFacesPaddedOffsets
KOKKOS_INLINE_FUNCTION shortint_t getDimension(const CellType &type)
Return topological dimension of a PACMAN cell type.
std::vector< offset_t > getTriLocFacesOffsets(const int_t dimension)
Get local triangulated-face offset table for a given dimension.
static std::vector< offset_t > elemDim3LinearFacesPaddedOffsets
static std::vector< shortint_t > elemDim1TriFacesEntries
static std::vector< shortint_t > elemDim3TriLocFacesEntries
std::vector< shortint_t > getTriFacesEntries(const int_t dimension)
Get triangulated-face entry table for a given dimension.
std::vector< shortint_t > getTriLocFacesEntries(const int_t dimension)
Get local triangulated-face entry table for a given dimension.
static std::vector< offset_t > elemDim1LinearFacesPaddedOffsets
KOKKOS_INLINE_FUNCTION shortint_t getNbFaceDim3(const CellType &type)
Return the number of faces for 3D skin extraction tables.
static std::vector< shortint_t > elemDim1LinearFacesPaddedEntries
static std::vector< offset_t > elemDim3TriFacesOffsets
static std::vector< shortint_t > elemDim2LinearFacesPaddedEntries
static std::vector< shortint_t > elemDim3LinearFacesPaddedEntries
std::vector< offset_t > getTriFacesOffsets(const int_t dimension)
Get triangulated-face offset table for a given dimension.
KOKKOS_INLINE_FUNCTION shortint_t getNbFaceDim2(const CellType &type)
Return the number of faces for 2D skin extraction tables.
static std::vector< shortint_t > elemDim3TriFacesEntries
CellType
Definition types.hpp:60