20#include "libmesh/cell_tet14.h"
21#include "libmesh/edge_edge3.h"
22#include "libmesh/face_tri7.h"
23#include "libmesh/enum_io_package.h"
24#include "libmesh/enum_order.h"
26#ifdef LIBMESH_ENABLE_AMR
70 const unsigned int s)
const
72 libmesh_assert_less (s,
n_sides());
81 libmesh_assert_less(s,
n_sides());
88 libmesh_assert_less(e,
n_edges());
93 const unsigned int e)
const
95 libmesh_assert_less (e,
n_edges());
102#ifdef LIBMESH_ENABLE_AMR
106 const unsigned int s)
const
110 const unsigned int midedge_nodes_opposite[4][3] =
125 const unsigned int )
const
127 libmesh_not_implemented();
140 ((this->point(4) - this->point(0))*2))
144 ((this->point(5) - this->point(1))*2))
148 ((this->point(6) - this->point(0))*2))
152 ((this->point(7) - this->point(0))*2))
156 ((this->point(8) - this->point(1))*2))
160 ((this->point(9) - this->point(2))*2))
190 unsigned int side_node)
const
192 libmesh_assert_less (side, this->
n_sides());
201 unsigned int edge_node)
const
203 libmesh_assert_less (edge, this->
n_edges());
213 return this->simple_build_side_ptr<Tri7, Tet14>(i);
219 const unsigned int i)
221 this->simple_build_side_ptr<Tet14>(side, i,
TRI7);
228 return this->simple_build_edge_ptr<Edge3,Tet14>(i);
235 this->simple_build_edge_ptr<Tet14>(edge, i,
EDGE3);
242 std::vector<dof_id_type> & conn)
const
371 libmesh_error_msg(
"Invalid sc = " << sc);
380 libmesh_experimental();
388 libmesh_error_msg(
"Unsupported IO package " << iop);
413 libmesh_error_msg(
"Invalid n = " << n);
438std::pair<unsigned short int, unsigned short int>
441 libmesh_assert_greater_equal (n, this->
n_vertices());
442 libmesh_assert_less (n, this->
n_nodes());
443 return std::pair<unsigned short int, unsigned short int>
451 const unsigned int v)
const
453 libmesh_assert_greater_equal (n, this->
n_vertices());
454 libmesh_assert_less (n, this->
n_nodes());
455 libmesh_assert_less (v, 3);
480#ifdef LIBMESH_ENABLE_AMR
487 { 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
488 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
489 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
490 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
491 { 0.375,-0.125, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0., 0.},
492 {.09375,-.03125,-.03125, 0., 0.125,-0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
493 { 0.375, 0.,-0.125, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0.},
494 { 0.375, 0., 0.,-0.125, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0.},
495 {.09375,-.03125, 0.,-.03125,0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0., 0.},
496 {.09375, 0.,-.03125,-.03125, 0., 0., 0.125, 0.125, 0.,-0.125, 0., 0., 0.,.84375},
497 { 5/r18,-1/r18,-1/r18, 0., 4/r18,-2/r18, 4/r18, 0., 0., 0., 0.5, 0., 0., 0.},
498 { 5/r18,-1/r18, 0.,-1/r18, 4/r18, 0., 0., 4/r18,-2/r18, 0., 0., 0.5, 0., 0.},
499 { 0.125,-1/r72,-1/r72,-1/r72, 0.,-2/r18, 0., 0.,-2/r18,-2/r18, 0.375, 0.375, 0.125, 0.375},
500 { 5/r18, 0.,-1/r18,-1/r18, 0., 0., 4/r18, 4/r18, 0.,-2/r18, 0., 0., 0., 0.5}
506 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
507 { 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
508 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
509 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
510 {-0.125, 0.375, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0., 0.},
511 { 0., 0.375,-0.125, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0.},
512 {-.03125,.09375,-.03125, 0., 0.125, 0.125,-0.125, 0., 0., 0.,.84375, 0., 0., 0.},
513 {-.03125,.09375, 0.,-.03125,0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0., 0.},
514 { 0., 0.375, 0.,-0.125, 0., 0., 0., 0., 0.75, 0., 0., 0., 0., 0.},
515 { 0.,.09375,-0.03125,-0.03125,0., 0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0.},
516 {-1/r18, 5/r18,-1/r18, 0., 4/r18, 4/r18,-2/r18, 0., 0., 0., 0.5, 0., 0., 0.},
517 {-1/r18, 5/r18, 0.,-1/r18, 4/r18, 0., 0.,-2/r18, 4/r18, 0., 0., 0.5, 0., 0.},
518 { 0., 5/r18,-1/r18,-1/r18, 0., 4/r18, 0., 0., 4/r18,-2/r18, 0., 0., 0.5, 0.},
519 {-1/r72, 0.125,-1/r72,-1/r72, 0., 0.,-2/r18,-2/r18, 0.,-2/r18, 0.375, 0.375, 0.375, 0.125}
525 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
526 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
527 { 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
528 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
529 {-.03125,-.03125,.09375, 0.,-0.125, 0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
530 { 0.,-0.125, 0.375, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0.},
531 {-0.125, 0., 0.375, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0.},
532 {-.03125, 0.,.09375,-.03125, 0., 0., 0.125,-0.125, 0., 0.125, 0., 0., 0.,.84375},
533 { 0.,-.03125,.09375,-.03125, 0., 0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0.},
534 { 0., 0., 0.375,-0.125, 0., 0., 0., 0., 0., 0.75, 0., 0., 0., 0.},
535 {-1/r18,-1/r18, 5/r18, 0.,-2/r18, 4/r18, 4/r18, 0., 0., 0., 0.5, 0., 0., 0.},
536 {-1/r72,-1/r72, 0.125,-1/r72,-2/r18, 0., 0.,-2/r18,-2/r18, 0., 0.375, 0.125, 0.375, 0.375},
537 { 0.,-1/r18, 5/r18,-1/r18, 0., 4/r18, 0., 0.,-2/r18, 4/r18, 0., 0., 0.5, 0.},
538 {-1/r18, 0., 5/r18,-1/r18, 0., 0., 4/r18,-2/r18, 0., 4/r18, 0., 0., 0., 0.5}
544 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
545 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
546 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
547 { 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
548 {-.03125,-.03125, 0.,.09375,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0., 0.},
549 { 0.,-.03125,-.03125,.09375, 0.,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0.},
550 {-.03125, 0.,-.03125,.09375, 0., 0.,-0.125, 0.125, 0., 0.125, 0., 0., 0.,.84375},
551 {-0.125, 0., 0., 0.375, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0.},
552 { 0.,-0.125, 0., 0.375, 0., 0., 0., 0., 0.75, 0., 0., 0., 0., 0.},
553 { 0., 0.,-0.125, 0.375, 0., 0., 0., 0., 0., 0.75, 0., 0., 0., 0.},
554 {-1/r72,-1/r72,-1/r72, 0.125,-2/r18,-2/r18,-2/r18, 0., 0., 0., 0.125, 0.375, 0.375, 0.375},
555 {-1/r18,-1/r18, 0., 5/r18,-2/r18, 0., 0., 4/r18, 4/r18, 0., 0., 0.5, 0., 0.},
556 { 0.,-1/r18,-1/r18, 5/r18, 0.,-2/r18, 0., 0., 4/r18, 4/r18, 0., 0., 0.5, 0.},
557 {-1/r18, 0.,-1/r18, 5/r18, 0., 0.,-2/r18, 4/r18, 0., 4/r18, 0., 0., 0., 0.5}
563 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
564 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
565 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
566 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
567 {-.03125,.09375, 0.,-.03125,0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0., 0.},
568 { 1/r64, 1/r64, 1/r64, 1/r64,-0.125,-0.125,-0.125,-0.125,-0.125,-0.125,27/r64,27/r64,27/r64,27/r64},
569 {.09375,-.03125,-.03125, 0., 0.125,-0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
570 {.09375,-.03125, 0.,-.03125,0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0., 0.},
571 {-.03125,-.03125, 0.,.09375,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0., 0.},
572 {.09375, 0.,-.03125,-.03125, 0., 0., 0.125, 0.125, 0.,-0.125, 0., 0., 0.,.84375},
573 { 2/r72, 2/r72, 0., 0., 0.,-2/r18,-2/r18,-2/r18,-2/r18,-2/r18, 0.5, 0.5, 0.25, 0.25},
574 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.},
575 { 2/r72, 0., 0., 2/r72,-2/r18,-2/r18,-2/r18, 0.,-2/r18,-2/r18, 0.25, 0.5, 0.25, 0.5},
576 { 0.125,-1/r72,-1/r72,-1/r72, 0.,-2/r18, 0., 0.,-2/r18,-2/r18, 0.375, 0.375, 0.125, 0.375}
582 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
583 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
584 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
585 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
586 {-.03125,.09375,-.03125, 0., 0.125, 0.125,-0.125, 0., 0., 0.,.84375, 0., 0., 0.},
587 {-.03125,-.03125,.09375, 0.,-0.125, 0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
588 {.09375,-.03125,-.03125, 0., 0.125,-0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
589 {-.03125,.09375, 0.,-.03125,0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0., 0.},
590 { 0.,.09375,-.03125,-.03125, 0., 0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0.},
591 { 1/r64, 1/r64, 1/r64, 1/r64,-0.125,-0.125,-0.125,-0.125,-0.125,-0.125,27/r64,27/r64,27/r64,27/r64},
592 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
593 {-1/r72, 0.125,-1/r72,-1/r72, 0., 0.,-2/r18,-2/r18, 0.,-2/r18, 0.375, 0.375, 0.375, 0.125},
594 { 0., 2/r72, 2/r72, 0.,-2/r18, 0.,-2/r18,-2/r18,-2/r18,-2/r18, 0.5, 0.25, 0.5, 0.25},
595 { 2/r72, 2/r72, 0., 0., 0.,-2/r18,-2/r18,-2/r18,-2/r18,-2/r18, 0.5, 0.5, 0.25, 0.25}
601 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
602 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
603 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
604 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
605 {-.03125,-.03125,.09375, 0.,-0.125, 0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
606 { 0.,-.03125,.09375,-.03125, 0., 0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0.},
607 {-.03125, 0.,.09375,-.03125, 0., 0., 0.125,-0.125, 0., 0.125, 0., 0., 0.,.84375},
608 { 1/r64, 1/r64, 1/r64, 1/r64,-0.125,-0.125,-0.125,-0.125,-0.125,-0.125,27/r64,27/r64,27/r64,27/r64},
609 { 0.,.09375,-.03125,-.03125, 0., 0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0.},
610 { 0.,-.03125,-.03125,.09375, 0.,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0.},
611 {-1/r72,-1/r72, 0.125,-1/r72,-2/r18, 0., 0.,-2/r18,-2/r18, 0., 0.375, 0.125, 0.375, 0.375},
612 { 0., 2/r72, 2/r72, 0.,-2/r18, 0.,-2/r18,-2/r18,-2/r18,-2/r18, 0.5, 0.25, 0.5, 0.25},
613 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
614 { 0., 0., 2/r72, 2/r72,-2/r18,-2/r18,-2/r18,-2/r18,-2/r18, 0., 0.25, 0.25, 0.5, 0.5}
620 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
621 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
622 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
623 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
624 { 1/r64, 1/r64, 1/r64, 1/r64,-0.125,-0.125,-0.125,-0.125,-0.125,-0.125,27/r64,27/r64,27/r64,27/r64},
625 { 0.,-.03125,-.03125,.09375, 0.,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0.},
626 {-.03125, 0.,.09375,-.03125, 0., 0., 0.125,-0.125, 0., 0.125, 0., 0., 0.,.84375},
627 {.09375, 0.,-.03125,-.03125, 0., 0., 0.125, 0.125, 0.,-0.125, 0., 0., 0.,.84375},
628 {-.03125,-.03125, 0.,.09375,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0., 0.},
629 {-.03125, 0.,-.03125,.09375, 0., 0.,-0.125, 0.125, 0., 0.125, 0., 0., 0.,.84375},
630 { 0., 0., 2/r72, 2/r72,-2/r18,-2/r18,-2/r18,-2/r18,-2/r18, 0., 0.25, 0.25, 0.5, 0.5},
631 { 2/r72, 0., 0., 2/r72,-2/r18,-2/r18,-2/r18, 0.,-2/r18,-2/r18, 0.25, 0.5, 0.25, 0.5},
632 {-1/r72,-1/r72,-1/r72, 0.125,-2/r18,-2/r18,-2/r18, 0., 0., 0., 0.125, 0.375, 0.375, 0.375},
633 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.},
640 const unsigned int j,
641 const unsigned int k)
const
663 const unsigned int perms[2][14] =
665 {1, 2, 0, 3, 5, 6, 4, 8, 9, 7, 10, 12, 13, 11},
666 {2, 0, 1, 3, 6, 4, 5, 9, 7, 8, 10, 13, 11, 12}
696const std::vector<std::pair<unsigned char, unsigned char>> &
698 unsigned int n)
const
710const std::vector<std::pair<unsigned char, unsigned char>>
718 { {},{{0,1}},{{0,2}},{{0,3}},{{0,4}},{{4,6}},{{0,6}},{{0,7}},{{4,7}},{{6,7}},{{0,10}},{{0,11}},{{0,12}},{{0,13}} },
720 { {{0,1}}, {},{{1,2}},{{1,3}},{{1,4}},{{1,5}},{{4,5}},{{4,8}},{{1,8}},{{5,8}},{{1,10}},{{1,11}},{{1,12}},{{1,13}} },
722 { {{0,2}},{{1,2}}, {},{{2,3}},{{5,6}},{{2,5}},{{2,6}},{{6,9}},{{5,9}},{{2,9}},{{2,10}},{{2,11}},{{2,12}},{{2,13}} },
724 { {{0,3}},{{1,3}},{{2,3}}, {},{{7,8}},{{8,9}},{{7,9}},{{3,7}},{{3,8}},{{3,9}},{{3,10}},{{3,11}},{{3,12}},{{3,13}} },
726 { {{0,1}},{{1,3}},{{0,2}},{{0,3}},{{4,8}},{{6,8}},{{4,6}},{{4,7}},{{7,8}},{{6,7}},
727 {{10,11}},{{0,8},{1,7},{3,4}}, {{11,13}}, {{0,12}} },
729 { {{0,1}},{{1,2}},{{0,2}},{{1,3}},{{4,5}},{{5,6}},{{4,6}},{{4,8}},{{5,8}},{{6,8}},
730 {{0,5},{1,6},{2,4}}, {{1,13}}, {{10,12}}, {{10,11}} },
732 { {{0,2}},{{1,2}},{{2,3}},{{1,3}},{{5,6}},{{5,9}},{{6,9}},{{6,8}},{{5,8}},{{8,9}},
733 {{2,11}}, {{10,12}},{{1,9},{2,8},{3,5}}, {{12,13}} },
735 { {{0,2}},{{1,3}},{{2,3}},{{0,3}},{{6,8}},{{8,9}},{{6,9}},{{6,7}},{{7,8}},{{7,9}},
736 {{12,13}}, {{11,13}}, {{3,10}},{{0,9},{2,7},{3,6}} }
743 { {},{{0,1}},{{0,2}},{{0,3}},{{0,4}},{{4,6}},{{0,6}},{{0,7}},{{4,7}},{{6,7}},{{0,10}},{{0,11}},{{0,12}},{{0,13}} },
745 { {{0,1}}, {},{{1,2}},{{1,3}},{{1,4}},{{1,5}},{{4,5}},{{4,8}},{{1,8}},{{5,8}},{{1,10}},{{1,11}},{{1,12}},{{1,13}} },
747 { {{0,2}},{{1,2}}, {},{{2,3}},{{5,6}},{{2,5}},{{2,6}},{{6,9}},{{5,9}},{{2,9}},{{2,10}},{{2,11}},{{2,12}},{{2,13}} },
749 { {{0,3}},{{1,3}},{{2,3}}, {},{{7,8}},{{8,9}},{{7,9}},{{3,7}},{{3,8}},{{3,9}},{{3,10}},{{3,11}},{{3,12}},{{3,13}} },
751 { {{0,3}},{{1,2}},{{0,2}},{{2,3}},{{5,7}},{{5,6}},{{6,7}},{{7,9}},{{5,9}},{{6,9}},
752 {{10,13}}, {{12,13}}, {{2,11}},{{0,9},{2,7},{3,6}} },
754 { {{0,1}},{{1,2}},{{0,2}},{{0,3}},{{4,5}},{{5,6}},{{4,6}},{{4,7}},{{5,7}},{{6,7}},
755 {{0,5},{1,6},{2,4}}, {{10,11}}, {{10,13}}, {{0,12}} },
757 { {{0,1}},{{1,3}},{{1,2}},{{0,3}},{{4,8}},{{5,8}},{{4,5}},{{4,7}},{{7,8}},{{5,7}},
758 {{1,13}},{{0,8},{1,7},{3,4}}, {{11,12}}, {{10,11}} },
760 { {{0,3}},{{1,3}},{{1,2}},{{2,3}},{{7,8}},{{5,8}},{{5,7}},{{7,9}},{{8,9}},{{5,9}},
761 {{11,12}}, {{3,10}},{{1,9},{2,8},{3,5}}, {{12,13}} }
768 { {},{{0,1}},{{0,2}},{{0,3}},{{0,4}},{{4,6}},{{0,6}},{{0,7}},{{4,7}},{{6,7}},{{0,10}},{{0,11}},{{0,12}},{{0,13}} },
770 { {{0,1}}, {},{{1,2}},{{1,3}},{{1,4}},{{1,5}},{{4,5}},{{4,8}},{{1,8}},{{5,8}},{{1,10}},{{1,11}},{{1,12}},{{1,13}} },
772 { {{0,2}},{{1,2}}, {},{{2,3}},{{5,6}},{{2,5}},{{2,6}},{{6,9}},{{5,9}},{{2,9}},{{2,10}},{{2,11}},{{2,12}},{{2,13}} },
774 { {{0,3}},{{1,3}},{{2,3}}, {},{{7,8}},{{8,9}},{{7,9}},{{3,7}},{{3,8}},{{3,9}},{{3,10}},{{3,11}},{{3,12}},{{3,13}} },
776 { {{0,1}},{{1,2}},{{2,3}},{{1,3}},{{4,5}},{{5,9}},{{4,9}},{{4,8}},{{5,8}},{{8,9}},
777 {{10,12}}, {{1,13}},{{1,9},{2,8},{3,5}}, {{11,12}} },
779 { {{0,1}},{{1,2}},{{0,2}},{{2,3}},{{4,5}},{{5,6}},{{4,6}},{{4,9}},{{5,9}},{{6,9}},
780 {{0,5},{1,6},{2,4}}, {{10,12}}, {{2,11}}, {{10,13}} },
782 { {{0,3}},{{0,1}},{{0,2}},{{2,3}},{{4,7}},{{4,6}},{{6,7}},{{7,9}},{{4,9}},{{6,9}},
783 {{0,12}}, {{11,13}}, {{10,13}},{{0,9},{2,7},{3,6}} },
785 { {{0,3}},{{0,1}},{{2,3}},{{1,3}},{{4,7}},{{4,9}},{{7,9}},{{7,8}},{{4,8}},{{8,9}},
786 {{11,13}},{{0,8},{1,7},{3,4}}, {{11,12}}, {{3,10}} }
796 libmesh_assert_less (perm_num, 12);
798 const unsigned int side = perm_num % 4;
799 const unsigned int rotate = perm_num / 4;
801 for (
unsigned int i = 0; i != rotate; ++i)
857 libmesh_assert_less (s, 4);
The BoundaryInfo class contains information relevant to boundary conditions including storing faces,...
const Point & point(const unsigned int i) const
void swap2nodes(unsigned int n1, unsigned int n2)
Swaps two node_ptrs.
void swap3neighbors(unsigned int n1, unsigned int n2, unsigned int n3)
Swaps three neighbor_ptrs, "rotating" them.
Node ** _nodes
Pointers to the nodes we are connected to.
void swap2neighbors(unsigned int n1, unsigned int n2)
Swaps two neighbor_ptrs.
void swap2boundarysides(unsigned short s1, unsigned short s2, BoundaryInfo *boundary_info) const
Swaps two sides in boundary_info, if it is non-null.
void swap3nodes(unsigned int n1, unsigned int n2, unsigned int n3)
Swaps three node_ptrs, "rotating" them.
void swap2boundaryedges(unsigned short e1, unsigned short e2, BoundaryInfo *boundary_info) const
Swaps two edges in boundary_info, if it is non-null.
dof_id_type node_id(const unsigned int i) const
A Point defines a location in LIBMESH_DIM dimensional Real space.
virtual bool is_edge(const unsigned int i) const override
virtual bool is_child_on_side(const unsigned int c, const unsigned int s) const override
virtual const std::vector< std::pair< unsigned char, unsigned char > > & parent_bracketing_nodes(unsigned int c, unsigned int n) const override
static const int nodes_per_side
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
static const std::vector< std::pair< unsigned char, unsigned char > > _parent_bracketing_nodes[3][num_children][num_nodes]
Pairs of nodes that bracket child nodes when doing mesh refinement, for each of the three possible di...
static const unsigned short int _second_order_adjacent_vertices[10][3]
Matrix that tells which vertices define the location of mid-side or mid-face nodes,...
virtual void permute(unsigned int perm_num) override final
Permutes the element (by swapping node and neighbor pointers) according to the specified index.
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override
virtual void flip(BoundaryInfo *) override final
Flips the element (by swapping node and neighbor pointers) to have a mapping Jacobian of opposite sig...
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
virtual bool is_face(const unsigned int i) const override
ElemType side_type(const unsigned int s) const override final
virtual unsigned int n_nodes() const override
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
virtual Real embedding_matrix(const unsigned int i, const unsigned int j, const unsigned int k) const override
Matrix used to create the elements children.
virtual bool is_vertex(const unsigned int i) const override
static constexpr const unsigned int(& side_nodes_map)[num_sides][nodes_per_side]
static const Real _embedding_matrix[num_children][num_nodes][num_nodes]
Matrix that computes new nodal locations/solution values from current nodes/solution.
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i) override
Builds a TRI7 built coincident with face i.
static constexpr const unsigned int(& edge_nodes_map)[num_edges][nodes_per_edge]
static const int num_nodes
Geometric constants for Tet14.
static const unsigned short int _second_order_vertex_child_number[14]
Vector that names a child sharing each second order node.
virtual unsigned int n_sub_elem() const override
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
Builds a EDGE3 built coincident with edge i.
virtual Order default_order() const override
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
static const unsigned short int _second_order_vertex_child_index[14]
Vector that names the child vertex index for each second order node.
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
virtual bool has_affine_map() const override
static const int nodes_per_edge
virtual unsigned int n_second_order_adjacent_vertices(const unsigned int) const override
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
virtual unsigned int n_edges() const override final
void choose_diagonal() const
Derived classes use this function to select an initial diagonal during refinement.
virtual unsigned int n_vertices() const override final
bool is_child_on_side_helper(const unsigned int c, const unsigned int s, const unsigned int checked_nodes[][3]) const
Called by descendant classes with appropriate data to determine if child c is on side s.
virtual unsigned int n_sides() const override final
Diagonal _diagonal_selection
The currently-selected diagonal used during refinement.
static const int num_children
bool relative_fuzzy_equals(const TypeVector< T > &rhs, Real tol=TOLERANCE) const
The libMesh namespace provides an interface to certain functionality in the library.
bool relative_fuzzy_equals(const T &var1, const T2 &var2, const Real tol=TOLERANCE *TOLERANCE)
Function to check whether two variables are equal within a relative tolerance.
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
IOPackage
libMesh interfaces with several different software packages for the purposes of creating,...
ElemType
Defines an enum for geometric element types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real