<!-- source-page: 381 -->

# 1.2 Abaqus/Explicit subroutines

• “VDFLUX,” Section 1.2.1   
• “VDISP,” Section 1.2.2   
• “VDLOAD,” Section 1.2.3   
• “VEXTERNALDB,” Section 1.2.4   
• “VFABRIC,” Section 1.2.5   
• “VFRIC,” Section 1.2.6   
• “VFRIC\_COEF,” Section 1.2.7   
• “VFRICTION,” Section 1.2.8   
• “VUAMP,” Section 1.2.9   
• “VUANISOHYPER\_INV,” Section 1.2.10   
• “VUANISOHYPER\_STRAIN,” Section 1.2.11   
• “VUCHARLENGTH,” Section 1.2.12   
• “VUCREEPNETWORK,” Section 1.2.13   
• “VUEL,” Section 1.2.14   
• “VUEOS,” Section 1.2.15   
• “VUFIELD,” Section 1.2.16   
• “VUFLUIDEXCH,” Section 1.2.17   
• “VUFLUIDEXCHEFFAREA,” Section 1.2.18   
• “VUHARD,” Section 1.2.19   
• “VUINTER,” Section 1.2.20   
• “VUINTERACTION,” Section 1.2.21   
• “VUMAT,” Section 1.2.22   
• “VUMULLINS,” Section 1.2.23   
• “VUSDFLD,” Section 1.2.24   
• “VUTRS,” Section 1.2.25   
• “VUVISCOSITY,” Section 1.2.26   
• “VWAVE,” Section 1.2.27

<!-- source-page: 382 -->

<!-- source-page: 383 -->

# 1.2.1 VDFLUX: User subroutine to specify nonuniform distributed fluxes in an explicit dynamic coupled temperature-displacement analysis.

# Product: Abaqus/Explicit

# References

• “Thermal loads,” Section 34.4.4 of the Abaqus Analysis User’s Guide   
• \*DFLUX   
• \*DSFLUX

# Overview

User subroutine VDFLUX:

• can be used to define the variation of the distributed flux as a function of position, temperature, time, velocity, element number, etc. for a group of points in a dynamic coupled thermal-stress analysis using explicit integration (for more information, see “Fully coupled thermal-stress analysis,” Section 6.5.3 of the Abaqus Analysis User’s Guide);   
• will be called at each flux integration point associated with each element-based or surface-based nonuniform distributed flux definition in the analysis; and   
• recognizes an amplitude reference (“Amplitude curves,” Section 34.1.2 of the Abaqus Analysis User’s Guide) if it appears with the associated nonuniform flux definition.

# User subroutine interface

```fortran
subroutine vdflux (
C Read only (unmodifiable)variables -
    1 nblock, ndim, kStep, kIncr, stepTime, totalTime, jUid,
    2 amplitude, temp, curCoords, velocity, dirCos, jltyp, sname,
C Write only (modifiable) variable -
    1 value )
C
    include 'vaba_param.inc'
C
    dimension curCoords(nblock,ndim), velocity(nblock,ndim),
    1 jUid(nblock), dirCos(nblock,ndim,ndim), temp(nblock),
    2 value(nblock)
    character*80 sname
C
    do 100 km = 1, nblock
    user coding to define value 
```

<!-- source-page: 384 -->

100 continue

return end

# Variable to be defined

value(nblock)

Magnitude of the distributed flux. Units are $\mathrm { J } \mathrm { T } ^ { - 1 } \mathrm { L } ^ { - 2 }$ for surface fluxes and $\mathrm { J } \mathrm { T } ^ { - 1 } \mathrm { L } ^ { - 3 }$ for body fluxes.

# Variables passed in for information

nblock

Number of points to be processed in this call to VDFLUX.

ndim

Number of coordinate directions: 2 for two-dimensional models, 3 for three-dimensional models. The model is considered three-dimensional if any three-dimensional elements are defined.

kStep

Step number.

kIncr

Increment number.

stepTime

Value of time since the step began.

totalTime

Value of total time. The time at the beginning of the step is given by totalTime − stepTime.

jUid

User-defined element numbers.

amplitude

Current value of the amplitude referenced for this flux (set to unity if no amplitude is referenced). You must multiply the flux by the current amplitude value within the user subroutine if the amplitude is required.

TEMP

Current value of temperature at this integration point.

curCoords(nblock, ndim)

