- reactor_paramsThe ReactorMeshParams MeshGenerator that is the basis for this component mesh.
C++ Type:MeshGeneratorName
Controllable:No
Description:The ReactorMeshParams MeshGenerator that is the basis for this component mesh.
ControlDrumMeshGenerator
This ControlDrumMeshGenerator object is designed to generate drum-like structures, with IDs, from a reactor geometry. These structures can be used directly within CoreMeshGenerator to stitchcontrol drums into a core lattice alongside AssemblyMeshGenerator structures
Overview
This object is designed to be used in the Reactor MeshGenerator workflow, which also consists of ReactorMeshParams, PinMeshGenerator, AssemblyMeshGenerator, and CoreMeshGenerator.
This object creates the target mesh by automating the use and functionality of the AdvancedConcentricCircleGenerator and FlexiblePatternGenerator mesh generators to build the 2-D geometry of the control drum region and, if extruding to three dimensions, the AdvancedExtruderGenerator through the use of the MeshSubgenerator
functionality and supporting functionality from PlaneIDMeshGenerator. In addition to the functionality of the MeshGenerators
used, this object also automates block ID, boundary ID, and boundary name assignment for the output control drum mesh.
The ControlDrumMeshGenerator
object generates control drum reactor geometry structures in either square or hexagonal geometries. These drum structures are created by defining two concentric rings, which creates an annular area that will be referred to as the 'drum region'. The area within the inner radius will be referred to as the 'inner drum' region, while the area outside of the outer radius will be regarded as the 'background' region. Optionally, the drum region can be sub-divided into two azimuthal sectors to distinguish the placement of the 'drum pad' region, which is commonly used in microreactor-type designs as a control mechanism to regulate the neutron absorption rate within the reactor core. A figure showing the relevant regions defined in ControlDrumMeshGenerator
is shown in Figure 1, where the left diagram represents the case with a drum pad explicitly defined, while the right diagram represents the case without a drum pad (i.e., the control drum is defined as a single region).

