Terminology
The use of user subroutine
VFRIC requires familiarity with the following terminology.
Surface node numbers
The “surface node number” refers to the position of a particular node in the
list of nodes on the surface. For example, there are
nSlvNod nodes on the slave surface. Number
nSlvNod,
is the surface node number of the nth node in this list;
jSlvUid
is the user-defined global number of this node. An
Abaqus/Explicit
model can be defined in terms of an assembly of part instances (see
Assembly definition).
In such models a node number in jSlvUid 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).
Local coordinate system
A local coordinate system is defined for each contact point to facilitate
specification of frictional forces and incremental slips. The local 1-direction
for both two-dimensional and three-dimensional contact is tangential to the
master surface, and it is defined by ,
where is the
incremental slip vector. The incremental slip vector used to define
corresponds to the incremental slip in the current time increment for penalty
contact and the predicted incremental slip for kinematic contact. The master
surface normal direction, , is the local
2-direction for two-dimensional contact and the local 3-direction for
three-dimensional contact. The local 2-direction for three-dimensional contact
is given by ,
which is also tangent to the master surface. The vectors are shown in
Figure 1
and
Figure 2.
The direction cosines for
and with respect to the
global coordinate system are available in
dirCosT1 and
dirCosN, respectively. In the case of zero
incremental slip ()
we choose an arbitrary direction for
that is orthogonal to the normal direction, .
Figure 1. Local coordinate system for two-dimensional contact with VFRIC.
Figure 2. Local coordinate system for three-dimensional contact with VFRIC.
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 three-dimensional contact
with 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 the
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
.
The stick force is computed prior to calling user subroutine
VFRIC by either the kinematic or the penalty contact algorithm.
See
Contact constraint enforcement methods in Abaqus/Explicit
for descriptions of the kinematic and penalty contact algorithms and the user
interface for choosing between them. The first component of the frictional
force should be in the range between zero and minus 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, during recovery of elastic slip, the stick force
will be negative, 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 of
the range between zero and negative the value of the stick force.
After user subroutine
VFRIC is called, frictional forces that oppose the forces
specified at the contact points are distributed to the master nodes. For
balanced master-slave contact we then compute weighted averages of the
frictional forces for both master-slave orientations. These forces are directly
applied if the penalty contact algorithm is being used. If the kinematic
contact algorithm is being used, the frictional forces are converted to
acceleration corrections by dividing by the nodal masses.
User subroutine interface
subroutine vfric(
C Write only -
1 fTangential,
C Read/Write -
2 statev,
C Read only -
3 kStep, kInc, nContact, nFacNod, nSlvNod, nMstNod,
4 nFricDir, nDir, nStateVar, nProps, nTemp, nPred, numDefTfv,
5 jSlvUid,jMstUid, jConSlvid, jConMstid, timStep, timGlb,
6 dTimCur, surfInt, surfSlv, surfMst, lContType,
7 dSlipFric, fStickForce, fTangPrev, fNormal, frictionWork,
8 shape, coordSlv, coordMst, dirCosSl, dircosN, props,
9 areaSlv, tempSlv, preDefSlv, tempMst, preDefMst)
C
include `vaba_param.inc'
C
character*80 surfInt, surfSlv, surfMst
C
dimension props(nProps), statev(nStateVar,nSlvNod),
1 dSlipFric(nDir,nContact),
2 fTangential(nFricDir,nContact),
3 fTangPrev(nDir,nContact),
4 fStickForce(nContact), areaSlv(nSlvNod),
5 fNormal(nContact), shape(nFacNod,nContact),
6 coordSlv(nDir,nSlvNod), coordMst(nDir,nMstNod),
7 dirCosSl(nDir,nContact), dircosN(nDir,nContact),
8 jSlvUid(nSlvNod), jMstUid(nMstNod),
9 jConSlvid(nContact), jConMstid(nFacNod,nContact)
1 tempSlv(nContact), preDefSlv(nContact,nPred),
2 tempMst(numDefTfv), preDefMst(numDefTfv,nPred)
user coding to define fTangential
and, optionally, statev
return
end
Variables to be defined
- fTangential(nFricDir,
nContact)
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
and
Figure 2
for definition of the local coordinate system. This array will be zero (no
friction force) until you reset it.
Variables that can be updated
- statev(nstateVar,
nSlvNod)
This array contains the user-defined solution-dependent state variables for
all the nodes on the slave surface. You define the size of this array (see
Frictional behavior
for more information). This array will be passed in containing the values of
these variables prior to the call to user subroutine
VFRIC. If any of the solution-dependent state variables is being
used in conjunction with the friction behavior, it must be updated in this
subroutine. The state variables are available even for slave nodes that are not
in contact. This may be useful when, for example, the state variables need to
be reset for slave nodes that are not in contact.
Variables passed in for information
- kStep
Step number.
- kInc
Increment number.
- nContact
Number of contacting slave nodes.
- nFacNod
Number of nodes on each master surface facet
(nFacNod is 2 for two-dimensional surfaces,
nFacNod is 4 for three-dimensional surfaces). If
the master surface is an analytical rigid surface, this variable is passed in
as 0.
- nSlvNod
Number of slave nodes.
- nMstNod
Number of master surface nodes, if the master surface is made up of facets.
If the master surface is an analytical rigid surface, this variable is passed
in as 0.
- nFricDir
Number of tangent directions at the contact points (nFricDir
= nDir - 1).
- nDir
Number of coordinate directions at the contact points. (In a
three-dimensional model nDir will be two if the
surfaces in the contact pair are two-dimensional analytical rigid surfaces or
are formed by two-dimensional elements.)
- nStateVar
Number of user-defined state variables.
- 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.
- nPred
Number of predefined field variables.
- numDefTfv
Equal to nContact if the master surface is
made up of facets. If the master surface is an analytical rigid surface, this
variable is passed in as 1.
- jSlvUid(nSlvNod)
This array lists the user-defined global node numbers (or internal node
numbers for models defined in terms of an assembly of part instances) of the
nodes on the slave surface.
- jMstUid(nMstNod)
This array lists the user-defined global node numbers (or internal node
numbers for models defined in terms of an assembly of part instances) of the
nodes on the master surface. If the master surface is an analytical rigid
surface, this array is passed in as a dummy array.
- jConSlvid(nContact)
This array lists the surface node numbers of the slave surface nodes that
are in contact.
- jConMstid(nFacNod,
nContact)
This array lists the surface node numbers of the master surface nodes that
make up the facet with which each contact point is in contact. If the master
surface is an analytical rigid surface, this array is passed in as a dummy
array.
- timStep
Value of step time.
- timGlb
Value of total time.
- dtimCur
Current increment in time from
to .
- surfInt
User-specified surface interaction name, left justified.
- surfSlv
Slave surface name.
- surfMst
Master surface name.
- lContType
Contact type flag. This flag is set based on the type of constraint
enforcement method (see
Contact constraint enforcement methods in Abaqus/Explicit)
being used: 1 for kinematic contact and 2 for penalty contact. Stick conditions
are satisfied exactly with the kinematic contact algorithm; they are satisfied
only approximately (subject to an automatically chosen penalty stiffness value)
with the penalty contact algorithm.
- 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
to .
For penalty contact this incremental slip is used to define the local
coordinate system at each contact point (see
Figure 1
and
Figure 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 ),
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
.
- 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.
- 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).
|