can be used to define the mechanical and thermal interaction between
contact surfaces;
must provide the entire definition of the interaction between the
contact surfaces;
can utilize a user-specified tracking thickness to determine potential
points of interaction on a surface (and thus which nodes should be passed into
the subroutine);
can use and update solution-dependent state variables for node-to-face
contact and node-to-analytical rigid surface contact; and
The use of user subroutine
VUINTERACTION requires familiarity with the following terminology.
Tracking Thickness
For efficiency, user subroutine
VUINTERACTION considers only regions of two surfaces that are likely to
be in contact or come into contact in a given increment. This likelihood is
defined by a tracking thickness: only portions of surfaces separated by less
than the tracking thickness in a given increment are passed into the
subroutine; portions of the surfaces with a separation larger than the tracking
thickness are ignored for the current increment. Surface thicknesses are
accounted for in the separation calculations.
A proximity point is a potential point of interaction for you to consider in user subroutine
VUINTERACTION. Each proximity
point is primarily associated with a secondary node or a point along a secondary edge; the
proximity point also references a corresponding, locally nearest point on the main surface
within the tracking thickness. A proximity point exists for each pairing of secondary node
and proximal main surface point. Therefore, more than one proximity point may reference
the same node on the secondary surface but different points on the main surface if
multiple local minimum distances to the secondary node exist on the main surface; this
phenomenon commonly occurs near the corners of a main surface. No proximity points exist
for a secondary node that is separated from the main surface by more than the tracking
thickness. A two-dimensional representation for contact between portions of shell surfaces
is shown in Figure 1.
The number of proximity points currently being passed into user subroutine VUINTERACTION is
nBlock. The array
jSecUid(nNodSec,nBlock) gives the secondary surface node
numbers associated with the proximity points. The variable
nNodSec indicates whether a single secondary node (for
node-to-face contact) or two secondary nodes of an edge (for edge-to-edge contact) are
associated with each proximity point. Similarly, the array
jMainUid(nNodMain,nBlockAnal) gives the main surface node
numbers associated with the proximity points; the nodes can belong to a facet, an edge, or
an analytical surface. The variable nNodMain indicates the
number of main nodes associated with each proximity 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 System
The array dircos defines the direction cosines of a local
coordinate system for each proximity point. The local 1-direction corresponds to the contact
normal direction from the perspective of the secondary node. For a two-dimensional VUINTERACTION
model the local 2-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 VUINTERACTION model the local 2-direction and 3-direction correspond to
two orthogonal tangent directions, and , which are set as follows:
If the main surface is a cylindrical analytical surface, the local 2-direction corresponds to
the generator direction (see Analytical Rigid Surface Definition), and the
local 3-direction is the cross product of the local 1-direction and 2-direction.
If the main surface is an analytical surface of revolution, the local 3-direction corresponds
to the hoop direction, and the local 2-direction is the cross product of the local
1-direction and 3-direction.
If the main surface is element-based, the tangential directions are based on the secondary
normal and the line connecting the first and third nodes on the main facet.
For the two cases listed above involving analytical surfaces, the local tangential directions
will reflect a rotation of the main surface. For the last case (element-based main surface)
the tangential directions follow the rotation of the main surface only approximately. The
second tangential direction is constructed such that it is perpendicular to the secondary
normal and the line going from the first to the third node on the main facet. The secondary
normal, the first tangent, and the second tangent form a right-handed system.
Conventions for Stress and Heat Flux
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.
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.
On entry this array contains the stress defined in the local system at the
proximity points 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(nBlock)
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(nBlock)
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.
state(nStates,nNodState,nBlock)
This array contains the user-defined solution-dependent state variables for
the proximity points. The use of the state variables is applicable only for
node-to-face contact. See
User-Defined Interfacial Constitutive Behavior
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: outside the user subroutine these state variables are single-valued
per secondary node, but multiple proximity points may refer to the same secondary
node. Each proximity point may be passed into the user subroutine independently in a
given increment, possibly on separate calls to the user subroutine; therefore, you may
end up advancing the state variables for the associated node multiple times for a
single time increment. To keep track of whether or not a node state is advanced, you
may want 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 proximity
points 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 proximity point (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 proximity point (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 proximity point (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 proximity point (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 proximity points to be processed in this call to
VUINTERACTION.
nBlockAnal
1 for analytical rigid main surface; nBlock otherwise.
nBlockEdge
nBlock for edge type secondary surface; 1 otherwise.
nNodState
1 for node-to-face and node-to-analytical rigid surface contact; not
applicable for edge-to-edge contact.
nNodSec
1 for node-to-face and node-to-analytical rigid surface contact; 2 for
edge-to-edge contact.
nNodMain
1 for analytical rigid main surface; 2 for edge-type main surface; 2 for two-dimensional
facet-type main surface; 4 for three-dimensional facet-type main surface.
nDir
Number of coordinate directions at the proximity points (2 for
two-dimensional models; 3 for three-dimensional models).
nStates
Number of user-defined state variables.
nProps
User-specified number of property values associated with this interaction
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.
surfSec
Secondary surface name, currently set to a blank.
surfMain
Main surface name, currently set to a blank.
jSecUid(nNodSec,nBlock)
This array lists the surface node numbers of the secondary surface nodes associated with each
proximity point.
jMainUid(nNodMain,nBlockAnal)
This array lists the surface node numbers of the main surface nodes that make up the facet, edge,
or analytical rigid surface associated with each proximity point.
props(nProps)
User-specified vector of property values to define the interaction between
the tracking surfaces.
penetration(nBlock)
The relative position of the proximity points, with respect to the main surface, in the normal
direction (a positive value indicates a penetration, and a negative value indicates a
gap) during the current time increment.
drDisp(nDir,nBlock)
An array containing the increments in relative positions of the proximity points with respect to
the associated main surfaces during the current time increment.
dRot(2,2,nBlock)
This argument is currently undefined.
stiffDef(nBlock)
Values of the default penalty stiffnesses (stress per unit penetration,
units of ).
conductDef(nBlock)
Values of the default penalty conductances (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 main 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).
coordSec(nDir,nNodSec,nBlock)
Array containing the nDir components of the
current coordinates of the proximity points.
coordMain(nDir,nNodMain,nBlockAnal)
Array containing the nDir components of the current coordinates 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.
areaProx(nBlock)
Contact area associated with a proximity point. The sum of the contact areas among all proximity
points associated with a single secondary node equals the surface area associated with
that secondary node (equal to 1 for node-based surface nodes). Therefore, the contact
area at a proximity point depends on the number of other proximity points currently
associated with the same secondary node. A proximity point contributes a contact
normal force to the associated secondary node that is equal to
stress(1,k) multiplied by
areaProx(k).
shapeSec(nNodSec,nBlockEdge)
For edge-to-edge contact this array contains the shape functions of the nodes of its secondary
edge, evaluated at the location of the contact point. If the contact is not
edge-to-edge, this array is passed in as a dummy array.
shapeMain(nNodMain,nBlockAnal)
For node-to-face and edge-to-edge contact this array contains the shape functions of the nodes of
its main surface, 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.
tempSec(nBlock)
Current temperature at the proximity points on the secondary surface.
tempMain(nBlockAnal)
Current temperature at the points on the main surface closest to the proximity points.
dTempSec(nBlock)
Increment in the temperature during the previous time increment at the proximity points on the
secondary surface.
dTempMain(nBlockAnal)
Increment in the temperature during the previous time increment at the points on the main surface
closest to the proximity points.
fieldSec(nFields,nBlock)
Current user-specified predefined field variables at the proximity points on the secondary
surface (initial values at the beginning of the analysis and current values during the
analysis).
fieldMain(nFields,nBlockAnal)
Current user-specified predefined field variables at the points on the main surface closest to
the proximity points (initial values at the beginning of the analysis and current
values during the analysis).
dFieldSec(nFields,nBlock)
Increment in the user-specified predefined field variables during the previous time increment at
the proximity points on the secondary surface.
dFieldMain(nFields,nBlockAnal)
Increment in the user-specified predefined field variables during the previous time increment at
the points on the main surface closest to the proximity points.