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 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.

Example Syntax

[Mesh]
  [assm_up]
    type = TriPinHexAssemblyGenerator
    ring_radii = '7 8;5 6; '
    ring_intervals = '2 1;1 1; '
    ring_block_ids = '200 400 600;700 800; '
    background_block_ids = '30 40'
    num_sectors_per_side = 6
    background_intervals = 2
    hexagon_size = '${fparse 40.0/sqrt(3.0)}'
    ring_offset = 0.6
    external_boundary_id = 200
    external_boundary_name = 'surface'
  []
[]
(modules/reactor/test/tests/meshgenerators/tri_pin_hex_assemby_generator/tri_pin.i)

Input Parameters

  • hexagon_sizeSize parameter of the hexagon assembly to be generated.

    C++ Type:double

    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

    Controllable:No

    Description:Number of azimuthal sectors per side.

Required Parameters

  • assembly_orientationpin_upOrientation of the generated assembly.

    Default:pin_up

    C++ Type:MooseEnum

    Options:pin_up, pin_down

    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

    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

    Options:apothem, radius

    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

    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>

    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

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

    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

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

    Controllable:No

    Description:Radii of the three sets of major concentric circles (pins).

  • 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)

Optional Parameters

  • background_block_idsOptional block ids for the background regions in the pins.

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

    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>

    Controllable:No

    Description:Optional block names for the background regions in the pins.

  • 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.

  • ring_block_idsOptional block ids for the ring (pin) regions.

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

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

    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>

    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