- 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
- 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
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.
Table 1: Constraint objects constructed by ContactAction
Formulation | Model | Constraint Object |
---|---|---|
kinematic | all | MechanicalContactConstraint |
penalty | all | MechanicalContactConstraint |
tangential_penalty | all | MechanicalContactConstraint |
ranfs | frictionless | RANFSNormalMechanicalContact |
mortar | all | MechanicalContactConstraint |
mortar | all | NormalMortarMechanicalContact NormalMortarLMMechanicalContact |
mortar | coulomb | TangentialMortarMechanicalContact TangentialMortarLMMechanicalContact |
In addition to the Constraint class, several other objects are created, as shown in
Table 2: Other objects constructed by ContactAction
Constructed Object | Purpose |
---|---|
ContactPressureAux | Compute contact pressure and store in an AuxVariable |
Penetration | Compute contact penetration and store in an AuxVariable |
NodalArea | Compute 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.
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)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 = 1e+7
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
interpolate_normals = false
[]
[]
(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
- 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
- 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.
- 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.
- 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
- formulationkinematicThe contact formulation
Default:kinematic
C++ Type:MooseEnum
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.
- interpolate_normalsTrueWhether to interpolate the nodal normals for a mortar contact constraint (e.g. classic idea of evaluating field at quadrature points). If this is set to false, then non-interpolated nodal normals will be used, and then the _normals member should be indexed with _i instead of _qp. This input parameter is intended for developers.
Default:True
C++ Type:bool
Controllable:No
Description:Whether to interpolate the nodal normals for a mortar contact constraint (e.g. classic idea of evaluating field at quadrature points). If this is set to false, then non-interpolated nodal normals will be used, and then the _normals member should be indexed with _i instead of _qp. This input parameter is intended for developers.
- 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
- modelfrictionlessThe contact model to use
Default:frictionless
C++ Type:MooseEnum
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
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
- 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
- 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.
- 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.