Current coordinates of each point for which the flux is to be prescribed.

<!-- source-page: 385 -->

# velocity(nblock, ndim)

Current velocity of each point for which the flux is to be prescribed.

# dirCos(nblock, ndim, ndim)

Current orientation of the face or edge (not applicable for body flux type loads). The second dimension indicates the vector, and the third dimension indicates the components of that vector. For faces (surface fluxes on three-dimensional continuum and shell elements) the first and second vectors are the local directions in the plane of the surface and the third vector is the normal to the face, as defined in “Conventions,” Section 1.2.2 of the Abaqus Analysis User’s Guide. For solid elements the normal points inward, which is the opposite of what is defined in the conventions; for shell elements the normal definition is consistent with the defined conventions. For edges (fluxes on two-dimensional continuum elements) the first vector is the normal to the edge; the second vector is the tangent to the edge; and, if ndim=3, the third vector is a unit normal in the out-of-plane direction.

# jltyp

Key that identifies the distributed flux type. The load type may be a body flux, a surface-based flux, or an element-based surface flux. For element-based surface fluxes this variable identifies the element face for which this call to VDFLUX is being made. See Part VI, “Elements,” of the Abaqus Analysis User’s Guide, for element load type identification. This information is useful when several different nonuniform distributed loads are being imposed on an element at the same time. The key is as follows:

<table><tr><td>jltyp</td><td>Load type</td></tr><tr><td>0</td><td>Surface-based load</td></tr><tr><td>1</td><td>BFNU</td></tr><tr><td>11</td><td>S1NU or SNEGNU</td></tr><tr><td>12</td><td>S2NU or SPOSNU</td></tr><tr><td>13</td><td>S3NU</td></tr><tr><td>14</td><td>S4NU</td></tr><tr><td>15</td><td>S5NU</td></tr><tr><td>16</td><td>S6NU</td></tr></table>

# sname

Surface name for a surface-based flux load definition (JLTYP=0). For a body flux or an element-based face load the surface name is passed in as a blank.

<!-- source-page: 386 -->

<!-- source-page: 387 -->

# 1.2.2 VDISP: User subroutine to specify prescribed boundary conditions.

# Product: Abaqus/Explicit

# References

• “Boundary conditions in Abaqus/Standard and Abaqus/Explicit,” Section 34.3.1 of the Abaqus Analysis User’s Guide   
• \*BOUNDARY   
• “VDISP,” Section 4.1.28 of the Abaqus Verification Guide

# Overview

# User subroutine VDISP:

• can be used to prescribe translational and rotational boundary conditions;   
• is called for all degrees of freedom listed in the associated boundary condition;   
• allows user to specify values for either the degree of freedom or its time derivatives such as velocity and acceleration;   
• releases the boundary condition by default if the user does not specify a value for the boundary condition;   
• can be used to apply a concentrated load, instead, by adjusting the default motion of the node;   
• can be called for blocks of nodes for which the boundary conditions are defined in the subroutine.

# Initial velocity

At the beginning of each step user subroutine VDISP is called once to establish the initial velocity; and then, it is called once on each configuration, including the initial configuration, to establish the nodal acceleration.

The first call to user subroutine VDISP is made to establish the initial velocity, which is indicated by the passing of a step time value of into the subroutine, where is the current time increment. If displacement is prescribed, the returned variable, rval, corresponds to $\boldsymbol { u _ { o } } \mathrm { ~ - ~ } \boldsymbol { v _ { o } } d t$ , where $u _ { o }$ and $v _ { o }$ are the initial displacement and velocity respectively. If velocity is prescribed, the returned variable corresponds to the initial velocity $v _ { o }$ . If acceleration is prescribed, the returned variable corresponds to $\frac { v _ { o } } { d t }$ where $v _ { o }$ is the initial velocity.

The default value of rval is consistent with the velocity at the end of previous step or that specified as an initial condition in case of the first step. You only need to reset the rval if a different initial velocity is desired. The arrays u and v stand for the default initial displacement and velocity, respectively. The array a contains a zero value.

<!-- source-page: 388 -->

# Acceleration

During time incrementation user subroutine VDISP is called once for each configuration, including the initial configuration, to establish the nodal acceleration.

