- directionA vector that points in the direction to extrude (note, this will be normalized internally - so don't worry about it here)
C++ Type:libMesh::Point
Controllable:No
Description:A vector that points in the direction to extrude (note, this will be normalized internally - so don't worry about it here)
- heightsThe height of each elevation
C++ Type:std::vector<double>
Controllable:No
Description:The height of each elevation
- inputThe mesh to extrude
C++ Type:MeshGeneratorName
Controllable:No
Description:The mesh to extrude
- num_layersThe number of layers for each elevation - must be num_elevations in length!
C++ Type:std::vector<unsigned int>
Controllable:No
Description:The number of layers for each elevation - must be num_elevations in length!
AdvancedExtruderGenerator
Extrudes a 1D mesh into 2D, or a 2D mesh into 3D, can have a variable height for each elevation, variable number of layers within each elevation, variable growth factors of axial element sizes within each elevation and remap subdomain_ids, boundary_ids and element extra integers within each elevation as well as interface boundaries between neighboring elevation layers.
Overview
The AdvancedExtruderGenerator
adds more customization options over the MeshExtruderGenerator. This mesh generator is also capable of fixing inverted elements on-the-fly during extrusion.
Multiple Elevations
AdvancedExtruderGenerator
extrudes a lower-dimension mesh (1D or 2D) given by "input" into a higher-dimension mesh (2D or 3D) in a direction defined by "direction". The extruded mesh can have multiple elevations with variable extrusion (axial) lengths provided by "heights". Each elevation can have separate subdomains, extra element extra integers, and boundaries defined. The number of axial elements in the different elevations can be provided through "num_layers". Within each elevation, the axial element dimension can be biased using the corresponding growth factor value in "biases".
Subdomain ID Remapping
By default, the extruded higher-dimension elements retain the same subdomain ids as their original lower-dimension elements. AdvancedExtruderGenerator
provides an option to remap subdomain ids for each elevation 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 extruded elevation. 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". Leveraging the recently updated MOOSE input file syntax system, 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.
[extrude]
type = AdvancedExtruderGenerator
input = fmg
heights = '1 2 3'
num_layers = '1 2 3'
direction = '0 0 1'
elem_integer_names_to_swap = 'element_extra_integer_1 element_extra_integer_2'
elem_integers_swaps = '1 4 2 8;
2 7;
1 6 |
1 8 2 4;
2 5;
1 6'
[]
(moose/test/tests/meshgenerators/advanced_extruder_generator/advanced_extruder_with_element_extra_integer_swap.i)Boundary ID Remapping
Boundary ID remapping also works similarly to subdomain ID remapping. During extrusion, 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 axial heights.
Interface Boundaries
The other categories of the boundaries that can be defined are the interfaces between subdomains in different elevations, as well as the top/bottom surfaces of the subdomains. As each elevation interface (or top/bottom surface) is simply a duplicate of the input
mesh, these interface (or top/bottom surface) boundaries correspond to the subdomains of the input
mesh, which are referred to as source_blocks
. Also, due to the nature of sidesets, they can be defined on either side of the elevation interface. Thus, both upward
and downward
boundaries can be defined. Here upward
means the normal vector of the sideset has the "same-ish" direction as the "direction" vector; downward
means the normal vector of the sideset has the "opposite-ish" direction as the "direction" vector.
Helicoidal extrusion
The user may elect to perform a helicoidal extrusion along an axis going through the (0, 0, 0) point aligned with the extrusion "direction" vector parameter. The user must then select a non-zero "twist_pitch" parameter. After an extrusion distance of a pitch, a full rotation of the 2D shape being extruded will have been performed. By default, the rotation is performed in a clockwise direction around the axis of extrusion. To change the direction of the rotation, please specify a negative "twist_pitch".
Example Syntax
[extrude]
type = AdvancedExtruderGenerator
input = gmg
heights = '1 2 3'
num_layers = '1 2 3'
direction = '0 0 1'
bottom_sideset = '4'
top_sideset = '5'
subdomain_swaps = '0 1;
0 2;
0 3'
[]
(moose/test/tests/meshgenerators/advanced_extruder_generator/gen_extrude.i)Input Parameters
- biasesThe axial growth factor used for mesh biasing for each elevation.
C++ Type:std::vector<double>
Controllable:No
Description:The axial growth factor used for mesh biasing for each elevation.
- twist_pitch0Pitch for helicoidal extrusion around an axis going through the origin following the direction vector
Default:0
C++ Type:double
Controllable:No
Description:Pitch for helicoidal extrusion around an axis going through the origin following the direction vector
Optional Parameters
- bottom_boundaryThe boundary ID to set on the bottom boundary. If omitted one will be generated.
C++ Type:short
Controllable:No
Description:The boundary ID to set on the bottom boundary. If omitted one will be generated.
- downward_boundary_idsDownward interface boundary ids.
C++ Type:std::vector<std::vector<short>>
Controllable:No
Description:Downward interface boundary ids.
- downward_boundary_source_blocksBlock ids used to generate downward interface boundaries.
C++ Type:std::vector<std::vector<unsigned short>>
Controllable:No
Description:Block ids used to generate downward interface boundaries.
- top_boundaryThe boundary ID to set on the top boundary. If omitted one will be generated.
C++ Type:short
Controllable:No
Description:The boundary ID to set on the top boundary. If omitted one will be generated.
- upward_boundary_idsUpward interface boundary ids.
C++ Type:std::vector<std::vector<short>>
Controllable:No
Description:Upward interface boundary ids.
- upward_boundary_source_blocksBlock ids used to generate upward interface boundaries.
C++ Type:std::vector<std::vector<unsigned short>>
Controllable:No
Description:Block ids used to generate upward interface boundaries.
Boundary Assignment 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 extrusion.
C++ Type:std::vector<std::string>
Controllable:No
Description:Array of element extra integer names that need to be swapped during extrusion.
- 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 elevation
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 elevation
Id Swap 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.
- 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
- 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)