FRIC_COEF

User subroutine to define the frictional coefficient for contact surfaces.

User subroutine FRIC_COEF:

  • can be used to define the isotropic and anisotropic frictional coefficients between contacting surfaces;

  • corresponds to the classical Coulomb friction model; and

  • can be used with the contact pair and general contact algorithms.

This page discusses:

User Subroutine Interface

      subroutine fric_coef (
C Write only - 
     *   fCoef, fCoefDeriv, 
C Read only - 
     *   nBlock, nProps, nTemp, nFields, 
     *   iData, rData, 
     *   surfInt, surfSec, surfMain, 
     *   props, slipData, pressure, 
     *   tempAvg, fieldAvg )
C
      include 'aba_param.inc'
C
      dimension fCoef(nBlock,2), 
     *   fCoefDeriv(nBlock,20,2),
     *   props(nProps),
     *   slipData(nBlock,6),
     *   pressure(nBlock),
     *   tempAvg(nBlock), 
     *   fieldAvg(nBlock,nFields)
c
      dimension iData(*), rData(*)
c
c			 Offset parameters to various integer quantities in iData(*)
c
      parameter( i_ifc_KStep   = 1,
     *           i_ifc_KInc    = 2,
     *           i_ifc_Kit     = 3,
     *           i_ifc_Node    = 4,
     *           i_ifc_nStateV = 5,
     *           i_ifc_nFDir   = 6)
c
c    Offset parameters to various real quantities in rData(*)
c
      parameter( i_rfc_TimStep = 1,
     *           i_rfc_TimGlb  = 2,
     *           i_rfc_DTimCur = 3,
     *           i_rfc_Drot    = 4,
     *           i_rfc_StateV  = 8)
c
c    Offset parameters to slip variables in slipData
c
      parameter( i_SD_SlipRateMag  = 1,
     *           i_SD_SlipRate1    = 2,
     *           i_SD_SlipRate2    = 3,
     *           i_SD_SlipEq       = 4,
     *           i_SD_Slip1        = 5, 
     *           i_SD_Slip2        = 6,
     *           n_SD_Length       = 6)
c
c    Offset parameters to derivatives in fCoefDeriv
c
      parameter( i_fDer_SlipRateMag  = 1,
     *           i_fDer_Pressure     = 2,
     *           i_fDer_Temperature  = 3,
     *           i_fDer_SlipRate1    = 4,
     *           i_fDer_SlipRate2    = 5, 
     *           i_fDer_SlipEq       = 6,
     *           i_fDer_Slip1        = 7,
     *           i_fDer_Slip2        = 8)
C
      character*80 surfInt, surfSec, surfMain
c
C
      user coding to define fCoef
c
c	    Pointers to access blocks of data from rData
c	    e.g., Solution dependent state variables indexed from 
c           1 to number of state variables nStateV where
c           nStateV = iData(i_ifc_nStateV)
c
      pointer (ptrStateVariables,StateVariables)
      real*8 StateVariables(*) !indexed 1 to iData(i_ifc_nStateV)
      ......
c
c	    Access state variables
c
      ptrStateVariables = loc(rData(i_rfc_StateV))
      ......

c
c	    Compute fCoef
c
      ......

      return
      end

Variables to Be Defined

fCoef(nBlock,2)

For isotropic friction fCoef(1,1) must be updated to the current value of the friction coefficient at the contact point. fCoef(1,2) should not be updated.

For anisotropic friction fCoef(1,1) and fCoef(1,2) must be updated to the current values of the friction coefficients in the first and second local tangent directions, respectively.

fCoef(1,1) is initialized to 0.0, and fCoef(1,2) is initialized to -1.0 before calling FRIC_COEF. Abaqus/Standard assumes that isotropic friction applies to contact points for which fCoef(1,2) remains at -1.0 on returning from FRIC_COEF.

fCoefDeriv(nBlock,20,2)

For isotropic friction the entries of fCoefDeriv(1,*,1) are updated to derivatives of the friction coefficient. The entries of fCoefDeriv(1,*,2) should not be updated.

For anisotropic friction the entries of fCoefDeriv(1,*,1) are updated to derivatives of the friction coefficient in the first local tangent direction, while the entries of fCoefDeriv(1,*,2) must be updated to derivatives of the friction coefficient in the second local tangent direction. See the table below for the meaning of individual derivatives and their parameterized access to update them.

