- inputThe input mesh to be modified. Note that this generator only works with PatternedHex/CartesianMeshGenerator and its derived classes such as HexIDPatternedMeshGenerator.
C++ Type:MeshGeneratorName
Unit:(no unit assumed)
Controllable:No
Description:The input mesh to be modified. Note that this generator only works with PatternedHex/CartesianMeshGenerator and its derived classes such as HexIDPatternedMeshGenerator.
- input_mesh_external_boundaryThe external boundary of the input mesh.
C++ Type:BoundaryName
Unit:(no unit assumed)
Controllable:No
Description:The external boundary of the input mesh.
- new_num_sectorNumber of sectors of each side for the new mesh.
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Number of sectors of each side for the new mesh.
PatternedCartesianPeripheralModifier
PatternedPolygonPeripheralModifierBase is the base class for PatternedCartPeripheralModifier and PatternedHexPeripheralModifier.
Overview
This PatternedCartesianPeripheralModifier
class utilizes FillBetweenPointVectorsTools
to replace the outmost layer of the quad elements of the 2D cartesian assembly mesh generated by PatternedCartesianMeshGenerator
with a transition layer consisting of triangular elements so that the assembly mesh can have nodes on designated positions on the external boundary. This boundary modification facilitates the stitching of cartesian assemblies which have different node numbers on their outer periphery due to differing numbers of interior pins and/or different azimuthal discretization.
Both linear and quadratic elements are supported by PatternedCartesianPeripheralModifier
. The order of the elements to be generated is automatically determined by the element order of the input mesh.
Motivation
The motivation of developing this mesh generator is similar to that of the PatternedHexPeripheralModifier
. Please refer to that documentation for details.
Modification of Peripheral Boundary to Allow Stitching
The PatternedCartesianPeripheralModifier
class modifies assembly meshes so that assemblies with different number of pins can be stitched together without increasing the mesh fidelity to an impractically fine fidelity. This mesh generator only works with the "input" mesh created by PatternedCartesianMeshGenerator
. Users must specify the external boundary of the input assembly mesh through "input_mesh_external_boundary". Given this input, the mesh generator identifies and deletes the outmost layer of elements and uses the newly formed external boundary as one of the two vectors of boundary nodes needed by FillBetweenPointVectorsTools
after symmetry reduction. In addition, uniformly distributed nodes are placed along the original external boundary of the mesh and defined as the second vector of boundary nodes needed by FillBetweenPointVectorsTools
. The number of new boundary nodes is specified using "new_num_sector". Thus, the outmost layer of the assembly mesh can be replaced with a triangular element transition layer mesh that can be easily stitched with another transition layer mesh. An example of the assembly mesh modified by this mesh generator is shown in Figure 1

Figure 1: A schematic drawing of an example cartesian assembly mesh with transition layer as its outmost mesh layer.
The extra element IDs from the original peripheral region are conserved. They may be modified using the "extra_id_names_to_modify" and "new_extra_id_values_to_assign" parameters.
Advantages
This mesh generator forces the number of nodes on a cartesian mesh to match a user-specified input. This allows assemblies with different number of pins or azimuthal discretizations (and consequently different numbers of boundary nodes) to be stitched together without increasing the mesh density to an unreasonable level.

Figure 2: A schematic drawing showing a virtual core design with assemblies including 9, 16, 25 and 36 pins.
Figure 2 illustrates a core comprising four types of assemblies. This mesh generator's functionality was leveraged to force a common mesh density on each cartesian assembly side (10 nodes on each assembly side) so that the assemblies can be easily stitched.
Example Syntax
(contrib/moose/modules/reactor/test/tests/meshgenerators/patterned_cartesian_peripheral_modifier/patterned.i)Input Parameters
- extra_id_names_to_modifyNames of the element extra ids in the peripheral region that should be modified
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Names of the element extra ids in the peripheral region that should be modified
- new_extra_id_values_to_assignValues of the modified extra ids in the peripheral region.
C++ Type:std::vector<unsigned long>
Unit:(no unit assumed)
Controllable:No
Description:Values of the modified extra ids in the peripheral region.
- num_layers1Layers of elements for transition.
Default:1
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Layers of elements for transition.
- transition_layer_id10000Optional customized block id for the transition layer block.
Default:10000
C++ Type:unsigned short
Unit:(no unit assumed)
Controllable:No
Description:Optional customized block id for the transition layer block.
- transition_layer_nametransition_layerOptional customized block name for the transition layer block.
Default:transition_layer
C++ Type:SubdomainName
Unit:(no unit assumed)
Controllable:No
Description:Optional customized block name for the transition layer block.
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
- 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)