318 const unsigned int nx,
319 const unsigned int ny,
320 const unsigned int nz,
325 const bool gauss_lobatto_grid)
327 LOG_SCOPE(
"build_cube()",
"MeshTools::Generation");
336 using namespace MeshTools::Generation::Private;
371 libmesh_assert_equal_to (nx, 0);
372 libmesh_assert_equal_to (ny, 0);
373 libmesh_assert_equal_to (nz, 0);
391 libmesh_assert_not_equal_to (nx, 0);
392 libmesh_assert_equal_to (ny, 0);
393 libmesh_assert_equal_to (nz, 0);
394 libmesh_assert_less (xmin, xmax);
441 unsigned int node_id = 0;
447 for (
unsigned int i=0; i<=nx; i++)
461 for (
unsigned int i=0; i<=2*nx; i++)
474 for (
unsigned int i=0; i<=3*nx; i++)
497 for (
unsigned int i=0; i<nx; i++)
515 for (
unsigned int i=0; i<nx; i++)
533 for (
unsigned int i=0; i<nx; i++)
555 if (gauss_lobatto_grid)
557 GaussLobattoRedistributionFunction func(nx, xmin, xmax);
562 for (
Node * node :
mesh.node_ptr_range())
563 (*node)(0) = (*node)(0)*(xmax-xmin) + xmin;
590 libmesh_assert_not_equal_to (nx, 0);
591 libmesh_assert_not_equal_to (ny, 0);
592 libmesh_assert_equal_to (nz, 0);
593 libmesh_assert_less (xmin, xmax);
594 libmesh_assert_less (ymin, ymax);
677 unsigned int node_id = 0;
686 for (
unsigned int j=0; j<=ny; j++)
687 for (
unsigned int i=0; i<=nx; i++)
689 const Node *
const node =
691 static_cast<Real>(j) /
static_cast<Real>(ny),
714 for (
unsigned int j=0; j<=(2*ny); j++)
715 for (
unsigned int i=0; i<=(2*nx); i++)
717 const Node *
const node =
719 static_cast<Real>(j) /
static_cast<Real>(2 * ny),
735 for (
unsigned int j=0; j<(3*ny); j += 3)
736 for (
unsigned int i=0; i<(3*nx); i += 3)
740 static_cast<Real>(j+1) /
static_cast<Real>(3 * ny),
745 static_cast<Real>(j+2) /
static_cast<Real>(3 * ny),
769 unsigned int elem_id = 0;
777 for (
unsigned int j=0; j<ny; j++)
778 for (
unsigned int i=0; i<nx; i++)
805 for (
unsigned int j=0; j<ny; j++)
806 for (
unsigned int i=0; i<nx; i++)
842 for (
unsigned int j=0; j<(2*ny); j += 2)
843 for (
unsigned int i=0; i<(2*nx); i += 2)
877 for (
unsigned int j=0; j<(2*ny); j += 2)
878 for (
unsigned int i=0; i<(2*nx); i += 2)
924 std::vector<Node *> node_list;
927 const auto dx_tri =
Real(1) / nx;
928 const auto dy_tri =
Real(1) / (ny + 1);
929 std::unique_ptr<Elem> new_elem;
933 Node *node0, *node1, *node2;
939 node_list.push_back(node0);
940 node_list.push_back(node1);
941 node_list.push_back(node2);
945 node0 = node_list.back();
948 node_list.push_back(node1);
949 node_list.push_back(node2);
953 node0 = node_list.back();
956 node_list.push_back(node1);
957 node_list.push_back(node2);
960 new_elem = std::make_unique<C0Polygon>(3);
962 new_elem->set_node(0, node0);
963 new_elem->set_node(1, node1);
964 new_elem->set_node(2, node2);
975 unsigned int running_index = 1;
978 const auto hex_side =
979 (
Real(1) - (ny == 1 ?
981 (
Real(1) + (ny - 1) / 2.) * dy_tri)) / ny;
986 if ((j % 2 == 0) || ((i > 0) && (i < nx)))
988 Node *n0, *n1, *n2, *n3, *n4, *n5;
989 n0 = node_list[running_index++];
990 n1 = node_list[running_index++];
991 n2 = node_list[running_index];
996 node_list.push_back(n3);
999 n3 = node_list.back();
1003 node_list.push_back(n4);
1004 node_list.push_back(n5);
1006 new_elem = std::make_unique<libMesh::C0Polygon>(6);
1007 new_elem->set_node(0, n0);
1008 new_elem->set_node(1, n1);
1009 new_elem->set_node(2, n2);
1010 new_elem->set_node(3, n5);
1011 new_elem->set_node(4, n4);
1012 new_elem->set_node(5, n3);
1017 boundary_info.
add_side(elem, 5, 3);
1019 boundary_info.
add_side(elem, 2, 1);
1022 else if (i == 0 || i == nx)
1024 Node *n0, *n1, *n2, *n3;
1025 n0 = node_list[running_index++];
1026 n1 = node_list[running_index];
1031 node_list.push_back(n2);
1036 n2 = node_list.back();
1039 node_list.push_back(n3);
1041 new_elem = std::make_unique<C0Polygon>(4);
1043 new_elem->set_node(0, n0);
1044 new_elem->set_node(1, n1);
1045 new_elem->set_node(3, n2);
1046 new_elem->set_node(2, n3);
1051 boundary_info.
add_side(elem, 3, 3);
1053 boundary_info.
add_side(elem, 1, 1);
1067 const bool ny_odd = (ny % 2 == 1);
1071 Node *node0, *node1, *node2;
1072 if (i == 0 && ny_odd)
1075 node1 = node_list[running_index++];
1076 node2 = node_list[running_index];
1080 node0 = node_list[running_index++];
1081 node1 = node_list[running_index++];
1082 node2 = node_list[running_index];
1087 node0 = node_list[running_index++];
1088 node1 = node_list[running_index];
1092 new_elem = std::make_unique<C0Polygon>(3);
1094 new_elem->set_node(0, node0);
1095 new_elem->set_node(1, node1);
1096 new_elem->set_node(2, node2);
1101 boundary_info.
add_side(elem, 0, 3);
1103 boundary_info.
add_side(elem, 1, 1);
1104 boundary_info.
add_side(elem, 2, 2);
1119 if (gauss_lobatto_grid)
1121 GaussLobattoRedistributionFunction func(nx, xmin, xmax,
1127 for (
Node * node :
mesh.node_ptr_range())
1129 (*node)(0) = ((*node)(0))*(xmax-xmin) + xmin;
1130 (*node)(1) = ((*node)(1))*(ymax-ymin) + ymin;
1163 libmesh_assert_not_equal_to (nx, 0);
1164 libmesh_assert_not_equal_to (ny, 0);
1165 libmesh_assert_not_equal_to (nz, 0);
1166 libmesh_assert_less (xmin, xmax);
1167 libmesh_assert_less (ymin, ymax);
1168 libmesh_assert_less (zmin, zmax);
1219 cast_int<dof_id_type>((nx+1)*(ny+1)*(nz+1));
1226 cast_int<dof_id_type>(nx*ny*nz) : 0;
1255 4*(nx*ny + ny*nz + nx*nz) );
1281 unsigned int node_id = 0;
1289 for (
unsigned int k=0; k<=nz; k++)
1290 for (
unsigned int j=0; j<=ny; j++)
1291 for (
unsigned int i=0; i<=nx; i++)
1293 const Node *
const node =
1295 static_cast<Real>(j) /
static_cast<Real>(ny),
1296 static_cast<Real>(k) /
static_cast<Real>(nz)),
1329 for (
unsigned int k=0; k<=(2*nz); k++)
1330 for (
unsigned int j=0; j<=(2*ny); j++)
1331 for (
unsigned int i=0; i<=(2*nx); i++)
1333 const Node *
const node =
1335 static_cast<Real>(j) /
static_cast<Real>(2 * ny),
1336 static_cast<Real>(k) /
static_cast<Real>(2 * nz)),
1355 const unsigned int kmax = (type ==
PRISM20) ? nz : 2*nz;
1356 for (
unsigned int k=0; k<=kmax; k++)
1357 for (
unsigned int j=0; j<ny; j++)
1358 for (
unsigned int i=0; i<nx; i++)
1360 const Node *
const node1 =
1362 (
static_cast<Real>(j)+1/
Real(3)) /
static_cast<Real>(ny),
1363 static_cast<Real>(k) /
static_cast<Real>(kmax)),
1370 const Node *
const node2 =
1372 (
static_cast<Real>(j)+2/
Real(3)) /
static_cast<Real>(ny),
1373 static_cast<Real>(k) /
static_cast<Real>(kmax)),
1394 unsigned int elem_id = 0;
1400 for (
unsigned int k=0; k<nz; k++)
1401 for (
unsigned int j=0; j<ny; j++)
1402 for (
unsigned int i=0; i<nx; i++)
1415 boundary_info.
add_side(elem, 0, 0);
1418 boundary_info.
add_side(elem, 5, 5);
1421 boundary_info.
add_side(elem, 1, 1);
1424 boundary_info.
add_side(elem, 3, 3);
1427 boundary_info.
add_side(elem, 4, 4);
1430 boundary_info.
add_side(elem, 2, 2);
1438 const std::array<std::array<unsigned int, 4>, 6> side_nodes =
1446 for (
unsigned int k=0; k<nz; k++)
1447 for (
unsigned int j=0; j<ny; j++)
1448 for (
unsigned int i=0; i<nx; i++)
1450 std::array<Node *, 8> elem_nodes =
1460 std::vector<std::shared_ptr<Polygon>> sides(side_nodes.size());
1463 sides[s] = std::make_shared<C0Polygon>(side_nodes[s].size());
1465 sides[s]->set_node(n, elem_nodes[side_nodes[s][n]]);
1468 std::unique_ptr<Node> mid_elem_node;
1469 std::unique_ptr<Elem> new_elem =
1470 std::make_unique<C0Polyhedron>(sides, mid_elem_node);
1474 new_elem->
set_id() = elem_id++;
1478 boundary_info.
add_side(elem, 0, 0);
1481 boundary_info.
add_side(elem, 5, 5);
1484 boundary_info.
add_side(elem, 1, 1);
1487 boundary_info.
add_side(elem, 3, 3);
1490 boundary_info.
add_side(elem, 4, 4);
1493 boundary_info.
add_side(elem, 2, 2);
1503 for (
unsigned int k=0; k<nz; k++)
1504 for (
unsigned int j=0; j<ny; j++)
1505 for (
unsigned int i=0; i<nx; i++)
1518 boundary_info.
add_side(elem, 3, 4);
1521 boundary_info.
add_side(elem, 1, 1);
1524 boundary_info.
add_side(elem, 0, 0);
1527 boundary_info.
add_side(elem, 4, 5);
1540 boundary_info.
add_side(elem, 1, 2);
1543 boundary_info.
add_side(elem, 2, 3);
1546 boundary_info.
add_side(elem, 0, 0);
1549 boundary_info.
add_side(elem, 4, 5);
1569 for (
unsigned int k=0; k<(2*nz); k += 2)
1570 for (
unsigned int j=0; j<(2*ny); j += 2)
1571 for (
unsigned int i=0; i<(2*nx); i += 2)
1611 boundary_info.
add_side(elem, 0, 0);
1614 boundary_info.
add_side(elem, 5, 5);
1617 boundary_info.
add_side(elem, 1, 1);
1620 boundary_info.
add_side(elem, 3, 3);
1623 boundary_info.
add_side(elem, 4, 4);
1626 boundary_info.
add_side(elem, 2, 2);
1639 for (
unsigned int k=0; k<(2*nz); k += 2)
1640 for (
unsigned int j=0; j<(2*ny); j += 2)
1641 for (
unsigned int i=0; i<(2*nx); i += 2)
1672 const dof_id_type base_idx = (2*nx+1)*(2*ny+1)*(2*nz+1);
1679 const dof_id_type base_idx = (2*nx+1)*(2*ny+1)*(2*nz+1);
1687 boundary_info.
add_side(elem, 3, 4);
1690 boundary_info.
add_side(elem, 1, 1);
1693 boundary_info.
add_side(elem, 0, 0);
1696 boundary_info.
add_side(elem, 4, 5);
1728 const dof_id_type base_idx = (2*nx+1)*(2*ny+1)*(2*nz+1);
1735 const dof_id_type base_idx = (2*nx+1)*(2*ny+1)*(2*nz+1);
1743 boundary_info.
add_side(elem, 1, 2);
1746 boundary_info.
add_side(elem, 2, 3);
1749 boundary_info.
add_side(elem, 0, 0);
1752 boundary_info.
add_side(elem, 4, 5);
1771 if (gauss_lobatto_grid)
1773 GaussLobattoRedistributionFunction func(nx, xmin, xmax,
1780 for (
Node * node :
mesh.node_ptr_range())
1782 (*node)(0) = ((*node)(0))*(xmax-xmin) + xmin;
1783 (*node)(1) = ((*node)(1))*(ymax-ymin) + ymin;
1784 (*node)(2) = ((*node)(2))*(zmax-zmin) + zmin;
1797 if ((type ==
TET4) ||
1806 std::vector<std::unique_ptr<Elem>> new_elements;
1809 std::unique_ptr<Elem> side;
1817 for (
auto & base_hex :
mesh.element_ptr_range())
1820 Node * apex_node = base_hex->node_ptr(26);
1823 std::vector<boundary_id_type> ids;
1825 for (
auto s : base_hex->side_index_range())
1837 base_hex->build_side_ptr(side, s);
1842 for (
unsigned int sub_tet=0; sub_tet<4; ++sub_tet)
1845 auto & sub_elem = new_elements.back();
1846 sub_elem->set_node(0, side->node_ptr(sub_tet));
1847 sub_elem->set_node(1, side->node_ptr(8));
1848 sub_elem->set_node(2, side->node_ptr(sub_tet==3 ? 0 : sub_tet+1 ));
1849 sub_elem->set_node(3, apex_node);
1855 boundary_info.
add_side(sub_elem.get(), 0, b_id);
1863 auto & sub_elem = new_elements.back();
1868 sub_elem->set_node(0, side->node_ptr(0));
1869 sub_elem->set_node(1, side->node_ptr(3));
1870 sub_elem->set_node(2, side->node_ptr(2));
1871 sub_elem->set_node(3, side->node_ptr(1));
1874 sub_elem->set_node(4, apex_node);
1879 boundary_info.
add_side(sub_elem.get(), 4, b_id);
1886 for (
auto & elem :
mesh.element_ptr_range())
1888 boundary_info.
remove(elem);
1895 new_elements[i]->set_id(i);
2510 const unsigned int nz,
2514 LOG_SCOPE(
"build_extrusion()",
"MeshTools::Generation");
2516 if (!cross_section.
n_elem())
2522#ifdef LIBMESH_ENABLE_UNIQUE_ID
2526 unsigned int order = 1;
2547 if (cross_section.elements_begin() != cross_section.elements_end() &&
2548 (*cross_section.elements_begin())->default_order() ==
SECOND)
2555 std::vector<boundary_id_type> ids_to_copy;
2557 for (
const auto & node : cross_section.node_ptr_range())
2559 for (
unsigned int k=0; k != order*nz+1; ++k)
2561 const dof_id_type new_node_id = node->id() + k * orig_nodes;
2566 (*node + (extrusion_vector * k / nz / order),
2568 new_node->processor_id() = node->processor_id();
2570#ifdef LIBMESH_ENABLE_UNIQUE_ID
2576 orig_unique_ids + (k-1)*(orig_nodes + orig_elem) + node->id();
2578 new_node->set_unique_id(uid);
2581 cross_section_boundary_info.
boundary_ids(node, ids_to_copy);
2582 boundary_info.
add_node(new_node.get(), ids_to_copy);
2589 const std::set<boundary_id_type> & side_ids =
2593 0 : cast_int<boundary_id_type>(*side_ids.rbegin() + 1);
2598 cross_section.
comm().
max(next_side_id);
2600 for (
const auto & elem : cross_section.element_ptr_range())
2602 const ElemType etype = elem->type();
2607 for (
unsigned int k=0; k != nz; ++k)
2609 std::unique_ptr<Elem> new_elem;
2615 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (k * orig_nodes)));
2616 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (k * orig_nodes)));
2617 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((k+1) * orig_nodes)));
2618 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((k+1) * orig_nodes)));
2630 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (2*k * orig_nodes)));
2631 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (2*k * orig_nodes)));
2632 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+2) * orig_nodes)));
2633 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+2) * orig_nodes)));
2634 new_elem->set_node(4,
mesh.
node_ptr(elem->node_ptr(2)->id() + (2*k * orig_nodes)));
2635 new_elem->set_node(5,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+1) * orig_nodes)));
2636 new_elem->set_node(6,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+2) * orig_nodes)));
2637 new_elem->set_node(7,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+1) * orig_nodes)));
2638 new_elem->set_node(8,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+1) * orig_nodes)));
2650 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (k * orig_nodes)));
2651 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (k * orig_nodes)));
2652 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(2)->id() + (k * orig_nodes)));
2653 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((k+1) * orig_nodes)));
2654 new_elem->set_node(4,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((k+1) * orig_nodes)));
2655 new_elem->set_node(5,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((k+1) * orig_nodes)));
2669 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (2*k * orig_nodes)));
2670 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (2*k * orig_nodes)));
2671 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(2)->id() + (2*k * orig_nodes)));
2672 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+2) * orig_nodes)));
2673 new_elem->set_node(4,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+2) * orig_nodes)));
2674 new_elem->set_node(5,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+2) * orig_nodes)));
2675 new_elem->set_node(6,
mesh.
node_ptr(elem->node_ptr(3)->id() + (2*k * orig_nodes)));
2676 new_elem->set_node(7,
mesh.
node_ptr(elem->node_ptr(4)->id() + (2*k * orig_nodes)));
2677 new_elem->set_node(8,
mesh.
node_ptr(elem->node_ptr(5)->id() + (2*k * orig_nodes)));
2678 new_elem->set_node(9,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+1) * orig_nodes)));
2679 new_elem->set_node(10,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+1) * orig_nodes)));
2680 new_elem->set_node(11,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+1) * orig_nodes)));
2681 new_elem->set_node(12,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((2*k+2) * orig_nodes)));
2682 new_elem->set_node(13,
mesh.
node_ptr(elem->node_ptr(4)->id() + ((2*k+2) * orig_nodes)));
2683 new_elem->set_node(14,
mesh.
node_ptr(elem->node_ptr(5)->id() + ((2*k+2) * orig_nodes)));
2684 new_elem->set_node(15,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((2*k+1) * orig_nodes)));
2685 new_elem->set_node(16,
mesh.
node_ptr(elem->node_ptr(4)->id() + ((2*k+1) * orig_nodes)));
2686 new_elem->set_node(17,
mesh.
node_ptr(elem->node_ptr(5)->id() + ((2*k+1) * orig_nodes)));
2700 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (2*k * orig_nodes)));
2701 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (2*k * orig_nodes)));
2702 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(2)->id() + (2*k * orig_nodes)));
2703 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+2) * orig_nodes)));
2704 new_elem->set_node(4,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+2) * orig_nodes)));
2705 new_elem->set_node(5,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+2) * orig_nodes)));
2706 new_elem->set_node(6,
mesh.
node_ptr(elem->node_ptr(3)->id() + (2*k * orig_nodes)));
2707 new_elem->set_node(7,
mesh.
node_ptr(elem->node_ptr(4)->id() + (2*k * orig_nodes)));
2708 new_elem->set_node(8,
mesh.
node_ptr(elem->node_ptr(5)->id() + (2*k * orig_nodes)));
2709 new_elem->set_node(9,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+1) * orig_nodes)));
2710 new_elem->set_node(10,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+1) * orig_nodes)));
2711 new_elem->set_node(11,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+1) * orig_nodes)));
2712 new_elem->set_node(12,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((2*k+2) * orig_nodes)));
2713 new_elem->set_node(13,
mesh.
node_ptr(elem->node_ptr(4)->id() + ((2*k+2) * orig_nodes)));
2714 new_elem->set_node(14,
mesh.
node_ptr(elem->node_ptr(5)->id() + ((2*k+2) * orig_nodes)));
2715 new_elem->set_node(15,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((2*k+1) * orig_nodes)));
2716 new_elem->set_node(16,
mesh.
node_ptr(elem->node_ptr(4)->id() + ((2*k+1) * orig_nodes)));
2717 new_elem->set_node(17,
mesh.
node_ptr(elem->node_ptr(5)->id() + ((2*k+1) * orig_nodes)));
2719 new_elem->set_node(18,
mesh.
node_ptr(elem->node_ptr(6)->id() + (2*k * orig_nodes)));
2720 new_elem->set_node(19,
mesh.
node_ptr(elem->node_ptr(6)->id() + ((2*k+2) * orig_nodes)));
2721 new_elem->set_node(20,
mesh.
node_ptr(elem->node_ptr(6)->id() + ((2*k+1) * orig_nodes)));
2735 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (k * orig_nodes)));
2736 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (k * orig_nodes)));
2737 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(2)->id() + (k * orig_nodes)));
2738 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(3)->id() + (k * orig_nodes)));
2739 new_elem->set_node(4,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((k+1) * orig_nodes)));
2740 new_elem->set_node(5,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((k+1) * orig_nodes)));
2741 new_elem->set_node(6,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((k+1) * orig_nodes)));
2742 new_elem->set_node(7,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((k+1) * orig_nodes)));
2758 new_elem->set_node(0,
mesh.
node_ptr(elem->node_ptr(0)->id() + (2*k * orig_nodes)));
2759 new_elem->set_node(1,
mesh.
node_ptr(elem->node_ptr(1)->id() + (2*k * orig_nodes)));
2760 new_elem->set_node(2,
mesh.
node_ptr(elem->node_ptr(2)->id() + (2*k * orig_nodes)));
2761 new_elem->set_node(3,
mesh.
node_ptr(elem->node_ptr(3)->id() + (2*k * orig_nodes)));
2762 new_elem->set_node(4,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+2) * orig_nodes)));
2763 new_elem->set_node(5,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+2) * orig_nodes)));
2764 new_elem->set_node(6,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+2) * orig_nodes)));
2765 new_elem->set_node(7,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((2*k+2) * orig_nodes)));
2766 new_elem->set_node(8,
mesh.
node_ptr(elem->node_ptr(4)->id() + (2*k * orig_nodes)));
2767 new_elem->set_node(9,
mesh.
node_ptr(elem->node_ptr(5)->id() + (2*k * orig_nodes)));
2768 new_elem->set_node(10,
mesh.
node_ptr(elem->node_ptr(6)->id() + (2*k * orig_nodes)));
2769 new_elem->set_node(11,
mesh.
node_ptr(elem->node_ptr(7)->id() + (2*k * orig_nodes)));
2770 new_elem->set_node(12,
mesh.
node_ptr(elem->node_ptr(0)->id() + ((2*k+1) * orig_nodes)));
2771 new_elem->set_node(13,
mesh.
node_ptr(elem->node_ptr(1)->id() + ((2*k+1) * orig_nodes)));
2772 new_elem->set_node(14,
mesh.
node_ptr(elem->node_ptr(2)->id() + ((2*k+1) * orig_nodes)));
2773 new_elem->set_node(15,
mesh.
node_ptr(elem->node_ptr(3)->id() + ((2*k+1) * orig_nodes)));
2774 new_elem->set_node(16,
mesh.
node_ptr(elem->node_ptr(4)->id() + ((2*k+2) * orig_nodes)));
2775 new_elem->set_node(17,
mesh.
node_ptr(elem->node_ptr(5)->id() + ((2*k+2) * orig_nodes)));
2776 new_elem->set_node(18,
mesh.
node_ptr(elem->node_ptr(6)->id() + ((2*k+2) * orig_nodes)));
2777 new_elem->set_node(19,
mesh.
node_ptr(elem->node_ptr(7)->id() + ((2*k+2) * orig_nodes)));
2778 new_elem->set_node(20,
mesh.
node_ptr(elem->node_ptr(8)->id() + (2*k * orig_nodes)));
2779 new_elem->set_node(21,
mesh.
node_ptr(elem->node_ptr(4)->id() + ((2*k+1) * orig_nodes)));
2780 new_elem->set_node(22,
mesh.
node_ptr(elem->node_ptr(5)->id() + ((2*k+1) * orig_nodes)));
2781 new_elem->set_node(23,
mesh.
node_ptr(elem->node_ptr(6)->id() + ((2*k+1) * orig_nodes)));
2782 new_elem->set_node(24,
mesh.
node_ptr(elem->node_ptr(7)->id() + ((2*k+1) * orig_nodes)));
2783 new_elem->set_node(25,
mesh.
node_ptr(elem->node_ptr(8)->id() + ((2*k+2) * orig_nodes)));
2784 new_elem->set_node(26,
mesh.
node_ptr(elem->node_ptr(8)->id() + ((2*k+1) * orig_nodes)));
2799 libmesh_not_implemented();
2804 new_elem->set_id(elem->id() + (k * orig_elem));
2805 new_elem->processor_id() = elem->processor_id();
2807#ifdef LIBMESH_ENABLE_UNIQUE_ID
2813 orig_unique_ids + (k-1)*(orig_nodes + orig_elem) + orig_nodes + elem->id();
2815 new_elem->set_unique_id(uid);
2818 if (!elem_subdomain)
2820 new_elem->subdomain_id() = elem->subdomain_id();
2828 for (
auto s : elem->side_index_range())
2830 cross_section_boundary_info.
boundary_ids(elem, s, ids_to_copy);
2832 if (added_elem->
dim() == 3)
2839 cast_int<unsigned short>(s+1),
2848 libmesh_assert_less(s, 2);
2849 const unsigned short sidemap[2] = {3, 1};
2850 boundary_info.
add_side(added_elem, sidemap[s], ids_to_copy);
2856 boundary_info.
add_side(added_elem, 0, next_side_id);
2862 const unsigned short top_id = added_elem->
dim() == 3 ?
2863 cast_int<unsigned short>(elem->n_sides()+1) : 2;
2866 cast_int<boundary_id_type>(next_side_id+1));