80 MeshTools::Generation::build_cube(mesh0, ps, ps, ps, -1, 0, 0, 1, 0, 1,
HEX8);
81 MeshTools::Generation::build_cube(mesh1, ps, ps, ps, 0, 1, 0, 1, 0, 1,
HEX8);
87 mesh0.stitch_meshes(mesh1, 2, 10,
TOLERANCE,
true,
false,
false,
false);
89 CPPUNIT_ASSERT_EQUAL(mesh0.n_elem(),
static_cast<dof_id_type>(16));
90 CPPUNIT_ASSERT_EQUAL(mesh0.n_nodes(),
static_cast<dof_id_type>(45));
96 typename std::decay<
decltype(sbi.size())>::type expected_size = 10;
97 CPPUNIT_ASSERT_EQUAL(expected_size, sbi.size());
101 CPPUNIT_ASSERT_EQUAL(expected_size, nbi.size());
105 std::set<std::string> expected_names = {{
"zero_left",
115 std::set<std::string> ss_names;
117 ss_names.insert(pr.second);
118 CPPUNIT_ASSERT(ss_names == expected_names);
120 std::set<std::string> ns_names;
122 ns_names.insert(pr.second);
123 CPPUNIT_ASSERT(ns_names == expected_names);
155 std::vector<std::string> names2 {
"bar",
"baz"};
156 mesh2.add_elem_integers(names2);
158 std::vector<std::string> names3 {
"bar",
"foo"};
159 mesh3.add_elem_integers(names3);
162 MeshTools::Generation::build_cube (mesh0, ps, ps, ps, -1, 0, 0, 1, 0, 1,
HEX27);
163 MeshTools::Generation::build_cube (mesh1, ps, ps, ps, 0, 1, 0, 1, 0, 1,
HEX27);
164 MeshTools::Generation::build_cube (mesh2, ps, ps, ps, -1, 0, -1, 0, 0, 1,
HEX27);
165 MeshTools::Generation::build_cube (mesh3, ps, ps, ps, 0, 1, -1, 0, 0, 1,
HEX27);
167 struct trivially_copyable_pair
172 mesh0.add_node_integer(
"baz");
173 unsigned int foo1e_idx = mesh1.add_elem_integer(
"foo");
174 mesh2.template add_elem_datum<trivially_copyable_pair>(
"qux");
175 unsigned int qux2n_idx = mesh2.template add_node_datum<trivially_copyable_pair>(
"qux");
176 mesh3.add_node_integers(names3);
178 for (
const auto & elem : mesh1.element_ptr_range())
179 elem->set_extra_integer(foo1e_idx, 2);
181 for (
const auto & node : mesh2.node_ptr_range())
182 node->template set_extra_datum<trivially_copyable_pair>
186 mesh0.stitch_meshes(mesh1, 2, 4,
TOLERANCE,
true,
false,
false,
false);
187 mesh2.stitch_meshes(mesh3, 2, 4,
TOLERANCE,
true,
false,
false,
false);
188 mesh0.stitch_meshes(mesh2, 1, 3,
TOLERANCE,
true,
false,
false,
false);
190 CPPUNIT_ASSERT_EQUAL(mesh0.n_elem(),
static_cast<dof_id_type>(32));
191 CPPUNIT_ASSERT_EQUAL(mesh0.n_nodes(),
static_cast<dof_id_type>(405));
192 CPPUNIT_ASSERT_EQUAL(mesh0.n_elem_integers(), 5u);
193 CPPUNIT_ASSERT_EQUAL(mesh0.n_node_integers(), 5u);
194 std::vector<std::string> all_names {
"foo",
"bar",
"baz",
"qux"};
195 std::vector<unsigned int> node_name_indices {4, 3, 0, 1};
196 for (
unsigned int i=0; i != 4; ++i)
198 CPPUNIT_ASSERT(mesh0.has_elem_integer(all_names[i]));
199 CPPUNIT_ASSERT_EQUAL(mesh0.get_elem_integer_index(all_names[i]), i);
200 CPPUNIT_ASSERT(mesh0.has_node_integer(all_names[i]));
201 CPPUNIT_ASSERT_EQUAL(mesh0.get_node_integer_index(all_names[i]), node_name_indices[i]);
204 unsigned int foo0e_idx = mesh0.get_elem_integer_index(
"foo");
205 for (
const auto & elem : mesh0.element_ptr_range())
207 CPPUNIT_ASSERT_EQUAL(elem->n_extra_integers(), 5u);
208 const Point c = elem->vertex_average();
209 if (c(0) > 0 && c(1) > 0)
210 CPPUNIT_ASSERT_EQUAL(elem->get_extra_integer(foo0e_idx),
static_cast<dof_id_type>(2));
215 unsigned int qux0n_idx = mesh0.get_node_integer_index(
"qux");
216 for (
const auto & node : mesh0.node_ptr_range())
218 CPPUNIT_ASSERT_EQUAL(node->n_extra_integers(), 5u);
219 trivially_copyable_pair datum =
220 node->template get_extra_datum<trivially_copyable_pair>(qux0n_idx);
221 if ((*node)(0) <= 0 && (*node)(1) < 0)
223 CPPUNIT_ASSERT_EQUAL(datum.first,
static_cast<dof_id_type>(3));
224 CPPUNIT_ASSERT_EQUAL(datum.second,
static_cast<dof_id_type>(4));
265 auto mesh1 = mesh0->clone();
276 unsigned int elemset_index =
282 for (
const auto & elem :
mesh.element_ptr_range())
285 elem->set_extra_integer(elemset_index, 1);
287 elem->set_extra_integer(elemset_index, 2);
296 mesh1->change_elemset_code(1, 3);
297 mesh1->change_elemset_code(2, 4);
301 mesh1->change_elemset_id(1, 100);
302 mesh1->change_elemset_id(2, 200);
315 dof_id_type n_elem_prestitch = Utility::pow<3>(ps);
318 CPPUNIT_ASSERT_EQUAL(
static_cast<dof_id_type>(2 * n_elem_prestitch), mesh0->n_elem());
322 unsigned int elemset_index = mesh0->get_elem_integer_index(
"elemset_code");
323 CPPUNIT_ASSERT_EQUAL(0u, elemset_index);
328 for (
dof_id_type elemset_code=1; elemset_code<5; ++elemset_code)
330 mesh0->get_elemsets(elemset_code, id_set_to_fill);
333 CPPUNIT_ASSERT_EQUAL(
static_cast<std::size_t
>(1), id_set_to_fill.size());
334 CPPUNIT_ASSERT(id_set_to_fill.count(code_to_type[elemset_code]));
337 bool ps_odd = ps % 2;
339 for (
const auto & elem : mesh0->element_ptr_range())
341 dof_id_type elemset_code = elem->get_extra_integer(elemset_index);
342 bool elem_id_odd = elem->id() % 2;
348 if (elem->id() < n_elem_prestitch)
351 CPPUNIT_ASSERT_EQUAL(
static_cast<dof_id_type>(1), elemset_code);
353 CPPUNIT_ASSERT_EQUAL(
static_cast<dof_id_type>(2), elemset_code);
384 MeshTools::Generation::build_cube(mesh0, ps, ps, ps, -1, 0, 0, 1, 0, 1,
HEX8);
385 MeshTools::Generation::build_cube(mesh1, ps, ps, ps, 0, 1, 0, 1, 0, 1,
HEX8);
388 renameAndShift(mesh0, 0,
"zero_");
389 renameAndShift(mesh1, 6,
"one_");
392 for (
const auto & elem : mesh0.element_ptr_range())
393 elem->subdomain_id() = 123;
395 for (
const auto & elem : mesh1.element_ptr_range())
396 elem->subdomain_id() = 456;
399 mesh0.set_subdomain_name(123,
"OneTwoThree");
402 mesh0.stitch_meshes(mesh1, 2, 10,
TOLERANCE,
true,
false,
false,
405 CPPUNIT_ASSERT_EQUAL(mesh0.n_elem(),
static_cast<dof_id_type>(16));
406 CPPUNIT_ASSERT_EQUAL(mesh0.n_nodes(),
static_cast<dof_id_type>(45));
409 for (
const auto & elem : mesh0.element_ptr_range())
421 MeshTools::Generation::build_cube(mesh0, ps, ps, ps, -1, 0, 0, 1, 0, 1,
HEX8);
422 MeshTools::Generation::build_cube(mesh1, ps, ps, ps, 0, 1, 0, 1, 0, 1,
HEX8);
425 renameAndShift(mesh0, 0,
"zero_");
426 renameAndShift(mesh1, 6,
"one_");
429 for (
const auto & elem : mesh0.element_ptr_range())
430 elem->subdomain_id() = 123;
432 for (
const auto & elem : mesh1.element_ptr_range())
433 elem->subdomain_id() = 123;
438#ifdef LIBMESH_ENABLE_EXCEPTIONS
439 bool threw_error =
false;
442 mesh0.stitch_meshes(mesh1, 2, 10,
TOLERANCE,
true,
false,
false,
447 std::regex msg_regex(
"safely stitch with a mesh");
448 CPPUNIT_ASSERT(std::regex_search(e.what(), msg_regex));
452 CPPUNIT_ASSERT(threw_error);