- inputThe mesh we want to modify
C++ Type:MeshGeneratorName
Controllable:No
Description:The mesh we want to modify
SurfaceSubdomainsFromAllNormalsGenerator
Adds subdomains to surface (2D) elements in the (3D) mesh based on unique normals.
This mesh generator uses the flood algorithm defined in the SurfaceMeshGeneratorBase class and has access to many of its options and parameters.
To generate contiguous subdomains, the "contiguous_assignments_only" parameter may be set to true. In this case, the flooding algorithm is called for each starting point with a different subdomain ID.
It defines additionally the following techniques / heuristics:
The subdomain to be assigned when flooding/painting from a surface element can be decided based on the subdomain IDs of a majority of its neighbors. This option is activated using the "check_painted_neighbor_normals" parameter.
A final sweep over all elements which re-assigns the subdomain id of the element based on the subdomain ID held by the majority of its neighbors. This heuristic is intended to remove isolated subdomain ID assignments. This option is activated with the "select_max_neighbor_element_subdomains" parameter.
Input Parameters
- flip_inverted_normalsFalseWhether to flip the elements with inverted normals
Default:False
C++ Type:bool
Controllable:No
Description:Whether to flip the elements with inverted normals
- flood_max_recursion100000Max number of recursions when flooding. Once this number is reached, the propagation is stopped until enough calls have returned
Default:100000
C++ Type:unsigned int
Controllable:No
Description:Max number of recursions when flooding. Once this number is reached, the propagation is stopped until enough calls have returned
- included_subdomainsA set of subdomain names or ids an element has to be previously a part of to be considered for modification.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:A set of subdomain names or ids an element has to be previously a part of to be considered for modification.
Optional Parameters
- check_painted_neighbor_normalsFalseWhen examining the normal of a 2D element and comparing to the 'painting' normal, also check if the element neighbors in the 'painted' subdomain have a closer normal and accept the element into the new subdomain if so
Default:False
C++ Type:bool
Controllable:No
Description:When examining the normal of a 2D element and comparing to the 'painting' normal, also check if the element neighbors in the 'painted' subdomain have a closer normal and accept the element into the new subdomain if so
- fixed_normalFalseWhether to move the normal vector as we paint/flood the geometry, or keep it fixed from the first element we started painting with
Default:False
C++ Type:bool
Controllable:No
Description:Whether to move the normal vector as we paint/flood the geometry, or keep it fixed from the first element we started painting with
- normal0 0 0If supplied, only surface (2D) elements with normal equal to this, up to normal_tol, will be considered for modification
Default:0 0 0
C++ Type:libMesh::Point
Controllable:No
Description:If supplied, only surface (2D) elements with normal equal to this, up to normal_tol, will be considered for modification
- normal_tol0.1Surface elements are only added if face_normal.normal_hat >= 1 - normal_tol, where normal_hat = normal/|normal|. The normal can the normal specified by the parameter or by a specific mesh generator.
Default:0.1
C++ Type:double
Unit:(no unit assumed)
Range:normal_tol>=0 & normal_tol<=2
Controllable:No
Description:Surface elements are only added if face_normal.normal_hat >= 1 - normal_tol, where normal_hat = normal/|normal|. The normal can the normal specified by the parameter or by a specific mesh generator.
Flooding Using Surface Element Normals Parameters
- consider_flipped_normalsFalseWhether to allow for surface elements to be considered when their normal is flipped with regard to the neighbor element we are painting from. A specific tolerance may be specified for these flipped normals using the 'flipped_normal_tol'.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to allow for surface elements to be considered when their normal is flipped with regard to the neighbor element we are painting from. A specific tolerance may be specified for these flipped normals using the 'flipped_normal_tol'.
- flipped_normal_tol0.1If 'consider_flipped_normals' is true, surface elements are also added if -1 * face_normal.normal_hat >= 1 - normal_tol, where normal_hat = normal/|normal|
Default:0.1
C++ Type:double
Unit:(no unit assumed)
Range:flipped_normal_tol>=0 & flipped_normal_tol<=2
Controllable:No
Description:If 'consider_flipped_normals' is true, surface elements are also added if -1 * face_normal.normal_hat >= 1 - normal_tol, where normal_hat = normal/|normal|
Flooding Using Surface Element Inverted Normals Parameters
- contiguous_assignments_onlyFalseWhether to only group elements in a subdomain using the 'flooding' algorithm. Note: this also sets 'flood_elements_once' to true if the user did not explicitly pass false.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to only group elements in a subdomain using the 'flooding' algorithm. Note: this also sets 'flood_elements_once' to true if the user did not explicitly pass false.
- flood_elements_onceFalseWhether to consider elements only once when painting/flooding the geometry
Default:False
C++ Type:bool
Controllable:No
Description:Whether to consider elements only once when painting/flooding the geometry
- max_subdomain_size_centroidsMaximum distance between element centroids (using a vertex average approximation) when painting/flooding the geometry. 0 means not applying a distance constraint, a single value in the vector is applied to all elements, multiple values can be specified for each 'included_subdomains'
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Maximum distance between element centroids (using a vertex average approximation) when painting/flooding the geometry. 0 means not applying a distance constraint, a single value in the vector is applied to all elements, multiple values can be specified for each 'included_subdomains'
Other Flooding 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
- 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
- select_max_neighbor_element_subdomainsFalseWhether to perform a final subdomain assignment phase where each element is assigned to the subdomain that holds the most neighbors of the element with a similar normal.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to perform a final subdomain assignment phase where each element is assigned to the subdomain that holds the most neighbors of the element with a similar normal.
- separate_elements_connected_by_a_single_nodeFalseWhether to perform a final subdomain assignment phase where any element that is not connected to other elements from the same subdomain is re-assigned to either the subdomain that all side neighbor elements belong to, or a new subdomain if there is no such subdomain including all its side neighbors. Note that normals are not checked in this phase, and the subdomain size criterion is assumed to be already met.
Default:False
C++ Type:bool
Controllable:No
Description:Whether to perform a final subdomain assignment phase where any element that is not connected to other elements from the same subdomain is re-assigned to either the subdomain that all side neighbor elements belong to, or a new subdomain if there is no such subdomain including all its side neighbors. Note that normals are not checked in this phase, and the subdomain size criterion is assumed to be already met.