- polygon_sizeSize of the polygon to be generated (given as either apothem or radius depending on polygon_size_style).
C++ Type:double
Controllable:No
Description:Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style).
PolygonConcentricCircleMeshGenerator
This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.
Overview

Figure 1: A typical mesh generated by this PolygonConcentricCircleMeshGenerator
object.
The PolygonConcentricCircleMeshGenerator
object generates a 2D mesh for concentric circles with a regular polygon enclosure with or without external ducts. A typical mesh generated by this object is shown in Figure 1. Polygons with 3 or more sides (e.g. triangle, square, pentagon, hexagon,...) can be meshed using this object. The central concentric circular regions (termed rings
) as well as the peripheral polygonal regions (termed ducts
) are optional (see Figure 2). The region excluding any rings and ducts is termed the background
region.
Geometry Information
The most fundamental geometry parameters that are needed by this object is:
"num_sides": the number of sides of the polygon enclosure;
"polygon_size_style": the style in which the parameter "polygon_size" will be given. This parameter can be either
apothem
(center to side distance) orradius
(center to vertex distance)."polygon_size": the size of the polygon enclosure in terms of either
apothem
orradius
(selected by another parameter, "polygon_size_style"

Figure 2: A schematic drawing showing the different regions that can be generated by this PolygonConcentricCircleMeshGenerator
object.
If concentric circle regions are needed, "ring_radii" must be provided to define the outer radius of each ring. If duct regions are needed, "duct_sizes" must be provided to define the inner boundary of each duct. Similar to "polygon_size", "duct_sizes" can either be apothems or radii of the corresponding ducts, decided by "duct_sizes_style".
Mesh Information
The parameters that are needed for meshing can be categorized into azimuthal and radial information, which determine the mesh density.
The azimuthal mesh discretization is controlled by "num_sectors_per_side", which is a vector that has the same length as "num_sides". Each element of "num_sectors_per_side" must be an even integer, which is the number of azimuthal intervals of the corresponding side. The sides are indexed counterclockwise with the upper-right polygon side being the first side as shown in Figure 2.
The radial mesh discretization is controlled by separate parameters for rings
, background
and ducts
regions, which are "ring_intervals", "background_intervals", and "duct_intervals", respectively.
In addition, the radial meshing density of each rings
, background
and ducts
region can be biased by setting corresponding parameters, which are "ring_radial_biases", "background_radial_bias", and "duct_radial_biases", respectively. The bias value should be a positive Real
type parameter, which is the radial dimension ratio between two radially-neighboring elements (outer to inner).
Boundary Layers
Aside from the general mesh radial biasing options described above, users can also define boundary layers on each ring
, background
, and duct
regions. For each region, both inner and outer boundary layers are supported (in this case, inner boundary layer refers to a boundary layer on the volume closer to the center of the polygon, and outer boundary layer refers to a boundary layer on the volume further from the center of the polygon; these two volumes are separated by the boundary itself). Each boundary layer requires three key input parameters:
boundary layer width
: the radial width of the boundary layer within the region. Note that the summation of the inner and outer boundary layers widths must be smaller than the width of the block layer itself. The specific input parameters are "ring_inner_boundary_layer_widths", "ring_outer_boundary_layer_widths", "background_inner_boundary_layer_width", "background_outer_boundary_layer_width", "duct_inner_boundary_layer_widths", and "duct_outer_boundary_layer_widths".boundary layer intervals
: the number of radial mesh intervals within the boundary layer. The specific parameters are "ring_inner_boundary_layer_intervals", "ring_outer_boundary_layer_intervals", "background_inner_boundary_layer_intervals", "background_outer_boundary_layer_intervals", "duct_inner_boundary_layer_intervals", and "duct_outer_boundary_layer_intervals".boundary layer bias
: the growth factor used for radial mesh biasing for the boundary layer. The specific parameters are "ring_inner_boundary_layer_biases", "ring_outer_boundary_layer_biases", "background_inner_boundary_layer_bias", "background_outer_boundary_layer_bias", "duct_inner_boundary_layer_biases", and "duct_outer_boundary_layer_biases". A bias greater than 1 means the element size increases with increasing radial coordinate, while a bias less than 1 means the element size decreases with increasing radial coordinate. A bias of 1 indicates uniformly spaced elements with increasing radial coordinate.
If there are multiple ring/duct regions in the generated mesh, the boundary layer related parameters of all these regions must be provided together as vectors.
MeshMeshData Generation
When "num_sides" is set as 6, the hexagonal meshes produced by PolygonConcentricCircleMeshGenerator
can be used by PatternedHexMeshGenerator
to create patterned meshes. This functionality relies on a series of MeshMetaData
generated by PolygonConcentricCircleMeshGenerator
, including:
pitch_meta
, typeReal
: Provides the side-to-side distance of the hexagon generated.pattern_pitch_meta
, typeReal
: Similar topitch_meta
. This is only used when the mesh produced here is stitched with assembly hexagon meshes generated byPatternedHexMeshGenerator
.background_intervals_meta
, typeunsigned int
: Makes the value of the input parameter "background_intervals" available to other mesh generators.node_id_background_meta
, typedof_id_type
: Records the maximum node id of the background nodes to provide a reference for node modifications.max_radius_meta
, typeReal
: Provides the maximum radius of the ring regions so thatPatternedHexMeshGenerator
does not compromise the circular geometry.num_sectors_per_side_meta
, typestd::vector<unsigned int>
: Makes the value of the input parameter "num_sectors_per_side" available to other mesh generators.azimuthal_angle_meta
, typestd::vector<Real>
: Contains the sorted azimuthal angles of all the nodes on the external boundary.
Other Information
By default, the mesh generated by this object contains a mixture of QUAD4 and TRI3 elements. To be specific, the central region of the mesh consists of triangular elements, whereas the rest of the mesh consists of quadrilateral elements. The users also have an option to generate a purely QUAD4 mesh by setting quad_center_elements
as true (see Figure 3). In that case, the factor shown in Figure 3 can also be customized using "center_quad_factor".

Figure 3: A schematic drawing showing the different meshing algorithms when "quad_center_elements" is set as false
and true
.
When rings
regions are present, the radii of these rings
can be auto-adjusted to preserve the meshed annular area (volume) to the true area (volume) by setting "preserve_volumes" as true.
By default, the azimuthal angles used to discretize the mesh are uniformly spaced in _angle_ on each sector of the polygon. However, uniform spacing of angles leads to non-uniform mesh intervals on the polygon external sides (unless exactly 2 sectors per side are used). However, as a uniformly spaced mesh on the polygon external boundary may facilitate mesh stitching, the user may force a uniform mesh on the polygon external boundary by setting "uniform_mesh_on_sides" as true.
The default block id numbering starts with 0 at the center region and increments by 1 for each mesh region radially outward. The user may instead set specific block id and name values to rings, background, and duct regions through the use of "ring_block_ids", "background_block_ids", "duct_block_ids", "ring_block_names", "background_block_names", and "duct_block_names".
The user should be aware that in two cases, the central geometric region is defined as two blocks instead of one: - When rings are not present, and "background_intervals" > 1 - When rings are present, and the first entry of "ring_radii" > 1
In both of these cases, the central geometric region will contain both blocks 0 and 1 by default. Any additional usage of block ids or name arrays will require an extra entry for the first geometric region. This extra block definition is needed to accommodate flexibility in defining the central region as either quadrilateral or triangular elements while still stitching properly to the neighboring region.
The external boundary has a default boundary id of 10000. The user may instead set specific boundary id and/or name values through the use of external_boundary_id
and external_boundary_name
.
Example Syntax
[hex_1]
type = PolygonConcentricCircleMeshGenerator
num_sides = 6
num_sectors_per_side = '4 4 4 4 4 4'
background_intervals = 2
ring_radii = 4.0
ring_intervals = 2
ring_block_ids = '10 15'
ring_block_names = 'center_tri center'
background_block_ids = 20
background_block_names = background
polygon_size = 5.0
preserve_volumes = on
[]
(modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_pattern.i)Input Parameters
- center_quad_factorA fractional radius factor used to determine the radial positions of transition nodes in the center region meshed by quad elements.
C++ Type:double
Controllable:No
Description:A fractional radius factor used to determine the radial positions of transition nodes in the center region meshed by quad elements.
- duct_sizesDistance(s) from polygon center to duct(s) inner boundaries.
C++ Type:std::vector<double>
Controllable:No
Description:Distance(s) from polygon center to duct(s) inner boundaries.
- duct_sizes_styleradiusStyle in which polygon center to duct inner boundary distance is given (apothem = center to face, radius = center to vertex). Options: apothem radius
Default:radius
C++ Type:MooseEnum
Controllable:No
Description:Style in which polygon center to duct inner boundary distance is given (apothem = center to face, radius = center to vertex). Options: apothem radius
- flat_side_upFalseWhether to rotate the generated polygon mesh to ensure that one flat side faces up.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to rotate the generated polygon mesh to ensure that one flat side faces up.
- num_sides6Number of sides of the polygon.
Default:6
C++ Type:unsigned int
Controllable:No
Description:Number of sides of the polygon.
- polygon_size_styleapothemStyle in which polygon size is given (default: apothem).
Default:apothem
C++ Type:MooseEnum
Controllable:No
Description:Style in which polygon size is given (default: apothem).
- preserve_volumesTrueVolume of concentric circles can be preserved using this function.
Default:True
C++ Type:bool
Controllable:No
Description:Volume of concentric circles can be preserved using this function.
- quad_center_elementsFalseWhether the center elements are quad or triangular.
Default:False
C++ Type:bool
Controllable:No
Description:Whether the center elements are quad or triangular.
- ring_radiiRadii of major concentric circles (rings).
C++ Type:std::vector<double>
Controllable:No
Description:Radii of major concentric circles (rings).
- 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)
- smoothing_max_it0Number of Laplacian smoothing iterations. This number is disregarded when duct_sizes is present.
Default:0
C++ Type:unsigned int
Controllable:No
Description:Number of Laplacian smoothing iterations. This number is disregarded when duct_sizes is present.
Optional Parameters
- background_block_idsOptional customized block id for the background block.
C++ Type:std::vector<unsigned short>
Controllable:No
Description:Optional customized block id for the background block.
- background_block_namesOptional customized block names for the background block.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:Optional customized block names for the background block.
- block_id_shift0Integer used to shift block IDs.
Default:0
C++ Type:unsigned short
Controllable:No
Description:Integer used to shift block IDs.
- duct_block_idsOptional customized block ids for each duct geometry block.
C++ Type:std::vector<unsigned short>
Controllable:No
Description:Optional customized block ids for each duct geometry block.
- duct_block_namesOptional customized block names for each duct geometry block.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:Optional customized block names for each duct geometry block.
- external_boundary_idOptional customized external boundary id.
C++ Type:short
Controllable:No
Description:Optional customized external boundary id.
- external_boundary_nameOptional customized external boundary name.
C++ Type:std::string
Controllable:No
Description:Optional customized external boundary name.
- interface_boundary_id_shift0Integer used to shift interface boundary IDs.
Default:0
C++ Type:short
Controllable:No
Description:Integer used to shift interface boundary IDs.
- interface_boundary_namesOptional customized boundary names for the internal interfaces between block.
C++ Type:std::vector<std::string>
Controllable:No
Description:Optional customized boundary names for the internal interfaces between block.
- ring_block_idsOptional customized block ids for each ring geometry block.
C++ Type:std::vector<unsigned short>
Controllable:No
Description:Optional customized block ids for each ring geometry block.
- ring_block_namesOptional customized block names for each ring geometry block.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:Optional customized block names for each ring geometry block.
Customized Subdomain/Boundary Parameters
- background_inner_boundary_layer_bias1Growth factor used for mesh biasing of the background inner boundary layer.
Default:1
C++ Type:double
Controllable:No
Description:Growth factor used for mesh biasing of the background inner boundary layer.
- background_inner_boundary_layer_intervals1Number of radial intervals of the background inner boundary layer
Default:1
C++ Type:unsigned int
Controllable:No
Description:Number of radial intervals of the background inner boundary layer
- background_inner_boundary_layer_width0Width of background region that is assigned to be the inner boundary layer.
Default:0
C++ Type:double
Controllable:No
Description:Width of background region that is assigned to be the inner boundary layer.
- background_outer_boundary_layer_bias1Growth factor used for mesh biasing of the background outer boundary layer.
Default:1
C++ Type:double
Controllable:No
Description:Growth factor used for mesh biasing of the background outer boundary layer.
- background_outer_boundary_layer_intervals1Number of radial intervals of the background outer boundary layer
Default:1
C++ Type:unsigned int
Controllable:No
Description:Number of radial intervals of the background outer boundary layer
- background_outer_boundary_layer_width0Width of background region that is assigned to be the outer boundary layer.
Default:0
C++ Type:double
Controllable:No
Description:Width of background region that is assigned to be the outer boundary layer.
- background_radial_bias1Value used to create biasing in radial meshing for background region.
Default:1
C++ Type:double
Controllable:No
Description:Value used to create biasing in radial meshing for background region.
- duct_inner_boundary_layer_biasesGrowth factors used for mesh biasing of the duct inner boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Growth factors used for mesh biasing of the duct inner boundary layers.
- duct_inner_boundary_layer_intervalsNumber of radial intervals of the duct inner boundary layers
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of radial intervals of the duct inner boundary layers
- duct_inner_boundary_layer_widthsWidths of duct regions that are assigned to be the inner boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Widths of duct regions that are assigned to be the inner boundary layers.
- duct_outer_boundary_layer_biasesGrowth factors used for mesh biasing of the duct outer boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Growth factors used for mesh biasing of the duct outer boundary layers.
- duct_outer_boundary_layer_intervalsNumber of radial intervals of the duct outer boundary layers
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of radial intervals of the duct outer boundary layers
- duct_outer_boundary_layer_widthsWidths of duct regions that are assigned to be the outer boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Widths of duct regions that are assigned to be the outer boundary layers.
- duct_radial_biasesValues used to create biasing in radial meshing for duct regions.
C++ Type:std::vector<double>
Controllable:No
Description:Values used to create biasing in radial meshing for duct regions.
- ring_inner_boundary_layer_biasesGrowth factors used for mesh biasing of the rings' inner boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Growth factors used for mesh biasing of the rings' inner boundary layers.
- ring_inner_boundary_layer_intervalsNumber of radial intervals of the rings' inner boundary layers
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of radial intervals of the rings' inner boundary layers
- ring_inner_boundary_layer_widthsWidths of each ring regions that are assigned to be each ring's inner boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Widths of each ring regions that are assigned to be each ring's inner boundary layers.
- ring_outer_boundary_layer_biasesGrowth factors used for mesh biasing of the rings' outer boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Growth factors used for mesh biasing of the rings' outer boundary layers.
- ring_outer_boundary_layer_intervalsNumber of radial intervals of the rings' outer boundary layers
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of radial intervals of the rings' outer boundary layers
- ring_outer_boundary_layer_widthsWidths of each ring regions that are assigned to be each ring's outer boundary layers.
C++ Type:std::vector<double>
Controllable:No
Description:Widths of each ring regions that are assigned to be each ring's outer boundary layers.
- ring_radial_biasesValues used to create biasing in radial meshing for ring regions.
C++ Type:std::vector<double>
Controllable:No
Description:Values used to create biasing in radial meshing for ring regions.
Mesh Boundary Layers And Biasing Options Parameters
- background_intervals1Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers.
Default:1
C++ Type:unsigned int
Controllable:No
Description:Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers.
- duct_intervalsNumber of meshing intervals in each enclosing duct excluding duct boundary layers.
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of meshing intervals in each enclosing duct excluding duct boundary layers.
- num_sectors_per_sideNumber of azimuthal sectors per polygon side (rotating counterclockwise from top right face).
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face).
- ring_intervalsNumber of radial mesh intervals within each major concentric circle excluding their boundary layers.
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of radial mesh intervals within each major concentric circle excluding their boundary layers.
- uniform_mesh_on_sidesFalseWhether the side elements are reorganized to have a uniform size.
Default:False
C++ Type:bool
Controllable:No
Description:Whether the side elements are reorganized to have a uniform size.
General Mesh Density 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.
Advanced Parameters
Input Files
- (modules/reactor/test/tests/meshgenerators/tri_pin_hex_assemby_generator/dummy_core.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_2d_err.i)
- (modules/reactor/test/tests/meshgenerators/polygon_concentric_circle_mesh_generator/poly_2d.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_pattern.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_2d.i)
- (modules/reactor/test/tests/functions/multi_control_drum_function/multi_cd_noid.i)
- (modules/reactor/test/tests/meshgenerators/azimuthal_block_split_generator/non_replicated.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_pattern_err2.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_pattern_cd.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_peripheral_modifier/single_hex.i)
- (modules/reactor/test/tests/meshgenerators/reporting_id/hexagonal_id/core_reporting_id.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_peripheral_modifier/single_hex_pin_id.i)
- (modules/reactor/test/tests/meshgenerators/azimuthal_block_split_generator/azi_block_id_mod.i)
- (modules/reactor/test/tests/functions/multi_control_drum_function/multi_cd.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_2d_block_name_conflict.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/patterned_pattern_err.i)
- (modules/reactor/test/tests/meshgenerators/patterned_hex_peripheral_modifier/patterned.i)
- (modules/reactor/test/tests/meshgenerators/reporting_id/hexagonal_id/assembly_reporting_id.i)