HexagonConcentricCircleAdaptiveBoundaryMeshGenerator

This HexagonConcentricCircleAdaptiveBoundaryMeshGenerator object is designed to generate hexagonal meshes with adaptive boundary to facilitate stitching.

Overview

The HexagonConcentricCircleAdaptiveBoundaryMeshGenerator object generates a 2D mesh for concentric circles with a hexagon enclosure with or without external ducts. It is similar to PolygonConcentricCircleMeshGenerator and the majority of the parameters and functionalities of this object are described in the documentation of PolygonConcentricCircleMeshGenerator. The major unique feature of this object is that the "num_sectors_per_side" parameter will be overridden to enable stitching to another hexagonal mesh (provided via "inputs" to this object). This object therefore creates hexagonal meshes that can be directly stitched with hexagonal meshes generated by PolygonConcentricCircleMeshGenerator and PatternedHexMeshGenerator. This object only works for hexagons instead of general polygons.

More Information

In order to adapt the external boundary to match input meshes (typically generated by PatternedHexMeshGenerator), two extra input parameters must be provided:

  • "sides_to_adapt": a vector parameter that can include up to six elements which lists the reference hexagon side numbers to adaptively mesh. These entries must be non-repeating integers from 0 to 5 (see Figure 1). The hexagon sides are indexed counterclockwise starting from the upper-right side.

  • "inputs": a vector parameter that includes the same number of elements as "sides_to_adapt". These elements are input hexagonal meshes whose boundary nodes will be queried and used to adaptively mesh a side of the hexagonal mesh being created. The input hexagonal meshes are generated by PatternedHexMeshGenerator or PolygonConcentricCircleMeshGenerator. Multiple meshes may be input, each one corresponding to the side index value specified in "sides_to_adapt". The same input mesh may be repeated multiple times.

Figure 1: A schematic drawing showing the hexagon side indices in HexagonConcentricCircleAdaptiveBoundaryMeshGenerator object.

The "hexagon_size" provided here must be consistent with the "hexagon_size" values of all the "inputs" generators.

One major application of this object is to generate meshes for control drums. In that case, "is_control_drum" can be set as true so that corresponding MeshMetaData can be generated for future use with control drum related objects.

Example Syntax

[Mesh]
  [fmg]
    type = FileMeshGenerator
    file = hex_in.e
  []
  [gen]
    type = HexagonConcentricCircleAdaptiveBoundaryMeshGenerator
    num_sectors_per_side = '4 4 4 4 4 4'
    background_intervals = 2
    hexagon_size = 5.0
    sides_to_adapt = 0
    inputs = 'fmg'
  []
[]
(modules/reactor/test/tests/meshgenerators/hexagon_concentric_circle_adaptive_boundary_generator/hex_2d.i)

Here, a simple hexagon mesh stored in an Exodus file is used as the input of HexagonConcentricCircleAdaptiveBoundaryMeshGenerator. Only Side 0 of the generated mesh is set to adapt the input mesh (i.e., Side 3 of the input mesh), as shown in Figure 2. Note that only Side 0 of the generated mesh matches the input mesh (Side 3).

Figure 2: A schematic drawing showing the input and generated meshes of the example case.

Input Parameters

  • hexagon_sizeSize of the hexagon to be generated.

    C++ Type:double

    Controllable:No

    Description:Size of the hexagon to be generated.

Required Parameters

  • 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

    Options:apothem, radius

    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.

  • hexagon_size_styleapothemStyle in which the hexagon size is given (default: apothem i.e. half-pitch).

    Default:apothem

    C++ Type:MooseEnum

    Options:apothem, radius

    Controllable:No

    Description:Style in which the hexagon size is given (default: apothem i.e. half-pitch).

  • inputsThe input MeshGenerator.

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

    Controllable:No

    Description:The input MeshGenerator.

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

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

  • sides_to_adaptList of the hexagon reference side indices that correspond to the sides that need adaptive meshing. The meshes to adapt these sides to are provided in 'inputs'.

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

    Controllable:No

    Description:List of the hexagon reference side indices that correspond to the sides that need adaptive meshing. The meshes to adapt these sides to are provided in 'inputs'.

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.

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

  • is_control_drumFalseWhether this mesh is for a control drum. The value can be set as 'false' if the user wants to use this object for other components.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether this mesh is for a control drum. The value can be set as 'false' if the user wants to use this object for other components.

Control Drum Parameters

Input Files