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));