<!-- source-page: 421 -->

# dSlipFric(nDir, nContact)

This array contains the incremental frictional slip during the current time increment for each contact point in the current local coordinate system. These incremental slips correspond to tangential motion in the time increment from $t = t _ { c u r r } - \Delta t$ to $t = t _ { c u r r }$ . For penalty contact this incremental slip is used to define the local coordinate system at each contact point (see Figure 1.2.6–1 and Figure 1.2.6–2) so that only the first component of dSlipFric can be nonzero in the local system. The contact points for kinematic contact are determined based on penetrations detected in the predicted configuration (at $t = t _ { c u r r } + \Delta t )$ , and the predicted incremental slip direction is used to define the local coordinate system at each contact point. If the slip direction changes between increments, dSlipFric may have a nonzero component in the local 2-direction and, if the surface is faceted and the contact point moves from one facet to another, in the local 3-direction.

# fStickForce(nContact)

This array contains the magnitude of frictional force required to enforce stick conditions at each contact point. For kinematic contact this force corresponds to no slip; for penalty contact this force depends on the previous frictional force, the value of the penalty stiffness, and the previous incremental slip. The penalty stiffness is assigned automatically. Occasionally, during recovery of elastic slip associated with the penalty method, the stick force will be assigned a negative value.

# fTangPrev(nDir, nContact)

This array contains the values of the frictional force components calculated in the previous increment but provided in the current local coordinate system (zero for nodes that were not in contact).

# fNormal(nContact)

This array contains the magnitude of the normal force for the contact points applied at the end of current time increment; i.e., at time $t = t _ { c u r r }$ .

# frictionWork

This variable contains the value of the total frictional dissipation in the entire model from the beginning of the analysis. The units are energy per unit area.

# shape(nFacNod, nContact)

For each contact point this array contains the shape functions of the nodes of its master surface facet, evaluated at the location of the contact point. If the master surface is an analytical rigid surface, this array is passed in as a dummy array.

# coordSlv(nDir, nSlvNod)

Array containing the nDir components of the current coordinates of the slave nodes.

# coordMst(nDir, nMstNod)

Array containing the nDir components of the current coordinates of the master nodes. If the master surface is an analytical rigid surface, this array is passed in as a dummy array.

<!-- source-page: 422 -->

dirCosSl(nDir, nContact)

Direction cosines of the incremental slip at the contact points.

dircosN(nDir, nContact)

Direction cosines of the normals to the master surface at the contact points.

props(nProps)

User-specified vector of property values to define the frictional behavior between the contacting surfaces.

areaSlv(nSlvNod)

Area associated with the slave nodes (equal to 1 for node-based surface nodes).

tempSlv(nContact)

Current temperature at the slave nodes.

preDefSlv(nContact,nPred)

Current user-specified predefined field variables at the slave nodes (initial values at the beginning of the analysis and current values during the analysis).

tempMst(numDefTfv)

Current temperature at the nearest points on the master surface.

preDefMst(numDefTfv,nPred)

Current user-specified predefined field variables at the nearest points on the master surface (initial values at the beginning of the analysis and current values during the analysis).

<!-- source-page: 423 -->

# 1.2.7 VFRIC\_COEF: User subroutine to define the frictional coefficient for contact surfaces.

# Product: Abaqus/Explicit

# References

• “Frictional behavior,” Section 37.1.5 of the Abaqus Analysis User’s Guide   
• \*FRICTION   
• “VFRIC, VFRIC\_COEF, and VFRICTION,” Section 4.1.30 of the Abaqus Verification Guide

# Overview

User subroutine VFRIC\_COEF:

• can be used to define the isotropic frictional coefficient between contacting surfaces;   
• corresponds to the classical Coulomb friction model; and   
• can be used only with the general contact algorithm.

# User subroutine interface

```txt
subroutine vfric_coef (
C Write only -
* fCoef, fCoefDeriv,
C Read only -
* nBlock, nProps, nTemp, nFields,
* jFlags, rData,
* surfInt, surfSlv, surfMst,
* props, slipRate, pressure,
* tempAvg, fieldAvg)
C
include 'vaba_param.inc'
C
dimension fCoef(nBlock),
* fCoefDeriv(nBlock,3),
* props(nProps),
* slipRate(nBlock),
* pressure(nBlock),
* tempAvg(nBlock),
* fieldAvg(nBlock,nFields)
C
parameter( iKStep    = 1, 
```

<!-- source-page: 424 -->

