Terminology
The use of user subroutine 
  VUINTER 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
The array alocaldir 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. For a two-dimensional 
  VUINTER model the second local direction is the tangent direction
  defined by the cross product of the vector into the plane of the model (0., 0.,
  −1.0) and the slave normal. For a three-dimensional 
  VUINTER model the second and third local directions correspond to
  two orthogonal tangent directions 
  and ,
  which are set as follows: 
 
  - 
	 
If the master surface is a cylindrical analytical surface, the second
		local direction corresponds to the generator direction (see 
		Analytical rigid surface definition),
		and the third local direction is the cross product of the first and second
		local directions. 
	  
   
  - 
	 
If the master surface is an analytical surface of revolution, the third
		local direction corresponds to the hoop direction, and the second local
		direction is the cross product of the third and first local directions. 
	  
   
  - 
	 
 If the master surface is a three-dimensional, element-based surface,
		the tangent directions are based on the slave normal, using the standard
		convention for calculating surface tangents (see 
		Conventions).
		
	  
   
 
For the two cases listed above involving three-dimensional analytical
  surfaces, the local tangent directions will reflect a rotation of the master
  surface. For the last case (three-dimensional, element-based master surface)
  the tangent directions may not follow the rotation of either the master or
  slave surfaces; for example, the local system would remain fixed with respect
  to the global system if a slave node and its surrounding facets rotate about an
  axes parallel to the slave normal. 
 
The 2 × 2 array stored in drot for each slave
  node represents the incremental rotation of the tangent directions within the
  tangent plane corresponding to the tracked point of a three-dimensional master
  surface. (This incremental rotation array is equal to a unit matrix if
  nDir is equal to 2.) This incremental rotation
  matrix is provided so that vector- or tensor-valued state variables defined
  within the tangent plane can be rotated in this subroutine. For example, the
  second and third components of the rdisp array
  (i.e., the relative slip components) are rotated by this amount before 
  VUINTER is called. However, as already mentioned, the rotation of
  the tangent directions may not reflect a physical rotation of the master or
  slave surface. 
  
 
 
 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 vuinter(
C Write only
     1 sfd, scd, spd, svd,
C Read/Write - 
     2 stress, fluxSlv, fluxMst, sed, statev,
C Read only - 
     3 kStep, kInc, nFacNod, nSlvNod, nMstNod, nSurfDir,
     4 nDir, nStateVar, nProps, nTemp, nPred, numDefTfv,
     5 jSlvUid, jMstUid, jConMstid, timStep, timGlb,
     6 dTimCur, surfInt, surfSlv, surfMst,
     7 rdisp, drdisp, drot, stiffDflt, condDflt,
     8 shape, coordSlv, coordMst, alocaldir, props,
     9 areaSlv, tempSlv, dtempSlv, preDefSlv, dpreDefSlv,
     1 tempMst, dtempMst, preDefMst, dpreDefMst) 
