84 const unsigned int s)
const 86 libmesh_assert_less (s,
n_sides());
95 libmesh_assert_less(s,
n_sides());
100 const unsigned int e)
const 102 libmesh_assert_less (e,
n_edges());
109 #ifdef LIBMESH_ENABLE_AMR 113 const unsigned int s)
const 117 const unsigned int midedge_nodes_opposite[4][3] =
132 const unsigned int )
const 134 libmesh_not_implemented();
138 #endif //LIBMESH_ENABLE_AMR 145 if (!this->
point(4).relative_fuzzy_equals
148 if (!this->
point(5).relative_fuzzy_equals
151 if (!this->
point(6).relative_fuzzy_equals
154 if (!this->
point(7).relative_fuzzy_equals
157 if (!this->
point(8).relative_fuzzy_equals
160 if (!this->
point(9).relative_fuzzy_equals
176 unsigned int side_node)
const 189 libmesh_assert_less (i, this->
n_sides());
192 return libmesh_make_unique<Side<Tri6,Tet10>>(
this,i);
196 std::unique_ptr<Elem> face = libmesh_make_unique<Tri6>();
199 for (
unsigned n=0; n<face->n_nodes(); ++n)
200 face->set_node(n) = this->
node_ptr(Tet10::side_nodes_map[i][n]);
209 const unsigned int i)
211 this->simple_build_side_ptr<Tet10>(
side, i,
TRI6);
218 libmesh_assert_less (i, this->
n_edges());
220 return libmesh_make_unique<SideEdge<Edge3,Tet10>>(
this,i);
227 std::vector<dof_id_type> & conn)
const 356 libmesh_error_msg(
"Invalid sc = " << sc);
467 libmesh_error_msg(
"Unsupported IO package " << iop);
489 std::pair<unsigned short int, unsigned short int>
492 libmesh_assert_greater_equal (n, this->
n_vertices());
493 libmesh_assert_less (n, this->
n_nodes());
494 return std::pair<unsigned short int, unsigned short int>
502 const unsigned int v)
const 504 libmesh_assert_greater_equal (n, this->
n_vertices());
505 libmesh_assert_less (n, this->
n_nodes());
506 libmesh_assert_less (v, 2);
526 #ifdef LIBMESH_ENABLE_AMR 533 { 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.},
534 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
535 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
536 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.},
537 { 0.375,-0.125, 0., 0., 0.75, 0., 0., 0., 0., 0.},
538 { 0.,-0.125,-0.125, 0., 0.5, 0.25, 0.5, 0., 0., 0.},
539 { 0.375, 0.,-0.125, 0., 0., 0., 0.75, 0., 0., 0.},
540 { 0.375, 0., 0.,-0.125, 0., 0., 0., 0.75, 0., 0.},
541 { 0.,-0.125, 0.,-0.125, 0.5, 0., 0., 0.5, 0.25, 0.},
542 { 0., 0.,-0.125,-0.125, 0., 0., 0.5, 0.5, 0., 0.25}
548 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
549 { 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.},
550 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
551 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
552 {-0.125, 0.375, 0., 0., 0.75, 0., 0., 0., 0., 0.},
553 { 0., 0.375,-0.125, 0., 0., 0.75, 0., 0., 0., 0.},
554 {-0.125, 0.,-0.125, 0., 0.5, 0.5, 0.25, 0., 0., 0.},
555 {-0.125, 0., 0.,-0.125, 0.5, 0., 0., 0.25, 0.5, 0.},
556 { 0., 0.375, 0.,-0.125, 0., 0., 0., 0., 0.75, 0.},
557 { 0., 0.,-0.125,-0.125, 0., 0.5, 0., 0., 0.5, 0.25}
563 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
564 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
565 { 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.},
566 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.},
567 {-0.125,-0.125, 0., 0., 0.25, 0.5, 0.5, 0., 0., 0.},
568 { 0.,-0.125, 0.375, 0., 0., 0.75, 0., 0., 0., 0.},
569 {-0.125, 0., 0.375, 0., 0., 0., 0.75, 0., 0., 0.},
570 {-0.125, 0., 0.,-0.125, 0., 0., 0.5, 0.25, 0., 0.5},
571 { 0.,-0.125, 0.,-0.125, 0., 0.5, 0., 0., 0.25, 0.5},
572 { 0., 0., 0.375,-0.125, 0., 0., 0., 0., 0., 0.75}
578 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.},
579 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
580 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.},
581 { 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.},
582 {-0.125,-0.125, 0., 0., 0.25, 0., 0., 0.5, 0.5, 0.},
583 { 0.,-0.125,-0.125, 0., 0., 0.25, 0., 0., 0.5, 0.5},
584 {-0.125, 0.,-0.125, 0., 0., 0., 0.25, 0.5, 0., 0.5},
585 {-0.125, 0., 0., 0.375, 0., 0., 0., 0.75, 0., 0.},
586 { 0.,-0.125, 0., 0.375, 0., 0., 0., 0., 0.75, 0.},
587 { 0., 0.,-0.125, 0.375, 0., 0., 0., 0., 0., 0.75}
593 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
594 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
595 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
596 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.},
597 {-0.125, 0., 0.,-0.125, 0.5, 0., 0., 0.25, 0.5, 0.},
598 {-0.125,-0.125,-0.125,-0.125, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
599 { 0.,-0.125,-0.125, 0., 0.5, 0.25, 0.5, 0., 0., 0.},
600 { 0.,-0.125, 0.,-0.125, 0.5, 0., 0., 0.5, 0.25, 0.},
601 {-0.125,-0.125, 0., 0., 0.25, 0., 0., 0.5, 0.5, 0.},
602 { 0., 0.,-0.125,-0.125, 0., 0., 0.5, 0.5, 0., 0.25}
608 { 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.},
609 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
610 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
611 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
612 {-0.125, 0.,-0.125, 0., 0.5, 0.5, 0.25, 0., 0., 0.},
613 {-0.125,-0.125, 0., 0., 0.25, 0.5, 0.5, 0., 0., 0.},
614 { 0.,-0.125,-0.125, 0., 0.5, 0.25, 0.5, 0., 0., 0.},
615 {-0.125, 0., 0.,-0.125, 0.5, 0., 0., 0.25, 0.5, 0.},
616 { 0., 0.,-0.125,-0.125, 0., 0.5, 0., 0., 0.5, 0.25},
617 {-0.125,-0.125,-0.125,-0.125, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25}
623 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
624 { 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.},
625 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.},
626 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
627 {-0.125,-0.125, 0., 0., 0.25, 0.5, 0.5, 0., 0., 0.},
628 { 0.,-0.125, 0.,-0.125, 0., 0.5, 0., 0., 0.25, 0.5},
629 {-0.125, 0., 0.,-0.125, 0., 0., 0.5, 0.25, 0., 0.5},
630 {-0.125,-0.125,-0.125,-0.125, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
631 { 0., 0.,-0.125,-0.125, 0., 0.5, 0., 0., 0.5, 0.25},
632 { 0.,-0.125,-0.125, 0., 0., 0.25, 0., 0., 0.5, 0.5}
638 { 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.},
639 { 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.},
640 { 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.},
641 { 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.},
642 {-0.125,-0.125,-0.125,-0.125, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25},
643 { 0.,-0.125,-0.125, 0., 0., 0.25, 0., 0., 0.5, 0.5},
644 {-0.125, 0., 0.,-0.125, 0., 0., 0.5, 0.25, 0., 0.5},
645 { 0., 0.,-0.125,-0.125, 0., 0., 0.5, 0.5, 0., 0.25},
646 {-0.125,-0.125, 0., 0., 0.25, 0., 0., 0.5, 0.5, 0.},
647 {-0.125, 0.,-0.125, 0., 0., 0., 0.25, 0.5, 0., 0.5}
654 const unsigned int j,
655 const unsigned int k)
const 675 const unsigned int perms[2][10] =
677 {1, 2, 0, 3, 5, 6, 4, 8, 9, 7},
678 {2, 0, 1, 3, 6, 4, 5, 9, 7, 8}
707 #endif // #ifdef LIBMESH_ENABLE_AMR 724 4*x0 - 4*x4 - 4*x7 + 4*x8,
725 4*x0 - 4*x4 + 4*x5 - 4*x6,
734 4*x0 - 4*x6 - 4*x7 + 4*x9,
736 4*x0 - 4*x4 + 4*x5 - 4*x6
745 4*x0 - 4*x6 - 4*x7 + 4*x9,
746 4*x0 - 4*x4 - 4*x7 + 4*x8
754 static const Real w[N] =
756 Real(3.6979856358852914509238091810505e-02L),
757 Real(1.6027040598476613723156741868689e-02L),
758 Real(2.1157006454524061178256145400082e-02L),
759 Real(9.1694299214797439226823542540576e-03L),
760 Real(3.6979856358852914509238091810505e-02L),
761 Real(1.6027040598476613723156741868689e-02L),
762 Real(2.1157006454524061178256145400082e-02L),
763 Real(9.1694299214797439226823542540576e-03L)
766 static const Real xi[N] =
768 Real(1.2251482265544137786674043037115e-01L),
769 Real(5.4415184401122528879992623629551e-01L),
770 Real(1.2251482265544137786674043037115e-01L),
771 Real(5.4415184401122528879992623629551e-01L),
772 Real(1.2251482265544137786674043037115e-01L),
773 Real(5.4415184401122528879992623629551e-01L),
774 Real(1.2251482265544137786674043037115e-01L),
775 Real(5.4415184401122528879992623629551e-01L)
778 static const Real eta[N] =
780 Real(1.3605497680284601717109468420738e-01L),
781 Real(7.0679724159396903069267439165167e-02L),
782 Real(5.6593316507280088053551297149570e-01L),
783 Real(2.9399880063162286589079157179842e-01L),
784 Real(1.3605497680284601717109468420738e-01L),
785 Real(7.0679724159396903069267439165167e-02L),
786 Real(5.6593316507280088053551297149570e-01L),
787 Real(2.9399880063162286589079157179842e-01L)
790 static const Real zeta[N] =
792 Real(1.5668263733681830907933725249176e-01L),
793 Real(8.1395667014670255076709592007207e-02L),
794 Real(6.5838687060044409936029672711329e-02L),
795 Real(3.4202793236766414300604458388142e-02L),
796 Real(5.8474756320489429588282763292971e-01L),
797 Real(3.0377276481470755305409673253211e-01L),
798 Real(2.4571332521171333166171692542182e-01L),
799 Real(1.2764656212038543100867773351792e-01L)
803 for (
int q=0; q<N; ++q)
807 dx_dxi_q = dx_dxi[0] + zeta[q]*dx_dxi[1] + eta[q]*dx_dxi[2] + xi[q]*dx_dxi[3],
808 dx_deta_q = dx_deta[0] + zeta[q]*dx_deta[1] + eta[q]*dx_deta[2] + xi[q]*dx_deta[3],
809 dx_dzeta_q = dx_dzeta[0] + zeta[q]*dx_dzeta[1] + eta[q]*dx_dzeta[2] + xi[q]*dx_dzeta[3];
virtual Order default_order() const override
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
virtual unsigned int n_nodes() const override
virtual bool has_affine_map() const override
virtual unsigned int n_sides() const override final
static const unsigned short int _second_order_adjacent_vertices[6][2]
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy) override
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
Diagonal _diagonal_selection
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
virtual unsigned int n_sub_elem() const override
virtual unsigned int n_vertices() const override final
static const int num_children
T triple_product(const TypeVector< T > &a, const TypeVector< T > &b, const TypeVector< T > &c)
static const unsigned short int _second_order_vertex_child_number[10]
virtual bool is_child_on_side(const unsigned int c, const unsigned int s) const override
virtual Real volume() const override
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
virtual unsigned int n_edges() const override final
static const int num_sides
static const int nodes_per_edge
virtual float embedding_matrix(const unsigned int i, const unsigned int j, const unsigned int k) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual bool is_vertex(const unsigned int i) const override
subdomain_id_type subdomain_id() const
const Node * node_ptr(const unsigned int i) const
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
virtual unsigned int which_node_am_i(unsigned int side, unsigned int side_node) const override
void choose_diagonal() const
virtual bool is_face(const unsigned int i) const override
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
static const unsigned short int _second_order_vertex_child_index[10]
static const float _embedding_matrix[num_children][num_nodes][num_nodes]
virtual bool is_edge(const unsigned int i) const override
static const int num_nodes
static const int num_edges
bool is_child_on_side_helper(const unsigned int c, const unsigned int s, const unsigned int checked_nodes[][3]) const
A geometric point in (x,y,z) space.
dof_id_type node_id(const unsigned int i) const
const Point & point(const unsigned int i) const
std::unique_ptr< Elem > side(const unsigned int i) const
static const int nodes_per_side