User Subroutine Interface
subroutine fric_coef (
C Write only -
* fCoef, fCoefDeriv,
C Read only, except state variables within rData array -
* 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
c Offset parameters to various integer quantities in iData(nDataI)
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,
* nDataI = 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
dimension iData(nDataI), rData(*)
c
character*80 surfInt, surfSec, surfMain
c
C
user coding to define fCoef
c
c Pointers to access blocks of data from rData
c 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
......
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
to
.
-
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.
|