- pitchThe pitch for the outermost boundary polygon
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The pitch for the outermost boundary polygon
- reactor_paramsThe ReactorMeshParams MeshGenerator that is the basis for this component conformal mesh.
C++ Type:MeshGeneratorName
Unit:(no unit assumed)
Controllable:No
Description:The ReactorMeshParams MeshGenerator that is the basis for this component conformal mesh.
PinMeshGenerator
This PinMeshGenerator object is designed to generate pin-like structures, with IDs, from a reactor geometry. Whether it be a square or hexagonal pin, they are divided into three substructures - the innermost radial pin regions, the single bridging background region, and the square or hexagonal ducts regions.
Overview
This object is designed to be used in the Reactor MeshGenerator workflow, which also consists of ReactorMeshParams
, AssemblyMeshGenerator
, and CoreMeshGenerator
.
The PinMeshGenerator
object generates square or hexagonal reactor geometry pin cell structures which may be combined into larger assembly structures using AssemblyMeshGenerator
. The block IDs, external boundary ID, region IDs (e.g., materials), and reporting IDs (extra element integers identifying unique planes and pins, as described in PatternedCartesianMeshGenerator
and PatternedHexMeshGenerator
are automatically assigned once the user provides some basic information.
This pin may be extruded to three dimensions by setting "extrude" to 'true', however such extruded pins cannot be used as input to AssemblyMeshGenerator
. Instead, 2-D pins must be inputted to AssemblyMeshGenerator
and "extrude" should be set to 'true' at the AssemblyMeshGenerator
definition to extrude the assembly to 3-D.
The PinMeshGenerator
object automates the use and functionality of the PolygonConcentricCircleMeshGenerator
and, if extruding to three dimensions, the AdvancedExtruderGenerator
through the use of the MeshSubgenerator
functionality and supporting functionality from TransformGenerator
, RenameBoundaryGenerator
, and PlaneIDMeshGenerator
. In addition to the functionality of the MeshGenerators
used, this object also automates block ID assignment and boundary ID and name assignment.
The PinMeshGenerator
object adopts much of the existing input structure of PolygonConcentricCircleMeshGenerator
but uses parameters that are more typical for reactor design. Setting "homogenized" to true generates a homogenized pin structure that calls SimpleHexagonGenerator
. This currently only works for hexagonal geometries, and whether a triangular or quadrilateral discretization is used for homogenization depends on the value of "quad_center_elements". In addition, setting the parameter "use_as_assembly" to true defines the output pincell structure as a single assembly, ensuring that the block names, outer boundaries, and extra element integers match the conventions used by AssemblyMeshGenerator
. This option should be used if defining single assemblies that are to be inputted directly to CoreMeshGenerator
, since AssemblyMeshGenerator
requires the assembly to be composed of multiple pins in a lattice structure.
Region ID, Block ID, and Block Name Information
The "region_ids" parameter provides a map of "region_id" values to assign to zones in the pin mesh. Each row in this map corresponds to a single axial layer of the pin and contains individual entries corresponding to the radial zones within the pin, starting from the centermost region and extending radially outward. The number of columns (entries in the row) should be identical to the number of rings + 1 (background region) + number of ducts. The required number of rows is dependent on the number of axial layers in the pin. For 2D pins, a single row of entries should be provided. For 3D pins, multiple rows must be provided (one for each axial layer). For 3D pins, the top row corresponds to the bottom of the pin cell.
The region_ids parameter entries can conveniently be selected to match material ids to be assigned to each region of the problem. Using the same value in multiple entries of the "region_ids" parameter will effectively assign elements in multiple zones to the same region_id.
Region IDs are mapped to the mesh as an extra element integer, where the integer value for each mesh element will match the information provided in "region_ids". For ease of use, block ids are generated automatically by the mesh generator, and for users who require element identification by block name, the optional parameter "block_names" can be defined to set block names in the same manner as "region_ids". In the resulting mesh, each block name will be prepended with the prefix RGMB_PIN<pin_type_id>_
, where <pin_type_id>
is the pin ID provided by the user through "pin_type". If block names are not provided by the user, block names will be assigned automatically to have the name RGMB_PIN<pin_type_id>
. If ReactorMeshParams/"region_id_as_block_name" is set to true
, the resulting element will have the block name RGMB_PIN<pin_type_id>_REG<region_id>
, where <region_id>
is the region ID of the element. Note that "region_id_as_block_name" should not be used in conjunction with "block_names". Regardless of whether block names are provided are not, the suffix _TRI
is automatically added to the block name for all triangular elements in the central pin mesh elements when "quad_center_elements" is set to false. This is to ensure that quadrilateral elements and triangular elements that might otherwise share the same region ID are mapped to separate block names. If "use_as_assembly" is set to true, the block name will have the prefix RGMB_ASSEMBLY<pin_type_id>
instead of RGMB_PIN<pin_type_id>
.
Reporting ID Information
As mentioned above, the PinMeshGenerator
object tags the mesh elements with the extra integer reporting ID named "region_id".
The PinMeshGenerator
object also automatically tags the mesh with the "pin_type" using the extra integer name "pin_type_id" and, if extruded, the axial layers using the extra integer name "plane_id". If "use_as_assembly" is set to true, the extra integer name "assembly_type_id" will be generated with integer values equivalent to "pin_type_id".
Exterior Boundary ID Information
The PinMeshGenerator
object automatically assigns boundary information derived from the "pin_type" parameter. The exterior pin boundary is assigned the ID equal to 20000 + the pin type ID and is named "outer_pin_<pin_type_id>" (for example a pin with a pin type ID of 1 will have a boundary ID of 20001 and boundary name of "outer_pin_1"). If "use_as_assembly" is set to true, the outer boundary name will be "outer_assembly_<pin_type_id>".
If the pin is extruded to three dimensions the top-most boundary ID must be assigned using "top_boundary_id" and will have the name "top", while the bottom-most boundary must be assigned using "bottom_boundary_id" and will have the name "bottom".
Metadata Information
Users may be interested in defining metadata to represent the reactor geometry and region IDs assigned to each geometry zone, which may be useful to users who want mesh geometry and composition information without having to inspect the generated mesh itself. In order to see the values of these metadata entries as console output, "show_rgmb_metadata" can be set to true.
At the pin level, the following metadata is defined on the pin mesh:
pin_type
: pin_type id associated with pin mesh, equivalent to the input parameter "pin_type"pitch
: Pitch of outermost boundary polygon, equivalent to the input parameter "pitch"is_homogenized
: Whether or not pin mesh is homogenized, equivalent to the input parameter "homogenized"ring_radii
: Length of ring radii comprising of pin region, equivalent to the input parameter "ring_radii".duct_halfpitches
: Length of apothems defining the duct locations, equivalent to the input parameter "duct_halfpitch"ring_region_ids
: 2-D vector of region ids corresponding to radial and axial zones within ring regions of pin mesh, based on the ring-related region ids of the input parameter "region_ids". Inner indexing is radial zones, while outer index is axial zones.background_region_id
: 1-D vector of region_ids corresponding to axial zones of background regions of pin mesh, based on the background-related region ids of the input parameter "region_ids".duct_region_ids
: 2-D vector of region ids corresponding to radial and axial zones within duct regions of pin mesh, based on the duct-related region ids of the input parameter "region_ids". Inner indexing is radial zones, while outer index is axial zones.
In addition, the value of the metadata reactor_params_name
can be used to retrieve global metadata defined by ReactorMeshParams. Please refer to ReactorMeshParams to see a list of metadata defined by this mesh generator.
For applications where an output mesh does not need to be created and meshing routines can consist entirely of defining reactor-based metadata, the parameter [Mesh]
/"data_driven_generator" can be set to the mesh generator that would generate an output mesh from RGMB metadata.
Example Syntax
(contrib/moose/modules/reactor/test/tests/meshgenerators/pin_mesh_generator/pin_square.i)This is the resulting mesh block layout, where by default a single block is assigned to the triangular elements and another block is assigned to the quadrilateral elements:

This is the resulting "region_id" extra element integer layout, which was chosen by setting the region IDs for each radial region within the pin:

Input Parameters
- block_namesBlock names for each radial and axial zone. Inner indexing is radial zones (pin/background/duct), outer indexing is axial
C++ Type:std::vector<std::vector<std::string>>
Unit:(no unit assumed)
Controllable:No
Description:Block names for each radial and axial zone. Inner indexing is radial zones (pin/background/duct), outer indexing is axial
- extrudeFalseDetermines if this is the final step in the geometry construction and extrudes the 2D geometry to 3D. If this is true then this mesh cannot be used in further mesh building in the Reactor workflow
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines if this is the final step in the geometry construction and extrudes the 2D geometry to 3D. If this is true then this mesh cannot be used in further mesh building in the Reactor workflow
- quad_center_elementsTrueWhether the center elements are quad or triangular.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether the center elements are quad or triangular.
- show_rgmb_metadataFalsePrint out RGMB-related metadata to console output
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Print out RGMB-related metadata to console output
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set the enabled status of the MooseObject.
- save_with_nameKeep the mesh from this mesh generator in memory with the name specified
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Keep the mesh from this mesh generator in memory with the name specified
Advanced Parameters
- duct_halfpitchApothem of the ducts. If unspecified, no duct is present.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Apothem of the ducts. If unspecified, no duct is present.
- mesh_intervals1 The number of meshing intervals for each region starting at the center. Parameter should be size:((length(ring_radii) + length(duct_halfpitch) + 1
Default:1
C++ Type:std::vector<unsigned int>
Unit:(no unit assumed)
Controllable:No
Description:The number of meshing intervals for each region starting at the center. Parameter should be size:((length(ring_radii) + length(duct_halfpitch) + 1
- num_sectorsNumber of azimuthal sectors in each quadrant
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Number of azimuthal sectors in each quadrant
Duct Specifications Parameters
- homogenizedFalseDetermines whether homogenized pin mesh should be generated
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether homogenized pin mesh should be generated
- pin_typeThe integer ID for this pin type definition
C++ Type:unsigned short
Unit:(no unit assumed)
Controllable:No
Description:The integer ID for this pin type definition
- ring_radiiRadii of major concentric circles of the pin. If unspecified, no pin is present.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Radii of major concentric circles of the pin. If unspecified, no pin is present.
- use_as_assemblyFalseDetermines whether pin mesh should be used as an assembly mesh
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether pin mesh should be used as an assembly mesh
Pin Specifications Parameters
- nemesisFalseWhether or not to output the mesh file in the nemesisformat (only if output = true)
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to output the mesh file in the nemesisformat (only if output = true)
- outputFalseWhether or not to output the mesh file after generating the mesh
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to output the mesh file after generating the mesh
- show_infoFalseWhether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
Debugging Parameters
- region_idsIDs for each radial and axial zone for assignment of region_id extra element id. Inner indexing is radial zones (pin/background/duct), outer indexing is axial
C++ Type:std::vector<std::vector<unsigned short>>
Unit:(no unit assumed)
Controllable:No
Description:IDs for each radial and axial zone for assignment of region_id extra element id. Inner indexing is radial zones (pin/background/duct), outer indexing is axial