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<<<{"href": "../../syntax/Mesh/index.html"}>>>]
  [rg]
    type = RevolveGenerator<<<{"description": "This RevolveGenerator object is designed to revolve a 1D mesh into 2D, or a 2D mesh into 3D based on an axis.", "href": "RevolveGenerator.html"}>>>
    input<<<{"description": "The mesh to revolve"}>>> = fmg
    axis_point<<<{"description": "A point on the axis of revolution"}>>> = '5.0 0.0 0.0'
    axis_direction<<<{"description": "The direction of the axis of revolution"}>>> = '0.0 1.0 0.0'
    nums_azimuthal_intervals<<<{"description": "List of the numbers of azimuthal interval discretization for each azimuthal section"}>>> = '2 4'
    revolving_angles<<<{"description": "The angles delineating each azimuthal section of revolution around the axis in degrees"}>>> = '30 60'
    elem_integer_names_to_swap<<<{"description": "Array of element extra integer names that need to be swapped during revolving."}>>> = 'element_extra_integer_1 element_extra_integer_2'
    elem_integers_swaps<<<{"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."}>>> = '1 4 2 8;
                           2 7 |
                           1 8 2 4;
                           2 5'
  []
[]
(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<<<{"href": "../../syntax/Mesh/index.html"}>>>]
  [rg]
    type = RevolveGenerator<<<{"description": "This RevolveGenerator object is designed to revolve a 1D mesh into 2D, or a 2D mesh into 3D based on an axis.", "href": "RevolveGenerator.html"}>>>
    input<<<{"description": "The mesh to revolve"}>>> = gmg
    axis_point<<<{"description": "A point on the axis of revolution"}>>> = '0.0 0.0 0.0'
    axis_direction<<<{"description": "The direction of the axis of revolution"}>>> = '0.0 1.0 0.0'
    nums_azimuthal_intervals<<<{"description": "List of the numbers of azimuthal interval discretization for each azimuthal section"}>>> = 6
  []
[]
(modules/reactor/test/tests/meshgenerators/revolve_generator/revolve_2d.i)

Input Parameters

  • axis_directionThe direction of the axis of revolution

    C++ Type:libMesh::Point

    Controllable:No

    Description:The direction of the axis of revolution

  • axis_pointA point on the axis of revolution

    C++ Type:libMesh::Point

    Controllable:No

    Description:A point on the axis of revolution

  • inputThe mesh to revolve

    C++ Type:MeshGeneratorName

    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>

    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

    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

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

    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>

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

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

    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

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    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

    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

    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

    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

    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

    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

    Controllable:No

    Description:Whether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)

Debugging Parameters

Input Files