diff --git a/include/mesh/mesh_generation.h b/include/mesh/mesh_generation.h index 7b8a8ca57e..804f2ac57e 100644 --- a/include/mesh/mesh_generation.h +++ b/include/mesh/mesh_generation.h @@ -114,8 +114,8 @@ void build_square (UnstructuredMesh & mesh, * Meshes a spherical or mapped-spherical domain. */ void build_sphere (UnstructuredMesh & mesh, - const Real rad=1, - const unsigned int nr=2, + const Real radius=1, + const unsigned int n_refinements=2, const ElemType type=INVALID_ELEM, const unsigned int n_smooth=2, const bool flat=true); diff --git a/include/mesh/mesh_modification.h b/include/mesh/mesh_modification.h index 1acaa0db43..6052cdfe9f 100644 --- a/include/mesh/mesh_modification.h +++ b/include/mesh/mesh_modification.h @@ -141,6 +141,14 @@ void scale (MeshBase & mesh, */ void all_tri (MeshBase & mesh); +/** + * Converts all element geometric mappings from the default Lagrange + * to the more flexible Rational-Bezier-Bernstein. When elements have + * curved edges and/or faces, node weights are chosen so that the new + * edges interpolate the old edge node locations with a circular arc. + */ +void all_rbb (MeshBase & mesh); + /** * Smooth the mesh with a simple Laplace smoothing algorithm. The mesh is * smoothed \p n_iterations times. If the parameter \p power is 0, each diff --git a/src/geom/edge_edge3.C b/src/geom/edge_edge3.C index 8683d4baca..20cba6c0ec 100644 --- a/src/geom/edge_edge3.C +++ b/src/geom/edge_edge3.C @@ -223,6 +223,10 @@ Edge3::second_order_child_vertex (const unsigned int) const Real Edge3::volume () const { + // This specialization is good for Lagrange mappings only + if (this->mapping_type() != LAGRANGE_MAP) + return this->Elem::volume(); + // Finding the (exact) length of a general quadratic element // is a surprisingly complicated formula. Point A = this->point(0) + this->point(1) - 2*this->point(2); diff --git a/src/geom/edge_edge4.C b/src/geom/edge_edge4.C index 1f391401fc..3820277893 100644 --- a/src/geom/edge_edge4.C +++ b/src/geom/edge_edge4.C @@ -298,6 +298,10 @@ dof_id_type Edge4::key () const Real Edge4::volume () const { + // This specialization is good for Lagrange mappings only + if (this->mapping_type() != LAGRANGE_MAP) + return this->Elem::volume(); + // Make copies of our points. It makes the subsequent calculations a bit // shorter and avoids dereferencing the same pointer multiple times. Point diff --git a/src/mesh/mesh_modification.C b/src/mesh/mesh_modification.C index 5c27728245..cdd7413b06 100644 --- a/src/mesh/mesh_modification.C +++ b/src/mesh/mesh_modification.C @@ -1452,6 +1452,325 @@ void MeshTools::Modification::all_tri (MeshBase & mesh) } + +void MeshTools::Modification::all_rbb (MeshBase & mesh) +{ + // By default, use 1.0 as the weight on every RATIONAL_BERNSTEIN + // mapped node + const Real default_weight = 1.0; + + const auto weight_index = + (mesh.add_node_datum("rational_weight", true, + &default_weight)); + + mesh.set_default_mapping_type(RATIONAL_BERNSTEIN_MAP); + mesh.set_default_mapping_data(weight_index); + + // Out of loop to reduce heap allocations + std::unique_ptr edge_ptr, face_ptr; + + // Utility for checking extrusion directions later + auto almost_equal = [](Real a, Real b) { + return (std::abs(a-b) < TOLERANCE*TOLERANCE); + }; + + for (auto & elem : mesh.element_ptr_range()) + { + if (elem->level()) + libmesh_not_implemented_msg + ("all_rbb() currently only supports flat meshes with no refinement levels"); + +#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS + if (elem->infinite()) + libmesh_not_implemented_msg + ("all_rbb() currently only supports finite geometric elements"); +#endif + + elem->set_mapping_type(RATIONAL_BERNSTEIN_MAP); + elem->set_mapping_data(weight_index); + + // Nothing to do unless we have curves to correct + if (elem->default_order() == FIRST) + continue; + + // Modify the center node of an "edge" - possibly an actual + // edge, possibly a center node between edge points - to fit a + // circular curve. + auto make_edge_rbb = [default_weight, weight_index] + (const Node & n0, const Node & n1, Node & n_center) + { + // Skip edges we've already modified; the center node for + // these is no longer at the curve point we wish to + // interpolate, it should already be at the control point that + // accomplishes the interpolation. + const Real old_weight = n_center.get_extra_datum(weight_index); + if (old_weight != default_weight) + return; + + const Point & p0 = n0; + const Point & p1 = n1; + Point & p2 = n_center; + const Point midchord = (p0+p1)/2; + const Real edge_chord_len_sq = (p1-p0).norm_sq(); + + const Real w0 = n0.get_extra_datum(weight_index); + const Real w1 = n1.get_extra_datum(weight_index); + + // If we see edges that are unevenly parameterized, not just + // curved, I'm not sure what we want to do with those. + // Presumably we want to maintain a somewhat similar uneven + // parameterization, for whatever boundary layer grading the + // mesh user wanted? For now just scream and die. + const Point e02 = p2-p0, + e21 = p1-p2; + const Real chord_02_len_sq = e02.norm_sq(), + chord_21_len_sq = e21.norm_sq(); + if (std::abs(chord_02_len_sq-chord_21_len_sq) > edge_chord_len_sq * TOLERANCE*TOLERANCE) + libmesh_not_implemented_msg + ("all_rbb() currently doesn't support unevenly parameterized edges"); + + // For straight edges we'll just want the middle node weight + // to match the endpoint nodes + const Point displacement_vec = p2-midchord; + if (displacement_vec.norm_sq() < + edge_chord_len_sq*TOLERANCE*TOLERANCE*TOLERANCE) + { + if (std::abs(w0 - w1) > TOLERANCE*TOLERANCE) + libmesh_not_implemented(); + + n_center.set_extra_datum(weight_index, w0); + + return; + } + + // Circularize the curve on curved edges + // + // First find the cosine of phi, the angle between our two + // subchords (turning from the direction of one to the + // direction of the other; this is the supplementary angle to + // the angle at the midpoint). This is the same as half of + // the angle of our circular arc, which nicely enough is also + // the angle we take cos and sec of in NURBS formulae + const Real cos_phi = (e02*e21)/std::sqrt(chord_02_len_sq*chord_21_len_sq); + n_center.set_extra_datum(weight_index, cos_phi); + + // There's a way to do really large arcs using negative + // weights, but we're going to get lousy approximation quality + // from isoparametric elements if we go too low, as well as + // bad numerics here, so let's just disallow it. + if (cos_phi < 0.5) + libmesh_not_implemented_msg + ("all_rbb() is not recommended for extremely sharp curves on one edge"); + + // Next find the radius of the circle our arc is from + const Real r = std::sqrt(edge_chord_len_sq)/2/std::sqrt(1-cos_phi*cos_phi); + + // And perturb our center node so that it becomes a control + // point for that arc rather than a midpoint of that arc. + const Real R = r/cos_phi; + + p2 += displacement_vec.unit() * (R-r); + }; + + auto make_face_rbb = [weight_index, almost_equal] (Elem & face) + { + // Prisms and pyramids may need to skip some faces while + // adjusting others + if (face.type() == TRI6) + return; + + if (face.type() != QUAD9) + libmesh_not_implemented_msg + ("all_rbb() currently only supports mid-face nodes on Quad9 faces"); + + Real w[9]; + for (unsigned int i : make_range(9u)) + w[i] = face.node_ref(i).get_extra_datum(weight_index); + + // For now we just support 2.5D (extrusions of 2D) meshes. + // Let's look for an extrusion direction. + int extrude_dir = -1; + if (almost_equal(w[0], w[1]) && + almost_equal(w[0], w[4]) && + almost_equal(w[2], w[3]) && + almost_equal(w[2], w[6]) && + almost_equal(w[5], w[7])) + extrude_dir = 0; + + if (almost_equal(w[0], w[3]) && + almost_equal(w[0], w[7]) && + almost_equal(w[1], w[2]) && + almost_equal(w[1], w[5]) && + almost_equal(w[4], w[6])) + extrude_dir = 1; + + // If we're extruding, then we can derive the center point + // values from the two perpendicular edges' centers. + Node & n_center = face.node_ref(8); + Point & p_center = n_center; + if (extrude_dir == 0) + { + n_center.set_extra_datum(weight_index, w[5]); + p_center = (face.point(5) + face.point(7))/2; + } + else if (extrude_dir == 1) + { + n_center.set_extra_datum(weight_index, w[4]); + p_center = (face.point(4) + face.point(6))/2; + } + else + libmesh_not_implemented_msg + ("all_rbb() currently only supports 2.5D (extrusions) meshes in 3D"); + }; + + // Check each edge for a curve, and adjust it if needed. + for (auto e : elem->edge_index_range()) + { + elem->build_edge_ptr(edge_ptr, e); + + // We should add EDGE4 once we have QUAD16/TRI10/HEX64 to + // use it + if (edge_ptr->type() != EDGE3) + libmesh_not_implemented_msg + ("all_rbb() currently only supports meshes with 2- and/or 3-node edges"); + + make_edge_rbb(edge_ptr->node_ref(0), edge_ptr->node_ref(1), + edge_ptr->node_ref(2)); + + } + + // If we're in 3D, we may have face nodes that also need to be + // adjusted to replace an interpolated curve with a spline + // curve. We know what to do with a quad face, but we'll have + // to scream and die if we see a Tri7 face node. + bool check_face_points = (elem->dim() > 2) && + (elem->n_nodes() > elem->n_edges() + elem->n_vertices()); + + if (check_face_points) + for (auto f : elem->side_index_range()) + { + // Prisms and pyramids may need to skip some faces while + // adjusting others + if (elem->side_type(f) == TRI6) + continue; + + elem->build_side_ptr(face_ptr, f); + + make_face_rbb(*face_ptr); + } + + bool check_interior_points = + elem->n_nodes() > elem->n_edges() + elem->n_vertices() + elem->n_faces(); + + if (check_interior_points) + { + if (elem->type() == EDGE3) + { + make_edge_rbb(elem->node_ref(0), elem->node_ref(1), elem->node_ref(2)); + } + else if (elem->dim() == 2) + { + make_face_rbb(*elem); + } + else if (elem->type() == HEX27) + { + // For now we just support 2.5D (extrusions of 2D) + // meshes. Let's look for an extrusion direction. + int extrude_dir = -1; + + Real w[27]; + for (unsigned int i : make_range(27u)) + w[i] = elem->node_ref(i).get_extra_datum(weight_index); + + if (almost_equal(w[0], w[1]) && + almost_equal(w[0], w[8]) && + almost_equal(w[2], w[3]) && + almost_equal(w[2], w[10]) && + almost_equal(w[4], w[5]) && + almost_equal(w[4], w[16]) && + almost_equal(w[6], w[7]) && + almost_equal(w[6], w[18]) && + almost_equal(w[9], w[11]) && + almost_equal(w[9], w[20]) && + almost_equal(w[12], w[13]) && + almost_equal(w[12], w[21]) && + almost_equal(w[14], w[15]) && + almost_equal(w[14], w[23]) && + almost_equal(w[17], w[19]) && + almost_equal(w[17], w[25]) && + almost_equal(w[22], w[24])) + extrude_dir = 0; + + if (almost_equal(w[0], w[3]) && + almost_equal(w[0], w[11]) && + almost_equal(w[1], w[2]) && + almost_equal(w[1], w[9]) && + almost_equal(w[4], w[7]) && + almost_equal(w[4], w[19]) && + almost_equal(w[5], w[6]) && + almost_equal(w[5], w[17]) && + almost_equal(w[8], w[10]) && + almost_equal(w[8], w[20]) && + almost_equal(w[12], w[15]) && + almost_equal(w[12], w[24]) && + almost_equal(w[13], w[14]) && + almost_equal(w[13], w[22]) && + almost_equal(w[16], w[18]) && + almost_equal(w[16], w[25]) && + almost_equal(w[21], w[23])) + extrude_dir = 1; + + if (almost_equal(w[0], w[4]) && + almost_equal(w[0], w[12]) && + almost_equal(w[1], w[5]) && + almost_equal(w[1], w[13]) && + almost_equal(w[2], w[6]) && + almost_equal(w[2], w[14]) && + almost_equal(w[3], w[7]) && + almost_equal(w[3], w[15]) && + almost_equal(w[8], w[16]) && + almost_equal(w[8], w[21]) && + almost_equal(w[9], w[17]) && + almost_equal(w[9], w[22]) && + almost_equal(w[10], w[18]) && + almost_equal(w[10], w[23]) && + almost_equal(w[11], w[19]) && + almost_equal(w[11], w[24]) && + almost_equal(w[20], w[25])) + extrude_dir = 2; + + // If we're extruding, then we can derive the center point + // values from the two perpendicular faces' centers. + Node & n_center = elem->node_ref(26); + Point & p_center = n_center; + if (extrude_dir == 0) + { + n_center.set_extra_datum(weight_index, w[22]); + p_center = (elem->point(22) + elem->point(24))/2; + } + else if (extrude_dir == 1) + { + n_center.set_extra_datum(weight_index, w[21]); + p_center = (elem->point(21) + elem->point(23))/2; + } + else if (extrude_dir == 2) + { + n_center.set_extra_datum(weight_index, w[20]); + p_center = (elem->point(20) + elem->point(25))/2; + } + else + libmesh_not_implemented_msg + ("all_rbb() currently only supports 2.5D (extrusions) meshes in 3D"); + } + else + libmesh_not_implemented_msg + ("all_rbb() doesn't yet support " << elem->type()); + } + } +} + + + void MeshTools::Modification::smooth (MeshBase & mesh, const unsigned int n_iterations, const Real power) diff --git a/tests/Makefile.am b/tests/Makefile.am index bb12f42483..c1965e31c6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -56,6 +56,7 @@ unit_tests_sources = \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C \ mesh/all_second_order.C \ + mesh/all_rbb.C \ mesh/all_tri.C \ mesh/distort.C \ mesh/boundary_mesh.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 59ed2e7641..682a114882 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -207,8 +207,9 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ geom/side_test.C geom/volume_test.C \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C mesh/all_second_order.C \ - mesh/all_tri.C mesh/distort.C mesh/boundary_mesh.C \ - mesh/boundary_info.C mesh/boundary_points.C mesh/checkpoint.C \ + mesh/all_rbb.C mesh/all_tri.C mesh/distort.C \ + mesh/boundary_mesh.C mesh/boundary_info.C \ + mesh/boundary_points.C mesh/checkpoint.C \ mesh/connected_components.C mesh/contains_point.C \ mesh/distributed_mesh_test.C mesh/extra_integers.C \ mesh/exodus_test.C mesh/mesh_assign.C mesh/mesh_base_test.C \ @@ -297,6 +298,7 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ geom/unit_tests_dbg-side_vertex_average_normal_test.$(OBJEXT) \ geom/unit_tests_dbg-which_node_am_i_test.$(OBJEXT) \ mesh/unit_tests_dbg-all_second_order.$(OBJEXT) \ + mesh/unit_tests_dbg-all_rbb.$(OBJEXT) \ mesh/unit_tests_dbg-all_tri.$(OBJEXT) \ mesh/unit_tests_dbg-distort.$(OBJEXT) \ mesh/unit_tests_dbg-boundary_mesh.$(OBJEXT) \ @@ -414,8 +416,9 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ geom/side_test.C geom/volume_test.C \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C mesh/all_second_order.C \ - mesh/all_tri.C mesh/distort.C mesh/boundary_mesh.C \ - mesh/boundary_info.C mesh/boundary_points.C mesh/checkpoint.C \ + mesh/all_rbb.C mesh/all_tri.C mesh/distort.C \ + mesh/boundary_mesh.C mesh/boundary_info.C \ + mesh/boundary_points.C mesh/checkpoint.C \ mesh/connected_components.C mesh/contains_point.C \ mesh/distributed_mesh_test.C mesh/extra_integers.C \ mesh/exodus_test.C mesh/mesh_assign.C mesh/mesh_base_test.C \ @@ -503,6 +506,7 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ geom/unit_tests_devel-side_vertex_average_normal_test.$(OBJEXT) \ geom/unit_tests_devel-which_node_am_i_test.$(OBJEXT) \ mesh/unit_tests_devel-all_second_order.$(OBJEXT) \ + mesh/unit_tests_devel-all_rbb.$(OBJEXT) \ mesh/unit_tests_devel-all_tri.$(OBJEXT) \ mesh/unit_tests_devel-distort.$(OBJEXT) \ mesh/unit_tests_devel-boundary_mesh.$(OBJEXT) \ @@ -616,8 +620,9 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ geom/side_test.C geom/volume_test.C \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C mesh/all_second_order.C \ - mesh/all_tri.C mesh/distort.C mesh/boundary_mesh.C \ - mesh/boundary_info.C mesh/boundary_points.C mesh/checkpoint.C \ + mesh/all_rbb.C mesh/all_tri.C mesh/distort.C \ + mesh/boundary_mesh.C mesh/boundary_info.C \ + mesh/boundary_points.C mesh/checkpoint.C \ mesh/connected_components.C mesh/contains_point.C \ mesh/distributed_mesh_test.C mesh/extra_integers.C \ mesh/exodus_test.C mesh/mesh_assign.C mesh/mesh_base_test.C \ @@ -705,6 +710,7 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ geom/unit_tests_oprof-side_vertex_average_normal_test.$(OBJEXT) \ geom/unit_tests_oprof-which_node_am_i_test.$(OBJEXT) \ mesh/unit_tests_oprof-all_second_order.$(OBJEXT) \ + mesh/unit_tests_oprof-all_rbb.$(OBJEXT) \ mesh/unit_tests_oprof-all_tri.$(OBJEXT) \ mesh/unit_tests_oprof-distort.$(OBJEXT) \ mesh/unit_tests_oprof-boundary_mesh.$(OBJEXT) \ @@ -818,8 +824,9 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ geom/side_test.C geom/volume_test.C \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C mesh/all_second_order.C \ - mesh/all_tri.C mesh/distort.C mesh/boundary_mesh.C \ - mesh/boundary_info.C mesh/boundary_points.C mesh/checkpoint.C \ + mesh/all_rbb.C mesh/all_tri.C mesh/distort.C \ + mesh/boundary_mesh.C mesh/boundary_info.C \ + mesh/boundary_points.C mesh/checkpoint.C \ mesh/connected_components.C mesh/contains_point.C \ mesh/distributed_mesh_test.C mesh/extra_integers.C \ mesh/exodus_test.C mesh/mesh_assign.C mesh/mesh_base_test.C \ @@ -907,6 +914,7 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ geom/unit_tests_opt-side_vertex_average_normal_test.$(OBJEXT) \ geom/unit_tests_opt-which_node_am_i_test.$(OBJEXT) \ mesh/unit_tests_opt-all_second_order.$(OBJEXT) \ + mesh/unit_tests_opt-all_rbb.$(OBJEXT) \ mesh/unit_tests_opt-all_tri.$(OBJEXT) \ mesh/unit_tests_opt-distort.$(OBJEXT) \ mesh/unit_tests_opt-boundary_mesh.$(OBJEXT) \ @@ -1020,8 +1028,9 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ geom/side_test.C geom/volume_test.C \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C mesh/all_second_order.C \ - mesh/all_tri.C mesh/distort.C mesh/boundary_mesh.C \ - mesh/boundary_info.C mesh/boundary_points.C mesh/checkpoint.C \ + mesh/all_rbb.C mesh/all_tri.C mesh/distort.C \ + mesh/boundary_mesh.C mesh/boundary_info.C \ + mesh/boundary_points.C mesh/checkpoint.C \ mesh/connected_components.C mesh/contains_point.C \ mesh/distributed_mesh_test.C mesh/extra_integers.C \ mesh/exodus_test.C mesh/mesh_assign.C mesh/mesh_base_test.C \ @@ -1109,6 +1118,7 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ geom/unit_tests_prof-side_vertex_average_normal_test.$(OBJEXT) \ geom/unit_tests_prof-which_node_am_i_test.$(OBJEXT) \ mesh/unit_tests_prof-all_second_order.$(OBJEXT) \ + mesh/unit_tests_prof-all_rbb.$(OBJEXT) \ mesh/unit_tests_prof-all_tri.$(OBJEXT) \ mesh/unit_tests_prof-distort.$(OBJEXT) \ mesh/unit_tests_prof-boundary_mesh.$(OBJEXT) \ @@ -1383,6 +1393,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ geom/$(DEPDIR)/unit_tests_prof-side_vertex_average_normal_test.Po \ geom/$(DEPDIR)/unit_tests_prof-volume_test.Po \ geom/$(DEPDIR)/unit_tests_prof-which_node_am_i_test.Po \ + mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Po \ mesh/$(DEPDIR)/unit_tests_dbg-all_second_order.Po \ mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Po \ mesh/$(DEPDIR)/unit_tests_dbg-boundary_info.Po \ @@ -1424,6 +1435,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ mesh/$(DEPDIR)/unit_tests_dbg-write_sideset_data.Po \ mesh/$(DEPDIR)/unit_tests_dbg-write_vec_and_scalar.Po \ mesh/$(DEPDIR)/unit_tests_dbg-xdrio_test.Po \ + mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Po \ mesh/$(DEPDIR)/unit_tests_devel-all_second_order.Po \ mesh/$(DEPDIR)/unit_tests_devel-all_tri.Po \ mesh/$(DEPDIR)/unit_tests_devel-boundary_info.Po \ @@ -1465,6 +1477,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ mesh/$(DEPDIR)/unit_tests_devel-write_sideset_data.Po \ mesh/$(DEPDIR)/unit_tests_devel-write_vec_and_scalar.Po \ mesh/$(DEPDIR)/unit_tests_devel-xdrio_test.Po \ + mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Po \ mesh/$(DEPDIR)/unit_tests_oprof-all_second_order.Po \ mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Po \ mesh/$(DEPDIR)/unit_tests_oprof-boundary_info.Po \ @@ -1506,6 +1519,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ mesh/$(DEPDIR)/unit_tests_oprof-write_sideset_data.Po \ mesh/$(DEPDIR)/unit_tests_oprof-write_vec_and_scalar.Po \ mesh/$(DEPDIR)/unit_tests_oprof-xdrio_test.Po \ + mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Po \ mesh/$(DEPDIR)/unit_tests_opt-all_second_order.Po \ mesh/$(DEPDIR)/unit_tests_opt-all_tri.Po \ mesh/$(DEPDIR)/unit_tests_opt-boundary_info.Po \ @@ -1547,6 +1561,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ mesh/$(DEPDIR)/unit_tests_opt-write_sideset_data.Po \ mesh/$(DEPDIR)/unit_tests_opt-write_vec_and_scalar.Po \ mesh/$(DEPDIR)/unit_tests_opt-xdrio_test.Po \ + mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Po \ mesh/$(DEPDIR)/unit_tests_prof-all_second_order.Po \ mesh/$(DEPDIR)/unit_tests_prof-all_tri.Po \ mesh/$(DEPDIR)/unit_tests_prof-boundary_info.Po \ @@ -2307,8 +2322,9 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ geom/side_test.C geom/volume_test.C \ geom/side_vertex_average_normal_test.C \ geom/which_node_am_i_test.C mesh/all_second_order.C \ - mesh/all_tri.C mesh/distort.C mesh/boundary_mesh.C \ - mesh/boundary_info.C mesh/boundary_points.C mesh/checkpoint.C \ + mesh/all_rbb.C mesh/all_tri.C mesh/distort.C \ + mesh/boundary_mesh.C mesh/boundary_info.C \ + mesh/boundary_points.C mesh/checkpoint.C \ mesh/connected_components.C mesh/contains_point.C \ mesh/distributed_mesh_test.C mesh/extra_integers.C \ mesh/exodus_test.C mesh/mesh_assign.C mesh/mesh_base_test.C \ @@ -2647,6 +2663,8 @@ mesh/$(DEPDIR)/$(am__dirstamp): @: >>mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_dbg-all_second_order.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) +mesh/unit_tests_dbg-all_rbb.$(OBJEXT): mesh/$(am__dirstamp) \ + mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_dbg-all_tri.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_dbg-distort.$(OBJEXT): mesh/$(am__dirstamp) \ @@ -2947,6 +2965,8 @@ geom/unit_tests_devel-which_node_am_i_test.$(OBJEXT): \ geom/$(am__dirstamp) geom/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_devel-all_second_order.$(OBJEXT): \ mesh/$(am__dirstamp) mesh/$(DEPDIR)/$(am__dirstamp) +mesh/unit_tests_devel-all_rbb.$(OBJEXT): mesh/$(am__dirstamp) \ + mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_devel-all_tri.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_devel-distort.$(OBJEXT): mesh/$(am__dirstamp) \ @@ -3199,6 +3219,8 @@ geom/unit_tests_oprof-which_node_am_i_test.$(OBJEXT): \ geom/$(am__dirstamp) geom/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_oprof-all_second_order.$(OBJEXT): \ mesh/$(am__dirstamp) mesh/$(DEPDIR)/$(am__dirstamp) +mesh/unit_tests_oprof-all_rbb.$(OBJEXT): mesh/$(am__dirstamp) \ + mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_oprof-all_tri.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_oprof-distort.$(OBJEXT): mesh/$(am__dirstamp) \ @@ -3451,6 +3473,8 @@ geom/unit_tests_opt-which_node_am_i_test.$(OBJEXT): \ geom/$(am__dirstamp) geom/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_opt-all_second_order.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) +mesh/unit_tests_opt-all_rbb.$(OBJEXT): mesh/$(am__dirstamp) \ + mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_opt-all_tri.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_opt-distort.$(OBJEXT): mesh/$(am__dirstamp) \ @@ -3703,6 +3727,8 @@ geom/unit_tests_prof-which_node_am_i_test.$(OBJEXT): \ geom/$(am__dirstamp) geom/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_prof-all_second_order.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) +mesh/unit_tests_prof-all_rbb.$(OBJEXT): mesh/$(am__dirstamp) \ + mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_prof-all_tri.$(OBJEXT): mesh/$(am__dirstamp) \ mesh/$(DEPDIR)/$(am__dirstamp) mesh/unit_tests_prof-distort.$(OBJEXT): mesh/$(am__dirstamp) \ @@ -4075,6 +4101,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@geom/$(DEPDIR)/unit_tests_prof-side_vertex_average_normal_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@geom/$(DEPDIR)/unit_tests_prof-volume_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@geom/$(DEPDIR)/unit_tests_prof-which_node_am_i_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-all_second_order.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-boundary_info.Po@am__quote@ # am--include-marker @@ -4116,6 +4143,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-write_sideset_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-write_vec_and_scalar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_dbg-xdrio_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-all_second_order.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-all_tri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-boundary_info.Po@am__quote@ # am--include-marker @@ -4157,6 +4185,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-write_sideset_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-write_vec_and_scalar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_devel-xdrio_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-all_second_order.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-boundary_info.Po@am__quote@ # am--include-marker @@ -4198,6 +4227,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-write_sideset_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-write_vec_and_scalar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_oprof-xdrio_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-all_second_order.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-all_tri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-boundary_info.Po@am__quote@ # am--include-marker @@ -4239,6 +4269,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-write_sideset_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-write_vec_and_scalar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_opt-xdrio_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_prof-all_second_order.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_prof-all_tri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mesh/$(DEPDIR)/unit_tests_prof-boundary_info.Po@am__quote@ # am--include-marker @@ -5008,6 +5039,20 @@ mesh/unit_tests_dbg-all_second_order.obj: mesh/all_second_order.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_dbg-all_second_order.obj `if test -f 'mesh/all_second_order.C'; then $(CYGPATH_W) 'mesh/all_second_order.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_second_order.C'; fi` +mesh/unit_tests_dbg-all_rbb.o: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_dbg-all_rbb.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Tpo -c -o mesh/unit_tests_dbg-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_dbg-all_rbb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_dbg-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C + +mesh/unit_tests_dbg-all_rbb.obj: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_dbg-all_rbb.obj -MD -MP -MF mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Tpo -c -o mesh/unit_tests_dbg-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_dbg-all_rbb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_dbg-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` + mesh/unit_tests_dbg-all_tri.o: mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_dbg-all_tri.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Tpo -c -o mesh/unit_tests_dbg-all_tri.o `test -f 'mesh/all_tri.C' || echo '$(srcdir)/'`mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Tpo mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Po @@ -6702,6 +6747,20 @@ mesh/unit_tests_devel-all_second_order.obj: mesh/all_second_order.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_devel-all_second_order.obj `if test -f 'mesh/all_second_order.C'; then $(CYGPATH_W) 'mesh/all_second_order.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_second_order.C'; fi` +mesh/unit_tests_devel-all_rbb.o: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_devel-all_rbb.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Tpo -c -o mesh/unit_tests_devel-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_devel-all_rbb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_devel-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C + +mesh/unit_tests_devel-all_rbb.obj: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_devel-all_rbb.obj -MD -MP -MF mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Tpo -c -o mesh/unit_tests_devel-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_devel-all_rbb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_devel-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` + mesh/unit_tests_devel-all_tri.o: mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_devel-all_tri.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_devel-all_tri.Tpo -c -o mesh/unit_tests_devel-all_tri.o `test -f 'mesh/all_tri.C' || echo '$(srcdir)/'`mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_devel-all_tri.Tpo mesh/$(DEPDIR)/unit_tests_devel-all_tri.Po @@ -8396,6 +8455,20 @@ mesh/unit_tests_oprof-all_second_order.obj: mesh/all_second_order.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_oprof-all_second_order.obj `if test -f 'mesh/all_second_order.C'; then $(CYGPATH_W) 'mesh/all_second_order.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_second_order.C'; fi` +mesh/unit_tests_oprof-all_rbb.o: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_oprof-all_rbb.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Tpo -c -o mesh/unit_tests_oprof-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_oprof-all_rbb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_oprof-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C + +mesh/unit_tests_oprof-all_rbb.obj: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_oprof-all_rbb.obj -MD -MP -MF mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Tpo -c -o mesh/unit_tests_oprof-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_oprof-all_rbb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_oprof-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` + mesh/unit_tests_oprof-all_tri.o: mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_oprof-all_tri.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Tpo -c -o mesh/unit_tests_oprof-all_tri.o `test -f 'mesh/all_tri.C' || echo '$(srcdir)/'`mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Tpo mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Po @@ -10090,6 +10163,20 @@ mesh/unit_tests_opt-all_second_order.obj: mesh/all_second_order.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_opt-all_second_order.obj `if test -f 'mesh/all_second_order.C'; then $(CYGPATH_W) 'mesh/all_second_order.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_second_order.C'; fi` +mesh/unit_tests_opt-all_rbb.o: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_opt-all_rbb.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Tpo -c -o mesh/unit_tests_opt-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_opt-all_rbb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_opt-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C + +mesh/unit_tests_opt-all_rbb.obj: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_opt-all_rbb.obj -MD -MP -MF mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Tpo -c -o mesh/unit_tests_opt-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_opt-all_rbb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_opt-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` + mesh/unit_tests_opt-all_tri.o: mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_opt-all_tri.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_opt-all_tri.Tpo -c -o mesh/unit_tests_opt-all_tri.o `test -f 'mesh/all_tri.C' || echo '$(srcdir)/'`mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_opt-all_tri.Tpo mesh/$(DEPDIR)/unit_tests_opt-all_tri.Po @@ -11784,6 +11871,20 @@ mesh/unit_tests_prof-all_second_order.obj: mesh/all_second_order.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_prof-all_second_order.obj `if test -f 'mesh/all_second_order.C'; then $(CYGPATH_W) 'mesh/all_second_order.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_second_order.C'; fi` +mesh/unit_tests_prof-all_rbb.o: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_prof-all_rbb.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Tpo -c -o mesh/unit_tests_prof-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_prof-all_rbb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_prof-all_rbb.o `test -f 'mesh/all_rbb.C' || echo '$(srcdir)/'`mesh/all_rbb.C + +mesh/unit_tests_prof-all_rbb.obj: mesh/all_rbb.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_prof-all_rbb.obj -MD -MP -MF mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Tpo -c -o mesh/unit_tests_prof-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Tpo mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mesh/all_rbb.C' object='mesh/unit_tests_prof-all_rbb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o mesh/unit_tests_prof-all_rbb.obj `if test -f 'mesh/all_rbb.C'; then $(CYGPATH_W) 'mesh/all_rbb.C'; else $(CYGPATH_W) '$(srcdir)/mesh/all_rbb.C'; fi` + mesh/unit_tests_prof-all_tri.o: mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT mesh/unit_tests_prof-all_tri.o -MD -MP -MF mesh/$(DEPDIR)/unit_tests_prof-all_tri.Tpo -c -o mesh/unit_tests_prof-all_tri.o `test -f 'mesh/all_tri.C' || echo '$(srcdir)/'`mesh/all_tri.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) mesh/$(DEPDIR)/unit_tests_prof-all_tri.Tpo mesh/$(DEPDIR)/unit_tests_prof-all_tri.Po @@ -13544,6 +13645,7 @@ distclean: distclean-am -rm -f geom/$(DEPDIR)/unit_tests_prof-side_vertex_average_normal_test.Po -rm -f geom/$(DEPDIR)/unit_tests_prof-volume_test.Po -rm -f geom/$(DEPDIR)/unit_tests_prof-which_node_am_i_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-boundary_info.Po @@ -13585,6 +13687,7 @@ distclean: distclean-am -rm -f mesh/$(DEPDIR)/unit_tests_dbg-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-boundary_info.Po @@ -13626,6 +13729,7 @@ distclean: distclean-am -rm -f mesh/$(DEPDIR)/unit_tests_devel-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-boundary_info.Po @@ -13667,6 +13771,7 @@ distclean: distclean-am -rm -f mesh/$(DEPDIR)/unit_tests_oprof-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-boundary_info.Po @@ -13708,6 +13813,7 @@ distclean: distclean-am -rm -f mesh/$(DEPDIR)/unit_tests_opt-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_prof-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_prof-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_prof-boundary_info.Po @@ -14196,6 +14302,7 @@ maintainer-clean: maintainer-clean-am -rm -f geom/$(DEPDIR)/unit_tests_prof-side_vertex_average_normal_test.Po -rm -f geom/$(DEPDIR)/unit_tests_prof-volume_test.Po -rm -f geom/$(DEPDIR)/unit_tests_prof-which_node_am_i_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_dbg-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-boundary_info.Po @@ -14237,6 +14344,7 @@ maintainer-clean: maintainer-clean-am -rm -f mesh/$(DEPDIR)/unit_tests_dbg-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_dbg-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_devel-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-boundary_info.Po @@ -14278,6 +14386,7 @@ maintainer-clean: maintainer-clean-am -rm -f mesh/$(DEPDIR)/unit_tests_devel-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_devel-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_oprof-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-boundary_info.Po @@ -14319,6 +14428,7 @@ maintainer-clean: maintainer-clean-am -rm -f mesh/$(DEPDIR)/unit_tests_oprof-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_oprof-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_opt-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-boundary_info.Po @@ -14360,6 +14470,7 @@ maintainer-clean: maintainer-clean-am -rm -f mesh/$(DEPDIR)/unit_tests_opt-write_sideset_data.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-write_vec_and_scalar.Po -rm -f mesh/$(DEPDIR)/unit_tests_opt-xdrio_test.Po + -rm -f mesh/$(DEPDIR)/unit_tests_prof-all_rbb.Po -rm -f mesh/$(DEPDIR)/unit_tests_prof-all_second_order.Po -rm -f mesh/$(DEPDIR)/unit_tests_prof-all_tri.Po -rm -f mesh/$(DEPDIR)/unit_tests_prof-boundary_info.Po diff --git a/tests/mesh/all_rbb.C b/tests/mesh/all_rbb.C new file mode 100644 index 0000000000..3ebd266d30 --- /dev/null +++ b/tests/mesh/all_rbb.C @@ -0,0 +1,190 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + + +using namespace libMesh; + +class AllRBBTest : public CppUnit::TestCase +{ + /** + * The goal of this test is to verify proper operation of the Mesh Extruder + * with the optional object callback for setting custom subdomain IDs. + * We pass a custom object for generating subdomains based on the old element + * ID and the current layer and assert the proper values. + */ +public: + LIBMESH_CPPUNIT_TEST_SUITE( AllRBBTest ); + + CPPUNIT_TEST( testAllRBBNodeElem ); + CPPUNIT_TEST( testAllRBBEdge ); + CPPUNIT_TEST( testAllRBBEdge3 ); + + // 2D tests +#if LIBMESH_DIM > 1 + CPPUNIT_TEST( testAllRBBTri ); + CPPUNIT_TEST( testAllRBBTri6 ); + CPPUNIT_TEST( testAllRBBQuad ); + CPPUNIT_TEST( testAllRBBQuad8 ); + CPPUNIT_TEST( testAllRBBQuad9 ); + + CPPUNIT_TEST( testAllRBBCircle4 ); + CPPUNIT_TEST( testAllRBBCircle8 ); + CPPUNIT_TEST( testAllRBBCircle16 ); +#endif + + // 3D tests +#if LIBMESH_DIM > 2 + CPPUNIT_TEST( testAllRBBTet ); + CPPUNIT_TEST( testAllRBBTet10 ); + CPPUNIT_TEST( testAllRBBHex ); + CPPUNIT_TEST( testAllRBBHex20 ); + CPPUNIT_TEST( testAllRBBHex27 ); + CPPUNIT_TEST( testAllRBBPrism6 ); + CPPUNIT_TEST( testAllRBBPrism18 ); +#endif + + CPPUNIT_TEST_SUITE_END(); + +protected: + // We don't do anything interesting to affine elements in all_rbb(), + // but we can verify that we're not screwing them up. + void test_box(ElemType elem_type) + { + Mesh mesh(*TestCommWorld); + + auto dim = Elem::type_to_dim_map[elem_type]; + + MeshTools::Generation::build_cube(mesh, + dim > 0 ? 2 : 0, dim > 1 ? 1 : 0, dim > 2 ? 1 : 0, + 0., 1., + 0., 1., + 0., 1., + elem_type); + + const auto n_orig_elem = mesh.n_elem(); + + MeshTools::Modification::all_rbb(mesh); + + CPPUNIT_ASSERT_EQUAL(n_orig_elem, mesh.n_elem()); + + unsigned char weight_index = mesh.default_mapping_data(); + + for (auto & elem : mesh.element_ptr_range()) + { + CPPUNIT_ASSERT_EQUAL(elem->mapping_type(), RATIONAL_BERNSTEIN_MAP); + CPPUNIT_ASSERT(elem->has_affine_map()); + } + + for (auto & node : mesh.node_ptr_range()) + { + const Real w = node->get_extra_datum(weight_index); + + CPPUNIT_ASSERT_EQUAL(Real(1), w); + } + } + + void test_circle(unsigned int n_refinements) + { + Mesh interior_mesh(*TestCommWorld), + boundary_mesh(*TestCommWorld); + + const Real radius = 1; + const Real circumference = radius * 2 * pi; + const Real tol = TOLERANCE*TOLERANCE; + + // Build a filled circle + MeshTools::Generation::build_sphere (interior_mesh, radius, + n_refinements, QUAD9); + + // Get just the outer EDGE9 circle mesh + interior_mesh.get_boundary_info().sync(boundary_mesh); + + const dof_id_type n_edges = 4 << n_refinements; + + CPPUNIT_ASSERT_EQUAL(boundary_mesh.n_elem(), n_edges); + CPPUNIT_ASSERT_EQUAL(boundary_mesh.n_elem(), n_edges); + + for (auto & node : boundary_mesh.node_ptr_range()) + { + const Point p = *node; + LIBMESH_ASSERT_FP_EQUAL(p.norm(), radius, tol); + } + + // We just did Lagrange interpolation, so our mesh measure + // shouldn't be *quite* right. Empirically, we converge from + // beneath, and our error looks like Ch^4. + const Real max_lagrange_error = + radius * 5e-2 / (1 << (4*n_refinements)); + LIBMESH_ASSERT_FP_EQUAL(MeshTools::volume(boundary_mesh), + circumference, max_lagrange_error); + + MeshTools::Modification::all_rbb(boundary_mesh); + + for (auto & elem : boundary_mesh.element_ptr_range()) + { + CPPUNIT_ASSERT_EQUAL(RATIONAL_BERNSTEIN_MAP, elem->mapping_type()); + + // We can no longer assert that each Node is at a specified + // radius from the circle center, because these are now spline + // control nodes, but we can assert that physical points + // within the element are at the desired radius. + constexpr int n_intervals = 4; + Point master_pt; + for (master_pt(0) = -1; master_pt(0) <= 1 + TOLERANCE; + master_pt(0) += Real(2)/n_intervals) + { + const Point p = FEMap::map(elem->dim(), elem, master_pt); + LIBMESH_ASSERT_FP_EQUAL(radius, p.norm(), tol); + } + } + + // We're using quadrature for volume approximation, so we still + // have error, but our quadrature error looks like Ch^6 with a + // much smaller C. + const Real max_rbb_error = + radius * 1e-3 / (1 << (6*n_refinements)); + LIBMESH_ASSERT_FP_EQUAL(MeshTools::volume(boundary_mesh), + circumference, max_rbb_error); + } + +public: + void setUp() {} + + void tearDown() {} + + void testAllRBBNodeElem() { LOG_UNIT_TEST; test_box(NODEELEM); } + void testAllRBBEdge() { LOG_UNIT_TEST; test_box(EDGE2); } + void testAllRBBEdge3() { LOG_UNIT_TEST; test_box(EDGE3); } + void testAllRBBTri() { LOG_UNIT_TEST; test_box(TRI3); } + void testAllRBBTri6() { LOG_UNIT_TEST; test_box(TRI6); } + void testAllRBBQuad() { LOG_UNIT_TEST; test_box(QUAD4); } + void testAllRBBQuad8() { LOG_UNIT_TEST; test_box(QUAD8); } + void testAllRBBQuad9() { LOG_UNIT_TEST; test_box(QUAD9); } + void testAllRBBTet() { LOG_UNIT_TEST; test_box(TET4); } + void testAllRBBTet10() { LOG_UNIT_TEST; test_box(TET10); } + void testAllRBBHex() { LOG_UNIT_TEST; test_box(HEX8); } + void testAllRBBHex20() { LOG_UNIT_TEST; test_box(HEX20); } + void testAllRBBHex27() { LOG_UNIT_TEST; test_box(HEX27); } + void testAllRBBPrism6() { LOG_UNIT_TEST; test_box(PRISM6); } + void testAllRBBPrism18() { LOG_UNIT_TEST; test_box(PRISM18); } + + // We still don't support general Polys, Tri7s or anything with them + // as faces, infinite elements, or anything above quadratic. + + // 0 refinements of our default circle gives us 4 RBB edges + void testAllRBBCircle4() { LOG_UNIT_TEST; test_circle(0); } + void testAllRBBCircle8() { LOG_UNIT_TEST; test_circle(1); } + void testAllRBBCircle16() { LOG_UNIT_TEST; test_circle(2); } + +}; + + +CPPUNIT_TEST_SUITE_REGISTRATION( AllRBBTest );