<!-- source-page: 501 -->

# 1.2.16 VUFIELD: User subroutine to specify predefined field variables.

# Product: Abaqus/Explicit

# References

• “Predefined fields,” Section 34.6.1 of the Abaqus Analysis User’s Guide   
• \*FIELD

# Overview

User subroutine VUFIELD:

• 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 nodes can be updated simultaneously;   
• can be called for blocks of nodes for which the field variable values are defined in the subroutine;   
• 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 VUSDFLD such that the field variables that are passed in from VUFIELD 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 is updated at a time for given nodes or a given node set in user subroutine VUFIELD. The user subroutine is called whenever a current value of a field variable is needed for the nodes that are listed in the field variable definition. This method is ideal for cases in which the field variables are independent of each other.

# Simultaneous variable updates

User subroutine VUFIELD can also be used to update multiple field variables simultaneously for given nodes or a given node set. This method is well-suited for cases in which there are dependencies between some of the field variables. In this case you must specify the number of field variables to be updated simultaneously, and the user subroutine will be called each time the field variable values are needed.

<!-- source-page: 502 -->

User subroutine interface   
```txt
SUBROUTINE VUFIELD(FIELD, NBLOCK, NFIELD, KFIELD, NCOMP, 1 KSTEP, JFLAGS, JNODEID, TIME, 2 COORDS, U, V, A)

C
INCLUDE 'VABA_PARAM.INC'

C indices for the time array TIME
PARAMETER( i_ufld_Current = 1,
* i_ufld_Increment = 2,
* i_ufld_Period = 3,
* i_ufld_Total = 4 )

C indices for the coordinate array COORDS
PARAMETER( i_ufld_CoordX = 1,
* i_ufld_CoordY = 2,
* i_ufld_CoordZ = 3 )

C indices for the displacement array U
PARAMETER( i_ufld_SpaDisplX = 1,
* i_ufld_SpaDisplY = 2,
* i_ufld_SpaDisplZ = 3,
* i_ufld_RotDisplX = 4,
* i_ufld_RotDisplY = 5,
* i_ufld_RotDisplZ = 6,
* i_ufld_AcoPress = 7,
* i_ufld_Temp = 8 )

C indices for the velocity array V
PARAMETER( i_ufld_SpaVelX = 1,
* i_ufld_SpaVelY = 2,
* i_ufld_SpaVelZ = 3,
* i_ufld_RotVelX = 4,
* i_ufld_RotVelY = 5,
* i_ufld_RotVelZ = 6,
* i_ufld_DAcoPress = 7,
* i_ufld_DTemp = 8 )

C indices for the acceleration array A
PARAMETER( i_ufld_SpaAccelX = 1, 
```

<!-- source-page: 503 -->

```c
* i_ufld_SpaAccelY = 2,
* i_ufld_SpaAccelZ = 3,
* i_ufld_RotAccelX = 4,
* i_ufld_RotAccelY = 5,
* i_ufld_RotAccelZ = 6,
* i_ufld_DDAcoPress = 7,
* i_ufld_DDTemp = 8)

C indices for JFLAGS
PARAMETER( i_ufld_kInc = 1,
* i_ufld_kPass = 2 )

C
DIMENSION FIELD(NBLOCK, NCOMP, NFIELD)
DIMENSION JFLAGS(2), JNODEID(NBLOCK), TIME(4),
* COORDS(3, NBLOCK)
DIMENSION U(8, NBLOCK), V(8, NBLOCK), A(8, NBLOCK)

C
user coding to define FIELD

RETURN
END 
```

# Variable to be defined

# FIELD(NBLOCK,NCOMP,NFIELD)

Array of field variable values at a collective number of nodes NBLOCK (see NBLOCK below). When updating one field variable at a time, only the value of the specified field variable KFIELD must be returned. In this case NFIELD is passed into user subroutine VUFIELD with a value of 1, and FIELD is thus dimensioned as FIELD(NBLOCK,NCOMP,1). When updating all field variables simultaneously, the values of the specified number of field variables must be returned. In this case FIELD is dimensioned as FIELD(NBLOCK,NCOMP,NFIELD), where NFIELD is the number of field variables specified and KFIELD, which is set to −1, has no meaning.

If fields are applied to nodes that are not part of pipe, beam, or shell elements, only one value of each field variable is required (NCOMP=1), and the user subroutine is invoked in a single pass. For nodes that are part of pipe, beam, or shell elements, VUFIELD is invoked in two passes per increment for these elements, and 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. Field variables are given as values at the points on the shell or beam section. For a beam section the number of values required 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. For a shell section temperatures and field variables are given as values at n equally spaced points through

