1.2.14 VUINTERACTION
User subroutine to define the contact interaction between surfaces with the general contact algorithm.

Product: Abaqus/Explicit  

References

Overview

User subroutine VUINTERACTION:

Local coordinate system

The array dircos defines the direction cosines of a local coordinate system for each slave node. The first local direction corresponds to the contact normal direction from the perspective of the slave node. The second and third local directions correspond to two orthogonal tangent directions and , which are set as follows:

For the two cases listed above involving analytical surfaces, the local tangent directions will reflect a rotation of the master surface. For the last case (element-based master surface) the tangent directions follow the rotation of the master surface only approximately. The second tangent direction is constructed such that it is perpendicular to the slave normal and the line going from the first to the third node on the master facet. The slave normal, the first tangent, and the second tangent form a right-handed system.

Conventions for heat flux and stress

A positive flux indicates heat flowing into a surface, and a negative flux denotes heat leaving the surface. Flux must be specified for both surfaces, and they need not be equal and opposite so that effects such as frictional dissipation and differential surface heating can be modeled.

A positive normal stress denotes a pressure directed into the surface (opposite the local normal direction). Positive shear stresses denote shear tractions in the direction of the local surface tangents.

User subroutine interface

      subroutine vuinteraction ( 
C Read/Write - 
     *   stress, fluxSlv, fluxMst, 
     *   state, sed, 
C Write only -
     *   sfd, scd, spd, svd,     
C Read only - 
     *   nBlock, nBlockAnal, nBlockEdge, 
     *   nNodState, nNodSlv, nNodMst, nDir, 
     *   nStates, nProps, nTemp, nFields, 
     *   jFlags, rData, 
     *   surfInt, surfSlv, surfMst, 
     *   jSlvUid, jMstUid, props,
     *   penetration, drDisp, dRot, dircos, stiffDef, conductDef,
     *   coordSlv, coordMst, areaSlv, shapeSlv, shapeMst, 
     *   tempSlv, tempMst, dTempSlv, dTempMst, 
     *   fieldSlv, fieldMst, dFieldSlv, dFieldMst )
