OrientSurfaceMeshGenerator

Change the orientation of (part of) the surface mesh.

It may occur in surface meshes that a surface element's orientation is flipped because the orientations were not defined carefully. This mesh generator compares the orientation of the elements in the "included_subdomains". If it is opposite the normal/orientation specified in the "normal_to_align_with" parameter, e.g. if the dot product of the two is negative, then the ordering of the nodes in the surface element is changed to flip its normal/orientation.

There are two options for using this mesh generator:

  • using a input normal/orientation to re-align a mesh or elements from "included_subdomains" directly.

  • "flooding"/painting/propagating an orientation from selected element IDs onto their neighbors, by adjusting the 'flooding' and other parameters to carefully cover the desired portions of the mesh and changing their normals. An input normal/orientation can still be used though these element's orientation should likely suffice. This option uses the flood algorithm defined in the SurfaceMeshGeneratorBase base class.

Input Parameters

  • inputThe mesh we want to modify

    C++ Type:MeshGeneratorName

    Controllable:No

    Description:The mesh we want to modify

Required Parameters

  • _using_normalTrue

    Default:True

    C++ Type:bool

    Controllable:No

  • element_ids_to_flood_fromIDs of elements to start flooding and changing the subdomains from

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

    Controllable:No

    Description:IDs of elements to start flooding and changing the subdomains from

  • 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_subdomainsSubdomain names or ids for the elements that may have their normal modified.

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

    Controllable:No

    Description:Subdomain names or ids for the elements that may have their normal modified.

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

  • normal_to_align_with0 0 0Direction vector that element normals should be pointing in the same direction as (dot product > 0)

    Default:0 0 0

    C++ Type:libMesh::Point

    Controllable:No

    Description:Direction vector that element normals should be pointing in the same direction as (dot product > 0)

  • 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_normalsTrueWhether 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:True

    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

  • 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

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

  • 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