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,SECNAME,
4 MAINNAME,
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,SECNAME,MAINNAME
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 secondary and main 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 secondary and main 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 secondary surface,
and DDSDDT(NDIR,2) corresponds to the main 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 secondary surface,
and DDFDDR(2,NDIR) corresponds to the main 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 for Solution-Dependent State Variables.
- 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 secondary
surface, with respect to the main 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 main surface. For open points on the
secondary surface for which no pairing main 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 secondary surface and the opposing main
surface, respectively.
- DTEMP(2)
-
Increment in temperature at the point on the secondary surface and the opposing main 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 secondary 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.
-
SECNAME
-
Secondary surface name.
-
MAINNAME
-
Main 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 main 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 secondary 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 secondary 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.
|