C
      include `vaba_param.inc'
C
      dimension stress(nDir,nBlock),
     *   fluxSlv(nBlock),
     *   fluxMst(nBlock),
     *   state(nStates,nNodState,nBlock),
     *   sed(nBlock), 
     *   sfd(nBlock),
     *   scd(nBlock), 
     *   spd(nBlock), 
     *   svd(nBlock),
     *   jSlvUid(nNodSlv,nBlock), 
     *   jMstUid(nNodMst,nBlockAnal), 
     *   props(nProps), 
     *   penetration(nBlock), 
     *   drDisp(nDir,nBlock), 
     *   dRot(2,2,nBlock), 
     *   stiffDef(nBlock), 
     *   conductDef(nBlock),
     *   dircos(nDir,nDir,nBlock), 
     *   coordSlv(nDir,nNodSlv,nBlock), 
     *   coordMst(nDir,nNodMst,nBlockAnal), 
     *   areaSlv(nBlock),
     *   shapeSlv(nNodSlv,nBlockEdge), 
     *   shapeMst(nNodMst,nBlockAnal), 
     *   tempSlv(nBlock), 
     *   tempMst(nBlockAnal),
     *   dTempSlv(nBlock), 
     *   dTempMst(nBlockAnal),
     *   fieldSlv(nFields,nBlock),
     *   fieldMst(nFields,nBlockAnal)
     *   dFieldSlv(nFields,nBlock),
     *   dFieldMst(nFields,nBlockAnal)
C
      parameter( iKStep    = 1,
     *           iKInc     = 2,
     *           iLConType = 3,
     *           nFlags    = 3 )
C
      parameter( iTimStep   = 1,
     *           iTimGlb    = 2,
     *           iDTimCur   = 3,
     *           iTrackThic = 4, 
     *           nData      = 4 )
C
      dimension jFlags(nFlags), rData(nData)
C
      character*80 surfInt, surfSlv, surfMst 
C
      user coding to define stress,
      and, optionally, fluxSlv, fluxMst, state, sed, sfd, scd, spd,
      and svd
C
      return
      end

Variable to be defined

stress(nDir, nBlock)

On entry this array contains the stress at the interface during the previous time increment. It must be updated to the stress at the interface in the current time increment.

Variables that can be updated

fluxSlv(nBlock)

On entry this array contains the flux entering the slave surface during the previous time increment. It must be updated to the flux entering the slave surface during the current increment.

fluxMst(nBlock)

On entry this array contains the flux entering the master surface during the previous time increment. It must be updated to the flux entering the master surface during the current time increment.

state(nStates,nNodState,nBlock)

This array contains the user-defined solution-dependent state variables for all the nodes on the slave surface. The use of the state variables is applicable only for node-to-face contact. See User-defined interfacial constitutive behavior, Section 32.1.6 of the Abaqus Analysis User's Manual, for more information on the size of this array. This array will be passed in containing the values of these variables prior to the call to user subroutine VUINTERACTION.

If any of the solution-dependent state variables is being used in conjunction with the interaction, it must be updated in this subroutine. These state variables need to be updated with care, as a slave node can be in contact with multiple master surfaces. Such a slave node may be passed into the user subroutine at a given increment multiple times, possibly on separate calls to the user subroutine, and you may end up advancing the state variables for that node multiple times for a single time increment. One trick to keep track of whether or not a node state is advanced is to use one of the state variables exclusively for this purpose. You could set that selected state variable to the current increment number and update the state only if it is not already set to the current increment number.

sed(nBlock)

On entry this array contains the elastic energy density at the slave nodes at the beginning of the increment. It can be updated to contain the elastic energy density at the end of the current time increment. These values contribute to the output variable ALLSE and have no effect on other solution variables. The use of this variable is applicable only for node-to-face contact.

sfd(nBlock)

This array can be updated to contain the increment in frictional dissipation at each node (units of energy per unit area). These values contribute to the output variables SFDR and ALLFD and have no effect on other solution variables. The use of this variable is applicable only for node-to-face contact.

scd(nBlock)

This array can be updated to contain the increment in creep dissipation at each node (units of energy per unit area). These values contribute to the output variables SFDR and ALLCD and have no effect on other solution variables. The use of this variable is applicable only for node-to-face contact.

spd(nBlock)

This array can be updated to contain the increment in plastic dissipation at each node (units of energy per unit area). These values contribute to the output variables SFDR and ALLPD and have no effect on other solution variables. The use of this variable is applicable only for node-to-face contact.

svd(nBlock)

This array can be updated to contain the increment in viscous dissipation at each node (units of energy per unit area). These values contribute to the output variables SFDR and ALLVD and have no effect on other solution variables. The use of this variable is applicable only for node-to-face contact.

Variables passed in for information

nBlock

Number of tracking points to be processed in this call to VFRICTION.

nBlockAnal

1 for analytical rigid master surface; nBlock otherwise.

nBlockEdge

nBlock for edge type slave surface; 1 otherwise.

nNodState

1 for node-to-face and node-to-analytical rigid surface contact; not applicable for edge-to-edge contact.

nNodSlv

1 for node-to-face and node-to-analytical rigid surface contact; 2 for edge-to-edge contact.

nNodMst

1 for analytical rigid master surface; 2 for edge-type master surface; 4 for facet-type master surface.

nDir

Number of coordinate directions at the tracking points (equal to 3).

nStates

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.

nFields

Number of predefined field variables.

jFlag(1)

Step number.

jFlag(2)

Increment number.

jFlag(3)

1 for node-to-face contact, 2 for edge-to-edge contact, and 3 for node-to-analytical rigid surface contact.

rData(1)

Value of step time.

rData(2)

Value of total time.

rData(3)

Current increment in time from to .

rData(4)

This variable contains the value of the tracking thickness specified for the surface interaction.

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.

jSlvUid(nNodSlv,nBlock)

This array lists the surface node numbers of the slave surface nodes that are tracked.

jMstUid(nNodMst,nBlockAnal)

This array lists the surface node numbers of the master surface nodes that make up the facet with which each slave node is tracked.

props(nProps)

User-specified vector of property values to define the interaction between the tracking surfaces.

penetration(nBlock)

The relative position of the slave node, with respect to the master surface, in the normal direction (a positive value indicates a penetration, and a negative value indicates a gap). If the master surface is an analytical surface, the elements in penetration are set to r_MaxVal for the slave nodes that are far from the master surface.

drDisp(nDir,nBlock)

An array containing the increments in relative positions between the two surfaces during the current time increment. If the master surface is an analytical surface, the elements in drDisp are set to r_MaxVal for the slave nodes that are far from the master surface.

dRot(2,2,nBlock)

This argument is currently undefined.

stiffDef(nBlock)

Values of the default penalty stiffnesses (stress per unit penetration) for each slave node (units of ).

conductDef(nBlock)

Values of the default penalty conductances for each slave node (units of ).

dircos(nDir,nDir,nBlock)

Direction cosines of the local surface coordinate system. The first array index corresponds to the components of the local directions, and the second array index corresponds to the local direction number. The first direction (dircos(1..nDir,1,...)) is the normal to the surface. The second direction (dircos(1..nDir,2,...)) is the first surface tangent. For a three-dimensional surface, the third direction (dircos(1..3,3,...)) is the second surface tangent. If the master surface is an analytical rigid surface, the numbers in dircos are valid only if the corresponding parts in penetration are valid (i.e., not equal to r_MaxVal).

coordSlv(nDir,nNodSlv,nBlock)

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

coordMst(nDir,nNodMst,nBlockAnal)

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.

areaSlv(nBlock)

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

shapeSlv(nNodSlv,nBlockEdge)

For each contact point this array contains the shape functions of the nodes of its slave surface, evaluated at the location of the contact point.

shapeMst(nNodMst,nBlockAnal)

For each contact point this array contains the shape functions of the nodes of its master surface, 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.

tempSlv(nBlock)

Current temperature at the contact points on the slave surface.

tempMst(nBlockAnal)

Current temperature at the contact points on the master surface.

dTempSlv(nBlock)

Increment in the temperature during the previous time increment at the slave nodes.

dTempMst(nBlockAnal)

Increment in the temperature during the previous time increment at the contact points on the master surface.

fieldSlv(nFields,nBlock)

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

fieldMst(nFields,nBlockAnal)

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

dFieldSlv(nFields,nBlock)

Increment in the user-specified predefined field variables during the previous time increment at the slave nodes.

dFieldMst(nFields,nBlockAnal)

Increment in the user-specified predefined field variables during the previous time increment at the contact points on the master surface.

Additional information