- hexagon_sizeSize parameter of the hexagon assembly to be generated.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Size parameter of the hexagon assembly to be generated.
- num_sectors_per_sideNumber of azimuthal sectors per side.
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Number of azimuthal sectors per side.
TriPinHexAssemblyGenerator
This TriPinHexAssemblyGenerator object generates a hexagonal assembly mesh with three circular pins in a triangle at the center.
Overview
The TriPinHexAssemblyGenerator
object generates a 2D hexagonal assembly mesh consisting of three diamond sections. Each of these sections may contain one pin defined as a series of concentric circles. An example of such an assembly mesh is illustrated in Figure 1.

Figure 1: A typical mesh generated by this TriPinHexAssemblyGenerator
object with one large-circular-pin section, one small-circular-pin section, and one pin-free section.
The size of the assembly is defined by "hexagon_size". Users can input either radius (which is the same as side length for a hexagon) or apothem of the hexagon by setting "hexagon_size_style". On each side of the hexagon, the azimuthal meshing density is controlled by "num_sectors_per_side". The nodes on each side are uniformly distributed.
The hexagon is naturally divided azimuthally into three diamond sections. The first diamond section has an optional pin at 12 o'clock (90 degrees) from the center of the hexagon; the second diamond section has an optional pin at 8 o'clock (210 degrees); and the third diamond section has an optional pin at 4 o'clock (330 degrees). "ring_radii" is a 2D vector parameter that is used to define concentric ring regions within the diamond sections from one through three. "ring_intervals" defines the number of radial meshing subintervals for each of the concentric rings. Optionally, "ring_block_ids" and "ring_block_names" can be used to assign block ids/names to these rings. For all the four aforementioned ring-related parameters, if only one vector is provided instead of three, the same ring parameters will be adopted for all three sections, providing a concise way to define 3 identical pins. The default center of a pin is halfway between the hexagon center and a vertex point (half the hexagon's radius). The center of the pin may be offset radially from the center of the diamond by a distance defined by "ring_offset". A positive "ring_offset" means the center of the concentric rings is radially offset towards to the assembly boundary. A negative "ring_offset" means the center of the concentric rings is radially offset closer to the assembly center. Users can set "preserve_volumes" as true
to correct the polygonization effect and preserve ring volume.
The nodes on each interface between the two diamond sections are also uniformly distributed with the same number of nodes determined by "num_sectors_per_side". Therefore, the azimuthal intervals of each diamond section are non-uniform and are determined based on three factors: "num_sectors_per_side", "ring_offset" and the constraints due to the uniformly distributed nodes on external sides as well as interfaces between diamond sections.
Each diamond section also contains a "background" region, which is the region outside the concentric rings (or the full diamond, if no rings are present). The background radial intervals and block id of each diamond can be defined by "background_intervals" and "background_block_ids"/"background_block_names". In most cases, "background_block_ids" and "background_block_names" have a length of one if provided. However, if there exists a least one ring-free section, lengths of "background_block_ids" and "background_block_names" need to be two to accommodate the additional triangular element region required when no pin exists at the center of the diamond.
The TriPinHexAssemblyGenerator
generates a complete set of MeshMetaData
needed for future stitching with other assemblies. Therefore, meshes generated by this object can be directly used in "inputs" of PatternedHexMeshGenerator
to form a core mesh.
As mentioned, by default (i.e., "assembly_orientation" is set as pin_up
), the first section is at 12 o'clock. The assembly can be rotated by 180 by setting "assembly_orientation" as pin_down
.
Optionally, users can also assign an element extra integer for each diamond sections. The name of the element extra integer is defined by "pin_id_name", while the assigned values of the three sections are defined by a three-element vector parameter, "pin_id_values". If "assembly_orientation" is set as pin_up
, the first element of "pin_id_values" is assigned to the top section; the second element is assigned to the lower-left section; and the third element is assigned to the lower-right section. On the other hand, If "assembly_orientation" is set as pin_down
, the first element of "pin_id_values" is assigned to the bottom section; the second element is assigned to the upper-right section; and the third element is assigned to the upper-left section. Additionally, users can assign the element extra integers (reporting IDs) for annular rings and sectors by defining "ring_id_name" and "sector_id_name", respectively.
Example Syntax
(contrib/moose/modules/reactor/test/tests/meshgenerators/tri_pin_hex_assemby_generator/tri_pin.i)Input Parameters
- assembly_orientationpin_upOrientation of the generated assembly.
Default:pin_up
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Orientation of the generated assembly.
- background_intervals1Number of radial meshing intervals in background region (region around the rings/pins in the assembly).
Default:1
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Number of radial meshing intervals in background region (region around the rings/pins in the assembly).
- hexagon_size_styleradiusStyle in which hexagon size is given (apothem = center to face, radius = center to vertex).
Default:radius
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Style in which hexagon size is given (apothem = center to face, radius = center to vertex).
- pin_id_nameName of extra integer ID to be assigned to each of the three pin domains.
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Name of extra integer ID to be assigned to each of the three pin domains.
- pin_id_valuesValues of extra integer ID to be assigned to each of the three pin domains.
C++ Type:std::vector<unsigned long>
Unit:(no unit assumed)
Controllable:No
Description:Values of extra integer ID to be assigned to each of the three pin domains.
- preserve_volumesTrueVolume of concentric circles (pins) can be preserved using this function.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Volume of concentric circles (pins) can be preserved using this function.
- ring_intervalsNumber of radial mesh intervals within each set of major concentric circles (pins).
C++ Type:std::vector<std::vector<unsigned int>>
Unit:(no unit assumed)
Controllable:No
Description:Number of radial mesh intervals within each set of major concentric circles (pins).
- ring_offset0Offset of the ring (pin) center, shared by all three.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Offset of the ring (pin) center, shared by all three.
- ring_radiiRadii of the three sets of major concentric circles (pins).
C++ Type:std::vector<std::vector<double>>
Unit:(no unit assumed)
Controllable:No
Description:Radii of the three sets of major concentric circles (pins).
Optional Parameters
- background_block_idsOptional block ids for the background regions in the pins.
C++ Type:std::vector<unsigned short>
Unit:(no unit assumed)
Controllable:No
Description:Optional block ids for the background regions in the pins.
- background_block_namesOptional block names for the background regions in the pins.
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:Optional block names for the background regions in the pins.
- external_boundary_idOptional customized external boundary id.
C++ Type:short
Unit:(no unit assumed)
Controllable:No
Description:Optional customized external boundary id.
- external_boundary_nameOptional customized external boundary name.
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Optional customized external boundary name.
- ring_block_idsOptional block ids for the ring (pin) regions.
C++ Type:std::vector<std::vector<unsigned short>>
Unit:(no unit assumed)
Controllable:No
Description:Optional block ids for the ring (pin) regions.
- ring_block_namesOptional block names for the ring (pin) regions.
C++ Type:std::vector<std::vector<SubdomainName>>
Unit:(no unit assumed)
Controllable:No
Description:Optional block names for the ring (pin) regions.
Customized Subdomain/Boundary Ids/Names 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
- 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
- ring_id_assign_typeblock_wiseType of ring ID assignment: block_wise or ring_wise
Default:block_wise
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Type of ring ID assignment: block_wise or ring_wise
- ring_id_nameName of integer (reporting) ID for ring regions to use the reporting ID for annular regions of ring geometry block.
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Name of integer (reporting) ID for ring regions to use the reporting ID for annular regions of ring geometry block.
- sector_id_nameName of integer (reporting) ID for sector regions to use the reporting ID for azimuthal sector regions of ring geometry block.
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:Name of integer (reporting) ID for sector regions to use the reporting ID for azimuthal sector regions of ring geometry block.