20 #include "libmesh/side.h" 
   21 #include "libmesh/cell_prism6.h" 
   22 #include "libmesh/edge_edge2.h" 
   23 #include "libmesh/face_quad4.h" 
   24 #include "libmesh/face_tri3.h" 
   25 #include "libmesh/enum_io_package.h" 
   26 #include "libmesh/enum_order.h" 
   93                              const unsigned int s)
 const 
   95   libmesh_assert_less (s, 
n_sides());
 
  101 std::vector<unsigned>
 
  104   libmesh_assert_less(s, 
n_sides());
 
  105   auto trim = (s > 0 && s < 4) ? 0 : 1;
 
  110                              const unsigned int e)
 const 
  112   libmesh_assert_less (e, 
n_edges());
 
  142   libmesh_assert_less (i, this->
n_sides());
 
  150           return libmesh_make_unique<Side<Tri3,Prism6>>(
this,i);
 
  155           return libmesh_make_unique<Side<Quad4,Prism6>>(
this,i);
 
  158           libmesh_error_msg(
"Invalid side i = " << i);
 
  165       std::unique_ptr<Elem> face;
 
  172             face = libmesh_make_unique<Tri3>();
 
  179             face = libmesh_make_unique<Quad4>();
 
  183           libmesh_error_msg(
"Invalid side i = " << i);
 
  189       for (
auto n : face->node_index_range())
 
  190         face->set_node(n) = this->
