13 #include "libmesh/bounding_box.h" 14 #include "libmesh/face_quad4.h" 15 #include "libmesh/cell_hex8.h" 23 const unsigned int dim)
24 : _comm(), _mesh(
std::make_unique<
Mesh>(_comm,
dim))
46 elem = Elem::build(
EDGE2).release();
48 elem = Elem::build(
QUAD4).release();
50 elem = Elem::build(
HEX8).release();
51 elem =
_mesh->add_elem(elem);
55 for (
unsigned int n = 0; n <
_mesh->n_nodes(); ++n)
59 _mesh->skip_partitioning(
true);
60 _mesh->prepare_for_use();
69 mooseAssert(std::abs(1.0 - direction.
norm()) < TOLERANCE,
"Unnormalized direction");
75 Real best_intersection_distance = -std::numeric_limits<Real>::max();
78 Point intersection_point;
80 Real intersection_distance;
90 intersected = TraceRayTools::sideIntersectedByLine<Hex8>(elem,
96 intersection_distance,
99 #ifdef DEBUG_RAY_INTERSECTIONS
104 else if (elem->
dim() == 2)
106 intersected = TraceRayTools::sideIntersectedByLine<Quad4>(elem,
112 intersection_distance,
115 #ifdef DEBUG_RAY_INTERSECTIONS 124 const Point dummy_end = point + 1.01 * direction *
_hmax;
129 intersection_distance = (elem->
point(s) - point).
norm();
130 intersection_point = elem->
point(s);
134 if (intersected && intersection_distance > best_intersection_distance)
136 best_intersection_distance = intersection_distance;
137 best_intersection_point = intersection_point;
141 return best_intersection_point;
libMesh::Point intersection(const libMesh::Point &point, const libMesh::Point &direction) const
virtual Node *& set_node(const unsigned int i)
auto norm() const -> decltype(std::norm(Real()))
IntRange< unsigned short > side_index_range() const
Helper for defining if at an element's edge, vertex, or neither.
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
virtual Real hmax() const
libMesh::Real _hmax
hmax for the dummy element
const Point & min() const
const std::unique_ptr< libMesh::Mesh > _mesh
Dummy mesh that contains a single element used for TraceRayTools intersection methods.
BoundingBoxIntersectionHelper(const libMesh::BoundingBox &bbox, const unsigned int dim)
Constructor.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
subdomain_id_type subdomain_id() const
void invalidate()
Invalidates the current state.
virtual unsigned short dim() const=0
static const libMesh::Point invalid_point(invalid_distance, invalid_distance, invalid_distance)
Identifier for an invalid point.
const Point & max() const
processor_id_type processor_id() const
const Point & point(const unsigned int i) const