ProductsAbaqus/Explicit Contact pointsThe 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 Assembly definition). 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).
Local coordinate systemA 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 , where is the incremental slip vector. The incremental slip vector used to define corresponds to the incremental slip in the current time increment. The master surface normal direction, , is the local 3-direction. The local 2-direction is given by , which is also tangent to the master surface. The vectors are shown in Figure 1. The direction cosines for 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 that is orthogonal to the normal direction, . Figure 1. Local coordinate system for three-dimensional contact with VFRICTION.
![]()
Frictional forcesYou 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 . 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 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 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),
* 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
Variables to be defined
Variables that can be updated
Variables passed in for information
| |||||||||||||