LCOV - code coverage report
Current view: top level - src/meshgenerators - CartesianIDPatternedMeshGenerator.C (source / functions) Hit Total Coverage
Test: idaholab/moose reactor: #31405 (292dce) with base fef103 Lines: 40 46 87.0 %
Date: 2025-09-04 07:56:24 Functions: 3 3 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 "CartesianIDPatternedMeshGenerator.h"
      11             : #include "ReportingIDGeneratorUtils.h"
      12             : 
      13             : registerMooseObject("ReactorApp", CartesianIDPatternedMeshGenerator);
      14             : 
      15             : InputParameters
      16         180 : CartesianIDPatternedMeshGenerator::validParams()
      17             : {
      18         180 :   InputParameters params = PatternedMeshGenerator::validParams();
      19         360 :   params.addRequiredParam<std::string>("id_name", "Name of integer ID set");
      20         360 :   params.addParam<std::vector<MeshGeneratorName>>(
      21             :       "exclude_id", "Name of input meshes to be excluded in ID generation");
      22         360 :   MooseEnum option("cell pattern manual", "cell");
      23         360 :   params.addParam<MooseEnum>("assign_type", option, "Type of integer ID assignment");
      24         360 :   params.addParam<std::vector<std::vector<dof_id_type>>>(
      25             :       "id_pattern",
      26             :       "User-defined element IDs. A double-indexed array starting with the upper-left corner");
      27         180 :   params.addClassDescription("Generate Certesian lattice meshes with reporting ID assignment that "
      28             :                              "indentifies individual components of lattice.");
      29             : 
      30         180 :   return params;
      31         180 : }
      32             : 
      33          90 : CartesianIDPatternedMeshGenerator::CartesianIDPatternedMeshGenerator(
      34          90 :     const InputParameters & parameters)
      35             :   : PatternedMeshGenerator(parameters),
      36          90 :     _element_id_name(getParam<std::string>("id_name")),
      37          90 :     _assign_type(
      38          90 :         getParam<MooseEnum>("assign_type").getEnum<ReportingIDGeneratorUtils::AssignType>()),
      39         270 :     _use_exclude_id(isParamValid("exclude_id"))
      40             : {
      41          90 :   if (_use_exclude_id && _assign_type != ReportingIDGeneratorUtils::AssignType::cell)
      42           0 :     paramError("exclude_id", "works only when \"assign_type\" is equal 'cell'");
      43         270 :   if (!isParamValid("id_pattern") && _assign_type == ReportingIDGeneratorUtils::AssignType::manual)
      44           0 :     paramError("id_pattern", "required when \"assign_type\" is equal to 'manual'");
      45             : 
      46          90 :   if (_assign_type == ReportingIDGeneratorUtils::AssignType::manual)
      47          27 :     _id_pattern = getParam<std::vector<std::vector<dof_id_type>>>("id_pattern");
      48          90 :   _exclude_ids.resize(_input_names.size());
      49          90 :   if (_use_exclude_id)
      50             :   {
      51             :     std::vector<MeshGeneratorName> exclude_id_name =
      52          18 :         getParam<std::vector<MeshGeneratorName>>("exclude_id");
      53          36 :     for (unsigned int i = 0; i < _input_names.size(); ++i)
      54             :     {
      55             :       _exclude_ids[i] = false;
      56          45 :       for (auto input_name : exclude_id_name)
      57          27 :         if (_input_names[i] == input_name)
      58             :         {
      59             :           _exclude_ids[i] = true;
      60             :           break;
      61             :         }
      62             :     }
      63           9 :   }
      64             :   else
      65         234 :     for (unsigned int i = 0; i < _input_names.size(); ++i)
      66             :       _exclude_ids[i] = false;
      67          90 : }
      68             : 
      69             : std::unique_ptr<MeshBase>
      70          90 : CartesianIDPatternedMeshGenerator::generate()
      71             : {
      72          90 :   auto mesh = PatternedMeshGenerator::generate();
      73             : 
      74             :   unsigned int extra_id_index;
      75          90 :   if (!mesh->has_elem_integer(_element_id_name))
      76         180 :     extra_id_index = mesh->add_elem_integer(_element_id_name);
      77             :   else
      78             :   {
      79           0 :     extra_id_index = mesh->get_elem_integer_index(_element_id_name);
      80           0 :     paramWarning(
      81           0 :         "id_name", "An element integer with the name '", _element_id_name, "' already exists");
      82             :   }
      83             : 
      84             :   // patternedMeshGenerator for Carterisan lattice does not support duct structures
      85             :   const bool has_assembly_duct = false;
      86             :   const std::set<subdomain_id_type> duct_block_ids;
      87             :   // asssign reporting IDs to individual elements
      88          90 :   ReportingIDGeneratorUtils::assignReportingIDs(*mesh,
      89             :                                                 extra_id_index,
      90          90 :                                                 _assign_type,
      91          90 :                                                 _use_exclude_id,
      92          90 :                                                 _exclude_ids,
      93             :                                                 has_assembly_duct,
      94             :                                                 duct_block_ids,
      95          90 :                                                 _meshes,
      96             :                                                 _pattern,
      97          90 :                                                 _id_pattern);
      98             : 
      99          90 :   return mesh;
     100           0 : }

Generated by: LCOV version 1.14