Contact

Description

The Contact block can be used to specify parameters related to mechanical contact enforcement in MOOSE simulations. The ContactAction is associated with this input block, and is the class that performs the associated model setup tasks. Use of the ContactAction is not strictly required, but it greatly simplifies the setup of a simulation using contact enforcement. A high-level description of the contact problem is provided here.

This block can be used to specify mechanical normal and tangential contact using several possible models for the physical behavior of the interaction:

  • frictionless

  • glued

  • coulomb (frictional)

Contact enforcement using node/face primary/secondary algorithms is available using the following mathematical formulations:

  • kinematic

  • penalty

  • tangential penalty (kinematic normal constraint with penalty tangential constraint)

  • augmented lagrange

  • reduced active nonlinear function set (RANFS)

In addition, face/face contact using a mortar method can also be specified using this block.

Constructed Objects

The primary task performed by this action is creating the Constraint classes that perform the contact enforcement. The type of Constraint class(es) constructed depend on the formulation and physical interaction model specified using the formulation and model parameters. Table 1 shows the Constraint classes that can be created for various types of contact enforcement.

In addition to the Constraint class, several other objects are created, as shown in

Table 2: Other objects constructed by ContactAction

Constructed ObjectPurpose
ContactPressureAuxCompute contact pressure and store in an AuxVariable
PenetrationCompute contact penetration and store in an AuxVariable
NodalAreaCompute nodal area and store in an AuxVariable

Notes on Node/Face Contact Enforcement

The node/face contact enforcement is based on a primary/secondary algorithm, in which contact is enforced at the nodes on the secondary surface, which cannot penetrate faces on the primary surface. As with all such approaches, for the best results, the primary surface should be the coarser of the two surfaces.

The contact enforcement system relies on MOOSE's geometric search system to provide the candidate set of faces that can interact with a secondary node at a given time. The set of candidate faces is controlled by the patch_size parameter and the patch_update_strategy options in the Mesh block. The patch size must be large enough to accommodate the sliding that occurs during a time step. It is generally recommended that the patch_update_strategy=auto be used.

The formulation parameter specifies the technique used to enforce contact. The DEFAULT option uses a kinematic enforcement algorithm that transfers the internal forces at secondary nodes to the corresponding primary face, and forces the secondary node to be at a specific location on the primary face using a penalty parameter. The converged solution with this approach results no penetration between the surfaces. The PENALTY algorithm employs a penalty approach, where the penetration between the surfaces is penalized, and the converged solution has a small penetration, which is inversely proportional to the penalty parameter.

Regardless of the formulation used, the robustness of the mechanical contact algorithm is affected by the penalty parameter. If the parameter is too small, there will be excessive penetrations with the penalty formulation, and convergence will suffer with the kinematic formulation. If the parameter is too large, the solver may struggle due to poor conditioning.

System Parameter

The system parameter is deprecated and currently defaults to Constraint.

Gap offset parameters

Gap offset can be provided to the current contact formulation enforced using the MechanicalContactConstraint. It can be either secondary_gap_offset (gap offset from secondary side) or mapped_primary_gap_offset (gap offset from primary side but mapped to secondary side). Use of these gap offset parameters treats the surfaces as if they were virtually extended (positive offset value) or narrowed (negative offset value) by the specified amount, so that the surfaces are treated as if they are closer or further away than they actually are. There is no deformation within the material in this gap offset region.

Multiple contact pairs

Users may need to set up mechanical contact between multiple contact pairs. For that application, users can provide arrays of primary and secondary boundary names which will match consecutively to define mechanical contact pairs. The same contact-related input parameters will be applied to all contact pairs defined in the action input.

commentnote

The multiple contact pairs feature is not yet available for mortar contact.

[Contact]
  [action_name]
    primary = '20 20'
    secondary = '10 101'
    penalty = 1e7
    formulation = penalty
    tangential_tolerance = 0.0001
  []
[]
(modules/contact/test/tests/multiple_contact_pairs/multiple_pairs.i)

Explicit dynamics

For explicit dynamics contact setup, the action ExplicitDynamicsContactAction is to be used.

Example Input syntax

Node/face frictionless contact:

[Contact]
  [./leftright]
    secondary = 3
    primary = 2
    model = frictionless
    penalty = 1e+6
    normal_smoothing_distance = 0.1
  [../]
[]
(modules/contact/test/tests/sliding_block/sliding/frictionless_kinematic.i)

Node/face frictional contact:

[Contact]
  [leftright]
    secondary = 3
    primary = 2
    model = coulomb
    penalty = 4e+6
    friction_coefficient = 0.2
    formulation = penalty
    normal_smoothing_distance = 0.1
  []
