LCOV - code coverage report
Current view: top level - src/markers - ReporterPointMarker.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 35 35 100.0 %
Date: 2025-07-17 01:28:37 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       14324 : ReporterPointMarker::validParams()
      17             : {
      18       14324 :   InputParameters params = Marker::validParams();
      19       14324 :   params.addClassDescription("Marks the region inside or empty if it contains a reporter defined "
      20             :                              "point for refinement or coarsening.");
      21       14324 :   params.addRequiredParam<ReporterName>("x_coord_name", "reporter x-coordinate name");
      22       14324 :   params.addRequiredParam<ReporterName>("y_coord_name", "reporter y-coordinate name");
      23       14324 :   params.addRequiredParam<ReporterName>("z_coord_name", "reporter z-coordinate name");
      24       14324 :   MooseEnum marker_states = Marker::markerStates();
      25       14324 :   params.addRequiredParam<MooseEnum>(
      26             :       "inside", marker_states, "How to mark elements containing a point");
      27       14324 :   params.addRequiredParam<MooseEnum>(
      28             :       "empty", marker_states, "How to mark elements not containing a point");
      29       28648 :   return params;
      30       14324 : }
      31             : 
      32          31 : ReporterPointMarker::ReporterPointMarker(const InputParameters & parameters)
      33             :   : Marker(parameters),
      34             :     ReporterInterface(this),
      35          31 :     _inside(parameters.get<MooseEnum>("inside").getEnum<MarkerValue>()),
      36          31 :     _empty(parameters.get<MooseEnum>("empty").getEnum<MarkerValue>()),
      37          31 :     _x_coord(getReporterValue<std::vector<Real>>("x_coord_name", REPORTER_MODE_REPLICATED)),
      38          31 :     _y_coord(getReporterValue<std::vector<Real>>("y_coord_name", REPORTER_MODE_REPLICATED)),
      39          62 :     _z_coord(getReporterValue<std::vector<Real>>("z_coord_name", REPORTER_MODE_REPLICATED))
      40             : {
      41          31 : }
      42             : 
      43             : void
      44          88 : ReporterPointMarker::markerSetup()
      45             : {
      46          88 :   _pl = _fe_problem.mesh().getPointLocator();
      47          88 :   _pl->enable_out_of_mesh_mode();
      48          88 :   const auto npoints = _x_coord.size();
      49          88 :   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          84 :   _point_elems.clear();
      59         348 :   for (std::size_t i = 0; i < npoints; ++i)
      60             :   {
      61         264 :     Point pt(_x_coord[i], _y_coord[i], _z_coord[i]);
      62         264 :     const auto elem = (*_pl)(pt);
      63         264 :     if (elem)
      64         241 :       _point_elems.insert(elem->id());
      65             :   }
      66          84 : }
      67             : 
      68             : Marker::MarkerValue
      69        2600 : ReporterPointMarker::computeElementMarker()
      70             : {
      71        2600 :   return (_point_elems.count(_current_elem->id()) ? _inside : _empty);
      72             : }

Generated by: LCOV version 1.14