20 #include "libmesh/side.h" 21 #include "libmesh/cell_prism15.h" 22 #include "libmesh/edge_edge3.h" 23 #include "libmesh/face_quad8.h" 24 #include "libmesh/face_tri6.h" 25 #include "libmesh/enum_io_package.h" 26 #include "libmesh/enum_order.h" 41 {0, 2, 1, 8, 7, 6, 99, 99},
42 {0, 1, 4, 3, 6, 10, 12, 9},
43 {1, 2, 5, 4, 7, 11, 13, 10},
44 {2, 0, 3, 5, 8, 9, 14, 11},
45 {3, 4, 5, 12, 13, 14, 99, 99}
84 const unsigned int s)
const 86 libmesh_assert_less (s,
n_sides());
92 std::vector<unsigned int>
95 libmesh_assert_less(s,
n_sides());
96 auto trim = (s > 0 && s < 4) ? 0 : 2;
100 std::vector<unsigned>
103 libmesh_assert_less(e,
n_edges());
108 const unsigned int e)
const 110 libmesh_assert_less (e,
n_edges());
156 unsigned int side_node)
const 158 libmesh_assert_less (side, this->
n_sides());
172 unsigned int edge_node)
const 174 libmesh_assert_less(edge, this->
n_edges());
185 libmesh_assert_less (i, this->
n_sides());
187 std::unique_ptr<Elem> face;
190 #ifdef LIBMESH_ENABLE_DEPRECATED 191 libmesh_deprecated();
197 face = std::make_unique<Side<Tri6,Prism15>>(
this,i);
205 face = std::make_unique<Side<Quad8,Prism15>>(
this,i);
210 libmesh_error_msg(
"Invalid side i = " << i);
214 #endif // LIBMESH_ENABLE_DEPRECATED 223 face = std::make_unique<Tri6>();
230 face = std::make_unique<Quad8>();
234 libmesh_error_msg(
"Invalid side i = " << i);
238 for (
auto n : face->node_index_range())
239 face->set_node(n) = this->
node_ptr(Prism15::side_nodes_map[i][n]);
242 #ifdef LIBMESH_ENABLE_DEPRECATED 245 face->set_parent(
nullptr);
246 face->set_interior_parent(
this);
250 #ifdef LIBMESH_ENABLE_AMR 251 face->set_p_level(this->
p_level());
259 const unsigned int i)
261 libmesh_assert_less (i, this->
n_sides());
268 if (!side.get() || side->type() !=
TRI6)
280 if (!side.get() || side->type() !=
QUAD8)
289 libmesh_error_msg(
"Invalid side i = " << i);
296 for (
auto n : side->node_index_range())
297 side->set_node(n) = this->
node_ptr(Prism15::side_nodes_map[i][n]);
304 return this->simple_build_edge_ptr<Edge3,Prism15>(i);
311 this->simple_build_edge_ptr<Prism15>(edge, i,
EDGE3);
318 std::vector<dof_id_type> & conn)
const 346 for (
unsigned i=0; i<9; ++i)
363 libmesh_error_msg(
"Unsupported IO package " << iop);
371 const unsigned int v)
const 373 libmesh_assert_greater_equal (n, this->
n_vertices());
374 libmesh_assert_less (n, this->
n_nodes());
375 libmesh_assert_less (v, 2);
381 std::pair<unsigned short int, unsigned short int>
384 libmesh_assert_greater_equal (n, this->
n_vertices());
385 libmesh_assert_less (n, this->
n_nodes());
387 return std::pair<unsigned short int, unsigned short int>
410 -x0 - x1 + x10 + 2*x12 - x3 - x4 + 2*x6 - x9,
411 3*x0/2 + x1/2 + 2*x12 - 3*x3/2 - x4/2 - 2*x6,
412 -x0/2 + x1/2 - x10 - x3/2 + x4/2 + x9,
413 2*x0 - 2*x12 + 2*x13 - 2*x14 + 2*x3 - 2*x6 + 2*x7 - 2*x8,
414 -2*x0 - 2*x12 + 2*x13 - 2*x14 + 2*x3 + 2*x6 - 2*x7 + 2*x8,
416 2*x0 + 2*x1 - 4*x12 + 2*x3 + 2*x4 - 4*x6,
417 -2*x0 - 2*x1 - 4*x12 + 2*x3 + 2*x4 + 4*x6,
424 -x0 + x11 + 2*x14 - x2 - x3 - x5 + 2*x8 - x9,
425 3*x0/2 + 2*x14 + x2/2 - 3*x3/2 - x5/2 - 2*x8,
426 -x0/2 - x11 + x2/2 - x3/2 + x5/2 + x9,
427 2*x0 - 4*x14 + 2*x2 + 2*x3 + 2*x5 - 4*x8,
428 -2*x0 - 4*x14 - 2*x2 + 2*x3 + 2*x5 + 4*x8,
430 2*x0 - 2*x12 + 2*x13 - 2*x14 + 2*x3 - 2*x6 + 2*x7 - 2*x8,
431 -2*x0 - 2*x12 + 2*x13 - 2*x14 + 2*x3 + 2*x6 - 2*x7 + 2*x8,
441 3*x0/2 + 2*x14 + x2/2 - 3*x3/2 - x5/2 - 2*x8,
442 -x0 - 2*x11 + x2 - x3 + x5 + 2*x9,
443 -x0 - 2*x14 - x2 + x3 + x5 + 2*x8,
444 3*x0/2 + x1/2 + 2*x12 - 3*x3/2 - x4/2 - 2*x6,
445 -x0 + x1 - 2*x10 - x3 + x4 + 2*x9,
446 -2*x0 - 2*x12 + 2*x13 - 2*x14 + 2*x3 + 2*x6 - 2*x7 + 2*x8,
447 -x0 - x1 - 2*x12 + x3 + x4 + 2*x6
459 w1 =
Real(1.1169079483900573284750350421656140e-01L),
460 w2 =
Real(5.4975871827660933819163162450105264e-02L),
461 a1 =
Real(4.4594849091596488631832925388305199e-01L),
462 a2 =
Real(9.1576213509770743459571463402201508e-02L);
465 static const Real w2D[N2D] = {w1, w1, w1, w2, w2, w2};
471 static const Real xi[N2D][3] =
475 { 1., 1-2*a1, (1-2*a1)*(1-2*a1)},
478 { 1., 1-2*a2, (1-2*a2)*(1-2*a2)},
482 static const Real eta[N2D][3] =
487 { 1., 1-2*a1, (1-2*a1)*(1-2*a1)},
490 { 1., 1-2*a2, (1-2*a2)*(1-2*a2)}
497 static const Real w1D[N1D] = {5./9, 8./9, 5./9};
499 const Real zeta[N1D][3] =
502 { 1., -std::sqrt(15)/5., 15./25},
504 { 1., std::sqrt(15)/5., 15./25}
508 static const int exponents[10][3] =
523 for (
int i=0; i<N2D; ++i)
524 for (
int j=0; j<N1D; ++j)
527 Point dx_dxi_q, dx_deta_q, dx_dzeta_q;
528 for (
int c=0; c<10; ++c)
531 xi[i][exponents[c][0]]*
532 eta[i][exponents[c][1]]*
533 zeta[j][exponents[c][2]];
535 dx_dxi_q += coeff * dx_dxi[c];
536 dx_deta_q += coeff * dx_deta[c];
537 dx_dzeta_q += coeff * dx_dzeta[c];
541 vol += w2D[i] * w1D[j] *
triple_product(dx_dxi_q, dx_deta_q, dx_dzeta_q);
549 #ifdef LIBMESH_ENABLE_AMR 556 { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
557 { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
558 { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
559 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
560 { -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0 },
561 { -0.25, 0, -0.25, -0.25, 0, -0.25, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0, 0.5 },
562 { 0.375, -0.125, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0, 0, 0 },
563 { 0, -0.125, -0.125, 0, 0, 0, 0.5, 0.25, 0.5, 0, 0, 0, 0, 0, 0 },
564 { 0.375, 0, -0.125, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0 },
565 { 0.375, 0, 0, -0.125, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0 },
566 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.75, 0, 0, 0.375, 0.375, 0, 0.25, 0, 0 },
567 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.75, 0.375, 0, 0.375, 0, 0, 0.25 },
568 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.75, 0.25, 0, 0.375, 0, 0 },
569 { -0.25, -0.1875, -0.1875, -0.25, -0.1875, -0.1875, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125, 0.25 },
570 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.375, 0.75, 0, 0.25, 0, 0, 0.375 }
576 { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
577 { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
578 { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
579 { -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0 },
580 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
581 { 0, -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0 },
582 { -0.125, 0.375, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0, 0, 0 },
583 { 0, 0.375, -0.125, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0, 0 },
584 { -0.125, 0, -0.125, 0, 0, 0, 0.5, 0.5, 0.25, 0, 0, 0, 0, 0, 0 },
585 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.75, 0, 0, 0.375, 0.375, 0, 0.25, 0, 0 },
586 { 0, 0.375, 0, 0, -0.125, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0 },
587 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.75, 0, 0, 0.375, 0.375, 0, 0.25, 0 },
588 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.25, 0.75, 0, 0.375, 0, 0 },
589 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.75, 0.25, 0, 0.375, 0 },
590 { -0.1875, -0.25, -0.1875, -0.1875, -0.25, -0.1875, 0.25, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125 }
596 { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
597 { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
598 { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
599 { -0.25, 0, -0.25, -0.25, 0, -0.25, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0, 0.5 },
600 { 0, -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0 },
601 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
602 { -0.125, -0.125, 0, 0, 0, 0, 0.25, 0.5, 0.5, 0, 0, 0, 0, 0, 0 },
603 { 0, -0.125, 0.375, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0, 0 },
604 { -0.125, 0, 0.375, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0, 0 },
605 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.75, 0.375, 0, 0.375, 0, 0, 0.25 },
606 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.75, 0, 0, 0.375, 0.375, 0, 0.25, 0 },
607 { 0, 0, 0.375, 0, 0, -0.125, 0, 0, 0, 0, 0, 0.75, 0, 0, 0 },
608 { -0.1875, -0.1875, -0.25, -0.1875, -0.1875, -0.25, 0.125, 0.25, 0.25, 0.25, 0.25, 0.5, 0.125, 0.25, 0.25 },
609 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.25, 0.75, 0, 0.375, 0 },
610 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.375, 0.25, 0, 0.75, 0, 0, 0.375 }
616 { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
617 { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
618 { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
619 { -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0 },
620 { 0, -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0 },
621 { -0.25, 0, -0.25, -0.25, 0, -0.25, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0, 0.5 },
622 { -0.125, 0, -0.125, 0, 0, 0, 0.5, 0.5, 0.25, 0, 0, 0, 0, 0, 0 },
623 { -0.125, -0.125, 0, 0, 0, 0, 0.25, 0.5, 0.5, 0, 0, 0, 0, 0, 0 },
624 { 0, -0.125, -0.125, 0, 0, 0, 0.5, 0.25, 0.5, 0, 0, 0, 0, 0, 0 },
625 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.75, 0, 0, 0.375, 0.375, 0, 0.25, 0, 0 },
626 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.75, 0, 0, 0.375, 0.375, 0, 0.25, 0 },
627 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.75, 0.375, 0, 0.375, 0, 0, 0.25 },
628 { -0.1875, -0.25, -0.1875, -0.1875, -0.25, -0.1875, 0.25, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125 },
629 { -0.1875, -0.1875, -0.25, -0.1875, -0.1875, -0.25, 0.125, 0.25, 0.25, 0.25, 0.25, 0.5, 0.125, 0.25, 0.25 },
630 { -0.25, -0.1875, -0.1875, -0.25, -0.1875, -0.1875, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125, 0.25 }
636 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
637 { -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0 },
638 { -0.25, 0, -0.25, -0.25, 0, -0.25, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0, 0.5 },
639 { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
640 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
641 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
642 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.75, 0.25, 0, 0.375, 0, 0 },
643 { -0.25, -0.1875, -0.1875, -0.25, -0.1875, -0.1875, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125, 0.25 },
644 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.375, 0.75, 0, 0.25, 0, 0, 0.375 },
645 { -0.125, 0, 0, 0.375, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0, 0 },
646 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.25, 0, 0, 0.375, 0.375, 0, 0.75, 0, 0 },
647 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.25, 0.375, 0, 0.375, 0, 0, 0.75 },
648 { 0, 0, 0, 0.375, -0.125, 0, 0, 0, 0, 0, 0, 0, 0.75, 0, 0 },
649 { 0, 0, 0, 0, -0.125, -0.125, 0, 0, 0, 0, 0, 0, 0.5, 0.25, 0.5 },
650 { 0, 0, 0, 0.375, 0, -0.125, 0, 0, 0, 0, 0, 0, 0, 0, 0.75 }
656 { -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0 },
657 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
658 { 0, -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0 },
659 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
660 { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
661 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
662 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.25, 0.75, 0, 0.375, 0, 0 },
663 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.75, 0.25, 0, 0.375, 0 },
664 { -0.1875, -0.25, -0.1875, -0.1875, -0.25, -0.1875, 0.25, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125 },
665 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.25, 0, 0, 0.375, 0.375, 0, 0.75, 0, 0 },
666 { 0, -0.125, 0, 0, 0.375, 0, 0, 0, 0, 0, 0.75, 0, 0, 0, 0 },
667 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.25, 0, 0, 0.375, 0.375, 0, 0.75, 0 },
668 { 0, 0, 0, -0.125, 0.375, 0, 0, 0, 0, 0, 0, 0, 0.75, 0, 0 },
669 { 0, 0, 0, 0, 0.375, -0.125, 0, 0, 0, 0, 0, 0, 0, 0.75, 0 },
670 { 0, 0, 0, -0.125, 0, -0.125, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.25 }
676 { -0.25, 0, -0.25, -0.25, 0, -0.25, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0, 0.5 },
677 { 0, -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0 },
678 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
679 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
680 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
681 { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
682 { -0.1875, -0.1875, -0.25, -0.1875, -0.1875, -0.25, 0.125, 0.25, 0.25, 0.25, 0.25, 0.5, 0.125, 0.25, 0.25 },
683 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.375, 0, 0, 0.25, 0.75, 0, 0.375, 0 },
684 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.375, 0.25, 0, 0.75, 0, 0, 0.375 },
685 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.25, 0.375, 0, 0.375, 0, 0, 0.75 },
686 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.25, 0, 0, 0.375, 0.375, 0, 0.75, 0 },
687 { 0, 0, -0.125, 0, 0, 0.375, 0, 0, 0, 0, 0, 0.75, 0, 0, 0 },
688 { 0, 0, 0, -0.125, -0.125, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.5 },
689 { 0, 0, 0, 0, -0.125, 0.375, 0, 0, 0, 0, 0, 0, 0, 0.75, 0 },
690 { 0, 0, 0, -0.125, 0, 0.375, 0, 0, 0, 0, 0, 0, 0, 0, 0.75 }
696 { -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0 },
697 { 0, -0.25, -0.25, 0, -0.25, -0.25, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0.5, 0 },
698 { -0.25, 0, -0.25, -0.25, 0, -0.25, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0, 0.5 },
699 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
700 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
701 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
702 { -0.1875, -0.25, -0.1875, -0.1875, -0.25, -0.1875, 0.25, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125 },
703 { -0.1875, -0.1875, -0.25, -0.1875, -0.1875, -0.25, 0.125, 0.25, 0.25, 0.25, 0.25, 0.5, 0.125, 0.25, 0.25 },
704 { -0.25, -0.1875, -0.1875, -0.25, -0.1875, -0.1875, 0.25, 0.125, 0.25, 0.5, 0.25, 0.25, 0.25, 0.125, 0.25 },
705 { -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.25, 0, 0, 0.375, 0.375, 0, 0.75, 0, 0 },
706 { 0, -0.1875, -0.1875, 0, -0.1875, -0.1875, 0, 0.25, 0, 0, 0.375, 0.375, 0, 0.75, 0 },
707 { -0.1875, 0, -0.1875, -0.1875, 0, -0.1875, 0, 0, 0.25, 0.375, 0, 0.375, 0, 0, 0.75 },
708 { 0, 0, 0, -0.125, 0, -0.125, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.25 },
709 { 0, 0, 0, -0.125, -0.125, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.5 },
710 { 0, 0, 0, 0, -0.125, -0.125, 0, 0, 0, 0, 0, 0, 0.5, 0.25, 0.5 }
720 libmesh_assert_less (perm_num, 6);
721 const unsigned int side = perm_num % 2;
722 const unsigned int rotate = perm_num / 2;
724 for (
unsigned int i = 0; i !=
rotate; ++i)
776 libmesh_assert_less (s, 5);
777 if (s == 0 || s == 4)
ElemType
Defines an enum for geometric element types.
void swap2boundaryedges(unsigned short e1, unsigned short e2, BoundaryInfo *boundary_info) const
Swaps two edges in boundary_info, if it is non-null.
ElemType side_type(const unsigned int s) const override final
virtual bool has_affine_map() const override
Order
defines an enum for polynomial orders.
Node ** _nodes
Pointers to the nodes we are connected to.
static const int num_edges
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy=false) override
Builds a QUAD8 or TRI6 built coincident with face i.
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 n_nodes() const override
virtual unsigned int n_sides() const override final
IOPackage
libMesh interfaces with several different software packages for the purposes of creating, reading, and writing mesh files.
virtual Order default_order() const override
void swap2boundarysides(unsigned short s1, unsigned short s2, BoundaryInfo *boundary_info) const
Swaps two sides in boundary_info, if it is non-null.
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
unsigned int p_level() const
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
The libMesh namespace provides an interface to certain functionality in the library.
static const int num_children
virtual bool is_vertex(const unsigned int i) const override
virtual bool is_edge(const unsigned int i) const override
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 short int _second_order_adjacent_vertices[9][2]
Matrix that tells which vertices define the location of mid-side (or second-order) nodes...
void swap3neighbors(unsigned int n1, unsigned int n2, unsigned int n3)
Swaps three neighbor_ptrs, "rotating" them.
virtual bool is_face(const unsigned int i) const override
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
void swap3nodes(unsigned int n1, unsigned int n2, unsigned int n3)
Swaps three node_ptrs, "rotating" them.
T triple_product(const TypeVector< T > &a, const TypeVector< T > &b, const TypeVector< T > &c)
virtual void flip(BoundaryInfo *) override final
Flips the element (by swapping node and neighbor pointers) to have a mapping Jacobian of opposite sig...
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
ElemMappingType mapping_type() const
void swap2nodes(unsigned int n1, unsigned int n2)
Swaps two node_ptrs.
virtual unsigned int n_sub_elem() const override
static const unsigned short int _second_order_vertex_child_index[18]
Vector that names the child vertex index for each second order node.
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
The BoundaryInfo class contains information relevant to boundary conditions including storing faces...
static constexpr Real affine_tol
Default tolerance to use in has_affine_map().
virtual unsigned int n_vertices() const override final
static const unsigned short int _second_order_vertex_child_number[18]
Vector that names a child sharing each second order node.
void swap2neighbors(unsigned int n1, unsigned int n2)
Swaps two neighbor_ptrs.
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
subdomain_id_type subdomain_id() const
virtual unsigned int n_edges() const override final
const Node * node_ptr(const unsigned int i) const
static const int num_sides
Geometric constants for all Prisms.
static const int num_nodes
Geometric constants for Prism15.
virtual Real volume() const
static const int nodes_per_edge
static const Real _embedding_matrix[num_children][num_nodes][num_nodes]
Matrix that computes new nodal locations/solution values from current nodes/solution.
static const int nodes_per_side
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
Builds a EDGE3 or INFEDGE2 coincident with edge i.
A Point defines a location in LIBMESH_DIM dimensional Real space.
dof_id_type node_id(const unsigned int i) const
const Point & point(const unsigned int i) const
bool relative_fuzzy_equals(const TypeVector< T > &rhs, Real tol=TOLERANCE) const
virtual Real volume() const override
A specialization for computing the volume of a Prism15.
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override