LCOV - code coverage report
Current view: top level - include/meshgenerators - ReactorGeometryMeshBuilderBase.h (source / functions) Hit Total Coverage
Test: idaholab/moose reactor: #31405 (292dce) with base fef103 Lines: 3 3 100.0 %
Date: 2025-09-04 07:56:24 Functions: 1 1 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             : #pragma once
      11             : 
      12             : #include "MeshGenerator.h"
      13             : #include "libmesh/elem.h"
      14             : 
      15             : namespace RGMB
      16             : {
      17             : 
      18             : // General global quantities for mesh building
      19             : static const std::string mesh_dimensions = "mesh_dimensions";
      20             : static const std::string mesh_geometry = "mesh_geometry";
      21             : static const std::string top_boundary_id = "top_boundary_id";
      22             : static const std::string bottom_boundary_id = "bottom_boundary_id";
      23             : static const std::string radial_boundary_id = "radial_boundary_id";
      24             : static const std::string axial_mesh_intervals = "axial_mesh_intervals";
      25             : static const std::string axial_mesh_sizes = "axial_mesh_sizes";
      26             : static const std::string reactor_params_name = "reactor_params_name";
      27             : static const std::string is_single_pin = "is_single_pin";
      28             : static const std::string is_homogenized = "is_homogenized";
      29             : static const std::string extruded = "extruded";
      30             : static const std::string pin_region_ids = "pin_region_ids";
      31             : static const std::string pin_block_names = "pin_block_names";
      32             : static const std::string pin_region_id_map = "pin_region_id_map";
      33             : static const std::string pin_block_name_map = "pin_block_name_map";
      34             : static const std::string flexible_assembly_stitching = "flexible_assembly_stitching";
      35             : static const std::string num_sectors_flexible_stitching = "num_sectors_flexible_stitching";
      36             : static const std::string is_control_drum = "is_control_drum";
      37             : static const std::string drum_region_ids = "drum_region_ids";
      38             : static const std::string drum_block_names = "drum_block_names";
      39             : 
      40             : // Geometrical quantities
      41             : static const std::string pitch = "pitch";
      42             : static const std::string assembly_pitch = "assembly_pitch";
      43             : static const std::string ring_radii = "ring_radii";
      44             : static const std::string duct_halfpitches = "duct_halfpitches";
      45             : static const std::string peripheral_ring_radius = "peripheral_ring_radius";
      46             : static const std::string pin_lattice = "pin_lattice";
      47             : static const std::string assembly_lattice = "assembly_lattice";
      48             : static const std::string drum_pad_angles = "drum_pad_angles";
      49             : static const std::string drum_radii = "drum_radii";
      50             : 
      51             : // Quantities related to region ids, type ids, and block names
      52             : static const std::string pin_type = "pin_type";
      53             : static const std::string pin_names = "pin_names";
      54             : static const std::string assembly_type = "assembly_type";
      55             : static const std::string assembly_names = "assembly_names";
      56             : static const std::string ring_region_ids = "ring_region_ids";
      57             : static const std::string background_region_id = "background_region_id";
      58             : static const std::string background_block_name = "background_block_name";
      59             : static const std::string duct_region_ids = "duct_region_ids";
      60             : static const std::string duct_block_names = "duct_block_names";
      61             : static const std::string peripheral_ring_region_id = "peripheral_ring_region_id";
      62             : static const std::string region_id_as_block_name = "region_id_as_block_name";
      63             : 
      64             : // Name of a boolean metadata that indicates whether or not we skipped mesh generation in favor of
      65             : // only generating the mesh metadata
      66             : static const std::string bypass_meshgen = "bypass_meshgen";
      67             : 
      68             : // Default values for setting block IDs and region IDs of RGMB regions
      69             : const subdomain_id_type PIN_BLOCK_ID_TRI_FLEXIBLE = 9998;
      70             : const subdomain_id_type PIN_BLOCK_ID_TRI = 9999;
      71             : const subdomain_id_type PIN_BLOCK_ID_START = 10000;
      72             : 
      73             : const subdomain_id_type CONTROL_DRUM_BLOCK_ID_INNER_TRI = 19995;
      74             : const subdomain_id_type CONTROL_DRUM_BLOCK_ID_INNER = 19996;
      75             : const subdomain_id_type CONTROL_DRUM_BLOCK_ID_PAD = 19997;
      76             : const subdomain_id_type CONTROL_DRUM_BLOCK_ID_OUTER = 19998;
      77             : 
      78             : const subdomain_id_type ASSEMBLY_BLOCK_ID_TRI_FLEXIBLE = 19999;
      79             : const subdomain_id_type ASSEMBLY_BLOCK_ID_START = 20000;
      80             : 
      81             : const subdomain_id_type DUMMY_ASSEMBLY_BLOCK_ID = (UINT16_MAX / 2) - 1;
      82             : const subdomain_id_type PERIPHERAL_RING_BLOCK_ID = 25000;
      83             : 
      84             : const subdomain_id_type MAX_PIN_TYPE_ID = (UINT16_MAX / 2) - 1;
      85             : 
      86             : // Default values for setting block names of RGMB regions
      87             : const SubdomainName PIN_BLOCK_NAME_PREFIX = "RGMB_PIN";
      88             : const SubdomainName ASSEMBLY_BLOCK_NAME_PREFIX = "RGMB_ASSEMBLY";
      89             : const SubdomainName DRUM_BLOCK_NAME_PREFIX = "RGMB_DRUM";
      90             : const SubdomainName CORE_BLOCK_NAME_PREFIX = "RGMB_CORE";
      91             : const SubdomainName TRI_BLOCK_NAME_SUFFIX = "_TRI";
      92             : const SubdomainName PERIPHERAL_RING_BLOCK_NAME = "PERIPHERY_GENERATED";
      93             : 
      94             : // Default values for setting boundary ids of RGMB regions
      95             : static constexpr boundary_id_type PIN_BOUNDARY_ID_START = 20000;
      96             : static constexpr boundary_id_type ASSEMBLY_BOUNDARY_ID_START = 2000;
      97             : 
      98             : // Default values for setting boundary names of RGMB regions
      99             : const BoundaryName PIN_BOUNDARY_NAME_PREFIX = "outer_pin_";
     100             : const BoundaryName ASSEMBLY_BOUNDARY_NAME_PREFIX = "outer_assembly_";
     101             : const BoundaryName CORE_BOUNDARY_NAME = "outer_core";
     102             : }
     103             : 
     104             : /**
     105             :  * A base class that contains common members for Reactor Geometry Mesh Builder mesh generators.
     106             :  */
     107             : class ReactorGeometryMeshBuilderBase : public MeshGenerator
     108             : {
     109             : public:
     110             :   static InputParameters validParams();
     111             : 
     112             :   static void addDepletionIDParams(InputParameters & parameters);
     113             : 
     114             :   ReactorGeometryMeshBuilderBase(const InputParameters & parameters);
     115             : 
     116        1764 :   void generateData() override{};
     117             : 
     118             : protected:
     119             :   /**
     120             :    * Initializes extra element integer from id name for a given mesh and throws an error
     121             :    * if it should exist but cannot be found within the mesh
     122             :    * @param input_mesh input mesh
     123             :    * @param extra_int_name extra element id name
     124             :    * @param should_exist whether extra element integer should already exist in mesh
     125             :    * @return extra element integer
     126             :    */
     127             :   unsigned int getElemIntegerFromMesh(MeshBase & input_mesh,
     128             :                                       std::string extra_int_name,
     129             :                                       bool should_exist = false);
     130             : 
     131             :   /**
     132             :    * Initializes and checks validity of ReactorMeshParams mesh generator object
     133             :    * @param reactor_param_name name of ReactorMeshParams mesh generator
     134             :    */
     135             :   void initializeReactorMeshParams(const std::string reactor_param_name);
     136             : 
     137             :   /**
     138             :    * Print metadata associated with ReactorGeometryMeshBuilder object
     139             :    * @param geometry_type       type of geometry (pin / assembly / core) under consideration
     140             :    * @param mg_name             name of mesh generator associated with this object
     141             :    * @param first_function_call whether this is the original function call, which will trigger
     142             :    * additional output messages
     143             :    */
     144             :   void printReactorMetadata(const std::string geometry_type,
     145             :                             const std::string mg_name,
     146             :                             const bool first_function_call = true);
     147             : 
     148             :   /**
     149             :    * Print core-level metadata associated with ReactorGeometryMeshBuilder object
     150             :    * @param mg_name name of mesh generator associated with core
     151             :    * @param first_function_call whether this is the original function call, which will trigger
     152             :    * additional output messages
     153             :    */
     154             :   void printCoreMetadata(const std::string mg_name, const bool first_function_call);
     155             : 
     156             :   /**
     157             :    * Print assembly-level metadata associated with ReactorGeometryMeshBuilder object
     158             :    * @param mg_name name of mesh generator associated with assembly
     159             :    * @param whether this is the original function call, which will trigger additional output
     160             :    * messages
     161             :    */
     162             :   void printAssemblyMetadata(const std::string mg_name, const bool first_function_call);
     163             : 
     164             :   /**
     165             :    * Print pin-level metadata associated with ReactorGeometryMeshBuilder object
     166             :    * @param mg_name name of mesh generator associated with assembly
     167             :    */
     168             :   void printPinMetadata(const std::string mg_name);
     169             : 
     170             :   /**
     171             :    * Print global ReactorMeshParams metadata associated with ReactorGeometryMeshBuilder object
     172             :    */
     173             :   void printGlobalReactorMetadata();
     174             : 
     175             :   /**
     176             :    * Print metadata with provided name that can be found with given mesh generator name
     177             :    * @tparam T datatype of metadata value to output
     178             :    * @param metadata_name Name of metadata to output
     179             :    * @param mg_name Name of mesh generator that stores metadata
     180             :    */
     181             :   template <typename T>
     182             :   void printMetadataToConsole(const std::string metadata_name, const std::string mg_name);
     183             : 
     184             :   /**
     185             :    * Print metadata with data type std::vector<std::vector<T>> and provided name that can be found
     186             :    * with given mesh generator name
     187             :    * @tparam T datatype of elements in 2-D vector to output
     188             :    * @param metadata_name Name of metadata to output
     189             :    * @param mg_name Name of mesh generator that stores metadata
     190             :    */
     191             :   template <typename T>
     192             :   void print2dMetadataToConsole(const std::string metadata_name, const std::string mg_name);
     193             : 
     194             :   /**
     195             :    * Releases the mesh obtained in _reactor_params_mesh.
     196             :    *
     197             :    * This _must_ be called in any object that derives from this one, because
     198             :    * the MeshGenerator system requires that all meshes that are requested from
     199             :    * the system are moved out of the MeshGenerator system and into the MeshGenerator
     200             :    * that requests them. In our case, we move it into this MeshGenerator and then
     201             :    * release (delete) it.
     202             :    */
     203             :   void freeReactorMeshParams();
     204             : 
     205             :   /**
     206             :    * Checks whether parameter is defined in ReactorMeshParams metadata
     207             :    * @tparam T datatype of metadata value associated with metadata name
     208             :    * @param param_name name of ReactorMeshParams parameter
     209             :    * @return whether parameter is defined in ReactorMeshParams metadata
     210             :    */
     211             :   template <typename T>
     212             :   bool hasReactorParam(const std::string param_name);
     213             : 
     214             :   /**
     215             :    * Returns reference of parameter in ReactorMeshParams object
     216             :    * @tparam T datatype of metadata value associated with metadata name
     217             :    * @param param_name name of ReactorMeshParams parameter
     218             :    * @return reference to parameter defined in ReactorMeshParams metadata
     219             :    */
     220             :   template <typename T>
     221             :   const T & getReactorParam(const std::string & param_name);
     222             : 
     223             :   /**
     224             :    * Updates the block names and ids of the element in an input mesh according
     225             :    * to a map of block name to block ids. Updates the map if the block name is not in the map
     226             :    * @param input_name input mesh
     227             :    * @param elem iterator to mesh element
     228             :    * @param name_id_map map of name-id pairs used in mesh
     229             :    * @param elem_block_name block name to set for element
     230             :    * @param next_free_id next free block id to use if block name does not exist in map
     231             :    */
     232             :   void updateElementBlockNameId(MeshBase & input_mesh,
     233             :                                 Elem * elem,
     234             :                                 std::map<std::string, SubdomainID> & name_id_map,
     235             :                                 std::string elem_block_name,
     236             :                                 SubdomainID & next_free_id);
     237             : 
     238             :   /**
     239             :    * Calls mesh subgenerators related to extrusion, renaming of top / bottom boundaries, and
     240             :    * defining plane IDs
     241             :    * @param input_mesh_name name of input 2D mesh generator to extrude
     242             :    * @return name of final output 3D mesh generator
     243             :    */
     244             :   MeshGeneratorName callExtrusionMeshSubgenerators(const MeshGeneratorName input_mesh_name);
     245             : 
     246             :   ///The ReactorMeshParams object that is storing the reactor global information for this reactor geometry mesh
     247             :   MeshGeneratorName _reactor_params;
     248             :   /// specify the depletion id is generated at which reactor generation level
     249             :   enum class DepletionIDGenerationLevel
     250             :   {
     251             :     Pin,
     252             :     Assembly,
     253             :     Drum,
     254             :     Core
     255             :   };
     256             : 
     257             :   /**
     258             :    * add depletion IDs
     259             :    * @param input_mesh input mesh
     260             :    * @param option option for specifying level of details
     261             :    * @param generation_level depletion id is generated at which reactor generator level
     262             :    * @param extrude whether input mesh is extruded, if false, assume that input mesh is defined in
     263             :    * 2D and do not use 'plane_id` in depletion id generation
     264             :    */
     265             :   void addDepletionId(MeshBase & input_mesh,
     266             :                       const MooseEnum & option,
     267             :                       const DepletionIDGenerationLevel generation_level,
     268             :                       const bool extrude);
     269             : 
     270             : private:
     271             :   /// The dummy param mesh that we need to clear once we've generated (in freeReactorMeshParams)
     272             :   std::unique_ptr<MeshBase> * _reactor_params_mesh;
     273             : };
     274             : 
     275             : template <typename T>
     276             : bool
     277             : ReactorGeometryMeshBuilderBase::hasReactorParam(const std::string param_name)
     278             : {
     279         804 :   return hasMeshProperty<T>(param_name, _reactor_params);
     280             : }
     281             : 
     282             : template <typename T>
     283             : const T &
     284             : ReactorGeometryMeshBuilderBase::getReactorParam(const std::string & param_name)
     285             : {
     286      549458 :   return getMeshProperty<T>(param_name, _reactor_params);
     287             : }

Generated by: LCOV version 1.14