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:
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:
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;
}