Derivative Definition
fCoefDeriv(1,i_fDer_SlipRateMag,k) Derivative with respect to slip rate magnitude
fCoefDeriv(1,i_fDer_Pressure,k) Derivative with respect to contact pressure
fCoefDeriv(1,i_fDer_Temperature,k) Derivative with respect to temperature
fCoefDeriv(1,i_fDer_SlipRate1,k) Derivative with respect to slip rate component in the first local tangent direction
fCoefDeriv(1,i_fDer_SlipRate2,k) Derivative with respect to slip rate component in the second local tangent direction
fCoefDeriv(1,i_fDer_SlipEq,k) Derivative with respect to equivalent slip accumulated across increments
fCoefDeriv(1,i_fDer_Slip1,k) Derivative with respect to slip component in the first local tangent direction
fCoefDeriv(1,i_fDer_Slip2,k) Derivative with respect to slip component in the second local tangent direction

Variables That Can Be Updated

rData(i_rfc_StateV)
The offset parameter i_rfc_StateV=8. The array of real values starting from this offset corresponds to the solution-dependent state variables. You specify the number of available state variables (Allocating Space for Solution-Dependent State Variables). These state variables are passed in with values at the start of the increment. Update them to their corresponding values at the end of the increment. See the user subroutine interface provided earlier for an example of how to access the array of state variables from the buffer rData.

Variables Passed in for Information

nBlock

Equal to 1.

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.

iData(i_ifc_KStep)

The offset parameter i_ifc_KStep=1, and the integer value at this offset denotes the step number.

iData(i_ifc_KInc)

The offset parameter i_ifc_KStep=2, and the integer value at this offset denotes the increment number.

iData(i_ifc_Kit)

The offset parameter i_ifc_Kit=3, and the integer value at this offset denotes the counter for the element pass calculations; for example, the counter starts out at 1 before the first equation solver pass, and the counter is reset to 1 after a cutback of an increment.

iData(i_ifc_Node)

The offset parameter i_ifc_Node=4, and the integer value at this offset denotes the user-defined secondary node label (or an internal node number for models defined in terms of an assembly of part instances). For the surface-to-surface formulation, this secondary node corresponds to the predominant secondary node of the constraint.

iData(i_ifc_nStateV)

The offset parameter i_ifc_nStateV=5, and the integer value at this offset denotes the number of state variables you have specified. The default value is 0.

iData(i_ifc_nFDir)

The offset parameter i_ifc_nFDir=6, and the integer value at this offset denotes the number of friction directions.

rData(i_rfc_TimStep)

The offset parameter i_rfc_TimStep=1, and the real value at this offset is the step time.

rData(i_rfc_TimGlb)

The offset parameter i_rfc_TimGlb=2, and the real value at this offset is the total time.

rData(i_rfc_DTimCur)

The offset parameter i_rfc_DTimCur=3, and the real value at this offset is the current increment size from t = t c u r r - Δ t to t = t c u r r .

rData(i_rfc_DRot)

The offset parameter i_rfc_DRot=4. The list of four real value entries starting from this offset corresponds to the column major storage of a 2 × 2 rotation increment matrix. For contact with a three-dimensional rigid surface, this matrix represents the incremental rotation of the surface directions relative to the rigid surface. It is provided so that vector- or tensor-valued state variables can be rotated appropriately in this subroutine. For other cases including two-dimensional and axisymmetric contact, the rotation increment matrix is the identity matrix.

surfInt

User-specified surface interaction name, left justified.

surfSec

Secondary surface name, left justified.

surfMain

Main surface name, left justified.

props(nProps)

User-specified vector of property values to define the frictional coefficient at the contact point.

slipData(nBlock,6)

Array containing contact slip variables for the current time increment at the contact point. See the table below for the meaning of individual variables and their access through parameterized locations.

Variable Definition
slipData(1,i_SD_SlipRateMag) Slip rate magnitude
slipData(1,i_SD_SlipRate1) Slip rate in the first local tangent direction
slipData(1,i_SD_SlipRate2) Slip rate in the second local tangent direction; zero for two-dimensional problems
slipData(1,i_SD_SlipEq) Equivalent slip distance accumulated across increments
slipData(1,i_SD_Slip1) Slip component in the first local tangent direction
slipData(1,i_SD_Slip2) Slip component in the second local tangent direction; zero for two-dimensional problems

pressure(nBlock)

Array containing the pressure at the contact point projected at the end of the current time increment.

tempAvg(nBlock)

Average current temperature between the main and secondary surfaces at the contact point.

fieldAvg(nBlock,nFields)

Average current value of all the user-specified field variables between the main and secondary surfaces at the contact point.