<!-- source-page: 504 -->

each layer of a shell section. In the first pass NCOMP is passed in with the value of 1 to define the field variable values at the first point. The second pass is used to define field variables at the remaining points.

2. Field variables for the shell or beam section are given as values at the origin of the cross-section together with gradients along the cross-section. The number of gradient values required is 2 for three-dimensional beams, 1 for two-dimensional beams, and 1 for shells. In the first pass NCOMP is passed in with the value of 1 to define the field variable values at the origin of the cross-section. The gradients are defined in the second pass.

Because field variables can also be defined directly, it is important to understand the hierarchy used in situations with 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 VUFIELD, 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 can then modify these values within this subroutine.

# Variables passed in for information

# NBLOCK

User-specified number of nodes to be processed as a block in this call to VUFIELD. The value is equal to the total number of nodes given in a node set when blocking is disabled. When blocking is enabled, NBLOCK is equal to a predefined number set in Abaqus/Explicit. You can also modify NBLOCK by specifying a blocking size in the Abaqus/Explicit analysis.

# NFIELD

User-specified number of field variables to be updated. The default value is 1.

# KFIELD

User-specified field variable number. This variable is meaningful only when updating individual field variables at a time; otherwise, the value is set to −1.

# NCOMP

Maximum number of section values to be defined for any node in the model in the current pass. The first pass to user subroutine VUFIELD has NCOMP passed in with the value of 1.

# KSTEP

Current step number.

# JFLAGS(i\_ufld\_kInc)

Increment number for step KSTEP.

# JFLAGS(i\_ufld\_kPass)

This flag is equal to 1 for the first pass to user subroutine VUFIELD and is equal to 2 for the second pass.

<!-- source-page: 505 -->

# JNODEUID(NBLOCK)

Array for user-defined node numbers. This array is dimensioned based on the size of NBLOCK, and the contained node numbers are identical to those defined in the input file. You can perform additional interdependent field variable operations by using nodal indices stored in this array.

# TIME(4)

Array for information of analysis time. You can retrieve any time information from this array by using the parameters given above. TIME(i\_ufld\_Current) stores the current analysis time, TIME(i\_ufld\_Increment) gives the time increment at this instance, TIME(i\_ufld\_Period) is the time period of the current step, and TIME(i\_ufld\_Total) is the total analysis time up to this point. You can use this time information to perform possible time-dependent field variable operations.

# COORDS(3,NBLOCK)

Coordinates for nodes in the array JNODEUID. This array stores current coordinates of nodes in which the order of coordinates stored corresponds to the order of nodes listed in the array JNODEUID. The coordinates can be retrieved by using the parameters given above. You can make use of COORDS to define possible position-dependent field variable operations.

# U(8,NBLOCK), V(8,NBLOCK), and A(8,NBLOCK)

Arrays containing solution variables of displacements, rotations, temperatures, and pressures and their corresponding temporal derivatives. The order in which these solutions are stored follows the order defined in the array JNODEUID. For a specific node its solution variables can be retrieved by using the parameter indices given above. Depending on the degrees of freedom, some solution variables are not valid for a given node. The displacement values correspond to the current increment. However, the acceleration is from a configuration that is one increment behind, and the velocity is such that it is consistent with the displacement increment and the time increment between the two successive configurations.

<!-- source-page: 506 -->

<!-- source-page: 507 -->

# 1.2.17 VUFLUIDEXCH: User subroutine to define the mass flow rate/heat energy flow rate for fluid exchange.

# Product: Abaqus/Explicit

# References

• “Fluid exchange definition,” Section 11.5.3 of the Abaqus Analysis User’s Guide   
• \*FLUID EXCHANGE   
• \*FLUID EXCHANGE ACTIVATION   
• \*FLUID EXCHANGE PROPERTY

# Overview

User subroutine VUFLUIDEXCH:

• can be used to define mass flow rate and/or heat energy flow rate for fluid exchange;   
• can be used when built-in fluid exchange property types cannot satisfactorily model the mass/heat energy flow;   
• can use and update solution-dependent state variables;   
• can use any field variables that are passed in; and   
• requires that the derivatives of mass/heat energy flow rates be defined with respect to pressure and temperature in the primary and secondary fluid cavities.

# Conventions for defining mass flow/heat energy flow rate

