Skip to content

contactFvPatchVectorField

Description

The contact boundary condition uses the penalty method to handle contact between two coupled surfaces of type regionCoupledOFFBEAT. This boundary condition is designed to manage both normal and tangential (frictional) forces between contacting surfaces.

Note

This fvPatchField is originally partly based on the solids4Foam library.

Warning

This boundary condition assumes that the same boundary condition is applied to a pair of regionCoupledOFFBEAT patches, which are coupled using the AMI (Arbitrary Mesh Interface) mapping algorithm. It is strongly suggested to assign the owner role to the smallest surface, e.g. the fuelOuter surface in most cases.

For the normal component, if no penetration is detected, the pressure on both sides of the gap equals the gap pressure. If penetration occurs, a contact pressure proportional to the penetration is added, calculated as:

\[ \begin{aligned} ip = -f \cdot K \cdot g \end{aligned} \]

where:

  • \(ip\): Interface normal pressure.
  • \(g\): Penetration or gapWidth (negative if penetration occurs).
  • \(K\): the minimum surface stiffness between those of master and slave faces. On each side, the stiffness is calculated internally as \(K = K_m \cdot A/V\), where \(K_m\) is the bulk modulus, and \(A\) and \(V\) are the face area and volume of the cell.
  • \(f\): Penalty scale factor, introduced to facilitate convergence at the cost of allowing larger penetration.
Note

The penalty scale factor \(f\) should be chosen as large as possible (typically close to 1) while ensuring convergence.

For the tangential (friction) component a Coulomb model is used. The magnitude of the friction vector is limited by the normal interface pressure times a friction coefficient and it is given by:

\[ \begin{aligned} |\tau| = \min(\alpha \cdot ip, |f_{fr} \cdot \mu \cdot \textbf{s}|) \end{aligned} \]

where:

  • \(\tau\): The frictional vector component.
  • \(\alpha\): Friction coefficient.
  • \(\mu\): Minimum shear stiffness between those of slave and master face. On each side the shear stiffness is calculated internally as \(\mu = \mu_m \cdot A/V\), where \(\mu_m\) is the shear modulus, and \(A\) and \(V\) are the face area and cell volume.
  • \(s\): Slip vector, the cumulative tangential displacement between the two surfaces.
  • \(f_{fr}\): Penalty scale factor for friction, introduced to improve convergence at the cost of larger penetration.

The friction vector is oriented opposite to the slip direction and added to the normal pressure component to compute the total surface traction vector.

Note

The gap width calculation considers the displacement of face centers (D for total mechanics solvers, DD for incremental solvers) so it correctly calculates the updated gap size even if a smallStrain mechanics solver is used

Note

This BC allows the user to introduce an offset to adjust the gap size for sensitivity analysis.


Options

The contact fvPatchField can be selected in the patch subdictionary inside the boundaryField subdictionary of the displacement field.

Parameters in the patch subdictionary for contact:

patchType Specifies the patch field type. Must be set to regionCoupledOFFBEAT.
penaltyFactor Penalty scale factor for the normal pressure. Controls the convergence and penetration balance. Default: 0.1. Typical values: 0.01 to 1.
penaltyFactorFriction Penalty scale factor for the frictional forces. Default: 0.1. Typical values: 0.01 to 1.
frictionCoefficient Coefficient of friction between surfaces. Default: 0.
relaxInterfacePressure Relaxation factor for the normal pressure update. Default: 1. Typical values: 0.01 to 1.
relaxFriction Relaxation factor for the frictional force update. Default: 1. Typical values: 0.01 to 1.
offset Offset added to the gap width calculation. A positive value increases the gap size. Default: 0.
rigidMasterNormal If true, the normal component is applied only on the slave side in rigid master mode. Default: false.
rigidMasterFriction If true, the friction component is applied only on the slave side in rigid master mode. Default: false.

Parameters in the patch subdictionary derived from tractionDisplacement:

planeStrain Activates the plane strain approximation for the normal stress at the boundary. When enabled, the normal strain is assumed constant across the last layer of cells. Default: false.
fixedSpring Activates a fixed spring-dashpot system for additional stability. Default: false.
fixedSpringModulus Spring modulus in N/m. Required when fixedSpring is set to true.
dashpotModulus Dashpot modulus in N/m. Required when fixedSpring is set to true.
relax Relaxation factor for gradient updates. Default: 1.0.
value Initial displacement value (not stress).


Usage

To apply the contact boundary condition to a given patch, specify its typename in the patch definition in the boundary condition file (e.g., 0/D or 0/DD for incremental mechanical solvers).

Example: Applying contact to the fuelOuter and cladInner patches:

"fuelOuter|cladInner"
{
    type            contact;
    patchType       regionCoupledOFFBEAT;

    penaltyFactor             0.01;
    penaltyFactorFriction     0.01;

    frictionCoefficient        0.1;

    relaxInterfacePressure     0.01;
    relaxFriction              0.01;

    // Offset for gap width calculation (a positive value increases the gap size)
    offset          0.0;

    // If rigidMasterNormal(Friction) is true, the normal (friction) component
    // is applied only on the slave side
    rigidMasterNormal       false;
    rigidMasterFriction     false;

    // Activate plane strain approximation for the normal stress at the boundary
    planeStrain     false;

    // Relaxation factor for the gradient update
    relax           1.0;

    // Initial displacement value
    value           $internalField;
}