C
      include `vaba_param.inc'
C
      character*80 surfInt, surfSlv, surfMst
C
      dimension props(nProps), statev(nStateVar,nSlvNod), 
     1 drot(2,2,nSlvNod), sed(nSlvNod), sfd(nSlvNod),
     2 scd(nSlvNod), spd(nSlvNod), svd(nSlvNod),
     3 rdisp(nDir,nSlvNod), drdisp(nDir,nSlvNod),
     4 stress(nDir,nSlvNod), fluxSlv(nSlvNod),
     5 fluxMst(nSlvNod), areaSlv(nSlvNod),
     6 stiffDflt(nSlvNod), condDflt(nSlvNod),
     7 alocaldir(nDir,nDir,nSlvNod), shape(nFacNod,nSlvNod),
     8 coordSlv(nDir,nSlvNod), coordMst(nDir,nMstNod),
     9 jSlvUid(nSlvNod), jMstUid(nMstNod),
     1 jConMstid(nFacNod,nSlvNod), tempSlv(nSlvNod),
     2 dtempSlv(nSlvNod), preDefSlv(nPred,nSlvNod),
     3 dpreDefSlv(nPred,nSlvNod), tempMst(numDefTfv),
     4 dtempMst(numDefTfv), preDefMst(nPred,numDefTfv),
     5 dpreDefMst(nPred,numDefTfv)
      user coding to define stress,
      and, optionally, fluxSlv, fluxMst, statev, sed, sfd, scd, spd,
      and svd
      return
      end 
 
 
 Variables to be defined
- stress(nDir,
nSlvNod)
 
- 
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(nSlvNod)
 
- 
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(nSlvNod)
 
- 
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. 
  
- sfd(nSlvNod)
 
- 
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. 
  
- scd(nSlvNod)
 
- 
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. 
  
- spd(nSlvNod)
 
- 
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. 
  
- svd(nSlvNod)
 
- 
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. 
  
- sed(nSlvNod)
 
- 
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. 
  
- 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 
  User-defined interfacial constitutive behavior
  for more information). This array will be passed in containing the values of
  these variables prior to the call to user subroutine 
  VUINTER. If any of the solution-dependent state variables is being
  used in conjunction with the surface interaction, it must be updated in this
  subroutine. 
  
 
 
 
 
 Variables passed in for information
- kStep
 
- 
Step number. 
  
- kInc
 
- 
Increment number. 
  
- nFacNod
 
- 
Number of nodes on each master surface facet.
  nFacNod is 2 for two-dimensional surfaces, and
  nFacNod is 4 for three-dimensional surfaces (the
  first and last nodes are the same for triangular facets). 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. 
  
- nSurfDir
 
- 
Number of tangent directions at the contact points (nSurfDir
  = nDir - 1). 
  
- nDir
 
- 
Number of coordinate directions at the contact points. (In a
  three-dimensional model nDir will be 2 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 surface
  interaction 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 nSlvNod 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. 
  
- jConMstid(nFacNod,
nSlvNod)
 
- 
This array lists the surface node numbers of the master surface nodes that
  make up the facet onto which each slave node projects. 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. 
  
- rdisp(nDir,
nSlvNod)
 
- 
An array containing the relative positions between the two surfaces. The
  first component is 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). The second and third
  components, if applicable, are the accumulated incremental relative tangential
  displacements of the slave node, measured from the beginning of the step in
  which the contact pair is defined. The local directions in which the relative
  displacements are defined are stored in
  alocaldir. If the master surface is an
  analytical surface, the elements in rdisp are
  set to r_MaxVal for the slave nodes that are far
  from the master surface. 
  
- drdisp(nDir,
nSlvNod)
 
- 
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,
nSlvNod)
 
- 
Rotation increment matrix. This matrix represents the incremental rotation
  of the local surface tangent directions for a three-dimensional surface. This
  rotation matrix for each slave node is defined as a unit matrix for
  two-dimensional surfaces. If the master surface is an analytical surface, the
  elements in drot are set to
  r_MaxVal for the slave nodes that are far from
  the master surface. 
  
- stiffDflt(nSlvNod)
 
- 
Values of the default penalty stiffnesses for each slave node (units of
  ).
  
  
- condDflt(nSlvNod)
 
- 
Values of the default penalty conductances for each slave node (units of
  ).
  
  
- shape(nFacNod,
nSlvNod)
 
- 
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 the coordinates of the contact points
  on the master surface. 
  
- alocaldir(nDir, nDir,
nSlvNod)
 
- 
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
  (alocaldir(1..nDir,1,...)) is the normal to the
  surface. The second direction
  (alocaldir(1..nDir,2,...)) is the first surface
  tangent. For a three-dimensional surface, the third direction
  (alocaldir(1..3,3,...)) is the second surface
  tangent. If the master surface is an analytical rigid surface, the numbers in
  alocaldir are valid only if the corresponding
  parts in rdisp are valid (i.e., not equal to
  r_MaxVal). 
  
- props(nProps)
 
- 
User-specified vector of property values to define the behavior between the
  contacting surfaces. 
  
- areaSlv(nSlvNod)
 
- 
Area associated with the slave nodes (equal to 1 for node-based surface
  nodes). 
  
- tempSlv(nSlvNod)
 
- 
Current temperature at the slave nodes. 
  
- dtempSlv(nSlvNod)
 
- 
Increment in temperature during the previous time increment at the slave
  nodes. 
  
- preDefSlv(nPred,
nSlvNod)
 
- 
Current user-specified predefined field variables at the slave nodes
  (initial values at the beginning of the analysis and current values during the
  analysis). 
  
- dpreDefSlv(nPred,
nSlvNod)
 
- 
Increment in the predefined field variables at the slave nodes during the
  previous time increment. 
  
- tempMst(numDefTfv)
 
- 
Current temperature at the nearest points on the master surface. 
  
- dtempMst(numDefTfv)
 
- 
Increment in temperature during the previous time increment at the nearest
  points on the master surface. 
  
- preDefMst(nPred,
numDefTfv)
 
- 
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). 
  
- dpreDefMst(nPred,
numDefTfv)
 
- 
Increment in the predefined field variables during the previous time
  increment at the nearest points on the master surface. 
  
 
 
 
 |