LCOV - code coverage report
Current view: top level - src/markers - BooleanComboMarker.C (source / functions) Hit Total Coverage
Test: neams-th-coe/cardinal: ddd5f2 Lines: 37 38 97.4 %
Date: 2026-06-07 19:35:24 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /********************************************************************/
       2             : /*                  SOFTWARE COPYRIGHT NOTIFICATION                 */
       3             : /*                             Cardinal                             */
       4             : /*                                                                  */
       5             : /*                  (c) 2021 UChicago Argonne, LLC                  */
       6             : /*                        ALL RIGHTS RESERVED                       */
       7             : /*                                                                  */
       8             : /*                 Prepared by UChicago Argonne, LLC                */
       9             : /*               Under Contract No. DE-AC02-06CH11357               */
      10             : /*                With the U. S. Department of Energy               */
      11             : /*                                                                  */
      12             : /*             Prepared by Battelle Energy Alliance, LLC            */
      13             : /*               Under Contract No. DE-AC07-05ID14517               */
      14             : /*                With the U. S. Department of Energy               */
      15             : /*                                                                  */
      16             : /*                 See LICENSE for full restrictions                */
      17             : /********************************************************************/
      18             : 
      19             : #include "BooleanComboMarker.h"
      20             : 
      21             : registerMooseObject("MooseApp", BooleanComboMarker);
      22             : 
      23             : InputParameters
      24          96 : BooleanComboMarker::validParams()
      25             : {
      26          96 :   auto params = Marker::validParams();
      27          96 :   params.addClassDescription("A class which takes multiple markers and ANDs / ORs them together to "
      28             :                              "determine if an element should be refined or coarsened.");
      29         192 :   params.addRequiredParam<std::vector<MarkerName>>(
      30             :       "refine_markers", "A list of the marker names to be used for refinement.");
      31         192 :   params.addRequiredParam<std::vector<MarkerName>>(
      32             :       "coarsen_markers", "A list of the marker names to be used for coasening.");
      33         192 :   params.addParam<MooseEnum>(
      34             :       "boolean_operator",
      35         288 :       MooseEnum("and or", "and"),
      36             :       "How the different markers should be combined. Options are to AND each "
      37             :       "marker together or to OR them together.");
      38         192 :   params.addParam<MooseEnum>("priority",
      39         288 :                              MooseEnum("refinement coarsening", "refinement"),
      40             :                              "The operator to be prioritized when marking elements.");
      41             : 
      42          96 :   return params;
      43           0 : }
      44             : 
      45          48 : BooleanComboMarker::BooleanComboMarker(const InputParameters & parameters)
      46             :   : Marker(parameters),
      47          48 :     _refine_marker_names(parameters.get<std::vector<MarkerName>>("refine_markers")),
      48          48 :     _coarsen_marker_names(parameters.get<std::vector<MarkerName>>("coarsen_markers")),
      49          96 :     _use_and(getParam<MooseEnum>("boolean_operator") == "and"),
      50         144 :     _priority_refinement(getParam<MooseEnum>("priority") == "refinement")
      51             : {
      52         144 :   for (const auto & marker_name : _refine_marker_names)
      53         192 :     _refine_markers.push_back(&getMarkerValue(marker_name));
      54             : 
      55         144 :   for (const auto & marker_name : _coarsen_marker_names)
      56         192 :     _coarsen_markers.push_back(&getMarkerValue(marker_name));
      57          48 : }
      58             : 
      59             : Marker::MarkerValue
      60       18228 : BooleanComboMarker::computeElementMarker()
      61             : {
      62       18228 :   bool refine = _use_and;
      63             :   bool coarsen = _use_and;
      64             : 
      65       54684 :   for (const auto m : _refine_markers)
      66             :   {
      67       36456 :     if (_use_and)
      68       18912 :       refine &= static_cast<MarkerValue>((*m)[0]) == MarkerValue::REFINE;
      69             :     else
      70       17544 :       refine |= static_cast<MarkerValue>((*m)[0]) == MarkerValue::REFINE;
      71             :   }
      72             : 
      73       54684 :   for (const auto m : _coarsen_markers)
      74             :   {
      75       36456 :     if (_use_and)
      76       18912 :       coarsen &= static_cast<MarkerValue>((*m)[0]) == MarkerValue::COARSEN;
      77             :     else
      78       17544 :       coarsen |= static_cast<MarkerValue>((*m)[0]) == MarkerValue::COARSEN;
      79             :   }
      80             : 
      81       18228 :   if (_priority_refinement)
      82             :   {
      83        9582 :     if (refine)
      84             :       return MarkerValue::REFINE;
      85        7422 :     if (coarsen)
      86        3054 :       return MarkerValue::COARSEN;
      87             :   }
      88             :   else
      89             :   {
      90        8646 :     if (coarsen)
      91             :       return MarkerValue::COARSEN;
      92        5448 :     if (refine)
      93        1080 :       return MarkerValue::REFINE;
      94             :   }
      95             : 
      96             :   return MarkerValue::DO_NOTHING;
      97             : }

Generated by: LCOV version 1.14