- primaryThe primary surface
C++ Type:BoundaryName
Description:The primary surface
- secondaryThe secondary surface
C++ Type:BoundaryName
Description:The secondary surface
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.
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]
[frictionless]
mesh = simple_mesh
primary = 2
secondary = 1
formulation = mortar
[]
[]
(modules/contact/test/tests/mechanical-small-problem/frictionless-nodal-lm-mortar-disp-action.i)Normal and tangential (frictional) mortar contact:
[Contact]
[frictional]
mesh = revised_file_mesh
primary = 20
secondary = 10
formulation = mortar
model = coulomb
friction_coefficient = 0.1
[]
[]
(modules/contact/test/tests/bouncing-block-contact/frictional-nodal-min-normal-lm-mortar-fb-tangential-lm-mortar-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>
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
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
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
Description:The tolerance of the penetration for augmented Lagrangian method.
- c_normal1Parameter for balancing the size of the gap and contact pressure
Default:1
C++ Type:double
Description:Parameter for balancing the size of the gap and contact pressure
- c_tangential1Parameter for balancing the contact pressure and velocity
Default:1
C++ Type:double
Description:Parameter for balancing the contact pressure and velocity
- capture_tolerance0Normal distance from surface within which nodes are captured
Default:0
C++ Type:double
Description:Normal distance from surface within which nodes are captured
- displacementsThe displacements appropriate for the simulation geometry and coordinate system
C++ Type:std::vector<VariableName>
Description:The displacements appropriate for the simulation geometry and coordinate system
- formulationkinematicThe contact formulation
Default:kinematic
C++ Type:MooseEnum
Description:The contact formulation
- friction_coefficient0The friction coefficient
Default:0
C++ Type:double
Description:The friction coefficient
- inactiveIf specified blocks matching these identifiers will be skipped.
C++ Type:std::vector<std::string>
Description:If specified blocks matching these identifiers will be skipped.
- mapped_primary_gap_offsetOffset to gap distance mapped from primary side
C++ Type:VariableName
Description:Offset to gap distance mapped from primary side
- meshThe mesh generator for mortar method
C++ Type:MeshGeneratorName
Description:The mesh generator for mortar method
- modelfrictionlessThe contact model to use
Default:frictionless
C++ Type:MooseEnum
Description:The contact model to use
- normal_lm_scaling1Scaling factor to apply to the normal LM variable
Default:1
C++ Type:double
Description:Scaling factor to apply to the normal LM variable
- normal_smoothing_distanceDistance from edge in parametric coordinates over which to smooth contact normal
C++ Type:double
Description:Distance from edge in parametric coordinates over which to smooth contact normal
- normal_smoothing_methodMethod to use to smooth normals
C++ Type:MooseEnum
Description:Method to use to smooth normals
- normalize_penaltyFalseWhether to normalize the penalty parameter with the nodal area.
Default:False
C++ Type:bool
Description:Whether to normalize the penalty parameter with the nodal area.
- orderFIRSTThe finite element order: FIRST, SECOND, etc.
Default:FIRST
C++ Type:MooseEnum
Description:The finite element order: FIRST, SECOND, etc.
- penalty1e+08The penalty to apply. This can vary depending on the stiffness of your materials
Default:1e+08
C++ Type:double
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
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
Description:Whether to include Jacobian entries coupling primary and secondary nodes.
- secondary_gap_offsetOffset to gap distance from secondary side
C++ Type:VariableName
Description:Offset to gap distance from secondary side
- tangential_lm_scaling1Scaling factor to apply to the tangential LM variable
Default:1
C++ Type:double
Description:Scaling factor to apply to the tangential LM variable
- tangential_toleranceTangential distance to extend edges of contact surfaces
C++ Type:double
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
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
Default:False
C++ Type:bool
Description:Whether to use the dual mortar approach