LCOV - code coverage report
Current view: top level - src/markers - ReporterPointMarker.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 419b9d Lines: 35 35 100.0 %
Date: 2025-08-08 20:01:16 Functions: 4 4 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 "ReporterPointMarker.h"
      11             : #include "FEProblemBase.h"
      12             : 
      13             : registerMooseObject("MooseApp", ReporterPointMarker);
      14             : 
      15             : InputParameters
      16       14328 : ReporterPointMarker::validParams()
      17             : {
      18       14328 :   InputParameters params = Marker::validParams();
      19       14328 :   params.addClassDescription("Marks the region inside or empty if it contains a reporter defined "
      20             :                              "point for refinement or coarsening.");
      21       14328 :   params.addRequiredParam<ReporterName>("x_coord_name", "reporter x-coordinate name");
      22       14328 :   params.addRequiredParam<ReporterName>("y_coord_name", "reporter y-coordinate name");
      23       14328 :   params.addRequiredParam<ReporterName>("z_coord_name", "reporter z-coordinate name");
      24       14328 :   MooseEnum marker_states = Marker::markerStates();
      25       14328 :   params.addRequiredParam<MooseEnum>(
      26             :       "inside", marker_states, "How to mark elements containing a point");
      27       14328 :   params.addRequiredParam<MooseEnum>(
      28             :       "empty", marker_states, "How to mark elements not containing a point");
      29       28656 :   return params;
      30       14328 : }
      31             : 
      32          33 : ReporterPointMarker::ReporterPointMarker(const InputParameters & parameters)
      33             :   : Marker(parameters),
      34             :     ReporterInterface(this),
      35          33 :     _inside(parameters.get<MooseEnum>("inside").getEnum<MarkerValue>()),
      36          33 :     _empty(parameters.get<MooseEnum>("empty").getEnum<MarkerValue>()),
      37          33 :     _x_coord(getReporterValue<std::vector<Real>>("x_coord_name", REPORTER_MODE_REPLICATED)),
      38          33 :     _y_coord(getReporterValue<std::vector<Real>>("y_coord_name", REPORTER_MODE_REPLICATED)),
      39          66 :     _z_coord(getReporterValue<std::vector<Real>>("z_coord_name", REPORTER_MODE_REPLICATED))
      40             : {
      41          33 : }
      42             : 
      43             : void
      44          95 : ReporterPointMarker::markerSetup()
      45             : {
      46          95 :   _pl = _fe_problem.mesh().getPointLocator();
      47          95 :   _pl->enable_out_of_mesh_mode();
      48          95 :   const auto npoints = _x_coord.size();
      49          95 :   if (npoints != _y_coord.size() || npoints != _z_coord.size())
      50           8 :     mooseError("The coordinate vectors are a different size.  \n",
      51             :                "   x_coord size = ",
      52             :                npoints,
      53             :                ";  y_coord size = ",
      54           4 :                _y_coord.size(),
      55             :                ";  z_coord size = ",
      56           4 :                _z_coord.size());
      57             : 
      58          91 :   _point_elems.clear();
      59         377 :   for (std::size_t i = 0; i < npoints; ++i)
      60             :   {
      61         286 :     Point pt(_x_coord[i], _y_coord[i], _z_coord[i]);
      62         286 :     const auto elem = (*_pl)(pt);
      63         286 :     if (elem)
      64         262 :       _point_elems.insert(elem->id());
      65             :   }
      66          91 : }
      67             : 
      68             : Marker::MarkerValue
      69        2925 : ReporterPointMarker::computeElementMarker()
      70             : {
      71        2925 :   return (_point_elems.count(_current_elem->id()) ? _inside : _empty);
      72             : }

Generated by: LCOV version 1.14