node_ptr(Prism6::side_nodes_map[i][n]);
 
  199                              const unsigned int i)
 
  208   libmesh_assert_less (i, this->
n_edges());
 
  210   return libmesh_make_unique<SideEdge<Edge2,Prism6>>(
this,i);
 
  217                           std::vector<dof_id_type> & conn)
 const 
  252       libmesh_error_msg(
"Unsupported IO package " << iop);
 
  258 #ifdef LIBMESH_ENABLE_AMR 
  265       { 1.0,  0.0,  0.0,  0.0,  0.0,  0.0}, 
 
  266       { 0.5,  0.5,  0.0,  0.0,  0.0,  0.0}, 
 
  267       { 0.5,  0.0,  0.5,  0.0,  0.0,  0.0}, 
 
  268       { 0.5,  0.0,  0.0,  0.5,  0.0,  0.0}, 
 
  269       { .25,  .25,  0.0,  .25,  .25,  0.0}, 
 
  270       { .25,  0.0,  .25,  .25,  0.0,  .25}  
 
  276       { 0.5,  0.5,  0.0,  0.0,  0.0,  0.0}, 
 
  277       { 0.0,  1.0,  0.0,  0.0,  0.0,  0.0}, 
 
  278       { 0.0,  0.5,  0.5,  0.0,  0.0,  0.0}, 
 
  279       { .25,  .25,  0.0,  .25,  .25,  0.0}, 
 
  280       { 0.0,  0.5,  0.0,  0.0,  0.5,  0.0}, 
 
  281       { 0.0,  .25,  .25,  0.0,  .25,  .25}  
 
  287       { 0.5,  0.0,  0.5,  0.0,  0.0,  0.0}, 
 
  288       { 0.0,  0.5,  0.5,  0.0,  0.0,  0.0}, 
 
  289       { 0.0,  0.0,  1.0,  0.0,  0.0,  0.0}, 
 
  290       { .25,  0.0,  .25,  .25,  0.0,  .25}, 
 
  291       { 0.0,  .25,  .25,  0.0,  .25,  .25}, 
 
  292       { 0.0,  0.0,  0.5,  0.0,  0.0,  0.5}  
 
  298       { 0.5,  0.5,  0.0,  0.0,  0.0,  0.0}, 
 
  299       { 0.0,  0.5,  0.5,  0.0,  0.0,  0.0}, 
 
  300       { 0.5,  0.0,  0.5,  0.0,  0.0,  0.0}, 
 
  301       { .25,  .25,  0.0,  .25,  .25,  0.0}, 
 
  302       { 0.0,  .25,  .25,  0.0,  .25,  .25}, 
 
  303       { .25,  0.0,  .25,  .25,  0.0,  .25}  
 
  309       { 0.5,  0.0,  0.0,  0.5,  0.0,  0.0}, 
 
  310       { .25,  .25,  0.0,  .25,  .25,  0.0}, 
 
  311       { .25,  0.0,  .25,  .25,  0.0,  .25}, 
 
  312       { 0.0,  0.0,  0.0,  1.0,  0.0,  0.0}, 
 
  313       { 0.0,  0.0,  0.0,  0.5,  0.5,  0.0}, 
 
  314       { 0.0,  0.0,  0.0,  0.5,  0.0,  0.5}  
 
  320       { .25,  .25,  0.0,  .25,  .25,  0.0}, 
 
  321       { 0.0,  0.5,  0.0,  0.0,  0.5,  0.0}, 
 
  322       { 0.0,  .25,  .25,  0.0,  .25,  .25}, 
 
  323       { 0.0,  0.0,  0.0,  0.5,  0.5,  0.0}, 
 
  324       { 0.0,  0.0,  0.0,  0.0,  1.0,  0.0}, 
 
  325       { 0.0,  0.0,  0.0,  0.0,  0.5,  0.5}  
 
  331       { .25,  0.0,  .25,  .25,  0.0,  .25}, 
 
  332       { 0.0,  .25,  .25,  0.0,  .25,  .25}, 
 
  333       { 0.0,  0.0,  0.5,  0.0,  0.0,  0.5}, 
 
  334       { 0.0,  0.0,  0.0,  0.5,  0.0,  0.5}, 
 
  335       { 0.0,  0.0,  0.0,  0.0,  0.5,  0.5}, 
 
  336       { 0.0,  0.0,  0.0,  0.0,  0.0,  1.0}  
 
  342       { .25,  .25,  0.0,  .25,  .25,  0.0}, 
 
  343       { 0.0,  .25,  .25,  0.0,  .25,  .25}, 
 
  344       { .25,  0.0,  .25,  .25,  0.0,  .25}, 
 
  345       { 0.0,  0.0,  0.0,  0.5,  0.5,  0.0}, 
 
  346       { 0.0,  0.0,  0.0,  0.0,  0.5,  0.5}, 
 
  347       { 0.0,  0.0,  0.0,  0.5,  0.0,  0.5}  
 
  367       -x0/2 + x1/2 - x3/2 + x4/2, 
 
  368       x0/2 - x1/2 - x3/2 + x4/2,  
 
  375       -x0/2 + x2/2 - x3/2 + x5/2, 
 
  376       x0/2 - x2/2 - x3/2 + x5/2,  
 
  383       x0/2 - x2/2 - x3/2 + x5/2, 
 
  384       x0/2 - x1/2 - x3/2 + x4/2  
 
  394   static const Real w2D[N2D] =
 
  396       Real(1.5902069087198858469718450103758e-01L),
 
  397       Real(9.0979309128011415302815498962418e-02L),
 
  398       Real(1.5902069087198858469718450103758e-01L),
 
  399       Real(9.0979309128011415302815498962418e-02L)
 
  402   static const Real xi[N2D] =
 
  404       Real(1.5505102572168219018027159252941e-01L),
 
  405       Real(6.4494897427831780981972840747059e-01L),
 
  406       Real(1.5505102572168219018027159252941e-01L),
 
  407       Real(6.4494897427831780981972840747059e-01L)
 
  410   static const Real eta[N2D] =
 
  412       Real(1.7855872826361642311703513337422e-01L),
 
  413       Real(7.5031110222608118177475598324603e-02L),
 
  414       Real(6.6639024601470138670269327409637e-01L),
 
  415       Real(2.8001991549907407200279599420481e-01L)
 
  423   static const Real zeta[N1D] =
 
  430   for (
int i=0; i<N2D; ++i)
 
  433       Point dx_dzeta_q = dx_dzeta[0] + eta[i]*dx_dzeta[1] + xi[i]*dx_dzeta[2];
 
  435       for (
int j=0; j<N1D; ++j)
 
  439             dx_dxi_q  = dx_dxi[0]  + zeta[j]*dx_dxi[1],
 
  440             dx_deta_q = dx_deta[0] + zeta[j]*dx_deta[1];