diff --git a/include/geom/elem_corner.h b/include/geom/elem_corner.h index 17fda77f4ab..1e070bc7ec3 100644 --- a/include/geom/elem_corner.h +++ b/include/geom/elem_corner.h @@ -157,7 +157,11 @@ class ElemCorner : public std::pair { set_edge(vs.first, vs.second); } /** - * @returns The edge when at an edge + * Builds an edge of element \p elem into the Elem \p edge when at an edge + */ + void build_edge(const Elem & elem, std::unique_ptr & edge) const; + /** + * @returns The built edge of element \p elem when at an edge */ std::unique_ptr build_edge(const Elem & elem) const; diff --git a/src/geom/elem_corner.C b/src/geom/elem_corner.C index efc59cbf8c0..9468449e6f5 100644 --- a/src/geom/elem_corner.C +++ b/src/geom/elem_corner.C @@ -33,7 +33,7 @@ bool ElemCorner::at_edge(const Elem & elem, const unsigned short e) const return at_edge(nodes_on_edge_ptr[0], nodes_on_edge_ptr[1]); } -std::unique_ptr ElemCorner::build_edge(const Elem & elem) const +void ElemCorner::build_edge(const Elem & elem, std::unique_ptr & edge) const { libmesh_assert_greater(elem.dim(), 1); libmesh_assert(at_edge()); @@ -42,11 +42,21 @@ std::unique_ptr ElemCorner::build_edge(const Elem & elem) const for (const auto e : elem.edge_index_range()) if (elem.is_node_on_edge(first, e) && elem.is_node_on_edge(second, e)) - return elem.build_edge_ptr(e); + { + elem.build_edge_ptr(edge, e); + return; + } libmesh_error_msg("Element does not contain vertices in ElemCorner"); } +std::unique_ptr ElemCorner::build_edge(const Elem & elem) const +{ + std::unique_ptr edge; + build_edge(elem, edge); + return edge; +} + std::string ElemCorner::print() const { std::stringstream oss;