A positive mass/heat energy flow rate indicates flow from the primary fluid cavity to the secondary fluid cavity. A negative value for mass flow rate will be ignored if the fluid exchange is between a cavity and its environment.

# User subroutine interface

```txt
subroutine vufluidexch(
C Read only (unmodifiable)variables -
1    nstatev, nfieldv, nprops,
2    steppTime, totalTime, dt,
3    jCavType, fluExchName, effArea, amplitude,
4    props, lExchEnv, pcavNew, pcavOld,
5    ctempNew, ctempOld, cvol, cmass,
6    rMix, CpMix, DCpDtemp,
7    field, stateOld, 
```

<!-- source-page: 508 -->

```python
C Write only (modifiable) variables
    8 stateNew, rMassRate, rEneRate,
    9 DMassRateDPcav, DMassRateDTemp,
    * DEneRateDPcav, DEneRateDTemp)
c
    include 'vaba_param.inc'
c
    dimension props(nprops),
    1 pcavNew(2), pcavOld(2),
    2 ctempNew(2), ctempOld(2), cvol(2), cmass(2),
    3 rMix(2), CpMix(2), dCpDtemp(2),
    4 field(nfieldv),
    5 stateOld(nstatev), stateNew(nstatev),
    6 DMassRateDPcav(2), DMassRateDTemp(2),
    7 DEneRateDPcav(2), DEneRateDTemp(2)

c Fluid cavity type
    parameter( iHydraulic = 1,
    * iAdiabaticGas = 2,
    * iIsothermalGas = 3)

    character*80 fluExchName

c User coding to calculate mass flow rate,
c heat energy flow rate and its derivatives with respect
c to fluid cavity pressure and temperature.

    return
    end 
```

# Variables to be defined

# rMassRate

Mass flow rate. The mass flow rate is negative if the flow is into the primary cavity.

# DMassRateDPcav(2)

Derivative of mass flow rate with respect to pressure in primary and secondary fluid cavities.

# DMassRateDTemp(2)

Derivative of mass flow rate with respect to temperature in primary and secondary fluid cavities.

# rEneRate

Heat energy flow rate. The energy flow rate is negative if the flow is into the primary cavity.

<!-- source-page: 509 -->

# DEneRateDPcav(2)

Derivative of heat energy flow rate with respect to pressure in primary and secondary fluid cavities.

# DEneRateDTemp(2)

Derivative of heat energy flow rate with respect to temperature in primary and secondary fluid cavities.

# Variable that can be updated

# stateNew(nstatev)

State variable for fluid exchange at the end of the increment. You define the size of this array by allocating space for it (see “Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide, for more information).

# Variables passed in for information

# nstatev

Number of user-defined state variables that are associated with this fluid exchange (you define this as described in “Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide).

# nfieldv

Number of user-defined external field variables.

# nprops

User-specified number of user-defined fluid exchange properties required to define mass/heat energy flow rate.

# 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.

# dt

Time increment size.

# jCavType

Indicator of fluid cavity type: 1 for fluid cavity with hydraulic fluids, 2 for fluid cavity with adiabatic gases, and 3 for fluid cavity with isothermal gases.

# fluExchName

User-specified fluid exchange name.

# effArea

Effective area for fluid exchange.

<!-- source-page: 510 -->

amplitude

Current value of the amplitude referenced for this fluid exchange. You must multiply the flow rates by the current amplitude value within the user subroutine if the amplitude is required.

props(nprop)

User-defined fluid exchange properties.

lExchEnv

The fluid exchange is to the environment if lExchEnv=1 and to another fluid cavity if lExchEnv=0.

pcavNew(2)

Pressure in primary and secondary fluid cavities at the end of the increment.

pcavOld(2)

Pressure in primary and secondary fluid cavities at the beginning of the increment.

ctempNew(2)

Temperature in primary and secondary fluid cavities at the end of the increment.

ctempOld(2)

Temperature in primary and secondary fluid cavities at the beginning of the increment.

cvol(2)

Volume of primary and secondary fluid cavities.

cmass(2)

Mass of fluid in primary and secondary fluid cavities.

rMix(2)

Gas constant of mixture in primary and secondary fluid cavities.

CpMix(2)

Specific heat of mixture in primary and secondary fluid cavities.

DCpDtemp(2)

Derivative of specific heat with respect to temperature for primary and secondary fluid cavities.

field(nfieldv)

Field variables at orifice.

stateOld(nstatev)

State variables for fluid exchange at the beginning of the increment.
