RevolveGenerator

This RevolveGenerator object is designed to revolve a 1D mesh into 2D, or a 2D mesh into 3D based on an axis.

Overview

This RevolveGenerator provides an alternative tool for increasing the dimensionality of a lower dimension mesh (1D or 2D) in addition to MeshExtruderGenerator/AdvancedExtruderGenerator. Each element is converted to one or more copies of its corresponding higher dimensional element along an open or closed specific circular curve.

The RevolveGenerator can provides similar customization options as in AdvancedExtruderGenerator.

Revolving Basics

RevolveGenerator revolves a lower-dimension mesh (1D or 2D) given by "input" into a higher-dimension mesh (2D or 3D) along an revolving axis defined by "axis_point" and "axis_direction". By default, the revolving can be performed along a full closed circular curve (i.e., 360 degrees) with one uniform azimuthal section. Optionally, the revolving curve can be a partial circular curve; and (or) multiple azimuthal sections can be defined. These options can be selected by specifying "revolving_angles". As long as the summation of the angles listed in "revolving_angles" is 360 degrees, a full closed circular revolving is performed. Otherwise, a partial revolving is conducted. For partial revolving or full revolving with multiple azimuthal sections, it can be conducted either clockwise or counter-clockwise, as controlled by "clockwise".

Each azimuthal sections can have separate subdomains, extra element extra integers, and boundaries defined. The number of azimuthal elements in the different sections can be provided through "nums_azimuthal_intervals".

Subdomain ID Remapping

By default, the revolved higher-dimension elements retain the same subdomain ids as their original lower-dimension elements. RevolveGenerator provides an option to remap subdomain ids for each azimuthal section through "subdomain_swaps", which is a double indexed array input parameter. Each elemental vector of "subdomain_swaps" contains subdomain remapping information for a particular elevation, where the first elemental vector represents the first revolved azimuthal section. The elemental vector contain pairs of subdomain ids: the first subdomain id is the input mesh subdomain id that needs to be remapped, and the second subdomain id the new subdomain id to be assigned.

Extra Element Integer ID Remapping

Extra element integer ID remapping works in a similar manner as subdomain ID remapping. The extra element integers to be remapped must already exist in the input mesh and need to be specified in "elem_integer_names_to_swap". The remapping information of multiple extra element integers is provided as a triple-indexed array input parameter ("elem_integers_swaps"). For each extra element integer, the syntax is similar to "subdomain_swaps". The following input example shows the remapping of two extra element integers.

[Mesh]
  [rg]
    type = RevolveGenerator
    input = fmg
    axis_point = '5.0 0.0 0.0'
    axis_direction = '0.0 1.0 0.0'
    nums_azimuthal_intervals = '2 4'
    revolving_angles = '30 60'
    elem_integer_names_to_swap = 'element_extra_integer_1 element_extra_integer_2'
    elem_integers_swaps = '1 4 2 8;
                           2 7 |
                           1 8 2 4;
                           2 5'
  []
[]
(contrib/moose/modules/reactor/test/tests/meshgenerators/revolve_generator/ei_swap.i)

Boundary ID Remapping

Boundary ID remapping also works similarly to subdomain ID remapping. During revolving, the lower-dimension boundaries are also converted into higher-dimension boundaries. A double indexed array input parameter, "boundary_swaps", can be used to remap the boundary ids. Here, the boundary ids to be remapped must exist in the input mesh, otherwise, dedicated boundary defining mesh generators, such as SideSetsBetweenSubdomainsGenerator and SideSetsAroundSubdomainGenerator, need to be used to define new boundary ids along different azimuthal sections.

Example Syntax

[Mesh]
  [rg]
    type = RevolveGenerator
    input = gmg
    axis_point = '0.0 0.0 0.0'
    axis_direction = '0.0 1.0 0.0'
    nums_azimuthal_intervals = 6
  []
[]
(contrib/moose/modules/reactor/test/tests/meshgenerators/revolve_generator/revolve_2d.i)

Input Parameters

  • axis_directionThe direction of the axis of revolution

    C++ Type:libMesh::Point

    Unit:(no unit assumed)

    Controllable:No

    Description:The direction of the axis of revolution

  • axis_pointA point on the axis of revolution

    C++ Type:libMesh::Point

    Unit:(no unit assumed)

    Controllable:No

    Description:A point on the axis of revolution

  • inputThe mesh to revolve

    C++ Type:MeshGeneratorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The mesh to revolve

  • nums_azimuthal_intervalsList of the numbers of azimuthal interval discretization for each azimuthal section

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

    Unit:(no unit assumed)

    Controllable:No

    Description:List of the numbers of azimuthal interval discretization for each azimuthal section

Required Parameters

  • clockwiseTrueRevolve clockwise around the axis or not (i.e., counterclockwise)

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Revolve clockwise around the axis or not (i.e., counterclockwise)

  • preserve_volumesFalseWhether the volume of the revolved mesh is preserving the circular area by modifying (expanding) the radius to account for polygonization.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether the volume of the revolved mesh is preserving the circular area by modifying (expanding) the radius to account for polygonization.

  • revolving_anglesThe angles delineating each azimuthal section of revolution around the axis in degrees

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The angles delineating each azimuthal section of revolution around the axis in degrees

Optional Parameters

  • boundary_swapsFor each row, every two entries are interpreted as a pair of 'from' and 'to' to remap the boundaries for that elevation

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

    Unit:(no unit assumed)

    Controllable:No

    Description:For each row, every two entries are interpreted as a pair of 'from' and 'to' to remap the boundaries for that elevation

  • elem_integer_names_to_swapArray of element extra integer names that need to be swapped during revolving.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Array of element extra integer names that need to be swapped during revolving.

  • elem_integers_swapsFor each row, every two entries are interpreted as a pair of 'from' and 'to' to remap the element extra integer for that elevation. If multiple element extra integers need to be swapped, the enties are stacked based on the order provided in 'elem_integer_names_to_swap' to form the third dimension.

    C++ Type:std::vector<std::vector<std::vector<unsigned long, std::allocator<unsigned long>>>>

    Unit:(no unit assumed)

    Controllable:No

    Description:For each row, every two entries are interpreted as a pair of 'from' and 'to' to remap the element extra integer for that elevation. If multiple element extra integers need to be swapped, the enties are stacked based on the order provided in 'elem_integer_names_to_swap' to form the third dimension.

  • subdomain_swapsFor each row, every two entries are interpreted as a pair of 'from' and 'to' to remap the subdomains for that azimuthal section

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

    Unit:(no unit assumed)

    Controllable:No

    Description:For each row, every two entries are interpreted as a pair of 'from' and 'to' to remap the subdomains for that azimuthal section

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

  • end_boundaryThe boundary ID to set on the ending boundary for partial revolving.

    C++ Type:short

    Unit:(no unit assumed)

    Controllable:No

    Description:The boundary ID to set on the ending boundary for partial revolving.

  • start_boundaryThe boundary ID to set on the starting boundary for a partial revolution.

    C++ Type:short

    Unit:(no unit assumed)

    Controllable:No

    Description:The boundary ID to set on the starting boundary for a partial revolution.

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