AutomaticContactPairingGenerator

Overview

This mesh generator automatically detects contact surface pairs among a list of candidate boundaries and stores them in the mesh meta-data. When "create_lower_d_blocks" is true, it also creates the lower-dimensional primary/secondary subdomain blocks that ContactAction needs for mortar contact. It is appended to the mesh generator tree by ContactAction whenever "automatic_pairing_boundaries" is specified on the [Contact] action, so it is not typically added directly by a user in the [Mesh] block. ContactAction reads the detected pairs from the mesh meta-data, which is restored from the checkpoint when recovering.

Two candidate boundaries are considered a contact pair if they are within automatic_pairing_distance of each other, using one of two detection strategies selected with automatic_pairing_method:

  • NODE: a KD-tree search over the nodes of the candidate boundaries, gathered from both their sidesets and nodesets. Two boundaries are paired if any of their nodes are within the pairing distance.

  • CENTROID: the area-weighted centroid of each candidate sideset is computed, and two boundaries are paired if their centroids are within the pairing distance.

Each candidate boundary must be listed only once. Listing a boundary twice, either repeated or both by name and by ID, is an error.

Within each pair, the boundary with the larger sideset area is assigned as the primary surface and the other as the secondary surface. This places the Lagrange multipliers on the smaller surface and reduces the number of secondary elements that are only partially covered by the primary surface. When the two areas are equal to within a relative tolerance, the boundary with the larger ID is chosen as primary.

Sideset areas and centroids are computed in Cartesian coordinates from the mesh geometry alone, because the problem coordinate system is not available to a mesh generator. For axisymmetric (RZ) or spherical (RSPHERICAL) problems, the areas and centroids therefore differ from their true values in the problem coordinate system, which can affect the primary/secondary assignment and the CENTROID pairing distances.

When "create_lower_d_blocks" is true, a primary and a secondary lower-dimensional subdomain block are created for each detected pair (named using the "prefix" parameter), matching the naming convention used internally by ContactAction. If more than one pair is found among the candidate boundaries, the generated block names are suffixed with _p_<primary name>_s_<secondary name>, e.g. _p_top_s_bottom for the pair (top, bottom), so that they remain unique. Because mortar contact needs at least one pair, the generator reports an error when no pair is found in this case.

The pairing search supports distributed meshes. Sideset areas and centroids are summed across processes, and for the NODE method the candidate boundary nodes are gathered onto every process before the search. This communication is skipped when the mesh is serial.

Input Parameters

  • automatic_pairing_boundariesList of boundary names to consider when automatically detecting contact pairs.

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

    Controllable:No

    Description:List of boundary names to consider when automatically detecting contact pairs.

  • automatic_pairing_distanceMaximum distance (node-to-node or centroid-to-centroid) at which two boundaries are considered a contact pair.

    C++ Type:Real

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum distance (node-to-node or centroid-to-centroid) at which two boundaries are considered a contact pair.

  • automatic_pairing_methodStrategy used to detect pairs: NODE uses a KD-tree over boundary nodes; CENTROID uses sideset center-of-gravity distances.

    C++ Type:MooseEnum

    Options:NODE, CENTROID

    Controllable:No

    Description:Strategy used to detect pairs: NODE uses a KD-tree over boundary nodes; CENTROID uses sideset center-of-gravity distances.

  • create_lower_d_blocksFalseWhether to create primary and secondary lower-dimensional subdomain blocks for each detected pair.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to create primary and secondary lower-dimensional subdomain blocks for each detected pair.

  • inputThe mesh to modify

    C++ Type:MeshGeneratorName

    Controllable:No

    Description:The mesh to modify

  • prefixPrefix prepended to the names of generated subdomain blocks.

    C++ Type:std::string

    Controllable:No

    Description:Prefix prepended to the names of generated subdomain blocks.

Required 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