https://mooseframework.inl.gov
ReactorGeometryMeshBuilderBase.h
Go to the documentation of this file.
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
72 
77 
80 
81 const subdomain_id_type DUMMY_ASSEMBLY_BLOCK_ID = (UINT16_MAX / 2) - 1;
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;
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 
108 {
109 public:
110  static InputParameters validParams();
111 
113 
115 
116  void generateData() override{};
117 
118 protected:
127  unsigned int getElemIntegerFromMesh(MeshBase & input_mesh,
128  std::string extra_int_name,
129  bool should_exist = false);
130 
135  void initializeReactorMeshParams(const std::string reactor_param_name);
136 
144  void printReactorMetadata(const std::string geometry_type,
145  const std::string mg_name,
146  const bool first_function_call = true);
147 
154  void printCoreMetadata(const std::string mg_name, const bool first_function_call);
155 
162  void printAssemblyMetadata(const std::string mg_name, const bool first_function_call);
163 
168  void printPinMetadata(const std::string mg_name);
169 
174 
181  template <typename T>
182  void printMetadataToConsole(const std::string metadata_name, const std::string mg_name);
183 
191  template <typename T>
192  void print2dMetadataToConsole(const std::string metadata_name, const std::string mg_name);
193 
203  void freeReactorMeshParams();
204 
211  template <typename T>
212  bool hasReactorParam(const std::string param_name);
213 
220  template <typename T>
221  const T & getReactorParam(const std::string & param_name);
222 
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 
244  MeshGeneratorName callExtrusionMeshSubgenerators(const MeshGeneratorName input_mesh_name);
245 
247  MeshGeneratorName _reactor_params;
250  {
251  Pin,
252  Assembly,
253  Drum,
254  Core
255  };
256 
265  void addDepletionId(MeshBase & input_mesh,
266  const MooseEnum & option,
267  const DepletionIDGenerationLevel generation_level,
268  const bool extrude);
269 
270 private:
272  std::unique_ptr<MeshBase> * _reactor_params_mesh;
273 };
274 
275 template <typename T>
276 bool
278 {
279  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  return getMeshProperty<T>(param_name, _reactor_params);
287 }
void printPinMetadata(const std::string mg_name)
Print pin-level metadata associated with ReactorGeometryMeshBuilder object.
static void addDepletionIDParams(InputParameters &parameters)
static const std::string drum_radii
const SubdomainName ASSEMBLY_BLOCK_NAME_PREFIX
void updateElementBlockNameId(MeshBase &input_mesh, Elem *elem, std::map< std::string, SubdomainID > &name_id_map, std::string elem_block_name, SubdomainID &next_free_id)
Updates the block names and ids of the element in an input mesh according to a map of block name to b...
static const std::string duct_block_names
static const std::string background_region_id
static const std::string assembly_type
const subdomain_id_type ASSEMBLY_BLOCK_ID_START
static const std::string region_id_as_block_name
const SubdomainName DRUM_BLOCK_NAME_PREFIX
static const std::string assembly_lattice
const SubdomainName PERIPHERAL_RING_BLOCK_NAME
bool hasReactorParam(const std::string param_name)
Checks whether parameter is defined in ReactorMeshParams metadata.
static const std::string is_single_pin
static const std::string peripheral_ring_radius
const subdomain_id_type CONTROL_DRUM_BLOCK_ID_PAD
const subdomain_id_type DUMMY_ASSEMBLY_BLOCK_ID
unsigned int getElemIntegerFromMesh(MeshBase &input_mesh, std::string extra_int_name, bool should_exist=false)
Initializes extra element integer from id name for a given mesh and throws an error if it should exis...
const subdomain_id_type PIN_BLOCK_ID_START
static const std::string reactor_params_name
static constexpr boundary_id_type ASSEMBLY_BOUNDARY_ID_START
static const std::string mesh_geometry
void initializeReactorMeshParams(const std::string reactor_param_name)
Initializes and checks validity of ReactorMeshParams mesh generator object.
const subdomain_id_type CONTROL_DRUM_BLOCK_ID_OUTER
static const std::string assembly_names
static const std::string background_block_name
void addDepletionId(MeshBase &input_mesh, const MooseEnum &option, const DepletionIDGenerationLevel generation_level, const bool extrude)
add depletion IDs
static const std::string axial_mesh_sizes
static const std::string peripheral_ring_region_id
static const std::string assembly_pitch
static const std::string radial_boundary_id
static const std::string pin_type
const SubdomainName TRI_BLOCK_NAME_SUFFIX
static const std::string drum_block_names
static const std::string pin_region_id_map
const BoundaryName PIN_BOUNDARY_NAME_PREFIX
void printReactorMetadata(const std::string geometry_type, const std::string mg_name, const bool first_function_call=true)
Print metadata associated with ReactorGeometryMeshBuilder object.
static const std::string extruded
void printAssemblyMetadata(const std::string mg_name, const bool first_function_call)
Print assembly-level metadata associated with ReactorGeometryMeshBuilder object.
static const std::string drum_pad_angles
const T & getReactorParam(const std::string &param_name)
Returns reference of parameter in ReactorMeshParams object.
const subdomain_id_type PERIPHERAL_RING_BLOCK_ID
void print2dMetadataToConsole(const std::string metadata_name, const std::string mg_name)
Print metadata with data type std::vector<std::vector<T>> and provided name that can be found with gi...
static const std::string duct_halfpitches
int8_t boundary_id_type
std::unique_ptr< MeshBase > * _reactor_params_mesh
The dummy param mesh that we need to clear once we&#39;ve generated (in freeReactorMeshParams) ...
static const std::string mesh_dimensions
const subdomain_id_type ASSEMBLY_BLOCK_ID_TRI_FLEXIBLE
MeshGeneratorName callExtrusionMeshSubgenerators(const MeshGeneratorName input_mesh_name)
Calls mesh subgenerators related to extrusion, renaming of top / bottom boundaries, and defining plane IDs.
static const std::string pitch
DepletionIDGenerationLevel
specify the depletion id is generated at which reactor generation level
static constexpr boundary_id_type PIN_BOUNDARY_ID_START
const SubdomainName CORE_BLOCK_NAME_PREFIX
const SubdomainName PIN_BLOCK_NAME_PREFIX
MeshGeneratorName _reactor_params
The ReactorMeshParams object that is storing the reactor global information for this reactor geometry...
static const std::string top_boundary_id
ReactorGeometryMeshBuilderBase(const InputParameters &parameters)
const subdomain_id_type CONTROL_DRUM_BLOCK_ID_INNER_TRI
static const std::string is_homogenized
static const std::string is_control_drum
void printMetadataToConsole(const std::string metadata_name, const std::string mg_name)
Print metadata with provided name that can be found with given mesh generator name.
static const std::string pin_region_ids
static const std::string flexible_assembly_stitching
static const std::string pin_lattice
static const std::string ring_radii
void printCoreMetadata(const std::string mg_name, const bool first_function_call)
Print core-level metadata associated with ReactorGeometryMeshBuilder object.
const BoundaryName CORE_BOUNDARY_NAME
const subdomain_id_type PIN_BLOCK_ID_TRI_FLEXIBLE
void printGlobalReactorMetadata()
Print global ReactorMeshParams metadata associated with ReactorGeometryMeshBuilder object...
const subdomain_id_type CONTROL_DRUM_BLOCK_ID_INNER
static const std::string pin_block_names
const subdomain_id_type PIN_BLOCK_ID_TRI
static const std::string axial_mesh_intervals
A base class that contains common members for Reactor Geometry Mesh Builder mesh generators.
const BoundaryName ASSEMBLY_BOUNDARY_NAME_PREFIX
void freeReactorMeshParams()
Releases the mesh obtained in _reactor_params_mesh.
const InputParameters & parameters() const
static const std::string drum_region_ids
static const std::string bypass_meshgen
static const std::string pin_names
static const std::string num_sectors_flexible_stitching
static const std::string duct_region_ids
const subdomain_id_type MAX_PIN_TYPE_ID
static const std::string bottom_boundary_id
static const std::string pin_block_name_map
static const std::string ring_region_ids