- inputsThe AssemblyMeshGenerators that form the components of the assembly.
C++ Type:std::vector<MeshGeneratorName>
Unit:(no unit assumed)
Controllable:No
Description:The AssemblyMeshGenerators that form the components of the assembly.
- patternA double-indexed array starting with the upper-left corner where the indexrepresents the layout of input assemblies in the core lattice.
C++ Type:std::vector<std::vector<unsigned int>>
Unit:(no unit assumed)
Controllable:No
Description:A double-indexed array starting with the upper-left corner where the indexrepresents the layout of input assemblies in the core lattice.
CoreMeshGenerator
This CoreMeshGenerator object is designed to generate a core-like structure, with IDs, from a reactor geometry. The core-like structure consists of a pattern of assembly-like structures generated with AssemblyMeshGenerator and is permitted to have "empty" locations. The size and spacing of the assembly-like structures is defined, and enforced by declaration in the ReactorMeshParams.
Overview
This object is designed to be used in the Reactor MeshGenerator workflow, which also consists of ReactorMeshParams
, PinMeshGenerator
, and AssemblyMeshGenerator
.
The CoreMeshGenerator
object generates core-like reactor geometry structures in either square or hexagonal geometries with block ID assignments and reporting (extra integer) IDs, as described in PatternedCartesianMeshGenerator
and PatternedHexMeshGenerator
. There is expected to only be a single CoreMeshGenerator
in a Mesh definition.
This object automates the use and functionality of the PatternedCartesianMeshGenerator
for cartesian reactor geometry, PatternedHexMeshGenerator
for hexagonal reactor geometry and, if extruding to three dimensions, the `AdvancedExtruderGenerator' through the use of the MeshSubgenerator
functionality and supporting functionality from RenameBoundaryGenerator
and `PlaneIDMeshGenerator'. In addition to the functionality of the MeshGenerators
used, this object also automates boundary ID and name assignment.
In addition to the functionality of PatternedCartesianMeshGenerator
or PatternedHexMeshGenerator
, this object allows for the definition of "empty" lattice locations using MeshSubgenerators
. This is achieved through the use of creating "dummy" assembly meshes via CartesianMeshGenerator
or HexagonConcentricCircleAdaptiveBoundaryMeshGenerator
respectively. These assemblies are then removed after the core mesh creation via BlockDeletionGenerator
. If assembly homogenization is leveraged by setting both "use_as_assembly" and "homogenized" to true, then all assemblies inputted to CoreMeshGenerator
must be homogenized. Mixtures of heterogeneous and homogeneous assembly inputs to CoreMeshGenerator
are not currently supported.
The CoreMeshGenerator
object adopts much of the existing input structure of patterned MeshGenerators but also adapts to use parameters that are more accessible for reactor design.
Reporting ID Information
The CoreMeshGenerator
object automatically tags the mesh, if three dimensional, with the axial layers using the extra integer name "plane_id". The assemblies composing the core are also tagged via PatternedCartesianMeshGenerator
or PatternedHexMeshGenerator
, using the "cell" assignment type, with the extra integer name "assembly_id" and any "dummy" assembly (identified via the "dummy_assembly_name" parameter) locations excluded.
Depletion ID Information
The CoreMeshGenerator
object can optionally assign a depletion ID, with the extra integer name "depletion_id". The depletion ID generation option can be enabled by setting the "generate_depletion_id" to true. The level of detail needed for depletion zones is specified in the input parameter "depletion_id_type". For a core with heterogeneous assemblies, "depletion_id_type" can be either pin
and pin_type
. All pins in the core have separate depletion ID values by setting "depletion_id_type" to pin
. By setting that option to pin_type
, unique ID values are assigned to individual pin types in assemblies. However, pins in different assemblies have different depletion IDs even if they have the same type. For a core with homogenized assemblies (no explicit pins), "depletion_id_type" can be either assembly
and assembly_type
, which assign unique ID values to individual assemblies or to individual assembly types, respectively.
Exterior Boundary ID Information
The CoreMeshGenerator
objects automatically assigns boundary information. The exterior core boundary ID is assigned with the parameter "radial_boundary_id" and will have the name "outer_core".
If the core 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".
Flexible Assembly Stitching
By default, CoreMeshGenerator
will stitch assemblies created by AssemblyMeshGenerator
together without regard for the number and location of nodes at the exterior boundaries of the assemblies. This works if very similar assemblies are being stitched together. However, this will lead to an output core mesh with hanging nodes if dissimilar assemblies are being stitched together. The following situations are identified as scenarios where such hanging nodes can occur between stitched assemblies:
Two assemblies have the same constituent pin geometry but vary in total number of pins in the pin lattice
Two assemblies have the same pin lattice structure and geometry, but the constituent pins of each assembly are subdivided into a different number of sectors per side.
One assembly is defined as a heterogeneous mesh (contains one or more pins), and the other assembly is homogenized.
CoreMeshGenerator
will throw a warning if it detects that assembly stitching may lead to hanging nodes. If this happens, the user can regenerate the core mesh by setting ReactorMeshParams/"flexible_assembly_stitching" to true
to enable flexible assembly stitching. This flexible assembly stitching algorithm deletes the outermost mesh interval and replaces it with a triangulated region using FlexiblePatternGenerator
. For a homogeneous assembly, the entire assembly region is triangulated. By doing so, the number of nodes at the outer boundary of each input assembly will be identical and positioned at the same locations, thus enabling stitching of dissimilar assemblies. In order to control the number of sectors at the outer assembly boundary after the triangulation step, the user can set this parameter using ReactorMeshParams/"num_sectors_at_flexible_boundary". The following three images describe how flexible assembly patterning can be used to address the issue of hanging nodes for the three cases listed above:



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. "show_rgmb_metadata" can be set to true in order to see the values of these metadata entries as console output.
At the core level, the following metadata is defined on the output mesh:
assembly_names
: Mesh generator names of input assemblies in lattice, similar to input parameter (/Mesh/CoreMeshGenerator/inputs) but with the dummy assembly name excludedlattice
: 2-D lattice of assemblies in core, where each location represents the 0-based index of the assembly in the list of names under theassembly_names
metadata entry. A -1 entry represents a dummy assembly.
For each of the assemblies listed in assembly_names
, the assembly-level metadata is also displayed. In addition, if any of these assemblies are comprised of pins in a lattice, the pin-level metadata of these constituent pins is also displayed. A list of assembly-level and pin-level metadata defined on the core mesh can be found in AssemblyMeshGenerator and PinMeshGenerator respectively.
For meshes where a core periphery is defined, the following metadata is also defined:
peripheral_ring_radius
: Outer radius of core periphery, equivalent to the input parameterCoreMeshGenerator
/"outer_circle_radius".peripheral_ring_region_id
: Region ID associated with core periphery, equivalent to the input parameterCoreMeshGenerator
/"periphery_region_id".
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/core_mesh_generator/core_square.i)This is the resulting mesh block layout, where by default a single block is assigned to all of the quadrilateral elements in the mesh:

This is the resulting "region_id" extra element integer layout, which was chosen by setting the region IDs for each of the constituent pins and assemblies:

Periphery Mesh Generation
The CoreMeshGenerator
includes support for meshing a circular reactor periphery surrounding the core. This integration supports using either PeripheralTriangleMeshGenerator
(PTMG) or PeripheralRingMeshGenerator
(PRMG), selected using the "periphery_generator" input option by specifying either triangle
or quad_ring
, respectively. The input options for these mesh generators are provided below, but more details on their meaning and usage can be found in their respective documentation pages. The generated periphery region is given the block name "periphery_block_name" (default RGMB_CORE
) and extra integer reporting ID region_id
"periphery_region_id", along with outer boundary name "outside_periphery". If ReactorMeshParams/"region_id_as_block_name" is set to true
, the resulting element will have the block name RGMB_CORE_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 "periphery_block_name".
Example Core Periphery Syntax
(contrib/moose/modules/reactor/test/tests/meshgenerators/core_mesh_generator/core_periphery_ptmg_vol.i)This is the resulting mesh block layout:

Input Parameters
- dummy_assembly_namedummyThe place holder name in "inputs" that indicates an empty position.
Default:dummy
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:The place holder name in "inputs" that indicates an empty position.
- 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
- 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
- depletion_id_typeDetermine level of details in depletion ID assignment.
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Determine level of details in depletion ID assignment.
- generate_depletion_idFalseDetermine wheter the depletion ID is assigned.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determine wheter the depletion ID is assigned.
Depletion Id Assignment Parameters
- desired_area0Desired (maximum) triangle area, or 0 to skip uniform refinement
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Desired (maximum) triangle area, or 0 to skip uniform refinement
- desired_area_funcDesired (local) triangle area as a function of x,y; omit to skip non-uniform refinement
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Desired (local) triangle area as a function of x,y; omit to skip non-uniform refinement
- outer_circle_num_segments0Number of radial segments to subdivide outer circle boundary.
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Number of radial segments to subdivide outer circle boundary.
Periphery Meshing: Ptmg Specific Parameters
- mesh_peripheryFalseDetermines if the core periphery should be meshed.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines if the core periphery should be meshed.
- outer_circle_radius0Radius of outer circle boundary.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Radius of outer circle boundary.
- periphery_block_nameRGMB_COREBlock name for periphery zone.
Default:RGMB_CORE
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Block name for periphery zone.
- periphery_generatortriangleThe meshgenerator to use when meshing the core boundary.
Default:triangle
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:The meshgenerator to use when meshing the core boundary.
- periphery_region_id65535ID for periphery zone for assignment of region_id extra element id.
Default:65535
C++ Type:unsigned short
Unit:(no unit assumed)
Controllable:No
Description:ID for periphery zone for assignment of region_id extra element id.
Periphery Meshing 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
- periphery_num_layers1Number of layers to subdivide the periphery boundary.
Default:1
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Number of layers to subdivide the periphery boundary.