<!-- source-page: 231 -->

# Variables passed in for information

# TEMP(1)

Current temperature (at the end of the increment).

# TEMP(2)

Temperature increment.

# TIME(1)

Step time at the end of the increment.

# TIME(2)

Total time at the end of the increment.

# DTIME

Time increment.

# PREDEF(\*)

Array containing the values of all the user-specified predefined field variables at this point (initial values at the beginning of the analysis and current values during the analysis).

# DPRED(\*)

Array of increments of predefined field variables.

# CMNAME

User-specified material name or gasket behavior name, left justified.

# NSTATV

Number of solution-dependent state variables associated with this material or gasket behavior type (specified when space is allocated for the array; see “Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide).

# NOEL

User-defined element number.

<!-- source-page: 232 -->

<!-- source-page: 233 -->

# 1.1.31 UEXTERNALDB: User subroutine to manage user-defined external databases and calculate model-independent history information.

Product: Abaqus/Standard

# Reference

• “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide

# Overview

User subroutine UEXTERNALDB:

• is called once each at the beginning of the analysis, at the beginning of each increment, at the end of each increment, and at the end of the analysis (in addition, the user subroutine is also called once at the beginning of a restart analysis);   
• can be used to communicate between other software and user subroutines within Abaqus/Standard;   
• can be used to open external files needed for other user subroutines at the beginning of the analysis and to close those files at the end of the analysis;   
• can be used to calculate or read history information at the beginning of each increment. This information can be written to user-defined COMMON block variables or external files for use during the analysis by other user subroutines; and   
• can be used to write the current values of the user-calculated history information to external files.

# User subroutine interface

```txt
SUBROUTINE UEXTERNALDB (LOP, LRESTART, TIME, DTIME, KSTEP, KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION TIME(2)
C
user coding to set up the Fortran environment, open files, close files,
calculate user-defined model-independent history information,
write history information to external files,
recover history information during restart analyses, etc.
do not include calls to utility routine XIT 
```

```txt
RETURN
END 
```

<!-- source-page: 234 -->

None.

# Variables passed in for information

# LOP

LOP=0 indicates that the user subroutine is being called at the start of the analysis.

LOP=1 indicates that the user subroutine is being called at the start of the current analysis increment. The user subroutine can be called multiple times at the beginning of an analysis increment if the increment fails to converge and a smaller time increment is required.

LOP=2 indicates that the user subroutine is being called at the end of the current analysis increment. When LOP=2, all information that you need to restart the analysis should be written to external files.

LOP=3 indicates that the user subroutine is being called at the end of the analysis.

LOP=4 indicates that the user subroutine is being called at the beginning of a restart analysis. When LOP=4, all necessary external files should be opened and properly positioned and all information required for the restart should be read from the external files.

LOP=5 indicates that the user subroutine is being called at the start of a step. The KSTEP argument contains the current step number.

LOP=6 indicates that the user subroutine is being called at the end of a step. The KSTEP argument contains the current step number.

# LRESTART

LRESTART=0 indicates that an analysis restart file is not being written for this increment.

LRESTART=1 indicates that an analysis restart file is being written for this increment.

LRESTART=2 indicates that an analysis restart file is being written for this increment and that only one increment is being retained per step so that the current increment overwrites the previous increment in the restart file (see “Restarting an analysis,” Section 9.1.1 of the Abaqus Analysis User’s Guide).

# TIME(1)

Value of current step time.

# TIME(2)

Value of current total time.

# DTIME

Time increment.

# KSTEP

Current step number. When LOP=4, KSTEP gives the restart step number.

# KINC

Current increment number. When LOP=4, KINC gives the restart increment number.

<!-- source-page: 235 -->

# 1.1.32 UFIELD: User subroutine to specify predefined field variables.

# Product: Abaqus/Standard

# References

• “USDFLD,” Section 1.1.53   
• “Predefined fields,” Section 34.6.1 of the Abaqus Analysis User’s Guide   
• \*FIELD   
• “UTEMP, UFIELD, UMASFL, and UPRESS,” Section 4.1.25 of the Abaqus Verification Guide