[]
(modules/contact/test/tests/sliding_block/sliding/frictional_02_penalty.i)

Normal (frictionless) mortar contact:

[Contact]
  [leftright]
    secondary = 10
    primary = 20
    model = frictionless
    formulation = mortar
    c_normal = 1e-1
  []
[]
(modules/contact/test/tests/bouncing-block-contact/ping-ponging/mortar-no-ping-pong_weighted.i)

Normal and tangential (frictional) mortar contact:

[Contact]
  [mortar]
    primary = 'bottom_top'
    secondary = 'top_bottom'
    formulation = mortar
    model = coulomb
    friction_coefficient = 0.4
    c_normal = 1e4
    c_tangential = 1.0e4
  []
[]
(modules/contact/test/tests/3d-mortar-contact/frictional-mortar-3d-action.i)

Gap offset:

[Contact]
  [./leftright]
    primary = 2
    secondary = 3
    model = frictionless
    penalty = 1e+6
    secondary_gap_offset = secondary_gap_offset
    mapped_primary_gap_offset = mapped_primary_gap_offset
  [../]
[]
(modules/contact/test/tests/mechanical_constraint/frictionless_kinematic_gap_offsets.i)

Input Parameters

  • absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution

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

    Controllable:No

    Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution

  • active__all__ If specified only the blocks named will be visited and made active

    Default:__all__

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

    Controllable:No

    Description:If specified only the blocks named will be visited and made active

  • adaptivity_penalty_frictionFRICTION_LIMITThe augmented Lagrange update strategy used on the frictional penalty coefficient.

    Default:FRICTION_LIMIT

    C++ Type:MooseEnum

    Options:SIMPLE, FRICTION_LIMIT

    Controllable:No

    Description:The augmented Lagrange update strategy used on the frictional penalty coefficient.

  • adaptivity_penalty_normalSIMPLEThe augmented Lagrange update strategy used on the normal penalty coefficient.

    Default:SIMPLE

    C++ Type:MooseEnum

    Options:SIMPLE, BUSSETTA

    Controllable:No

    Description:The augmented Lagrange update strategy used on the normal penalty coefficient.

  • al_frictional_force_toleranceThe tolerance of the frictional force for augmented Lagrangian method.

    C++ Type:double

    Controllable:No

    Description:The tolerance of the frictional force for augmented Lagrangian method.

  • al_incremental_slip_toleranceThe tolerance of the incremental slip for augmented Lagrangian method.

    C++ Type:double

    Controllable:No

    Description:The tolerance of the incremental slip for augmented Lagrangian method.

  • al_penetration_toleranceThe tolerance of the penetration for augmented Lagrangian method.

    C++ Type:double

    Controllable:No

    Description:The tolerance of the penetration for augmented Lagrangian method.

  • automatic_pairing_boundariesList of boundary IDs for sidesets that are automatically paired with any other boundary in this list having a centroid-to-centroid distance less than the value specified in the 'automatic_pairing_distance' parameter.

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

    Controllable:No

    Description:List of boundary IDs for sidesets that are automatically paired with any other boundary in this list having a centroid-to-centroid distance less than the value specified in the 'automatic_pairing_distance' parameter.

  • automatic_pairing_distanceThe maximum distance the centroids of the boundaries provided in the 'automatic_pairing_boundaries' parameter can be to generate a contact pair automatically. Due to numerical error in the determination of the centroids, it is encouraged that the user adds a tolerance to this distance (e.g. extra 10%) to make sure no suitable contact pair is missed. If the 'automatic_pairing_method = NODE' option is chosen instead, this distance is recommended to be set to at least twice the minimum distance between nodes of boundaries to be paired.

    C++ Type:double

    Controllable:No

    Description:The maximum distance the centroids of the boundaries provided in the 'automatic_pairing_boundaries' parameter can be to generate a contact pair automatically. Due to numerical error in the determination of the centroids, it is encouraged that the user adds a tolerance to this distance (e.g. extra 10%) to make sure no suitable contact pair is missed. If the 'automatic_pairing_method = NODE' option is chosen instead, this distance is recommended to be set to at least twice the minimum distance between nodes of boundaries to be paired.

  • automatic_pairing_methodThe proximity method used for automatic pairing of boundaries.

    C++ Type:MooseEnum

    Options:node, centroid

    Controllable:No

    Description:The proximity method used for automatic pairing of boundaries.

  • c_normal1e+06Parameter for balancing the size of the gap and contact pressure for a mortar formulation. This purely numerical parameter affects convergence behavior and, in general, should be larger for stiffer materials. It is recommended that the user tries out various orders of magnitude for this parameter if the default value generates poor contact convergence.

    Default:1e+06

    C++ Type:double

    Controllable:No

    Description:Parameter for balancing the size of the gap and contact pressure for a mortar formulation. This purely numerical parameter affects convergence behavior and, in general, should be larger for stiffer materials. It is recommended that the user tries out various orders of magnitude for this parameter if the default value generates poor contact convergence.

  • c_tangential1Numerical parameter for nonlinear mortar frictional constraints

    Default:1

    C++ Type:double

    Controllable:No

    Description:Numerical parameter for nonlinear mortar frictional constraints

  • capture_tolerance0Normal distance from surface within which nodes are captured. This parameter is used for node-face and mortar formulations.

    Default:0

    C++ Type:double

    Controllable:No

    Description:Normal distance from surface within which nodes are captured. This parameter is used for node-face and mortar formulations.

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

  • correct_edge_droppingFalseWhether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0.

  • displacementsThe displacements appropriate for the simulation geometry and coordinate system

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

    Controllable:No

    Description:The displacements appropriate for the simulation geometry and coordinate system

  • extra_vector_tagsThe tag names for extra vectors that residual data should be saved into

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

    Controllable:No

    Description:The tag names for extra vectors that residual data should be saved into

  • formulationkinematicThe contact formulation

    Default:kinematic

    C++ Type:MooseEnum

    Options:ranfs, kinematic, penalty, augmented_lagrange, tangential_penalty, mortar, mortar_penalty

    Controllable:No

    Description:The contact formulation

  • friction_coefficient0The friction coefficient

    Default:0

    C++ Type:double

    Controllable:No

    Description:The friction coefficient

  • generate_mortar_meshTrueWhether to generate the mortar mesh from the action. Typically this will be the case, but one may also want to reuse an existing lower-dimensional mesh prior to a restart.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether to generate the mortar mesh from the action. Typically this will be the case, but one may also want to reuse an existing lower-dimensional mesh prior to a restart.

  • inactiveIf specified blocks matching these identifiers will be skipped.

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

    Controllable:No

    Description:If specified blocks matching these identifiers will be skipped.

  • mapped_primary_gap_offsetOffset to gap distance mapped from primary side

    C++ Type:VariableName

    Controllable:No

    Description:Offset to gap distance mapped from primary side

  • max_penalty_multiplier1000Maximum multiplier applied to penalty factors when adaptivity is used in an augmented Lagrange setting. The penalty factor supplied by the user is used as a reference to determine its maximum. If this multiplier is too large, the condition number of the system to be solved may be negatively impacted.

    Default:1000

    C++ Type:double

    Controllable:No

    Description:Maximum multiplier applied to penalty factors when adaptivity is used in an augmented Lagrange setting. The penalty factor supplied by the user is used as a reference to determine its maximum. If this multiplier is too large, the condition number of the system to be solved may be negatively impacted.

  • modelfrictionlessThe contact model to use

    Default:frictionless

    C++ Type:MooseEnum

    Options:frictionless, glued, coulomb

    Controllable:No

    Description:The contact model to use

  • mortar_dynamicsFalseWhether to use constraints that account for the persistency condition, giving rise to smoother normal contact pressure evolution. This flag should only be set to yes for dynamic simulations using the Newmark-beta numerical integrator

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to use constraints that account for the persistency condition, giving rise to smoother normal contact pressure evolution. This flag should only be set to yes for dynamic simulations using the Newmark-beta numerical integrator

  • newmark_beta0.25Newmark-beta beta parameter for its inclusion in the weighted gap update formula

    Default:0.25

    C++ Type:double

    Controllable:No

    Description:Newmark-beta beta parameter for its inclusion in the weighted gap update formula

  • newmark_gamma0.5Newmark-beta gamma parameter for its inclusion in the weighted gap update formula

    Default:0.5

    C++ Type:double

    Controllable:No

    Description:Newmark-beta gamma parameter for its inclusion in the weighted gap update formula

  • normal_lm_scaling1Scaling factor to apply to the normal LM variable for a mortar formulation

    Default:1

    C++ Type:double

    Controllable:No

    Description:Scaling factor to apply to the normal LM variable for a mortar formulation

  • normal_smoothing_distanceDistance from edge in parametric coordinates over which to smooth contact normal

    C++ Type:double

    Controllable:No

    Description:Distance from edge in parametric coordinates over which to smooth contact normal

  • normal_smoothing_methodMethod to use to smooth normals

    C++ Type:MooseEnum

    Options:edge_based, nodal_normal_based

    Controllable:No

    Description:Method to use to smooth normals

  • normalize_cFalseWhether to normalize c by weighting function norm for mortar contact. When unnormalized the value of c effectively depends on element size since in the constraint we compare nodal Lagrange Multiplier values to integrated gap values (LM nodal value is independent of element size, where integrated values are dependent on element size).

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to normalize c by weighting function norm for mortar contact. When unnormalized the value of c effectively depends on element size since in the constraint we compare nodal Lagrange Multiplier values to integrated gap values (LM nodal value is independent of element size, where integrated values are dependent on element size).

  • normalize_penaltyFalseWhether to normalize the penalty parameter with the nodal area.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to normalize the penalty parameter with the nodal area.

  • penalty1e+08The penalty to apply. This can vary depending on the stiffness of your materials

    Default:1e+08

    C++ Type:double

    Controllable:No

    Description:The penalty to apply. This can vary depending on the stiffness of your materials

  • penalty_friction1e+08The penalty factor to apply in mortar penalty frictional constraints. It is applied to the tangential accumulated slip to build the frictional force

    Default:1e+08

    C++ Type:double

    Controllable:No

    Description:The penalty factor to apply in mortar penalty frictional constraints. It is applied to the tangential accumulated slip to build the frictional force

  • penalty_multiplier1The growth factor for the penalty applied at the end of each augmented Lagrange update iteration (a value larger than one, e.g., 10, tends to speed up convergence.)

    Default:1

    C++ Type:double

    Controllable:No

    Description:The growth factor for the penalty applied at the end of each augmented Lagrange update iteration (a value larger than one, e.g., 10, tends to speed up convergence.)

  • penalty_multiplier_friction1The penalty growth factor between augmented Lagrange iterations for penalizing relative slip distance if the node is under stick conditions.(a value larger than one, e.g., 10, tends to speed up convergence.)

    Default:1

    C++ Type:double

    Controllable:No

    Description:The penalty growth factor between augmented Lagrange iterations for penalizing relative slip distance if the node is under stick conditions.(a value larger than one, e.g., 10, tends to speed up convergence.)

  • ping_pong_protectionFalseWhether to protect against ping-ponging, e.g. the oscillation of the secondary node between two different primary faces, by tying the secondary node to the edge between the involved primary faces

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to protect against ping-ponging, e.g. the oscillation of the secondary node between two different primary faces, by tying the secondary node to the edge between the involved primary faces

  • primaryThe list of boundary IDs referring to primary sidesets

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

    Controllable:No

    Description:The list of boundary IDs referring to primary sidesets

  • primary_secondary_jacobianTrueWhether to include Jacobian entries coupling primary and secondary nodes.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether to include Jacobian entries coupling primary and secondary nodes.

  • secondaryThe list of boundary IDs referring to secondary sidesets

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

    Controllable:No

    Description:The list of boundary IDs referring to secondary sidesets

  • secondary_gap_offsetOffset to gap distance from secondary side

    C++ Type:VariableName

    Controllable:No

    Description:Offset to gap distance from secondary side

  • tangential_lm_scaling1Scaling factor to apply to the tangential LM variable for a mortar formulation

    Default:1

    C++ Type:double

    Controllable:No

    Description:Scaling factor to apply to the tangential LM variable for a mortar formulation

  • tangential_toleranceTangential distance to extend edges of contact surfaces

    C++ Type:double

    Controllable:No

    Description:Tangential distance to extend edges of contact surfaces

  • tension_release0Tension release threshold. A node in contact will not be released if its tensile load is below this value. No tension release if negative.

    Default:0

    C++ Type:double

    Controllable:No

    Description:Tension release threshold. A node in contact will not be released if its tensile load is below this value. No tension release if negative.

  • use_dualFalseWhether to use the dual mortar approach within a mortar formulation. It is defaulted to true for weighted quantity approach, and to false for the legacy approach. To avoid instabilities in the solution and obtain the full benefits of a variational enforcement,use of dual mortar with weighted constraints is strongly recommended. This input is only intended for advanced users.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to use the dual mortar approach within a mortar formulation. It is defaulted to true for weighted quantity approach, and to false for the legacy approach. To avoid instabilities in the solution and obtain the full benefits of a variational enforcement,use of dual mortar with weighted constraints is strongly recommended. This input is only intended for advanced users.

  • use_petrov_galerkinFalseWhether to use the Petrov-Galerkin approach for the mortar-based constraints. If set to true, we use the standard basis as the test function and dual basis as the shape function for the interpolation of the Lagrange multiplier variable.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to use the Petrov-Galerkin approach for the mortar-based constraints. If set to true, we use the standard basis as the test function and dual basis as the shape function for the interpolation of the Lagrange multiplier variable.

  • wear_depthThe name of the mortar auxiliary variable that is used to modify the weighted gap definition

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

    Controllable:No

    Description:The name of the mortar auxiliary variable that is used to modify the weighted gap definition