```matlab
* iKInc = 2,
* nFlags = 2 )
C
    parameter( iTimStep = 1,
    * iTimGlb = 2,
    * iDTimCur = 3,
    * nData = 3 )
C
    dimension jFlags(nFlags), rData(nData)
C
    character*80 surfInt, surfSlv, surfMst
C
    user coding to define fCoef
C
    return
    end 
```

# Variables to be defined

fCoef(nBlock)

This array must be updated to the current values of the friction coefficient for all contacting points.

fCoefDeriv(nBlock,3)

This array is not applicable to Abaqus/Explicit analyses.

# Variables passed in for information

nBlock

Number of contacting points to be processed in this call to VFRIC\_COEF.

nProps

User-specified number of property values associated with this friction model.

nTemp

1 if the temperature is defined and 0 if the temperature is not defined.

nFields

Number of user-specified field variables.

jFlag(1)

Step number.

jFlag(2)

Increment number.

<!-- source-page: 425 -->

rData(1)

Value of step time.

rData(2)

Value of total time.

rData(3)

Current increment in time from $t = t _ { c u r r } - \Delta t$ to .

surfInt

User-specified surface interaction name, left justified.

surfSlv

Slave surface name, not applicable to general contact.

surfMst

Master surface name, not applicable to general contact.

props(nProps)

User-specified vector of property values to define the frictional coefficient at contacting points.

slipRate(nBlock)

This array contains the rate of tangential slip at the contacting points for the current time increment.

pressure(nBlock)

This array contains the pressure at the contacting points applied at the end of the current time increment.

tempAvg(nBlock)

Average current temperature between the master and slave surfaces at the contacting points.

fieldAvg(nBlock,nFields)

Average current value of all the user-specified field variables between the master and slave surfaces at the contacting points.

<!-- source-page: 426 -->

<!-- source-page: 427 -->

# 1.2.8 VFRICTION: User subroutine to define frictional behavior for contact surfaces.

# Product: Abaqus/Explicit

# References

• “Frictional behavior,” Section 37.1.5 of the Abaqus Analysis User’s Guide   
• \*FRICTION   
• “VFRIC, VFRIC\_COEF, and VFRICTION,” Section 4.1.30 of the Abaqus Verification Guide

# Overview

# User subroutine VFRICTION:

• can be used to define the frictional behavior between contacting surfaces;   
• can be used when the classical Coulomb friction model is too restrictive and a more complex definition of shear transmission between contacting surfaces is required;   
• must provide the entire definition of shear interaction between the contacting surfaces;   
• can use and update solution-dependent state variables for node-to-face and node-to-analytical rigid surface contact;   
• cannot be used in conjunction with softened tangential surface behavior; and   
• can be used only with the general contact algorithm.

# Contact points

The points considered in user subroutine VFRICTION are called contact points. Each contact point is primarily associated with a slave node or a point along a slave edge; the contact point also references the corresponding master surface that it contacts. A contact point exists for each pairing of slave node and master surface. Therefore, more than one contact point may reference the same slave node but different master surfaces, such as with contact at a corner.

The number of contact points currently being passed into user subroutine VFRICTION is nBlock. The array jConSlvUid(nNodSlv,nBlock) gives the slave surface node numbers associated with the contact points. The variable nNodSlv indicates whether a single slave node (for node-to-face contact) or two slave nodes of an edge (for edge-to-edge contact) are associated with each contact point. Similarly, the array jConMstUid(nNodMst,nBlockAnal) gives the master surface node numbers associated with each contact point; the nodes can belong to a facet, an edge, or an analytical surface. The variable nNodMst indicates the number of master nodes associated with each contact point.

An Abaqus/Explicit model can be defined in terms of an assembly of part instances (see “Defining an assembly,” Section 2.10.1 of the Abaqus Analysis User’s Guide). In such models a node number is an internally generated node number. If the original node number and part instance name are required, call the utility routine VGETPARTINFO (see “Obtaining part information,” Section 2.1.5).

<!-- source-page: 428 -->

# Local coordinate system

A local coordinate system is defined for each contact point to facilitate specification of frictional forces and incremental slip. The local 1-direction is tangential to the master surface; it is defined by $\mathbf { t } _ { 1 } ~ =$ $d \mathbf { s } / | d \mathbf { s } |$ , where is the incremental slip vector. The incremental slip vector used to define $\mathbf { t } _ { 1 }$ corresponds to the incremental slip in the current time increment. The master surface normal direction, $\mathbf { n } ,$ is the local 3-direction. The local 2-direction is given by $\mathbf { t } _ { 2 } = \mathbf { n } \times \mathbf { t } _ { 1 }$ , which is also tangent to the master surface. The vectors are shown in Figure 1.2.8–1. The direction cosines for $\mathbf { t } _ { 1 }$ and with respect to the global coordinate system are available in dirCosS1 and dirCosN, respectively. In the case of zero incremental slip ( ) we choose an arbitrary direction for $\mathbf { t } _ { 1 }$ that is orthogonal to the normal direction, .