# Overview

# User subroutine UFIELD:

• allows you to prescribe predefined field variables at the nodes of a model—the predefined field variables at a node can be updated individually, or a number of field variables at the node can be updated simultaneously;   
• is called whenever a user-subroutine-defined field appears;   
• ignores any field variable values specified directly;   
• can be used to modify field variable values read from a results file; and   
• can be used in conjunction with user subroutine USDFLD such that the field variables that are passed in from UFIELD and interpolated to the material points can be modified (such changes are local to material point values, and nodal field variable values remain unaffected).

# Updating field variables

Two different methods are provided for updating field variables.

# Individual variable updates

By default, only one field variable at a time can be updated in user subroutine UFIELD. In this case the user subroutine will be called whenever a current value of a field variable is needed for a node that is listed in the specified field variable definition. This method can be used only for cases in which the field variables are independent of each other.

# Simultaneous variable updates

For cases in which the field variables depend on each other, multiple (possibly all) field variables at a point can be updated simultaneously in user subroutine UFIELD. In this case you must specify the number of field variables to be updated simultaneously at a point, and the user subroutine will be called each time the current field variable values are needed.

<!-- source-page: 236 -->

User subroutine interface   
```fortran
SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,1 COORDS,TEMP,DTEMP,NFIELD)
INCLUDE 'ABA_PARAM.INC'
DIMENSION FIELD(NSECPT,NFIELD), TIME(2), COORDS(3), 1 TEMP(NSECPT), DTEMP(NSECPT)
user coding to define FIELD
RETURN
END 
```  
Variable to be defined   
FIELD(NSECPT,NFIELD)

Array of predefined field variable values at node number NODE. When updating only one field variable at a time, only the value of the specified field variable (see KFIELD below) must be returned. In this case NFIELD is passed into user subroutine UFIELD with a value of 1, and FIELD is thus dimensioned as FIELD(NSECPT,1). When updating all field variables simultaneously, the values of the specified number of field variables at the point must be returned. In this case FIELD is dimensioned as FIELD(NSECPT,NFIELD), where NFIELD is the number of field variables specified and KFIELD has no meaning.

If NODE is part of any element other than a beam or shell, only one value of each field variable must be returned (NSECPT=1). Otherwise, the number of values to be returned depends on the mode of temperature and field variable input selected for the beam or shell section. The following cases are possible:

1. Temperatures and field variables for a beam section are given as values at the points shown in the beam section descriptions. The number of values required, NSECPT, is determined by the particular section type specified, as described in “Beam cross-section library,” Section 29.3.9 of the Abaqus Analysis User’s Guide.   
2. Temperatures and field variables are given as values at n equally spaced points through each layer of a shell section. The number of values required, NSECPT, is equal to n.   
3. Temperatures and field variables for a beam section are given as values at the origin of the crosssection together with gradients with respect to the 2-direction and, for three-dimensional beams, the 1-direction of the section; or temperatures and field variables for a shell section are given

<!-- source-page: 237 -->

as values at the reference surface together with gradients through the thickness. The number of values required, NSECPT, is 3 for three-dimensional beams, 2 for two-dimensional beams, and 2 for shells. Give the midsurface value first, followed by the first and (if necessary) second gradients, as described in “Beam elements,” Section 29.3 of the Abaqus Analysis User’s Guide, and “Shell elements,” Section 29.6 of the Abaqus Analysis User’s Guide.

Since field variables can also be defined directly, it is important to understand the hierarchy used in situations of conflicting information (see “Predefined fields,” Section 34.6.1 of the Abaqus Analysis User’s Guide).

When the array FIELD is passed into user subroutine UFIELD, it will contain either the field variable values from the previous increment or those values obtained from the results file if this method was used. You are then free to modify these values within this subroutine.

# Variables passed in for information

# KFIELD

User-specified field variable number. This variable is meaningful only when updating individual field variables at a time.

