LCOV - code coverage report
Current view: top level - src/userobjects - ValueFractionHeuristicUserObject.C (source / functions) Hit Total Coverage
Test: neams-th-coe/cardinal: ddd5f2 Lines: 28 29 96.6 %
Date: 2026-06-07 19:35:24 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #include "ValueFractionHeuristicUserObject.h"
       2             : 
       3             : registerMooseObject("CardinalApp", ValueFractionHeuristicUserObject);
       4             : 
       5             : InputParameters
       6          12 : ValueFractionHeuristicUserObject::validParams()
       7             : {
       8             : 
       9          12 :   InputParameters param = ClusteringUserObjectBase::validParams();
      10          24 :   param.addRequiredRangeCheckedParam<Real>("upper_fraction",
      11             :                                            "0.0 < upper_fraction &  upper_fraction < 1.0",
      12             :                                            "upper percentage of error for the heuristics");
      13          24 :   param.addRequiredRangeCheckedParam<Real>("lower_fraction",
      14             :                                            "0.0 < lower_fraction & lower_fraction < 1.0 ",
      15             :                                            "lower percentage of error for the heuristics");
      16          12 :   param.addClassDescription("Clusters elements whose variable values both fall within either a"
      17             :                             "specified upper or lower fraction of the extremes.");
      18             : 
      19          12 :   return param;
      20           0 : }
      21           9 : ValueFractionHeuristicUserObject::ValueFractionHeuristicUserObject(const InputParameters & params)
      22             :   : ClusteringUserObjectBase(params),
      23           6 :     _upper_fraction(getParam<Real>("upper_fraction")),
      24          12 :     _lower_fraction(getParam<Real>("lower_fraction")),
      25           6 :     _max(std::numeric_limits<Real>::min()),
      26           9 :     _min(std::numeric_limits<Real>::max())
      27             : {
      28           6 :   if (_lower_fraction + _upper_fraction > 1)
      29           3 :     mooseError("lower_fraction + upper_fraction must be less than 1");
      30           3 : }
      31             : 
      32             : void
      33           6 : ValueFractionHeuristicUserObject::extremesFinder()
      34             : {
      35             : 
      36         612 :   for (auto & elem : _mesh.active_element_ptr_range())
      37             :   {
      38         600 :     auto score = getMetricData(elem);
      39         600 :     _max = std::max(_max, score);
      40         603 :     _min = std::min(_min, score);
      41           6 :   }
      42           6 :   _upper_cut_off = (1 - _upper_fraction) * (_max - _min) + _min;
      43           6 :   _lower_cut_off = _lower_fraction * (_max - _min) + _min;
      44           6 : }
      45             : 
      46             : bool
      47        1974 : ValueFractionHeuristicUserObject::evaluate(libMesh::Elem * base_element,
      48             :                                            libMesh::Elem * neighbor_element) const
      49             : {
      50             : 
      51        1974 :   Real base_metric_value = getMetricData(base_element);
      52        1974 :   Real neighbor_metric_value = getMetricData(neighbor_element);
      53        1974 :   return (base_metric_value > _upper_cut_off && neighbor_metric_value > _upper_cut_off) ||
      54        1908 :          (base_metric_value < _lower_cut_off && neighbor_metric_value < _lower_cut_off);
      55             : }

Generated by: LCOV version 1.14