![](images/page-428_ee0f0a9fc878b4b8608e793a1eac6039ee5e9782ac0f06804a5ced007f8deb3f.jpg)

<details>
<summary>text_image</summary>

surface normal
slave node
master surface
n
ts
ds
t1
slip directions
incremental frictional slip
</details>

Figure 1.2.8–1 Local coordinate system for three-dimensional contact with VFRICTION.

# Frictional forces

You specify the frictional force, fTangential, at each contact point in local coordinates in this subroutine. The array fTangential is dimensioned such that only the tangential components can be specified. Any components of the frictional force that are not specified will remain equal to zero. For isotropic friction, only the first component of the frictional force need be specified since the second component should be zero. A “stick force” at each contact point is provided in the array fStickForce to assist you in setting appropriate frictional force values. The stick force is the force required to prevent additional “plastic” slipping. The stick force at each contact point is provided as a scalar value as it would act in the direction opposite to $\mathbf { t } _ { 1 }$ . The stick force is computed prior to calling user subroutine VFRICTION. The first component of the frictional force should be in the range between zero and the

<!-- source-page: 429 -->

negative of the stick force value. Typically, the stick force will be positive and the first component of the applied frictional force will be negative, opposing the incremental slip. Penalty contact includes an elastic slip regime due to finite penalty stiffness; so occasionally the stick force will be negative during recovery of elastic slip, indicating that it is appropriate for the first component of the frictional force to be positive (i.e., acting in the same direction as the incremental slip). A noisy or unstable solution is likely to result if the first component of fTangential is set outside the range between zero and the negative of the stick force value.

After user subroutine VFRICTION is called, frictional forces that oppose the forces specified at the contact points are distributed to the master nodes.

User subroutine interface   
```txt
subroutine vfriction (
C Write only -
    * fTangential,
C Read/Write -
    * state,
C Read only -
    * nBlock, nBlockAnal, nBlockEdge,
    * nNodState, nNodSlv, nNodMst,
    * nFricDir, nDir,
    * nStates, nProps, nTemp, nFields,
    * jFlags, rData,
    * surfInt, surfSlv, surfMst,
    * jConSlvUid, jConMstUid, props,
    * dSlipFric, fStickForce, fTangPrev, fNormal,
    * areaCont, dircosN, dircosS1,
    * shapeSlv, shapeMst,
    * coordSlv, coordMst,
    * velSlv, velMst,
    * tempSlv, tempMst,
    * fieldSlv, fieldMst )
C
    include `vaba_param.inc'
C
    dimension fTangential(nFricDir,nBlock),
    * state(nStates,nNodState,nBlock),
    * jConSlvUid(nNodSlv,nBlock),
    * jConMstUid(nNodMst,nBlockAnal),
    * props(nProps),
    * dSlipFric(nDir,nBlock),
    * fStickForce(nBlock), 
```

<!-- source-page: 430 -->

```c
* fTangPrev(nDir,nBlock),
* fNormal(nBlock),
* areaCont(nBlock),
* dircosN(nDir,nBlock),
* dircosS1(nDir,nBlock),
* shapeSlv(nNodSlv,nBlockEdge),
* shapeMst(nNodMst,nBlockAnal),
* coordSlv(nDir,nNodSlv,nBlock),
* coordMst(nDir,nNodMst,nBlockAnal),
* velSlv(nDir,nNodSlv,nBlock),
* velMst(nDir,nNodMst,nBlockAnal),
* tempSlv(nBlock),
* tempMst(nBlockAnal),
* fieldSlv(nFields,nBlock),
* fieldMst(nFields,nBlockAnal)
C
    parameter( iKStep    = 1,
    *    iKInc    = 2,
    *    iLConType    = 3,
    *    nFlags    = 3 )
C
    parameter( iTimStep    = 1,
    *    iTimGlb    = 2,
    *    iDTimCur    = 3,
    *    iFrictionWork    = 4,
    *    nData    = 4 )
C
    dimension jFlags(nFlags), rData(nData)
C
    character*80 surfInt, surfSlv, surfMst
C
    user coding to define fTangential
    and, optionally, state
C
    return
    end 
```

# Variable to be defined

# fTangential(nFricDir,nBlock)

This array must be updated to the current values of the frictional force components for all contact points in the local tangent directions. See Figure 1.2.8–1 for a definition of the local coordinate system. This array will be zero (no friction force) until it is set.