# NFIELD

User-specified number of field variables to be updated. This variable is meaningful only when updating multiple field variables simultaneously.

# NSECPT

Maximum number of section values required for any node in the model. The NSECPT can be 2 when only one field variable is specified at some non-beam or non-shell nodes in the model with contact.

# KSTEP

Step number.

# KINC

Increment number.

# TIME(1)

Current value of step time.

# TIME(2)

Current total time.

# NODE

Node number.

# COORDS

An array containing the coordinates of this node. These are the current coordinates if geometric nonlinearity is accounted for during the step (see “Defining an analysis,” Section 6.1.2 of the Abaqus Analysis User’s Guide); otherwise, the array contains the original coordinates of the node.

<!-- source-page: 238 -->

# TEMP(NSECPT)

Current temperature at the node. If user subroutines UTEMP and UFIELD are both used, user subroutine UTEMP is processed before user subroutine UFIELD.

# DTEMP(NSECPT)

Temperature increment at the node.

<!-- source-page: 239 -->

# 1.1.33 UFLUID: User subroutine to define fluid density and fluid compliance for hydrostatic fluid elements.

# Product: Abaqus/Standard

# References

• “Fluid cavity definition,” Section 11.5.2 of the Abaqus Analysis User’s Guide   
• \*FLUID BEHAVIOR   
• “UFLUID,” Section 4.1.17 of the Abaqus Verification Guide

# Overview

User subroutine UFLUID:

• is called for each cavity for which a user-defined fluid constitutive model is being specified;   
• is called for every fluid element (“Surface-based fluid cavities: overview,” Section 11.5.1 of the Abaqus Analysis User’s Guide) and for every fluid exchange definition (“Fluid exchange definition,” Section 11.5.3 of the Abaqus Analysis User’s Guide) connected to a cavity reference node;   
• requires that the fluid density, $\rho ( p , \theta )$ , and the fluid pressure compliance, $C _ { p }$ , be defined;   
• requires that the fluid temperature compliance, $C _ { \theta }$ , be defined if the routine is to be used in a linear perturbation step and the fluid is subjected to a temperature excursion; and   
• ignores any data specified for the fluid constitutive model outside the user subroutine.

# Density and fluid mass

At the start of the analysis (prior to the first iteration) the density calculated in user subroutine UFLUID (for the initial pressure, $p _ { I } .$ , and temperature, $\theta _ { I } )$ is used to calculate the fluid mass from the initial cavity volume. During the analysis the expected cavity volume is calculated from the fluid mass and the density.

# User subroutine interface

```fortran
SUBROUTINE UFLUID(RHO, CP, CT, PNEWDT, ENER, PRESS, DPRESS, PRESSI, 1 TEMP, DTEMP, TEMPI, TIME, DTIME, KSTEP, KINC, NONUM, FLNAME, LFLAG)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 FLNAME
DIMENSION TIME(2)
user coding to define RHO, CP, and CT 
```

<!-- source-page: 240 -->

# RETURN

# END

# Variables to be defined

# RHO

Fluid density, , at the end of the increment.

# CP

Fluid pressure compliance, $C _ { p } ,$ , at the end of the increment. For a linear perturbation step this is the base state compliance. Fluid pressure compliance is defined as

$$
C _ {p} = \frac {d \rho^ {- 1}}{d p} = - \rho^ {- 2} \frac {d \rho}{d p},
$$

where p is the fluid cavity pressure.

# CT

Fluid temperature compliance, $C _ { \theta }$ . This variable is needed only if a fluid temperature excursion occurs in a linear perturbation step and is the base state compliance. Fluid temperature compliance is defined as

$$
C _ {\theta} = \frac {d \rho^ {- 1}}{d \theta} = - \rho^ {- 2} \frac {d \rho}{d \theta},
$$

where is the fluid cavity temperature.

# Variables that can be updated

# PNEWDT

Ratio of suggested new time increment to the time increment 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 UFLUID.

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.
