1 #include <libmesh/elem.h>
2 #include <libmesh/mesh_generation.h>
3 #include <libmesh/node.h>
4 #include <libmesh/replicated_mesh.h>
18 CPPUNIT_TEST( testMeshStitch );
19 #endif // LIBMESH_DIM > 2
21 CPPUNIT_TEST_SUITE_END();
45 std::vector<std::string> names2 {
"bar",
"baz"};
46 mesh2.add_elem_integers(names2);
48 std::vector<std::string> names3 {
"bar",
"foo"};
52 MeshTools::Generation::build_cube (mesh0, ps, ps, ps, -1, 0, 0, 1, 0, 1,
HEX27);
53 MeshTools::Generation::build_cube (mesh1, ps, ps, ps, 0, 1, 0, 1, 0, 1,
HEX27);
54 MeshTools::Generation::build_cube (mesh2, ps, ps, ps, -1, 0, -1, 0, 0, 1,
HEX27);
55 MeshTools::Generation::build_cube (mesh3, ps, ps, ps, 0, 1, -1, 0, 0, 1,
HEX27);
57 struct trivially_copyable_pair
62 mesh0.add_node_integer(
"baz");
63 unsigned int foo1e_idx = mesh1.add_elem_integer(
"foo");
64 mesh2.add_elem_datum<trivially_copyable_pair>(
"qux");
65 unsigned int qux2n_idx = mesh2.add_node_datum<trivially_copyable_pair>(
"qux");
68 for (
const auto & elem : mesh1.element_ptr_range())
69 elem->set_extra_integer(foo1e_idx, 2);
71 for (
const auto & node : mesh2.node_ptr_range())
72 node->set_extra_datum<trivially_copyable_pair>
76 mesh0.stitch_meshes(mesh1, 2, 4,
TOLERANCE,
true,
true,
false,
false);
77 mesh2.stitch_meshes(mesh3, 2, 4,
TOLERANCE,
true,
true,
false,
false);
78 mesh0.stitch_meshes(mesh2, 1, 3,
TOLERANCE,
true,
true,
false,
false);
80 CPPUNIT_ASSERT_EQUAL(mesh0.n_elem(),
dof_id_type(32));
81 CPPUNIT_ASSERT_EQUAL(mesh0.n_nodes(),
dof_id_type(405));
82 CPPUNIT_ASSERT_EQUAL(mesh0.n_elem_integers(), 5u);
83 CPPUNIT_ASSERT_EQUAL(mesh0.n_node_integers(), 5u);
84 std::vector<std::string> all_names {
"foo",
"bar",
"baz",
"qux"};
85 std::vector<unsigned int> node_name_indices {4, 3, 0, 1};
86 for (
unsigned int i=0; i != 4; ++i)
88 CPPUNIT_ASSERT(mesh0.has_elem_integer(all_names[i]));
89 CPPUNIT_ASSERT_EQUAL(mesh0.get_elem_integer_index(all_names[i]), i);
90 CPPUNIT_ASSERT(mesh0.has_node_integer(all_names[i]));
91 CPPUNIT_ASSERT_EQUAL(mesh0.get_node_integer_index(all_names[i]), node_name_indices[i]);
94 unsigned int foo0e_idx = mesh0.get_elem_integer_index(
"foo");
95 for (
const auto & elem : mesh0.element_ptr_range())
97 CPPUNIT_ASSERT_EQUAL(elem->n_extra_integers(), 5u);
98 const Point c = elem->centroid();
99 if (c(0) > 0 && c(1) > 0)
100 CPPUNIT_ASSERT_EQUAL(elem->get_extra_integer(foo0e_idx),
dof_id_type(2));
105 unsigned int qux0n_idx = mesh0.get_node_integer_index(
"qux");
106 for (
const auto & node : mesh0.node_ptr_range())
108 CPPUNIT_ASSERT_EQUAL(node->n_extra_integers(), 5u);
109 trivially_copyable_pair datum =
110 node->get_extra_datum<trivially_copyable_pair>(qux0n_idx);
111 if ((*node)(0) <= 0 && (*node)(1) < 0)
114 CPPUNIT_ASSERT_EQUAL(datum.second,
dof_id_type(4));