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
47 {0, 2, 1, 6, 5, 4, 10},
48 {0, 1, 3, 4, 8, 7, 11},
49 {1, 2, 3, 5, 9, 8, 12},
50 {2, 0, 3, 6, 7, 9, 13}
88 const unsigned int s)
const
90 libmesh_assert_less (s,
n_sides());
99 libmesh_assert_less(s,
n_sides());
106 libmesh_assert_less(e,
n_edges());
111 const unsigned int e)
const
113 libmesh_assert_less (e,
n_edges());
120#ifdef LIBMESH_ENABLE_AMR
124 const unsigned int s)
const
128 const unsigned int midedge_nodes_opposite[4][3] =
143 const unsigned int )
const
145 libmesh_not_implemented();
158 ((this->point(4) - this->point(0))*2))
162 ((this->point(5) - this->point(1))*2))
166 ((this->point(6) - this->point(0))*2))
170 ((this->point(7) - this->point(0))*2))
174 ((this->point(8) - this->point(1))*2))
178 ((this->point(9) - this->point(2))*2))
208 unsigned int side_node)
const
210 libmesh_assert_less (side, this->
n_sides());
219 unsigned int edge_node)
const
221 libmesh_assert_less (edge, this->
n_edges());
231 return this->simple_build_side_ptr<Tri7, Tet14>(i);
237 const unsigned int i)
239 this->simple_build_side_ptr<Tet14>(side, i,
TRI7);
246 return this->simple_build_edge_ptr<Edge3,Tet14>(i);
253 this->simple_build_edge_ptr<Tet14>(edge, i,
EDGE3);
260 std::vector<dof_id_type> & conn)
const
389 libmesh_error_msg(
"Invalid sc = " << sc);
398 libmesh_experimental();
406 libmesh_error_msg(
"Unsupported IO package " << iop);
431 libmesh_error_msg(
"Invalid n = " << n);
456std::pair<unsigned short int, unsigned short int>
459 libmesh_assert_greater_equal (n, this->
n_vertices());
460 libmesh_assert_less (n, this->
n_nodes());
461 return std::pair<unsigned short int, unsigned short int>
469 const unsigned int v)
const
471 libmesh_assert_greater_equal (n, this->
n_vertices());
472 libmesh_assert_less (n, this->
n_nodes());
473 libmesh_assert_less (v, 3);
498#ifdef LIBMESH_ENABLE_AMR
505 { 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
506 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
507 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
508 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
509 { 0.375,-0.125, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0., 0.},
510 {.09375,-.03125,-.03125, 0., 0.125,-0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
511 { 0.375, 0.,-0.125, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0.},
512 { 0.375, 0., 0.,-0.125, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0.},
513 {.09375,-.03125, 0.,-.03125,0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0., 0.},
514 {.09375, 0.,-.03125,-.03125, 0., 0., 0.125, 0.125, 0.,-0.125, 0., 0., 0.,.84375},
515 { 5/r18,-1/r18,-1/r18, 0., 4/r18,-2/r18, 4/r18, 0., 0., 0., 0.5, 0., 0., 0.},
516 { 5/r18,-1/r18, 0.,-1/r18, 4/r18, 0., 0., 4/r18,-2/r18, 0., 0., 0.5, 0., 0.},
517 { 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},
518 { 5/r18, 0.,-1/r18,-1/r18, 0., 0., 4/r18, 4/r18, 0.,-2/r18, 0., 0., 0., 0.5}
524 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
525 { 0., 1., 0., 0., 0., 0., 0., 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., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
528 {-0.125, 0.375, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0., 0.},
529 { 0., 0.375,-0.125, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0.},
530 {-.03125,.09375,-.03125, 0., 0.125, 0.125,-0.125, 0., 0., 0.,.84375, 0., 0., 0.},
531 {-.03125,.09375, 0.,-.03125,0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0., 0.},
532 { 0., 0.375, 0.,-0.125, 0., 0., 0., 0., 0.75, 0., 0., 0., 0., 0.},
533 { 0.,.09375,-0.03125,-0.03125,0., 0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0.},
534 {-1/r18, 5/r18,-1/r18, 0., 4/r18, 4/r18,-2/r18, 0., 0., 0., 0.5, 0., 0., 0.},
535 {-1/r18, 5/r18, 0.,-1/r18, 4/r18, 0., 0.,-2/r18, 4/r18, 0., 0., 0.5, 0., 0.},
536 { 0., 5/r18,-1/r18,-1/r18, 0., 4/r18, 0., 0., 4/r18,-2/r18, 0., 0., 0.5, 0.},
537 {-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}
543 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
544 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
545 { 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
546 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
547 {-.03125,-.03125,.09375, 0.,-0.125, 0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
548 { 0.,-0.125, 0.375, 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0., 0.},
549 {-0.125, 0., 0.375, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0., 0.},
550 {-.03125, 0.,.09375,-.03125, 0., 0., 0.125,-0.125, 0., 0.125, 0., 0., 0.,.84375},
551 { 0.,-.03125,.09375,-.03125, 0., 0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0.},
552 { 0., 0., 0.375,-0.125, 0., 0., 0., 0., 0., 0.75, 0., 0., 0., 0.},
553 {-1/r18,-1/r18, 5/r18, 0.,-2/r18, 4/r18, 4/r18, 0., 0., 0., 0.5, 0., 0., 0.},
554 {-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},
555 { 0.,-1/r18, 5/r18,-1/r18, 0., 4/r18, 0., 0.,-2/r18, 4/r18, 0., 0., 0.5, 0.},
556 {-1/r18, 0., 5/r18,-1/r18, 0., 0., 4/r18,-2/r18, 0., 4/r18, 0., 0., 0., 0.5}
562 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
563 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
564 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
565 { 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
566 {-.03125,-.03125, 0.,.09375,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0., 0.},
567 { 0.,-.03125,-.03125,.09375, 0.,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0.},
568 {-.03125, 0.,-.03125,.09375, 0., 0.,-0.125, 0.125, 0., 0.125, 0., 0., 0.,.84375},
569 {-0.125, 0., 0., 0.375, 0., 0., 0., 0.75, 0., 0., 0., 0., 0., 0.},
570 { 0.,-0.125, 0., 0.375, 0., 0., 0., 0., 0.75, 0., 0., 0., 0., 0.},
571 { 0., 0.,-0.125, 0.375, 0., 0., 0., 0., 0., 0.75, 0., 0., 0., 0.},
572 {-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},
573 {-1/r18,-1/r18, 0., 5/r18,-2/r18, 0., 0., 4/r18, 4/r18, 0., 0., 0.5, 0., 0.},
574 { 0.,-1/r18,-1/r18, 5/r18, 0.,-2/r18, 0., 0., 4/r18, 4/r18, 0., 0., 0.5, 0.},
575 {-1/r18, 0.,-1/r18, 5/r18, 0., 0.,-2/r18, 4/r18, 0., 4/r18, 0., 0., 0., 0.5}
581 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
582 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
583 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
584 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
585 {-.03125,.09375, 0.,-.03125,0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0., 0.},
586 { 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},
587 {.09375,-.03125,-.03125, 0., 0.125,-0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
588 {.09375,-.03125, 0.,-.03125,0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0., 0.},
589 {-.03125,-.03125, 0.,.09375,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0., 0.},
590 {.09375, 0.,-.03125,-.03125, 0., 0., 0.125, 0.125, 0.,-0.125, 0., 0., 0.,.84375},
591 { 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},
592 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.},
593 { 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},
594 { 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}
600 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
601 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
602 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
603 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
604 {-.03125,.09375,-.03125, 0., 0.125, 0.125,-0.125, 0., 0., 0.,.84375, 0., 0., 0.},
605 {-.03125,-.03125,.09375, 0.,-0.125, 0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
606 {.09375,-.03125,-.03125, 0., 0.125,-0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
607 {-.03125,.09375, 0.,-.03125,0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0., 0.},
608 { 0.,.09375,-.03125,-.03125, 0., 0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0.},
609 { 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},
610 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
611 {-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},
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 { 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}
619 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
620 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
621 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
622 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
623 {-.03125,-.03125,.09375, 0.,-0.125, 0.125, 0.125, 0., 0., 0.,.84375, 0., 0., 0.},
624 { 0.,-.03125,.09375,-.03125, 0., 0.125, 0., 0.,-0.125, 0.125, 0., 0.,.84375, 0.},
625 {-.03125, 0.,.09375,-.03125, 0., 0., 0.125,-0.125, 0., 0.125, 0., 0., 0.,.84375},
626 { 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},
627 { 0.,.09375,-.03125,-.03125, 0., 0.125, 0., 0., 0.125,-0.125, 0., 0.,.84375, 0.},
628 { 0.,-.03125,-.03125,.09375, 0.,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0.},
629 {-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},
630 { 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},
631 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
632 { 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}
638 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
639 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
640 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
641 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
642 { 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},
643 { 0.,-.03125,-.03125,.09375, 0.,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0.},
644 {-.03125, 0.,.09375,-.03125, 0., 0., 0.125,-0.125, 0., 0.125, 0., 0., 0.,.84375},
645 {.09375, 0.,-.03125,-.03125, 0., 0., 0.125, 0.125, 0.,-0.125, 0., 0., 0.,.84375},
646 {-.03125,-.03125, 0.,.09375,-0.125, 0., 0., 0.125, 0.125, 0., 0.,.84375, 0., 0.},
647 {-.03125, 0.,-.03125,.09375, 0., 0.,-0.125, 0.125, 0., 0.125, 0., 0., 0.,.84375},
648 { 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},
649 { 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},
650 {-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},
651 { 0., 0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.},
658 const unsigned int j,
659 const unsigned int k)
const
681 const unsigned int perms[2][14] =
683 {1, 2, 0, 3, 5, 6, 4, 8, 9, 7, 10, 12, 13, 11},
684 {2, 0, 1, 3, 6, 4, 5, 9, 7, 8, 10, 13, 11, 12}
714const std::vector<std::pair<unsigned char, unsigned char>> &
716 unsigned int n)
const
728const std::vector<std::pair<unsigned char, unsigned char>>
736 { {},{{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}} },
738 { {{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}} },
740 { {{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}} },
742 { {{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}} },
744 { {{0,1}},{{1,3}},{{0,2}},{{0,3}},{{4,8}},{{6,8}},{{4,6}},{{4,7}},{{7,8}},{{6,7}},
745 {{10,11}},{{0,8},{1,7},{3,4}}, {{11,13}}, {{0,12}} },
747 { {{0,1}},{{1,2}},{{0,2}},{{1,3}},{{4,5}},{{5,6}},{{4,6}},{{4,8}},{{5,8}},{{6,8}},
748 {{0,5},{1,6},{2,4}}, {{1,13}}, {{10,12}}, {{10,11}} },
750 { {{0,2}},{{1,2}},{{2,3}},{{1,3}},{{5,6}},{{5,9}},{{6,9}},{{6,8}},{{5,8}},{{8,9}},
751 {{2,11}}, {{10,12}},{{1,9},{2,8},{3,5}}, {{12,13}} },
753 { {{0,2}},{{1,3}},{{2,3}},{{0,3}},{{6,8}},{{8,9}},{{6,9}},{{6,7}},{{7,8}},{{7,9}},
754 {{12,13}}, {{11,13}}, {{3,10}},{{0,9},{2,7},{3,6}} }
761 { {},{{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}} },
763 { {{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}} },
765 { {{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}} },
767 { {{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}} },
769 { {{0,3}},{{1,2}},{{0,2}},{{2,3}},{{5,7}},{{5,6}},{{6,7}},{{7,9}},{{5,9}},{{6,9}},
770 {{10,13}}, {{12,13}}, {{2,11}},{{0,9},{2,7},{3,6}} },
772 { {{0,1}},{{1,2}},{{0,2}},{{0,3}},{{4,5}},{{5,6}},{{4,6}},{{4,7}},{{5,7}},{{6,7}},
773 {{0,5},{1,6},{2,4}}, {{10,11}}, {{10,13}}, {{0,12}} },
775 { {{0,1}},{{1,3}},{{1,2}},{{0,3}},{{4,8}},{{5,8}},{{4,5}},{{4,7}},{{7,8}},{{5,7}},
776 {{1,13}},{{0,8},{1,7},{3,4}}, {{11,12}}, {{10,11}} },
778 { {{0,3}},{{1,3}},{{1,2}},{{2,3}},{{7,8}},{{5,8}},{{5,7}},{{7,9}},{{8,9}},{{5,9}},
779 {{11,12}}, {{3,10}},{{1,9},{2,8},{3,5}}, {{12,13}} }
786 { {},{{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}} },
788 { {{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}} },
790 { {{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}} },
792 { {{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}} },
794 { {{0,1}},{{1,2}},{{2,3}},{{1,3}},{{4,5}},{{5,9}},{{4,9}},{{4,8}},{{5,8}},{{8,9}},
795 {{10,12}}, {{1,13}},{{1,9},{2,8},{3,5}}, {{11,12}} },
797 { {{0,1}},{{1,2}},{{0,2}},{{2,3}},{{4,5}},{{5,6}},{{4,6}},{{4,9}},{{5,9}},{{6,9}},
798 {{0,5},{1,6},{2,4}}, {{10,12}}, {{2,11}}, {{10,13}} },
800 { {{0,3}},{{0,1}},{{0,2}},{{2,3}},{{4,7}},{{4,6}},{{6,7}},{{7,9}},{{4,9}},{{6,9}},
801 {{0,12}}, {{11,13}}, {{10,13}},{{0,9},{2,7},{3,6}} },
803 { {{0,3}},{{0,1}},{{2,3}},{{1,3}},{{4,7}},{{4,9}},{{7,9}},{{7,8}},{{4,8}},{{8,9}},
804 {{11,13}},{{0,8},{1,7},{3,4}}, {{11,12}}, {{3,10}} }
814 libmesh_assert_less (perm_num, 12);
816 const unsigned int side = perm_num % 4;
817 const unsigned int rotate = perm_num / 4;
819 for (
unsigned int i = 0; i != rotate; ++i)
875 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.
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
This maps the node of the edge to element node numbers.
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
This maps the node of the side to element node numbers.
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 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 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
static const int num_edges
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
static const int num_sides
Geometric constants for all Tets.
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