AssemblyMeshGenerator

This AssemblyMeshGenerator object is designed to generate assembly-like structures, with IDs, from a reactor geometry. The assembly-like structures must consist of a full pattern of equal sized pins from PinMeshGeneratorA hexagonal assembly will be placed inside of a bounding hexagon consisting of a background region and, optionally, duct regions.

Overview

This object is designed to be used in the Reactor MeshGenerator workflow, which also consists of ReactorMeshParams, PinMeshGenerator, and CoreMeshGenerator.

The AssemblyMeshGenerator object generates assembly reactor geometry structures in either square or hexagonal geometries using component pin cell meshes from the PinMeshGenerator in "inputs". The component pin cell meshes are tagged with pin cell reporting ID values according to their location in the assembly grid. Any newly created regions such as ducts are given block ID assignments.

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 block ID assignment for background and duct regions and boundary ID and name assignment.

The AssemblyMeshGenerator object adopts much of the existing input structure of patterned MeshGenerators but uses parameters that are more typical for reactor design. Since AssemblyMeshGenerator requires an input lattice structure to be defined, users that require homogenized assembly definitions or assemblies with single pins should define this structure with `PinMeshGenerator' and set "use_as_assembly" to true. 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 "background_region_id" and "duct_region_ids" parameters are used to identify regions within the assembly around the lattice of fuel pins. 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.

The user defined ID assignment using "background_region_id" is given as a 1-D vector of size A, where A is the number of axial levels. This vector defines the background block IDs (single value per axial layer) starting from the bottom axial layer and ending with the top axial layer. Similarly, "duct_region_ids" is given as an A by D vector, where D is the number of duct intervals per axial layer. This vector assignment starts from the innermost duct region of the bottom axial layer, and extends out first radially and then axially.

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 parameters "background_block_name" and "duct_block_names" can be defined to set block names for the assembly background and duct regions respectively. In that case, each block name will be prepended with the prefix RGMB_ASSEMBLY<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_ASSEMBLY<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_ASSEMBLY<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 "background_block_name" or "duct_block_names".

Reporting ID Information

As mentioned above, the AssemblyMeshGenerator 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 assembly region ID.

The AssemblyMeshGenerator 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". The pins composing the assembly are also tagged via PatternedCartesianMeshGenerator or PatternedHexMeshGenerator, using the "cell" assignment type, with the extra integer name "pin_id".

Depletion ID Information

The AssemblyMeshGenerator object can optionally assign a depletion ID, with the extra integer name "depletion_id", only if they are 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". "depletion_id_type" can be either pin and pin_type. All pins in the assembly have separate depletion ID values by setting "depletion_id_type" to pin. By setting that option to pin_type, unique ID values are assigned to individual pin types in assemblies.

Exterior Boundary ID Information

The AssemblyMeshGenerator objects automatically assigns boundary information derived from the "assembly_type" parameter. The exterior assembly boundary is assigned the ID equal to 2000 + the assembly type ID and is named "outer_assembly_<assembly_type_id>" (for example an assembly 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. "show_rgmb_metadata" can be set to true in order to see the values of these metadata entries as console output. The following metadata is defined on the assembly mesh:

  • assembly_type: Value of type_id associated with assembly, equivalent to the input parameter "assembly_type"

  • pitch: Assembly pitch, equivalent to the input parameter "assembly_pitch"

  • is_single_pin: Whether or not assembly mesh is represented by a single pin region or a lattice of pins, equivalent to the input parameter "use_as_assembly".

  • duct_halfpitches: Length of apothems defining the duct locations, equivalent to the input parameter AssemblyMeshGenerator/"duct_halfpitch"

  • background_region_id: 1-D vector of region_ids corresponding to axial zones of background regions of assembly mesh, equivalent to the input parameter "background_region_id".

  • duct_region_ids: 2-D vector of region ids corresponding to radial and axial zones within duct regions of assembly mesh, equivalent to the input parameter "duct_region_ids". Inner indexing is radial zones, while outer index is axial zones.

If the assembly is represented as a single pin, the following metadata is also defined:

  • ring_radii: Length of ring radii comprising of assembly region, equivalent to PinMeshGenerator/"ring_radii".

  • ring_region_ids: 2-D vector of region ids corresponding to radial and axial zones within ring regions of assembly mesh, corresponding to the ring-related region ids of the input parameter PinMeshGenerator/"region_ids". Inner indexing is radial zones, while outer index is axial zones.

  • is_homogenized: Whether or not assembly mesh is homogenized, equivalent to the input parameter PinMeshGenerator/"homogenized"

If instead the assembly is represented as a lattice of pins, the following metadata is defined:

  • pin_names: List of mesh generator names of constituent pins in lattice.

  • pin_lattice: 2-D lattice of pins in assembly, where each location represents the 0-based index of the pin in the list of names under the pin_names metadata entry.

For each of the pins listed in pin_names, the pin-level metadata is also displayed when "show_rgmb_metadata" is set to true. A list of pin-level metadata that is defined on the assembly mesh can be found in PinMeshGenerator.

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]
  [rmp]
    type = ReactorMeshParams
    dim = 3
    geom = "Square"
    assembly_pitch = 2.84126
    axial_regions = '1.0 1.0'
    axial_mesh_intervals = '1 1'
    top_boundary_id = 201
    bottom_boundary_id = 202
  []

  [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'
    quad_center_elements = false
    region_ids = '1 2 5; 11 12 15'
  []

  [pin2]
    type = PinMeshGenerator
    reactor_params = rmp
    pin_type = 2
    pitch = 1.42063
    num_sectors = 2
    mesh_intervals = '2'
    region_ids = '3; 13'
  []

  [amg]
    type = AssemblyMeshGenerator
    assembly_type = 1
    inputs = 'pin1 pin2'
    pattern = '0 0;
               0 1;'
    extrude = true
  []

  [translate]
    type = TransformGenerator
    input = amg
    transform = TRANSLATE
    vector_value = '0.710315 -0.710315 0'
  []
[]
(contrib/moose/modules/reactor/test/tests/meshgenerators/assembly_mesh_generator/assembly_square.i)

This is the resulting mesh block layout, where by default a single block is assigned to the triangular elements and another block is assigned to the quadrilateral elements:

This is the resulting "region_id" extra element integer layout, which was chosen by setting the region IDs for each of the constituent pins:

Input Parameters

  • inputsThe PinMeshGenerators that form the components of the assembly.

    C++ Type:std::vector<MeshGeneratorName>

    Unit:(no unit assumed)

    Controllable:No

    Description:The PinMeshGenerators that form the components of the assembly.

  • patternA double-indexed array starting with the upper-left corner where the indexrepresents the layout of input pins in the assembly lattice.

    C++ Type:std::vector<std::vector<unsigned int>>

    Unit:(no unit assumed)

    Controllable:No

    Description:A double-indexed array starting with the upper-left corner where the indexrepresents the layout of input pins in the assembly lattice.

Required Parameters

  • background_block_nameThe block names for the assembly background regions

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:The block names for the assembly background regions

  • duct_block_namesThe block names for the assembly duct regions from innermost to outermost

    C++ Type:std::vector<std::vector<std::string>>

    Unit:(no unit assumed)

    Controllable:No

    Description:The block names for the assembly duct regions from innermost to outermost

  • 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

    Unit:(no unit assumed)

    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

  • show_rgmb_metadataFalsePrint out RGMB-related metadata to console output

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Print out RGMB-related metadata to console output

Optional Parameters

  • assembly_typeThe integer ID for this assembly type definition

    C++ Type:unsigned short

    Unit:(no unit assumed)

    Controllable:No

    Description:The integer ID for this assembly type definition

Id Assigment Parameters

  • background_intervalsRadial intervals in the assembly peripheral region.

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Radial intervals in the assembly peripheral region.

  • background_region_idThe region id for the background area between the pins and the ducts to set region_id extra-element integer

    C++ Type:std::vector<unsigned short>

    Unit:(no unit assumed)

    Controllable:No

    Description:The region id for the background area between the pins and the ducts to set region_id extra-element integer

Background Specifications 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

  • depletion_id_typeDetermine level of details in depletion ID assignment.

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:assembly, assembly_type, pin, pin_type

    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

    Unit:(no unit assumed)

    Controllable:No

    Description:Determine wheter the depletion ID is assigned.

Depletion Id Assignment Parameters

  • duct_halfpitchDistance(s) from center to duct(s) inner boundaries.

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:Distance(s) from center to duct(s) inner boundaries.

  • duct_intervalsNumber of meshing intervals in each enclosing duct.

    C++ Type:std::vector<unsigned int>

    Unit:(no unit assumed)

    Controllable:No

    Description:Number of meshing intervals in each enclosing duct.

  • duct_region_idsThe region id for the ducts from innermost to outermost, to set region_id extra-element integer.

    C++ Type:std::vector<std::vector<unsigned short>>

    Unit:(no unit assumed)

    Controllable:No

    Description:The region id for the ducts from innermost to outermost, to set region_id extra-element integer.

Duct Specifications 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