13#include "libmesh/elem.h"
21std::unique_ptr<const libMesh::Elem>
24 mooseAssert(
atEdge(),
"Did not intersect edge");
25 mooseAssert(first < elem->n_vertices(),
"Invalid first vertex for given element");
26 mooseAssert(second < elem->n_vertices(),
"Invalid second vertex for given element");
32 mooseError(
"Element does not contain vertices in ElemExtrema");
38 std::stringstream oss;
40 oss <<
"at vertex " <<
vertex();
42 oss <<
"at edge with vertices " << first <<
" and " << second;
44 oss <<
"not at extrema";
52 "Invalid first vertex for given element");
54 "Invalid second vertex for given element");
57 return vertexPoint(elem).absolute_fuzzy_equals(point);
58 if (elem->dim() == 3 &&
atEdge())
59 return buildEdge(elem)->contains_point(point);
67 os << elem_extrema.
print();
std::ostream & operator<<(std::ostream &os, const ElemExtrema &elem_extrema)
void mooseError(Args &&... args)
const Point & point(const unsigned int i) const
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i)=0
IntRange< unsigned short > edge_index_range() const
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const=0
static const unsigned short invalid_vertex
Identifier for an invalid vertex index.
Helper for defining if at an element's edge, vertex, or neither.
std::unique_ptr< const libMesh::Elem > buildEdge(const Elem *elem) const
unsigned short vertex() const
const Point & vertexPoint(const libMesh::Elem *elem) const
bool isValid(const Elem *const elem, const Point &point) const
std::string print() const
Prints the current state (at edge, at vertex, not at either)