LCOV - code coverage report
Current view: top level - src/markers - BooleanComboMarker.C (source / functions) Hit Total Coverage
Test: neams-th-coe/cardinal: be601f Lines: 37 38 97.4 %
Date: 2025-07-15 20:50:38 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         108 : BooleanComboMarker::validParams()
      25             : {
      26         108 :   auto params = Marker::validParams();
      27         108 :   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         216 :   params.addRequiredParam<std::vector<MarkerName>>(
      30             :       "refine_markers", "A list of the marker names to be used for refinement.");
      31         216 :   params.addRequiredParam<std::vector<MarkerName>>(
      32             :       "coarsen_markers", "A list of the marker names to be used for coasening.");
      33         216 :   params.addParam<MooseEnum>(
      34             :       "boolean_operator",
      35         324 :       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         216 :   params.addParam<MooseEnum>("priority",
      39         324 :                              MooseEnum("refinement coarsening", "refinement"),
      40             :                              "The operator to be prioritized when marking elements.");
      41             : 
      42         108 :   return params;
      43           0 : }
      44             : 
      45          54 : BooleanComboMarker::BooleanComboMarker(const InputParameters & parameters)
      46             :   : Marker(parameters),
      47          54 :     _refine_marker_names(parameters.get<std::vector<MarkerName>>("refine_markers")),
      48          54 :     _coarsen_marker_names(parameters.get<std::vector<MarkerName>>("coarsen_markers")),
      49         108 :     _use_and(getParam<MooseEnum>("boolean_operator") == "and"),
      50         216 :     _priority_refinement(getParam<MooseEnum>("priority") == "refinement")
      51             : {
      52         162 :   for (const auto & marker_name : _refine_marker_names)
      53         216 :     _refine_markers.push_back(&getMarkerValue(marker_name));
      54             : 
      55         156 :   for (const auto & marker_name : _coarsen_marker_names)
      56         204 :     _coarsen_markers.push_back(&getMarkerValue(marker_name));
      57          54 : }
      58             : 
      59             : Marker::MarkerValue
      60      296628 : BooleanComboMarker::computeElementMarker()
      61             : {
      62      296628 :   bool refine = _use_and;
      63             :   bool coarsen = _use_and;
      64             : 
      65      889884 :   for (const auto m : _refine_markers)
      66             :   {
      67      593256 :     if (_use_and)
      68      575712 :       refine &= static_cast<MarkerValue>((*m)[0]) == MarkerValue::REFINE;
      69             :     else
      70       17544 :       refine |= static_cast<MarkerValue>((*m)[0]) == MarkerValue::REFINE;
      71             :   }
      72             : 
      73      611484 :   for (const auto m : _coarsen_markers)
      74             :   {
      75      314856 :     if (_use_and)
      76      297312 :       coarsen &= static_cast<MarkerValue>((*m)[0]) == MarkerValue::COARSEN;
      77             :     else
      78       17544 :       coarsen |= static_cast<MarkerValue>((*m)[0]) == MarkerValue::COARSEN;
      79             :   }
      80             : 
      81      296628 :   if (_priority_refinement)
      82             :   {
      83      287982 :     if (refine)
      84             :       return MarkerValue::REFINE;
      85      285822 :     if (coarsen)
      86      117648 :       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