19 #include "libmesh/libmesh_config.h"
21 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
28 #include "libmesh/cell_inf_hex.h"
29 #include "libmesh/cell_inf_hex8.h"
30 #include "libmesh/face_quad4.h"
31 #include "libmesh/face_inf_quad4.h"
32 #include "libmesh/fe_type.h"
33 #include "libmesh/fe_interface.h"
34 #include "libmesh/inf_fe_map.h"
35 #include "libmesh/enum_elem_quality.h"
78 libmesh_assert_less (s, this->
n_sides());
91 unsigned int side_node)
const
93 libmesh_assert_less (side, this->
n_sides());
94 libmesh_assert_less (side_node, 4);
103 libmesh_assert_less (i, this->
n_sides());
106 std::unique_ptr<Elem> face;
124 face = libmesh_make_unique<Quad4>();
134 face = libmesh_make_unique<InfQuad4>();
139 libmesh_error_msg(
"Invalid side i = " << i);
143 for (
auto n : face->node_index_range())
152 const unsigned int i)
154 libmesh_assert_less (i, this->
n_sides());
162 if (!side.get() || side->type() !=
QUAD4)
176 if (!side.get() || side->type() !=
INFQUAD4)
185 libmesh_error_msg(
"Invalid side i = " << i);
191 for (
auto n : side->node_index_range())
198 const unsigned int s)
const
201 libmesh_assert_less (s, this->
n_sides());
203 return (s == 0 || c+1 == s || c == s%4);
209 const unsigned int s)
const
211 libmesh_assert_less (e, this->
n_edges());
212 libmesh_assert_less (s, this->
n_sides());
244 const Real min = std::min(d02, d13);
245 const Real max = std::max(d02, d13);
247 libmesh_assert_not_equal_to (max, 0.0);
272 std::vector<Real> edge_ratios(2);
275 edge_ratios[8] = std::min(d01, d23) / std::max(d01, d23);
276 edge_ratios[9] = std::min(d03, d12) / std::max(d03, d12);
278 return *(std::min_element(edge_ratios.begin(), edge_ratios.end())) ;
296 const Real sqrt3 = 1.73205080756888;
303 const Real max_diag = std::max(d02, d13);
305 libmesh_assert_not_equal_to ( max_diag, 0.0 );
310 std::vector<Real> edges(4);
311 edges[0] = this->
length(0,1);
312 edges[1] = this->
length(1,2);
313 edges[2] = this->
length(2,3);
314 edges[3] = this->
length(0,3);
316 const Real min_edge = *(std::min_element(edges.begin(), edges.end()));
317 return sqrt3 * min_edge / max_diag ;
334 libmesh_not_implemented();
336 std::pair<Real, Real> bounds;
424 99,99,99,99,99,99,99,99,
434 99,99,99,99,99,99,99,99,
462 const Real tmp_min_distance_sq = std::min(pt0_o.
norm_sq(),
471 const Real min_distance_sq = tmp_min_distance_sq
477 const Real conservative_p_dist_sq = 1.01 * (
Point(p - my_origin).
norm_sq());
481 if (conservative_p_dist_sq < min_distance_sq)
489 Point p_o(p - my_origin);
490 pt0_o /= pt0_o.
norm();
491 pt1_o /= pt1_o.
norm();
492 pt2_o /= pt2_o.
norm();
493 pt3_o /= pt3_o.
norm();
500 (pt1_o - pt3_o).
norm_sq())*1.01;
502 if ((p_o - pt0_o).
norm_sq() > max_h ||
503 (p_o - pt1_o).
norm_sq() > max_h ||
504 (p_o - pt2_o).
norm_sq() > max_h ||
505 (p_o - pt3_o).
norm_sq() > max_h )
526 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS