User subroutine interface
SUBROUTINE UINTER(STRESS,DDSDDR,DVISCOUS,DSTRUCTURAL,FLUX,DDFDDT,
1 DDSDDT,DDFDDR,STATEV,SED,SFD,SPD,SVD,SCD,PNEWDT,RDISP,
2 DRDISP,
3 TEMP,DTEMP,PREDEF,DPRED,TIME,DTIME,FREQR,CINAME,SLNAME,
4 MSNAME,
5 PROPS,COORDS,ALOCALDIR,DROT,AREA,CHRLNGTH,NODE,NDIR,NSTATV,
6 NPRED,NPROPS,MCRD,KSTEP,KINC,KIT,LINPER,LOPENCLOSE,LSTATE,
7 LSDI,LPRINT)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CINAME,SLNAME,MSNAME
DIMENSION STRESS(NDIR),DDSDDR(NDIR,NDIR),FLUX(2),DDFDDT(2,2),
1 DDSDDT(NDIR,2),DDFDDR(2,NDIR),STATEV(NSTATV),
2 RDISP(NDIR),DRDISP(NDIR),TEMP(2),DTEMP(2),PREDEF(2,NPRED),
3 DPRED(2,NPRED),TIME(2),PROPS(NPROPS),COORDS(MCRD),
4 ALOCALDIR(3,3),DROT(2,2),DVISCOUS(NDIR,NDIR),
5 DSTRUCTURAL(NDIR,NDIR)
user coding to define STRESS, DDSDDR, FLUX, DDFDDT,
DDSDDT, DDFDDR,
and, optionally, STATEV, SED, SFD, SPD, SVD, SCD, PNEWDT,
LOPENCLOSE, LSTATE, LSDI, DVISCOUS, DSTRUCTURAL
RETURN
END
Variables to be defined
- STRESS(NDIR)
-
This array is passed in as the stress between the slave and master surfaces
at the beginning of the increment and must be updated in this routine to be the
stress at the end of the increment. The stress must be defined in a local
coordinate system (see ALOCDIR). This variable
must be defined for a stress/displacement, a fully coupled
temperature-displacement, or a coupled thermal-electrical-structural analysis.
The sign convention for stresses is that a positive stress indicates
compression across contact surfaces, while a negative stress indicates tension.
- DDSDDR(NDIR,NDIR)
-
Interface stiffness matrix. DDSDDR(I,J)
defines the change in the Ith stress component at the end of the time increment
caused by an infinitesimal perturbation of the Jth component of the relative
displacement increment array. Unless you invoke the unsymmetric equation
solution capability in the contact property model definition (Use with the unsymmetric equation solver in Abaqus/Standard),
Abaqus/Standard
will use only the symmetric part of DDSDDR. For
a particular off-diagonal (I,J) entry, the
symmetrization is done by halving the sum of
(I,J) and (J,I)
components. DDSDDR must be defined for a
stress/displacement, a fully coupled temperature-displacement, or a coupled
thermal-electrical-structural analysis to ensure proper convergence
characteristics.
- FLUX(2)
-
Magnitude of the heat flux flowing into the slave and master surfaces,
respectively. This array is passed in as the value at the beginning of the
increment and must be updated to the flux at the end of the increment. The
convention for defining the flux is that a positive flux indicates heat flowing
into a surface, while a negative flux indicates heat flowing out of the
surface. This variable must be defined for a heat transfer, a fully coupled
temperature-displacement, or a coupled thermal-electrical-structural analysis.
The sum of these two flux terms represents the heat generated in the interface,
and the difference in these flux terms represents the heat conducted through
the interface.
- DDFDDT(2,2)
-
The negative of the variation of the flux at the two surfaces with respect
to their respective temperatures, for a fixed relative displacement. This
variable must be defined for a heat transfer, a fully coupled
temperature-displacement, or a coupled thermal-electrical-structural analysis
to ensure proper convergence characteristics. The entries in the first row
contain the negatives of the derivatives of
FLUX(1) with respect to
TEMP(1) and
TEMP(2), respectively. The entries in the second
row contain the negatives of the corresponding derivatives of
FLUX(2).
- DDSDDT(NDIR,2)
-
Variation of the stress with respect to the temperatures of the two surfaces
for a fixed relative displacement. This variable is required only for thermally
coupled elements (in a fully coupled temperature-displacement or a coupled
thermal-electrical-structural analysis), in which the stress is a function of
the surface temperatures. DDSDDT(NDIR,1)
corresponds to the slave surface, and
DDSDDT(NDIR,2) corresponds to the master
surface.
- DDFDDR(2,NDIR)
-
Variation of the flux with respect to the relative displacement between the
two surfaces. This variable is required only for thermally coupled elements (in
a fully coupled temperature-displacement or a coupled
thermal-electrical-structural analysis), in which the flux is a function of the
relative displacement. DDFDDR(1,NDIR)
corresponds to the slave surface, and
DDFDDR(2,NDIR) corresponds to the master
surface.
Variables that can be updated
- DVISCOUS(NDIR,NDIR)
-
Interface viscous damping matrix that can be used in direct steady-state
dynamic analysis and transient and steady-state mode-based dynamic analysis
(including the subspace projection method), as well as in complex eigenvalue
extraction, matrix generation, and substructure generation.
DVISCOUS(I,J) defines an element in the material
viscous damping matrix at the current frequency.
Abaqus/Standard
requires that this element is defined as a damping value for each
(I,J) entry in the damping matrix.
Unless you invoke the unsymmetric equation solution capability in the
contact property model definition (Use with the unsymmetric equation solver in Abaqus/Standard),
Abaqus/Standard
uses only the symmetric part of DVISCOUS. For a
particular off-diagonal (I,J) entry the
symmetrization is done by halving the sum of the
(I,J) and (J,I)
components.
- DSTRUCTURAL(NDIR,NDIR)
-
Interface structural damping matrix that can be used in direct steady-state
dynamic analysis and steady-state mode-based dynamic analysis (including the
subspace projection method), as well as in complex eigenvalue extraction,
matrix generation, and substructure generation.
DSTRUCTURAL(I,J) defines an element in the
material structural damping matrix.
Unless you invoke the unsymmetric equation solution capability in the
contact property model definition (Use with the unsymmetric equation solver in Abaqus/Standard),
Abaqus/Standard
uses only the symmetric part of DSTRUCTURAL. For
a particular off-diagonal (I,J) entry the
symmetrization is done by halving the sum of the
(I,J) and (J,I)
components.
- STATEV(NSTATV)
-
An array containing the solution-dependent state variables. These are passed
in as values at the beginning of the increment and must be returned as values
at the end of the increment. You define the number of available state variables
as described in
Allocating space.
- SED
-
This variable is passed in as the value of the elastic energy density at the
start of the increment and should be updated to the elastic energy density at
the end of the increment. This variable is used for output only and has no
effect on other solution variables. It contributes to the output variable ALLSE.
- SFD
-
This variable should be defined as the incremental frictional dissipation.
The units are energy per unit area. This variable is used for output only and
has no effect on other solution variables. It contributes to the output
variables ALLFD and SFDR (and related variables). For computing its contribution to SFDR, SFD is divided by the time
increment.
- SPD
-
This variable should be defined as the incremental dissipation due to
plasticity effects in the interfacial constitutive behavior. The units are
energy per unit area. This variable is used for output only and has no effect
on other solution variables. It contributes to the output variable ALLPD.
- SVD
-
This variable should be defined as the incremental dissipation due to
viscous effects in the interfacial constitutive behavior. The units are energy
per unit area. This variable is used for output only and has no effect on other
solution variables. It contributes to the output variable ALLVD.
- SCD
-
This variable should be defined as the incremental dissipation due to creep
effects in the interfacial constitutive behavior. The units are energy per unit
area. This variable is used for output only and has no effect on other solution
variables. It contributes to the output variable ALLCD.
- PNEWDT
-
Ratio of suggested new time increment to the time increment currently being
used (DTIME, see below). This variable allows
you to provide input to the automatic time incrementation algorithms in
Abaqus/Standard
(if automatic time incrementation is chosen).
PNEWDT is set to a large value before each
call to
UINTER.
If PNEWDT is redefined to be less than 1.0,
Abaqus/Standard
must abandon the time increment and attempt it again with a smaller time
increment. The suggested new time increment provided to the automatic time
integration algorithms is PNEWDT ×
DTIME, where the
PNEWDT used is the minimum value for all calls
to user subroutines that allow redefinition of
PNEWDT for this iteration.
If PNEWDT is given a value that is greater
than 1.0 for all calls to user subroutines for this iteration and the increment
converges in this iteration,
Abaqus/Standard
may increase the time increment. The suggested new time increment provided to
the automatic time integration algorithms is
PNEWDT × DTIME,
where the PNEWDT used is the minimum value for
all calls to user subroutines for this iteration.
If automatic time incrementation is not selected in the analysis procedure,
values of PNEWDT greater than 1.0 will be
ignored and values of PNEWDT less than 1.0 will
cause the job to terminate.
- LOPENCLOSE
-
An integer flag that is used to track the contact status in situations where
user subroutine
UINTER is used to model standard contact between two surfaces,
like the default hard contact model in
Abaqus/Standard.
It comes in as the value at the beginning of the current iteration and should
be set to the value at the end of the current iteration. It is set to −1 at the
beginning of the analysis before
UINTER is called. You should set it to 0 to indicate an open
status and to 1 to indicate a closed status. A change in this flag from one
iteration to the next will have two effects. It will result in output related
to a change in contact status if you request a detailed contact printout in the
message file (The Abaqus/Standard message file).
In addition, it will also trigger a severe discontinuity iteration. Any time
this flag is reset to a value of −1,
Abaqus/Standard
assumes that the flag is not being used. A change in this flag from −1 to
another value or vice versa will not have any of the above effects.
- LSTATE
-
An integer flag that should be used in non-standard contact situations where
a simple open/close status is not appropriate or enough to describe the state.
It comes in as the value at the beginning of the current iteration and should
be set to the value at the end of the current iteration. It is set to −1 at the
beginning of the analysis before
UINTER is called. It can be assigned any user-defined integer
value, each corresponding to a different state. You can track changes in the
value of this flag and use it to output appropriate diagnostic messages to the
message file (unit 7). You may choose to output diagnostic messages only when a
detailed contact printout is requested (The Abaqus/Standard message file).
In the latter case, the LPRINT parameter is
useful. In conjunction with the LSTATE flag, you
may also utilize the LSDI flag to trigger a
severe discontinuity iteration any time the state changes from one iteration to
the next. Any time this flag is reset to a value of −1,
Abaqus/Standard
assumes that the flag is not being used.
- LSDI
-
This flag is set to 0 before each call to
UINTER and should be set to 1 if the current iteration should be
treated as a severe discontinuity iteration. This would typically be done in
non-standard contact situations based on a change in the value of the
LSTATE flag from one iteration to the next. The
use of this flag has no effect when the
LOPENCLOSE flag is also used. In that case,
severe discontinuity iterations are determined based on changes in the value of
LOPENCLOSE alone.
Variables passed in for information
- RDISP(NDIR)
-
An array containing the current relative positions between the two surfaces
at the end of the increment. The first component is the relative position of
the point on the slave surface, with respect to the master surface, in the
normal direction. The second and third components, if applicable, are the
accumulated incremental relative tangential displacements, measured from the
beginning of the analysis. For the relative position in the normal direction a
negative quantity represents an open status, while a positive quantity
indicates penetration into the master surface. For open points on the slave
surface for which no pairing master is found, the first component is a very
large negative number (−1 × 1036). The local directions in which the
relative displacements are defined are stored in
ALOCALDIR.
- DRDISP(NDIR)
-
An array containing the increments in relative positions between the two
surfaces.
- TEMP(2)
-
Temperature at the end of the increment at a point on the slave surface and
the opposing master surface, respectively.
- DTEMP(2)
-
Increment in temperature at the point on the slave surface and the opposing
master surface, respectively.
- PREDEF(2,NPRED)
-
An array containing pairs of values of all the predefined field variables at
the end of the current increment (initial values at the beginning of the
analysis and current values during the analysis). The first value in a pair,
PREDEF(1,NPRED), corresponds to the value at the
point on the slave surface, and the second value,
PFREDEF(2,NPRED), corresponds to the value of
the field variable at the nearest point on the opposing surface.
- DPRED(2,NPRED)
-
Array of increments in predefined field variables.
- TIME(1)
-
Value of step time at the end of the increment.
- TIME(2)
-
Value of total time at the end of the increment.
- DTIME
-
Current increment in time.
- FREQR
-
Current frequency for steady-state dynamic analysis in rad/time.
- CINAME
-
User-specified surface interaction name, left justified.
- SLNAME
-
Slave surface name.
- MSNAME
-
Master surface name.
- PROPS(NPROPS)
-
User-specified array of property values to define the interfacial
constitutive behavior between the contacting surfaces.
- COORDS(MCRD)
-
An array containing the current coordinates of this point.
- ALOCALDIR(3,3)
-
An array containing the direction cosines of the local surface coordinate
system. The directions are stored in columns. For example,
ALOCALDIR(1,1),
ALOCALDIR(2,1), and
ALOCALDIR(3,1) give the (1, 2, 3) components of
the normal direction. Thus, the first direction is the normal direction to the
surface, and the remaining two directions are the local tangent directions in
the plane of the surface. The local system is defined by the geometry of the
master surface. The convention for the local directions is the same as the
convention in situations where the model uses the built-in contact capabilities
in
Abaqus/Standard
(described in
Contact formulations in Abaqus/Standard
for the tangential directions).
- DROT(2,2)
-
Rotation increment matrix. For contact with a three-dimensional rigid
surface, this matrix represents the incremental rotation of the surface
directions relative to the rigid surface. It is provided so that vector- or
tensor-valued state variables can be rotated appropriately in this subroutine.
Relative displacement components are already rotated by this amount before
UINTER is called. This matrix is passed in as a unit matrix for
two-dimensional and axisymmetric contact problems.
- AREA
-
Surface area associated with the contact point.
- CHRLNGTH
-
Characteristic contact surface face dimension.
- NODE
-
User-defined global slave node number (or internal node number for models
defined in terms of an assembly of part instances) involved with this contact
point. Corresponds to the predominant slave node of the constraint if the
surface-to-surface contact formulation is used.
- NDIR
-
Number of force components at this point.
- NSTATV
-
Number of solution-dependent state variables.
- NPRED
-
Number of predefined field variables.
- NPROPS
-
User-defined number of property values associated with this interfacial
constitutive model (Interfacial constants).
- MCRD
-
Number of coordinate directions at the contact point.
- KSTEP
-
Step number.
- KINC
-
Increment number.
- KIT
-
Iteration number. KIT=1 for the first
assembly, KIT=2 for the first recovery/second
assembly, KIT=3 for the second recovery/third
assembly, and so on.
- LINPER
-
Linear perturbation flag. LINPER=1 if the
step is a linear perturbation step. LINPER=0 if
the step is a general step. For a linear perturbation step, the inputs to user
subroutine
UINTER represent perturbation quantities about the base state.
The user-defined quantities in
UINTER are also perturbation quantities. The Jacobian terms
should be based on the base state. No change in contact status should occur
during a linear perturbation step.
- LPRINT
-
This flag is equal to 1 if a detailed contact printout to the message file
is requested and 0 otherwise (The Abaqus/Standard message file).
This flag can be used to print out diagnostic messages regarding changes in
contact status selectively only when a detailed contact printout is requested.
|