LCOV - code coverage report
Current view: top level - src/raytracing - ElemExtrema.C (source / functions) Hit Total Coverage
Test: idaholab/moose ray_tracing: #31405 (292dce) with base fef103 Lines: 21 21 100.0 %
Date: 2025-09-04 07:56:07 Functions: 5 5 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       3             : //*
       4             : //* All rights reserved, see COPYRIGHT for full restrictions
       5             : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
       6             : //*
       7             : //* Licensed under LGPL 2.1, please see LICENSE for details
       8             : //* https://www.gnu.org/licenses/lgpl-2.1.html
       9             : 
      10             : #include "ElemExtrema.h"
      11             : 
      12             : // libMesh includes
      13             : #include "libmesh/elem.h"
      14             : 
      15             : const Point &
      16           2 : ElemExtrema::vertexPoint(const libMesh::Elem * elem) const
      17             : {
      18           2 :   return elem->point(vertex());
      19             : }
      20             : 
      21             : std::unique_ptr<const libMesh::Elem>
      22           4 : ElemExtrema::buildEdge(const libMesh::Elem * elem) const
      23             : {
      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");
      27             : 
      28           4 :   for (const auto e : elem->edge_index_range())
      29           2 :     if (elem->is_node_on_edge(first, e) && elem->is_node_on_edge(second, e))
      30           2 :       return elem->build_edge_ptr(e);
      31             : 
      32           2 :   mooseError("Element does not contain vertices in ElemExtrema");
      33             : }
      34             : 
      35             : std::string
      36          12 : ElemExtrema::print() const
      37             : {
      38          12 :   std::stringstream oss;
      39             :   if (atVertex())
      40          10 :     oss << "at vertex " << vertex();
      41             :   else if (atEdge())
      42           1 :     oss << "at edge with vertices " << first << " and " << second;
      43             :   else
      44           1 :     oss << "not at extrema";
      45          12 :   return oss.str();
      46          12 : }
      47             : 
      48             : bool
      49           3 : ElemExtrema::isValid(const Elem * const elem, const Point & point) const
      50             : {
      51             :   mooseAssert(first == RayTracingCommon::invalid_vertex || first < elem->n_vertices(),
      52             :               "Invalid first vertex for given element");
      53             :   mooseAssert(second == RayTracingCommon::invalid_vertex || second < elem->n_vertices(),
      54             :               "Invalid second vertex for given element");
      55             : 
      56             :   if (atVertex())
      57           1 :     return vertexPoint(elem).absolute_fuzzy_equals(point);
      58           2 :   if (elem->dim() == 3 && atEdge())
      59           1 :     return buildEdge(elem)->contains_point(point);
      60             : 
      61             :   return true;
      62             : }
      63             : 
      64             : std::ostream &
      65          12 : operator<<(std::ostream & os, const ElemExtrema & elem_extrema)
      66             : {
      67          12 :   os << elem_extrema.print();
      68          12 :   return os;
      69             : }

Generated by: LCOV version 1.14