20 #include "libmesh/side.h" 
   21 #include "libmesh/cell_tet10.h" 
   22 #include "libmesh/edge_edge3.h" 
   23 #include "libmesh/face_tri6.h" 
   24 #include "libmesh/enum_io_package.h" 
   25 #include "libmesh/enum_order.h" 
   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 
  178   libmesh_assert_less (side, this->
n_sides());
 
  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 (
auto n : face->node_index_range())
 
  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 
  728       4*x0 - 4*x4 - 4*x7 + 4*x8, 
 
  729       4*x0 - 4*x4 + 4*x5 - 4*x6, 
 
  738       4*x0 - 4*x6 - 4*x7 + 4*x9, 
 
  740       4*x0 - 4*x4 + 4*x5 - 4*x6  
 
  749       4*x0 - 4*x6 - 4*x7 + 4*x9, 
 
  750       4*x0 - 4*x4 - 4*x7 + 4*x8  
 
  758   static const Real w[N] =
 
  760       Real(3.6979856358852914509238091810505e-02L),
 
  761       Real(1.6027040598476613723156741868689e-02L),
 
  762       Real(2.1157006454524061178256145400082e-02L),
 
  763       Real(9.1694299214797439226823542540576e-03L),
 
  764       Real(3.6979856358852914509238091810505e-02L),
 
  765       Real(1.6027040598476613723156741868689e-02L),
 
  766       Real(2.1157006454524061178256145400082e-02L),
 
  767       Real(9.1694299214797439226823542540576e-03L)
 
  770   static const Real xi[N] =
 
  772       Real(1.2251482265544137786674043037115e-01L),
 
  773       Real(5.4415184401122528879992623629551e-01L),
 
  774       Real(1.2251482265544137786674043037115e-01L),
 
  775       Real(5.4415184401122528879992623629551e-01L),
 
  776       Real(1.2251482265544137786674043037115e-01L),
 
  777       Real(5.4415184401122528879992623629551e-01L),
 
  778       Real(1.2251482265544137786674043037115e-01L),
 
  779       Real(5.4415184401122528879992623629551e-01L)
 
  782   static const Real eta[N] =
 
  784       Real(1.3605497680284601717109468420738e-01L),
 
  785       Real(7.0679724159396903069267439165167e-02L),
 
  786       Real(5.6593316507280088053551297149570e-01L),
 
  787       Real(2.9399880063162286589079157179842e-01L),
 
  788       Real(1.3605497680284601717109468420738e-01L),
 
  789       Real(7.0679724159396903069267439165167e-02L),
 
  790       Real(5.6593316507280088053551297149570e-01L),
 
  791       Real(2.9399880063162286589079157179842e-01L)
 
  794   static const Real zeta[N] =
 
  796       Real(1.5668263733681830907933725249176e-01L),
 
  797       Real(8.1395667014670255076709592007207e-02L),
 
  798       Real(6.5838687060044409936029672711329e-02L),
 
  799       Real(3.4202793236766414300604458388142e-02L),
 
  800       Real(5.8474756320489429588282763292971e-01L),
 
  801       Real(3.0377276481470755305409673253211e-01L),
 
  802       Real(2.4571332521171333166171692542182e-01L),
 
  803       Real(1.2764656212038543100867773351792e-01L)
 
  807   for (
int q=0; q<N; ++q)
 
  811         dx_dxi_q   = dx_dxi[0]   + zeta[q]*dx_dxi[1]   + eta[q]*dx_dxi[2]   + xi[q]*dx_dxi[3],
 
  812         dx_deta_q  = dx_deta[0]  + zeta[q]*dx_deta[1]  + eta[q]*dx_deta[2]  + xi[q]*dx_deta[3],
 
  813         dx_dzeta_q = dx_dzeta[0] + zeta[q]*dx_dzeta[1] + eta[q]*dx_dzeta[2] + xi[q]*dx_dzeta[3];