If displacement is prescribed, the returned variable should be set equal to the displacement at stepTime+dtNext, where stepTime is the step time and dtNext is the next time increment. If velocity is prescribed, the returned variable should be set equal to the mean velocity at stepTime+dtNext/2. If acceleration is prescribed, the returned variable should be set equal to the acceleration at stepTime. Note that stepTime is zero for the initial configuration.

The variable rval has a default value that is computed as if the boundary condition is released. You only need to reset the rval if the boundary condition is active. The variable u contains values at stepTime. Whereas, the variable v contains initial velocity when stepTime is zero and, otherwise, velocity at stepTime—dt/2. The variable a contains values at stepTime computed as if the bondary condition is released.

Tip: If you wish to apply a concentrated load, instead of the boundary condition, you can compute the change in acceleration due to this load and modify the rval value to account for that change. Note that the nodal mass and the rotary inertia are available in VDISP for computing the change in acceleration. Also, note that the default value of rval already reflects all other forces acting at the node.

User subroutine interface   
```fortran
subroutine vdisp(
c Read only variables -
    1 nblock, nDof, nCoord, kstep, kinc,
    2 time, totalTime, dtNext, dt,
    3 cbname, jBCType, jDof, jNodeUid, amp,
    4 coordNp, u, v, a, rf, rmass, rotaryI,
c Write only variable -
    5 rval)
c
    include 'vaba_param.inc'
c
    character*80 cbname
    dimension jDof(nDof), jNodeUid(nblock),
    1 amp(nblock), coordNp(nCoord,nblock),
    2 u(nDof,nblock), v(nDof,nblock), a(nDof,nblock),
    3 rf(nDof,nblock), rmass(nblock), rotaryI(3,3,nblock),
    4 rval(nDof,nblock)
c
    do 100 k = 1, nblock 
```

<!-- source-page: 389 -->

```txt
do 100 j = 1, nDof
    if( jDof(j) .gt. 0 ) then
    user coding to define rval(j, k)
    end if
100 continue
c
    return
    end 
```

# Variable to be defined

rval(nDof, nblock)

Values of the prescribed variable for degrees of freedom 1–6 (translation and rotation) at the nodes. The variable can be displacement, velocity, or acceleration, depending on the type specified in the associated boundary condition. The variable type is indicated by jBCType. The variable rval has a default value that is computed as if the boundary condition is released. You only need to reset the rval if the boundary condition is active.

# Variables passed in for information

nblock

Number of nodal points to be processed in this call to VDISP.

nDof

Number of degrees of freedom (equals 6).

nCoord

Number of coordinate components (equals 3).

kstep

Step number.

kinc

Increment number.

stepTime

Value of time since the step began.

totalTime

Value of total time. The time at the beginning of the step is given by totalTime-stepTime.

dtNext

Next time increment size.

dt

Current time increment size.

<!-- source-page: 390 -->

# cbname

User-specified name corresponding to the associated boundary condition.

# jBCType

Indicator for type of prescribed variable: 0 for displacement, 1 for velocity, and 2 for acceleration.

# jDof(nDof)

Indicator for prescribed degrees of freedom. The values given by rval(j,k) are prescribed only if jDof(j) equals 1.

# jNodeUid(nblock)

Node numbers.

# amp(nblock)

Amplitude values corresponding to the associated amplitude functions. These values are passed in for information only and will not contribute to the values of the prescribed variable automatically.

# coordNp(nCoord, nblock)

Nodal point coordinates.

# u(nDof, nblock)

Initial displacements when stepTime is negative, and, otherwise, displacement at stepTime. All translations are included if one or more translational degrees of freedom are prescribed. All rotations are included if one or more rotational degrees of freedom are prescribed.

# v(nDof, nblock)

Initial nodal velocities when stepTime is non-positive and, otherwise, mean velocities at stepTime-dt/2 during time incrementation. All translational velocities are included if one or more translational degrees of freedom are prescribed. All angular velocities are included if one or more rotational degrees of freedom are prescribed.

# a(nDof, nblock)

Contains a zero value when stepTime is negative and, otherwise, the accelerations, computed without accounting for the boundary condition, at stepTime. All translational accelerations are included if one or more translational degrees of freedom are prescribed. All angular accelerations are included if one or more rotational degrees of freedom are prescribed.

# rf(nDof, nblock)

Nodal point reaction at stepTime-dt. All reaction forces are included if one or more translational degrees of freedom are prescribed. All reaction moments are included if one or more rotational degrees of freedom are prescribed.

# rmass(nblock)

Nodal point masses.
