- inputsThe AssemblyMeshGenerators that form the components of the assembly.
C++ Type:std::vector<MeshGeneratorName>
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>>
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
. 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.
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".
Example Syntax
[Mesh]
[rmp]
type = ReactorMeshParams
dim = 3
geom = "Square"
assembly_pitch = 2.84126
axial_regions = '1.0'
axial_mesh_intervals = '1'
top_boundary_id = 201
bottom_boundary_id = 202
radial_boundary_id = 200
[]
[pin1]
type = PinMeshGenerator
reactor_params = rmp
pin_type = 1
pitch = 1.42063
region_ids = '1 2 5'
quad_center_elements = true
[]
[pin2]
type = PinMeshGenerator
reactor_params = rmp
pin_type = 2
pitch = 1.42063
region_ids = '2'
quad_center_elements = true
[]
[pin3]
type = PinMeshGenerator
reactor_params = rmp
pin_type = 3
pitch = 1.42063
region_ids = '3 4'
quad_center_elements = true
[]
[amg1]
type = AssemblyMeshGenerator
assembly_type = 1
inputs = 'pin2'
pattern = '0 0;
0 0'
[]
[amg2]
type = AssemblyMeshGenerator
assembly_type = 2
inputs = 'pin3 pin1 pin2'
pattern = '0 1;
1 2'
[]
[cmg]
type = CoreMeshGenerator
inputs = 'amg2 amg1 empty'
dummy_assembly_name = empty
pattern = '1 0;
0 1'
extrude = true
[]
[rotate90]
type = TransformGenerator
input = cmg
transform = ROTATE
vector_value = '0 0 90'
[]
[translate]
type = TransformGenerator
input = cmg
transform = TRANSLATE
vector_value = '2.130945 -2.130945 0'
[]
[]
(modules/reactor/test/tests/meshgenerators/core_mesh_generator/core.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".
Example Core Periphery Syntax
[Mesh]
[rmp]
type = ReactorMeshParams
dim = 3
geom = "Hex"
assembly_pitch = 7.10315
axial_regions = '1.0'
axial_mesh_intervals = '1'
top_boundary_id = 201
bottom_boundary_id = 202
radial_boundary_id = 200
[]
[pin1]
type = PinMeshGenerator
reactor_params = rmp
pin_type = 1
pitch = 1.42063
num_sectors = 2
ring_radii = '0.2'
duct_halfpitch = '0.68'
mesh_intervals = '1 1 1'
region_ids = '1 2 5'
quad_center_elements = true
[]
[pin2]
type = PinMeshGenerator
reactor_params = rmp
pin_type = 2
pitch = 1.42063
num_sectors = 2
mesh_intervals = '2'
region_ids = '2'
quad_center_elements = true
[]
[pin3]
type = PinMeshGenerator
reactor_params = rmp
pin_type = 3
pitch = 1.42063
num_sectors = 2
ring_radii = '0.3818'
mesh_intervals = '1 1'
region_ids = '3 4'
quad_center_elements = true
[]
[amg1]
type = AssemblyMeshGenerator
assembly_type = 1
background_intervals = 1
inputs = 'pin2'
pattern = '0 0;
0 0 0;
0 0'
background_region_id = 10
[]
[amg2]
type = AssemblyMeshGenerator
assembly_type = 2
background_intervals = 1
inputs = 'pin1 pin3'
pattern = '0 0;
0 1 0;
1 0'
background_region_id = 20
[]
[cmg]
type = CoreMeshGenerator
inputs = 'amg1 amg2 empty'
dummy_assembly_name = empty
pattern = '1 1;
1 0 1;
1 1'
extrude = false
mesh_periphery = true
periphery_generator = triangle
periphery_region_id = 30
outer_circle_radius = 15
outer_circle_num_segments = 100
desired_area = 0.5
periphery_block_name = PERIPHERY_PTMG
[]
[rotate90]
type = TransformGenerator
input = cmg
transform = ROTATE
vector_value = '0 0 90'
[]
[]
(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
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
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
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
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
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
Controllable:No
Description:Keep the mesh from this mesh generator in memory with the name specified
Advanced Parameters
- desired_area0Desired (maximum) triangle area, or 0 to skip uniform refinement
Default:0
C++ Type:double
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
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
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
Controllable:No
Description:Determines if the core periphery should be meshed.
- outer_circle_radius0Radius of outer circle boundary.
Default:0
C++ Type:double
Controllable:No
Description:Radius of outer circle boundary.
- periphery_block_nameRGMB_COREBlock name for periphery zone.
Default:RGMB_CORE
C++ Type:std::string
Controllable:No
Description:Block name for periphery zone.
- periphery_generatortriangleThe meshgenerator to use when meshing the core boundary.
Default:triangle
C++ Type:MooseEnum
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
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
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
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
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
Controllable:No
Description:Number of layers to subdivide the periphery boundary.
Periphery Meshing: Prmg Specific Parameters
Input Files
- (tutorials/tutorial04_meshing/app/test/tests/rgmb_mesh_generators/rgmb_core_hexagonal.i)
- (tutorials/tutorial04_meshing/app/test/tests/reactor_examples/rgmb_abtr/rgmb_abtr.i)
- (modules/reactor/test/tests/meshgenerators/core_mesh_generator/core_periphery_prmg.i)
- (tutorials/tutorial04_meshing/app/test/tests/rgmb_mesh_generators/rgmb_core_cartesian.i)
- (tutorials/tutorial04_meshing/app/test/tests/rgmb_mesh_generators/rgmb_core_hexagonal_periphery.i)
- (modules/reactor/test/tests/meshgenerators/core_mesh_generator/core_periphery_ptmg_vol.i)
- (modules/reactor/test/tests/meshgenerators/core_mesh_generator/core.i)