10 #include "gtest/gtest.h" 14 #include "libmesh/mesh_generation.h" 15 #include "libmesh/replicated_mesh.h" 17 std::unique_ptr<UnstructuredMesh>
20 Parallel::Communicator comm;
21 std::unique_ptr<UnstructuredMesh>
mesh = std::make_unique<ReplicatedMesh>(comm);
23 const unsigned int n = 2;
53 MeshTools::Generation::build_cube(
54 *
mesh, n, n, n,
min,
max,
min,
max,
min,
max, (
ElemType)type);
61 mesh->prepare_for_use();
75 if (
mesh->mesh_dimension() != 3)
78 for (
const auto elem :
mesh->element_ptr_range())
80 for (
const auto e : elem->edge_index_range())
84 EXPECT_TRUE(extrema.
atEdge(elem->nodes_on_edge(e)[0], elem->nodes_on_edge(e)[1]));
86 for (
const auto n : elem->node_index_range())
87 if (elem->is_vertex(n))
92 bool extrema_correct =
false;
93 for (
const auto e : elem->edge_index_range())
94 if (!extrema_correct && elem->is_node_on_edge(n, e))
96 extrema.
atEdge(elem->nodes_on_edge(e)[0], elem->nodes_on_edge(e)[1]);
97 EXPECT_TRUE(extrema_correct);
112 if (
mesh->mesh_dimension() != 3)
115 for (
const auto elem :
mesh->element_ptr_range())
117 for (
const auto s : elem->side_index_range())
124 for (
const auto e : elem->edge_index_range())
125 if (elem->is_edge_on_side(e, s))
129 elem, elem->build_edge_ptr(e)->vertex_average(), s, extrema));
132 for (
const auto n : elem->node_index_range())
133 if (elem->is_vertex(n))
134 for (
const auto s : elem->side_index_range())
135 if (elem->is_node_on_side(n, s))
140 bool extrema_correct =
false;
141 for (
const auto e : elem->edge_index_range())
142 if (!extrema_correct && elem->is_node_on_edge(n, e))
144 extrema.
atEdge(elem->nodes_on_edge(e)[0], elem->nodes_on_edge(e)[1]);
145 EXPECT_TRUE(extrema_correct);
158 for (
const auto elem :
mesh->element_ptr_range())
161 for (
const auto n : elem->node_index_range())
162 if (elem->is_vertex(n))
177 for (
const auto elem :
mesh->element_ptr_range())
178 for (
const auto s : elem->side_index_range())
186 for (
const auto n : elem->nodes_on_side(s))
187 if (elem->is_vertex(n))
200 std::vector<const Elem *> active_neighbor_children;
201 std::vector<NeighborInfo> neighbor_info;
202 std::set<const Elem *> libmesh_neighbor_set;
209 for (
const auto elem :
mesh->element_ptr_range())
211 for (
const auto n : elem->node_index_range())
216 neighbor_untested_set,
217 neighbor_next_untested_set,
218 active_neighbor_children,
220 elem->find_point_neighbors(elem->point(n), libmesh_neighbor_set);
221 for (
const auto &
info : neighbor_info)
223 for (
const auto s :
info._sides)
224 EXPECT_TRUE(
info._elem->build_side_ptr(s)->contains_point(elem->point(n)));
225 EXPECT_TRUE(libmesh_neighbor_set.count(
info._elem));
229 for (
const auto s : elem->side_index_range())
231 const auto centroid = elem->build_side_ptr(s)->vertex_average();
235 neighbor_untested_set,
236 neighbor_next_untested_set,
237 active_neighbor_children,
239 elem->find_point_neighbors(centroid, libmesh_neighbor_set);
240 for (
const auto &
info : neighbor_info)
242 for (
const auto other_s :
info._sides)
243 EXPECT_TRUE(
info._elem->build_side_ptr(other_s)->contains_point(centroid));
244 EXPECT_TRUE(libmesh_neighbor_set.count(
info._elem));
248 if (elem->dim() == 3)
249 for (
const auto e : elem->edge_index_range())
251 const auto centroid = elem->build_edge_ptr(e)->vertex_average();
255 neighbor_untested_set,
256 neighbor_next_untested_set,
257 active_neighbor_children,
259 elem->find_point_neighbors(centroid, libmesh_neighbor_set);
260 for (
const auto &
info : neighbor_info)
262 for (
const auto s :
info._sides)
263 EXPECT_TRUE(
info._elem->build_side_ptr(s)->contains_point(centroid));
264 EXPECT_TRUE(libmesh_neighbor_set.count(
info._elem));
static const unsigned short invalid_vertex
Identifier for an invalid vertex index.
Helper for defining if at an element's edge, vertex, or neither.
auto max(const L &left, const R &right)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void invalidate()
Invalidates the current state.
auto min(const L &left, const R &right)