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 nSecNod nodes on the
secondary surface. Number
nSecNod, is the surface node number of the
nth node in this list; jSecUid
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 jSecUid 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 secondary node. The first local direction corresponds to the
contact normal direction from the perspective of the secondary 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 secondary 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 main 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 main 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 main surface is a three-dimensional, element-based surface, the tangent directions are
based on the secondary 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 main surface. For the last case
(three-dimensional, element-based main surface) the tangent directions may not follow the
rotation of either the main or secondary surfaces; for example, the local system would
remain fixed with respect to the global system if a secondary node and its surrounding
facets rotate about an axes parallel to the secondary normal.
The 2 × 2 array stored in drot for each secondary node represents
the incremental rotation of the tangent directions within the tangent plane corresponding to
the tracked point of a three-dimensional main 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 main or secondary 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, fluxSec, fluxMain, sed, statev,
C Read only -
3 kStep, kInc, nFacNod, nSecNod, nMainNod, nSurfDir,
4 nDir, nStateVar, nProps, nTemp, nPred, numDefTfv,
5 jSecUid, jMainUid, jConMainid, timStep, timGlb,
6 dTimCur, surfInt, surfSec, surfMain,
7 rdisp, drdisp, drot, stiffDflt, condDflt,
8 shape, coordSec, coordMain, alocaldir, props,
9 areaSec, tempSec, dtempSec, preDefSec, dpreDefSec,
1 tempMain, dtempMain, preDefMain, dpreDefMain)
C
include `vaba_param.inc'
C
character*80 surfInt, surfSec, surfMain
C
dimension props(nProps), statev(nStateVar,nSecNod),
1 drot(2,2,nSecNod), sed(nSecNod), sfd(nSecNod),
2 scd(nSecNod), spd(nSecNod), svd(nSecNod),
3 rdisp(nDir,nSecNod), drdisp(nDir,nSecNod),
4 stress(nDir,nSecNod), fluxSec(nSecNod),
5 fluxMain(nSecNod), areaSec(nSecNod),
6 stiffDflt(nSecNod), condDflt(nSecNod),
7 alocaldir(nDir,nDir,nSecNod), shape(nFacNod,nSecNod),
8 coordSec(nDir,nSecNod), coordMain(nDir,nMainNod),
9 jSecUid(nSecNod), jMainUid(nMainNod),
1 jConMainid(nFacNod,nSecNod), tempSec(nSecNod),
2 dtempSec(nSecNod), preDefSec(nPred,nSecNod),
3 dpreDefSec(nPred,nSecNod), tempMain(numDefTfv),
4 dtempMain(numDefTfv), preDefMain(nPred,numDefTfv),
5 dpreDefMain(nPred,numDefTfv)
user coding to define stress,
and, optionally, fluxSec, fluxMain, statev, sed, sfd, scd, spd,
and svd
return
end
Variables to Be Defined
-
stress(nDir, nSecNod)
-
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
-
fluxSec(nSecNod)
-
On entry this array contains the flux entering the secondary surface during the previous time
increment. It must be updated to the flux entering the secondary surface during the
current increment.
-
fluxMain(nSecNod)
-
On entry this array contains the flux entering the main surface during the previous time
increment. It must be updated to the flux entering the main surface during the current
time increment.
-
sfd(nSecNod)
-
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(nSecNod)
-
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(nSecNod)
-
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(nSecNod)
-
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(nSecNod)
-
On entry this array contains the elastic energy density at the secondary 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, nSecNod)
-
This array contains the user-defined solution-dependent state variables for all the nodes on the
secondary 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 main 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 main surface is an analytical rigid surface, this variable is passed
in as 0.
-
nSecNod
-
Number of secondary nodes.
-
nMainNod
-
Number of main surface nodes, if the main surface is made up of facets. If the main 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 nSecNod if the main surface is made up of facets. If the
main surface is an analytical rigid surface, this variable is passed in as 1.
-
jSecUid(nSecNod)
-
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 secondary
surface.
-
jMainUid(nMainNod)
-
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 main surface.
If the main surface is an analytical rigid surface, this array is passed in as a dummy
array.
-
jConMainid(nFacNod, nSecNod)
-
This array lists the surface node numbers of the main surface nodes that make up the facet onto
which each secondary node projects. If the main 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.
-
surfSec
-
Secondary surface name.
-
surfMain
-
Main surface name.
-
rdisp(nDir, nSecNod)
-
An array containing the relative positions between the two surfaces. The first component is the
relative position of the secondary node, with respect to the main 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 secondary 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 main surface is an analytical
surface, the elements in rdisp are set to
r_MaxVal for the secondary nodes that are far from
the main surface.
-
drdisp(nDir, nSecNod)
-
An array containing the increments in relative positions between the two surfaces during the
current time increment. If the main surface is an analytical surface, the elements in
drdisp are set to
r_MaxVal for the secondary nodes that are far from
the main surface.
-
drot(2, 2, nSecNod)
-
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
secondary node is defined as a unit matrix for two-dimensional surfaces. If the main
surface is an analytical surface, the elements in drot
are set to r_MaxVal for the secondary nodes that are
far from the main surface.
-
stiffDflt(nSecNod)
-
Values of the default penalty stiffnesses for each secondary node (units of
FL-3).
-
condDflt(nSecNod)
-
Values of the default penalty conductances for each secondary node (units of
Jθ-1T-1).
-
shape(nFacNod, nSecNod)
-
For each contact point this array contains the shape functions of the nodes of its main surface
facet, evaluated at the location of the contact point. If the main surface is an
analytical rigid surface, this array is passed in as a dummy array.
-
coordSec(nDir, nSecNod)
-
Array containing the nDir components of the current coordinates of
the secondary nodes.
-
coordMain(nDir, nMainNod)
-
Array containing the nDir components of the current coordinates of
the main nodes. If the main surface is an analytical rigid surface, this array is
passed in as the coordinates of the contact points on the main surface.
-
alocaldir(nDir, nDir, nSecNod)
-
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 main surface is an analytical rigid surface, the numbers in
alocaldir are valid only if the corresponding parts
in rdisp are valid (that is, not equal to
r_MaxVal).
- props(nProps)
-
User-specified vector of property values to define the behavior between the
contacting surfaces.
-
areaSec(nSecNod)
-
Area associated with the secondary nodes (equal to 1 for node-based surface nodes).
-
tempSec(nSecNod)
-
Current temperature at the secondary nodes.
-
dtempSec(nSecNod)
-
Increment in temperature during the previous time increment at the secondary nodes.
-
preDefSec(nPred, nSecNod)
-
Current user-specified predefined field variables at the secondary nodes (initial values at the
beginning of the analysis and current values during the analysis).
-
dpreDefSec(nPred, nSecNod)
-
Increment in the predefined field variables at the secondary nodes during the previous time
increment.
-
tempMain(numDefTfv)
-
Current temperature at the nearest points on the main surface.
-
dtempMain(numDefTfv)
-
Increment in temperature during the previous time increment at the nearest points on the main
surface.
-
preDefMain(nPred, numDefTfv)
-
Current user-specified predefined field variables at the nearest points on the main surface
(initial values at the beginning of the analysis and current values during the
analysis).
-
dpreDefMain(nPred, numDefTfv)
-
Increment in the predefined field variables during the previous time increment at the nearest
points on the main surface.
|