Figure 1: Control drum mesh with explicit drum pad region (left) and no drum pad region (right).
The inner and outer radius of the drum region are defined by setting "drum_inner_radius" and "drum_outer_radius", respectively. "drum_inner_intervals" controls the number of radial mesh sub-intervals in the inner drum region, while "drum_intervals" sets the number of radial mesh sub-intervals in the drum region. "num_azimuthal_sectors" is used to define the number of azimuthal sectors to subdivide the drum region into, while "pad_start_angle" and "pad_end_angle" are used to set the start and end angles of the drum pad region, respectively. Here, angles start in the positive y direction and rotate clockwise, and the difference between the end and start angles cannot exceed 360 degrees. Additionally, the start angle needs to be defined between 0 and 360 degrees, and the end angle cannot exceed 720 degrees. Additionally, if the pad angles do not line up with the azimuthal discretization of the drum region, additional azimuthal nodes are defined to ensure that the pad region as defined by the pad start and end angles lines up exactly with the azimuthal discretization of the drum region.
In order to facilitate stitching of ControlDrumMeshGenerator
objects in downstream core lattice patterning with CoreMeshGenerator, users must set ReactorMeshParams/"flexible_assembly_stitching" to true to ensure that a fixed number of sectors are created at the boundary surfaces of the control drum mesh. The resulting mesh will be tagged with the extra element IDs, block names, and outer boundaries in a similar manner to AssemblyMeshGenerator
, and can be inputted directly to CoreMeshGenerator.
Region ID, Block ID, and Block Name Information
The parameter "region_ids" is used to identify regions within the control drum, and this functionality is intended for easy identification of regions within the mesh that will have the same properties, such as material assignments, and this region ID will be assigned as an extra element integer.
"region_ids" is given as an A
(inner) by R
(outer) vector, where A
is the number of axial layer (equal to 1 for 2-D meshes) and R
is the number of radial intervals per axial layer. Here, R
is equal to 4 for control drum meshes with explicit drum pads defined, where the radial region ID ordering follows (drum inner, drum pad, drum ex-pad, background) according to the left image in Figure 1. Similarly, when the drum pad angles are not defined, R
equals 3 and follows the ordering (drum inner, drum, background), based on the right image in Figure 1.
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 for the control drum regions. In this case, the ordering and size of the block names should match those of "region_ids", and each block name will be prepended with the prefix RGMB_DRUM<assembly_type_id>_
, where <assembly_type_id>
is the assembly ID provided by the user through "assembly_type". If not specified, the block names will be assigned automatically as RGMB_DRUM<assembly_type_id>
by default. If ReactorMeshParams/"region_id_as_block_name" is set to true
, the resulting elements will have the block name RGMB_DRUM<assembly_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 or 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.
Reporting ID Information
As mentioned above, the ControlDrumMeshGenerator
object will tag all elements (that do not belong to one of the constituent pins) with the extra integer reporting ID named "region_id" with the value equal to the drum region ID.
The ControlDrumMeshGenerator
object also automatically tags all elements in the mesh with the "assembly_type" using the extra_integer name "assembly_type_id" and, if extruded, elements in each axial layer are tagged the axial layers using the name "plane_id".
Depletion ID Information
The ControlDrumMeshGenerator
object can optionally assign a depletion ID, with the extra integer name "depletion_id", only if it is the final mesh generator. 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" and must be set to pin_type
, which will assign a unique depletion ID for each radial and axial zone of the drum.
Exterior Boundary ID Information
The ControlDrumMeshGenerator
objects automatically assigns boundary information derived from the "assembly_type" parameter. The exterior assembly boundary is assigned the ID equal to
static constexpr boundary_id_type ASSEMBLY_BOUNDARY_ID_START = 2000;
(modules/reactor/include/meshgenerators/ReactorGeometryMeshBuilderBase.h)+ the assembly type ID and is named "outer_assembly_<assembly_type_id>" (for example a control drum with an assembly type ID of 1 will have a boundary ID of 2001 and boundary name of "outer_assembly_1").
If the assembly 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 additional 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. The following metadata is defined on the control drum mesh:
assembly_type
: Value of type_id associated with control drum, equivalent to the input parameter "assembly_type"pitch
: Assembly pitch, equivalent to the input parameter "assembly_pitch"is_control_drum
: Whether or not this mesh is a control drum, equal to true for all structures created byControlDrumMeshGenerator
.drum_radii
: Vector of length two corresponding to the inner and outer radii of the drum region, controlled by "drum_inner_radius" and "drum_outer_radius", respectively.drum_region_ids
: 2-D vector of region ids corresponding to radial and axial zones within control drum regions of assembly mesh, equivalent to the input parameter "region_ids". Inner indexing is radial zones, while outer index is axial zones.
In addition, the value of the reactor_params_name
metadata 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
[Mesh<<<{"href": "../../syntax/Mesh/index.html"}>>>]
[rmp]
type = ReactorMeshParams<<<{"description": "This ReactorMeshParams object acts as storage for persistent information about the reactor geometry.", "href": "ReactorMeshParams.html"}>>>
geom<<<{"description": "The geometry type of the reactor mesh"}>>> = "Hex"
assembly_pitch<<<{"description": "Center to center distance of assemblies"}>>> = 20
flexible_assembly_stitching<<<{"description": "Use FlexiblePatternGenerator for stitching dissimilar assemblies together"}>>> = true
radial_boundary_id<<<{"description": "The boundary ID to set on the outer radial boundary of a CoreMeshGenerator object"}>>> = 200
region_id_as_block_name<<<{"description": "Set block names based on region id"}>>> = true
[]
[drum]
type = ControlDrumMeshGenerator<<<{"description": "This ControlDrumMeshGenerator object is designed to generate drum-like structures, with IDs, from a reactor geometry. These structures can be used directly within CoreMeshGenerator to stitchcontrol drums into a core lattice alongside AssemblyMeshGenerator structures", "href": "ControlDrumMeshGenerator.html"}>>>
reactor_params<<<{"description": "The ReactorMeshParams MeshGenerator that is the basis for this component mesh."}>>> = rmp
assembly_type<<<{"description": "The assembly type integer ID to use for this control drum definition. This parameter should be uniquely defined for each ControlDrumMeshGenerator and AssemblyMeshGenerator structure in the RGMB workflow."}>>> = 1
drum_inner_radius<<<{"description": "Inner radius of drum region"}>>> = 8
drum_outer_radius<<<{"description": "Outer radius of drum region"}>>> = 9.1
num_azimuthal_sectors<<<{"description": "Number of azimuthal sectors to sub-divide the drum region into"}>>> = 180
drum_inner_intervals<<<{"description": "Number of radial mesh intervals in region up to inner drum radius"}>>> = 10
pad_start_angle<<<{"description": "Starting angle of drum pad region"}>>> = 90
pad_end_angle<<<{"description": "Ending angle of drum pad region"}>>> = 180
region_ids<<<{"description": "IDs for each radial and axial zone for assignment of region_id extra element id. Inner indexing is radial zones (drum inner/drum/drum outer), outer indexing is axial"}>>> = '1 2 3 4'
[]
[]
(modules/reactor/test/tests/meshgenerators/control_drum_mesh_generator/drum_pad.i)If "pad_start_angle" and "pad_end_angle" are not provided, the drum region is discretized with the same region ID applied to all azimuthal drum elements. In this case, only 3 values per axial level should be provided in "region_ids" (drum inner, drum, background). In order to calculate the volume fraction of the pad region, MultiControlDrumFunction
can be used.
Input Parameters
- block_namesBlock names for each radial and axial zone. Inner indexing is radial zones (drum inner/drum/drum outer), outer indexing is axial
C++ Type:std::vector<std::vector<std::string>>
Controllable:No
Description:Block names for each radial and axial zone. Inner indexing is radial zones (drum inner/drum/drum outer), 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
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
- assembly_typeThe assembly type integer ID to use for this control drum definition. This parameter should be uniquely defined for each ControlDrumMeshGenerator and AssemblyMeshGenerator structure in the RGMB workflow.
C++ Type:unsigned short
Controllable:No
Description:The assembly type integer ID to use for this control drum definition. This parameter should be uniquely defined for each ControlDrumMeshGenerator and AssemblyMeshGenerator structure in the RGMB workflow.
- region_idsIDs for each radial and axial zone for assignment of region_id extra element id. Inner indexing is radial zones (drum inner/drum/drum outer), outer indexing is axial
C++ Type:std::vector<std::vector<unsigned short>>
Controllable:No
Description:IDs for each radial and axial zone for assignment of region_id extra element id. Inner indexing is radial zones (drum inner/drum/drum outer), outer indexing is axial
Id Assigment Parameters
- azimuthal_node_tolerance0.1(in degrees) The absolute tolerance for which to shift an azimuthal node to match the pad start/end angles
Default:0.1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:(in degrees) The absolute tolerance for which to shift an azimuthal node to match the pad start/end angles
- pad_end_angleEnding angle of drum pad region
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Ending angle of drum pad region
- pad_start_angleStarting angle of drum pad region
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Starting angle of drum pad region
Control Pad Specifications Parameters
- depletion_id_typeDetermine level of details in depletion ID assignment.
C++ Type:MooseEnum
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
Controllable:No
Description:Determine wheter the depletion ID is assigned.
Depletion Id Assignment Parameters
- drum_inner_intervals1Number of radial mesh intervals in region up to inner drum radius
Default:1
C++ Type:unsigned int
Controllable:No
Description:Number of radial mesh intervals in region up to inner drum radius
- drum_inner_radiusInner radius of drum region
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Inner radius of drum region
- drum_intervals1Number of radial mesh intervals in drum region
Default:1
C++ Type:unsigned int
Controllable:No
Description:Number of radial mesh intervals in drum region
- drum_outer_radiusOuter radius of drum region
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Outer radius of drum region
- num_azimuthal_sectorsNumber of azimuthal sectors to sub-divide the drum region into
C++ Type:unsigned int
Controllable:No
Description:Number of azimuthal sectors to sub-divide the drum region into
Drum Specifications Parameters
- 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
- 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
Input Files
- (modules/reactor/test/tests/meshgenerators/core_mesh_generator/core_flexible_assembly_stitching_with_drum_hex.i)
- (modules/reactor/test/tests/meshgenerators/control_drum_mesh_generator/drum_nopad.i)
- (tutorials/tutorial04_meshing/app/test/tests/rgmb_mesh_generators/rgmb_core_cd.i)
- (modules/reactor/test/tests/meshgenerators/core_mesh_generator/core_with_drum_depletion_id.i)
- (modules/reactor/test/tests/meshgenerators/control_drum_mesh_generator/drum_nopad_err.i)
- (tutorials/tutorial04_meshing/app/test/tests/reactor_examples/rgmb_empire/rgmb_empire.i)
- (modules/reactor/test/tests/meshgenerators/core_mesh_generator/core_flexible_assembly_stitching_with_drum_cart.i)
- (modules/reactor/test/tests/meshgenerators/control_drum_mesh_generator/drum_pad.i)
- (modules/reactor/test/tests/meshgenerators/control_drum_mesh_generator/drum_depletion_id.i)