CoarsenSurfaceMeshAlongSidesetGenerator

Coarsens a 2D-element (TRI3/QUAD4) surface mesh along a sideset by collapsing alternate boundary nodes. The sideset may be internal: elements on both sides of it are coarsened and the sideset itself is preserved. Apply the generator multiple times for additional coarsening.

Overview

This mesh generator coarsens a mesh of 2D elements (TRI3/QUAD4, with any orientation in 3D space) along a sideset, by collapsing every other node lying on the sideset. Collapsing a node merges the pair of elements it was shared between into a single, larger element, while preserving the sideset curve itself.

For an example with triangles, consider three consecutive sideset nodes A, B and C, with two triangles (A, B, P) and (B, C, P) connecting them. Collapsing the middle node B deletes the triangle holding the side A-B and re-points the other triangle, leaving the single triangle (A, C, P) and dropping node B.

The sideset may be internal**, with elements on both sides of it. In that case the merge is performed on the elements of both sides simultaneously, and the sideset is preserved (it now spans the merged element sides).

The sidesets to coarsen along are selected either explicitly with "boundaries", or by coarsening along all the sidesets of the mesh except those listed in "exclude_boundaries". Exactly one of the two must be provided.

A single invocation removes all non-adjacent sideset nodes that meet the criteria outlined below, coarsening the sideset discretization by roughly a factor of two. To coarsen further, either apply the generator multiple times in sequence, or set "coarsen_more_than_two_elements", which repeats the coarsening pass within a single invocation until no further collapse is possible. In that case more than two elements can be merged into one, so it is usually combined with the merge criteria below to bound the amount of coarsening.

A collapse is skipped if it would invert or flatten an element. The collapse can be further restricted, in order to preserve geometric features, with:

  • "max_normal_deviation": the maximum angle, in degrees, between the normals of the two elements being merged. This prevents merging across a curved region or a feature edge of the surface.

  • "max_merged_side_length": the maximum length of the side created along the sideset by the merge.

  • "max_merged_element_area": the maximum area of an element created by the merge.

commentnote

Only TRI3 and QUAD4 elements are supported, and the input mesh must not be distributed. A QUAD4 that would be deleted by a collapse (one holding the collapsed side) blocks that collapse, since it would require converting the quad to a triangle; quads that are only re-pointed are supported.

Input Parameters

  • inputInput mesh to coarsen

    C++ Type:MeshGeneratorName

    Controllable:No

    Description:Input mesh to coarsen

Required Parameters

  • boundariesThe sideset(s) to coarsen the mesh along

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

    Controllable:No

    Description:The sideset(s) to coarsen the mesh along

  • coarsen_more_than_two_elementsFalseWhether to coarsen iteratively in a single invocation so that more than two elements can be merged together. The amount of coarsening is then bounded by the merge criteria

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to coarsen iteratively in a single invocation so that more than two elements can be merged together. The amount of coarsening is then bounded by the merge criteria

  • exclude_boundariesCoarsen the mesh along all of its sidesets except these. Mutually exclusive with 'boundaries'

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

    Controllable:No

    Description:Coarsen the mesh along all of its sidesets except these. Mutually exclusive with 'boundaries'

  • max_merged_element_areaMaximum area of an element created by merging two elements. Merges exceeding it are skipped

    C++ Type:Real

    Unit:(no unit assumed)

    Range:max_merged_element_area > 0

    Controllable:No

    Description:Maximum area of an element created by merging two elements. Merges exceeding it are skipped

  • max_merged_side_lengthMaximum length of the side created along the sideset by merging two elements. Merges exceeding it are skipped

    C++ Type:Real

    Unit:(no unit assumed)

    Range:max_merged_side_length > 0

    Controllable:No

    Description:Maximum length of the side created along the sideset by merging two elements. Merges exceeding it are skipped

  • max_normal_deviationMaximum angle, in degrees, between the normals of the two elements merged together. Merges exceeding it are skipped, which preserves features/corners

    C++ Type:Real

    Unit:(no unit assumed)

    Range:max_normal_deviation >= 0 & max_normal_deviation <= 180

    Controllable:No

    Description:Maximum angle, in degrees, between the normals of the two elements merged together. Merges exceeding it are skipped, which preserves features/corners

  • verboseFalseWhether to make the mesh generator output details of its actions on the console

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to make the mesh generator output details of its actions on the console

Optional 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

Input Files