<!-- source-page: 511 -->

# 1.2.18 VUFLUIDEXCHEFFAREA: User subroutine to define the effective area for fluid exchange.

# Product: Abaqus/Explicit

# References

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

# Overview

User subroutine VUFLUIDEXCHEFFAREA:

• can be used to define an effective area for fluid exchange that depends on the material state in the underlying elements on the fluid exchange surface;   
• will be called for blocks of material calculation points on the fluid exchange surface;   
• can be used only if the specified surface over which the fluid exchange occurs is a surface defined over membrane elements; and   
• can be used with any fluid exchange property type.

# Defining effective area

The contribution of each material point can be defined as a function of:

• the original area associated with the material point;   
• the current material state in the underlying elements; and   
• the temperature and pressure in the primary fluid cavity and the secondary fluid cavity or environment.

The effective area for fabric materials can depend on the nominal strain in the yarn directions and the change in angle between the two yarn directions, as well as the current angle between the two yarn directions. For nonfabric materials the effective area can depend on the material point strain.

# User subroutine interface

```csv
subroutine vufluidexcheffarea(
C Read only (unmodifiable) variables -
1 nblock, nprop, props,
2 steppTime, totalTime, fluExchName,
3 cMatName, lFabric, braidAngle,
4 strain, origArea, 
```

<!-- source-page: 512 -->

```txt
5 pcav, ctemp,
C Write only (modifiable) variables
6 effArea)
c
    include 'vaba_param.inc'
c
    parameter (ndir = 3, nshr=1)
c
c    pointers for retrieving fabric constitutive strains
    parameter( iFiberStrain1    = 1,
    *    iFiberStrain2    = 2,
    *    iFiberChangeAng    = 4)
c
    dimension props(nprop),
    1    braidAngle(nblock),
    2    strain(nblock, ndir+nshr),
    3    origArea(nblock),
    4    pcav(2),ctemp(2),
    5    effArea(nblock)

    character*80 fluExchName, cMatName

c    do k = 1, nblock
c    User coding to update effArea(k) = area associated with
c    material point contributing to area for fluid exchange
c    (leakage).
c    end do

    return
    end 
```

# Variable to be defined

# effArea(nblock)

Area associated with the material point contributing to the total effective area for fluid exchange. The subroutine is called with effArea set to the current area associated with the material point and should be updated to reflect the area that contributes to fluid exchange.

# Variables passed in for information

# nBlock

Number of material points to be processed in this call to VUFLUIDEXCHEFFAREA.

<!-- source-page: 513 -->

# nprop

User-specified number of user-defined fluid exchange properties required to define the effective area.

# props(nprop)

User-defined fluid exchange properties.

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

# fluExchName

User-specified fluid exchange name.

# cMatName

User-specified material name associated with material points processed in this call.

# lFabric

Flag indicating whether the subroutine is called for material points on the fluid exchange surface with a fabric material (lFabric=1 if fabric material, lFabric=0 otherwise).

# braidAngle(nblock)

Angle in radians between the two yarn directions for fabric materials.

# strain(nblock, ndir+nshr)

Fabric constitutive strains (nominal strain in the yarn directions and change in angle between the two yarn directions) or strains for nonfabric materials at current location.

# origArea(nblock)

Original area associated with current material point.

# pcav(2)

Absolute pressure in primary and secondary (or ambient) fluid cavities at the start of the increment.

# ctemp(2)

Temperature in primary and secondary (or ambient) fluid cavities at the start of the increment.

<!-- source-page: 514 -->

<!-- source-page: 515 -->

# 1.2.19 VUHARD: User subroutine to define the yield surface size and hardening parameters for isotropic plasticity or combined hardening models.

# Product: Abaqus/Explicit

# References

• “Classical metal plasticity,” Section 23.2.1 of the Abaqus Analysis User’s Guide   
• “Models for metals subjected to cyclic loading,” Section 23.2.2 of the Abaqus Analysis User’s Guide   
• \*CYCLIC HARDENING   
• \*PLASTIC   
• “Deformation of a sandwich plate under CONWEP blast loading,” Section 9.1.9 of the Abaqus Example Problems Guide   
• “VUHARD,” Section 4.1.35 of the Abaqus Verification Guide

# Overview

User subroutine VUHARD:

• is called at all material points of elements for which the material definition includes user-defined isotropic hardening or cyclic hardening for metal plasticity;   
• can be used to define a material’s isotropic yield behavior;   
• can be used to define the size of the yield surface in a combined hardening model;   
• can include material behavior dependent on field variables or state variables; and   
• requires that the derivatives of the yield stress (or yield surface size in combined hardening models) be defined with respect to the appropriate independent variables, such as strain, strain rate, and temperature.

# User subroutine interface

```c
subroutine vuhard(
C Read only -
* nblock,
* jElem, kIntPt, kLayer, kSecPt,
* lAnneal, stepTime, totalTime, dt, cmname,
* nstatev, nfieldv, nprops,
* props, tempOld, tempNew, fieldOld, fieldNew,
* stateOld,
* eqps, eqpsRate,
C Write only - 
```

<!-- source-page: 516 -->

```txt
* yield, dyieldDtemp, dyieldDeqps,
* stateNew)
C
    include 'vaba_param.inc'
C
    dimension props(nprops), tempOld(nblock), tempNew(nblock),
    1 fieldOld(nblock, nfieldv), fieldNew(nblock, nfieldv),
    2 stateOld(nblock, nstatev), eqps(nblock), eqpsRate(nblock),
    3 yield(nblock), dyieldDtemp(nblock), dyieldDeqps(nblock, 2),
    4 stateNew(nblock, nstatev), jElem(nblock)
C
    character*80 cmname
C
    do 100 km = 1, nblock
    user coding
100 continue
C
    return
    end 
```

# Variables to be defined

# yield(nblock)

Array containing the yield stress (for isotropic plasticity) or yield surface size (for combined hardening) at the material points.

# dyieldDeqps(nblock,1)

Array containing the derivative of the yield stress or yield surface size with respect to the equivalent plastic strain at the material points.

# dyieldDeqps(nblock,2)

Array containing the derivative of the yield stress with respect to the equivalent plastic strain rate at the material points.

# dyieldDtemp(nblock)

Array containing the derivative of the yield stress or yield surface size with respect to temperature at the material points. This quantity is required only in adiabatic and fully coupled temperature-displacement analyses.

# stateNew(nblock,nstatev)

Array containing the state variables at the material points at the end of the increment. The allocation of this array is described in “Solution-dependent state variables” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide.

<!-- source-page: 517 -->

nblock

Number of material points to be processed in this call to VUHARD.

jElem(nblock)

Array of element numbers.

kIntPt

Integration point number.

kLayer

Layer number (for composite shells).

kSecPt

Section point number within the current layer.

lanneal

Flag indicating whether the routine is being called during an annealing process. lanneal=0 indicates that the routine is being called during a normal mechanics increment. lanneal=1 indicates that this is an annealing process and the internal state variables, stateNew, should be reinitialized if necessary. Abaqus/Explicit will automatically set the stresses, stretches, and state to a value of zero during the annealing process.

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.

cmname

Material name, left justified. It is passed in as an uppercase character string. Some internal material models are given names starting with the “ABQ\_” character string. To avoid conflict, “ABQ\_” should not be used as the leading string for cmname.

nstatev

Number of user-defined state variables that are associated with this material type (see “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.

<!-- source-page: 518 -->

nprops

User-specified number of user-defined material properties.

tempOld(nblock)

Temperatures at the material points at the beginning of the increment.

tempNew(nblock)

Temperatures at the material points at the end of the increment.

fieldOld(nblock,nfieldv)

Values of the user-defined field variables at the material points at the beginning of the increment.

fieldNew(nblock,nfieldv)

Values of the user-defined field variables at the material points at the end of the increment.

stateOld(nblock,nstatev)

State variables at the material points at the beginning of the increment.

eqps(nblock)

Equivalent plastic strain at the material points.

eqpsRate(nblock)

Equivalent plastic strain rate at the material points.

<!-- source-page: 519 -->

# 1.2.20 VUINTER: User subroutine to define the interaction between contact surfaces.

# Product: Abaqus/Explicit

# References

• “User-defined interfacial constitutive behavior,” Section 37.1.6 of the Abaqus Analysis User’s Guide   
• \*SURFACE INTERACTION   
• “VUINTER,” Section 4.1.36 of the Abaqus Verification Guide

# Overview

User subroutine VUINTER:

• can be used to define the mechanical and thermal interaction between contacting surfaces;   
• must provide the entire definition of the interaction between the contacting surfaces;   
• can use and update solution-dependent state variables; and   
• must be used with the penalty contact constraint algorithm.

# Terminology

The use of user subroutine VUINTER requires familiarity with the following terminology.

# Surface node numbers

The “surface node number” refers to the position of a particular node in the list of nodes on the surface. For example, there are nSlvNod nodes on the slave surface. Number nSlvNod, is the surface node number of the nth node in this list; jSlvUid is the user-defined global number of this node. An Abaqus/Explicit model can be defined in terms of an assembly of part instances (see “Defining an assembly,” Section 2.10.1 of the Abaqus Analysis User’s Guide). In such models a node number in jSlvUid is an internally generated node number. If the original node number and part instance name are required, call the utility routine VGETPARTINFO (see “Obtaining part information,” Section 2.1.5).

# Local coordinate system

The array alocaldir defines the direction cosines of a local coordinate system for each slave node. The first local direction corresponds to the contact normal direction from the perspective of the slave node. For a two-dimensional VUINTER model the second local direction is the tangent direction defined by the cross product of the vector into the plane of the model (0., 0., −1.0) and the slave normal. For a three-dimensional VUINTER model the second and third local directions correspond to two orthogonal tangent directions $\mathbf { t } _ { 1 }$ and $\mathbf { t } _ { 2 }$ , which are set as follows:

<!-- source-page: 520 -->

• If the master surface is a cylindrical analytical surface, the second local direction corresponds to the generator direction (see “Analytical rigid surface definition,” Section 2.3.4 of the Abaqus Analysis User’s Guide), and the third local direction is the cross product of the first and second local directions.   
• If the master surface is an analytical surface of revolution, the third local direction corresponds to the hoop direction, and the second local direction is the cross product of the third and first local directions.   
• If the master surface is a three-dimensional, element-based surface, the tangent directions are based on the slave normal, using the standard convention for calculating surface tangents (see “Conventions,” Section 1.2.2 of the Abaqus Analysis User’s Guide).

For the two cases listed above involving three-dimensional analytical surfaces, the local tangent directions will reflect a rotation of the master surface. For the last case (three-dimensional, element-based master surface) the tangent directions may not follow the rotation of either the master or slave surfaces; for example, the local system would remain fixed with respect to the global system if a slave node and its surrounding facets rotate about an axes parallel to the slave normal.

The 2 × 2 array stored in drot for each slave node represents the incremental rotation of the tangent directions within the tangent plane corresponding to the tracked point of a three-dimensional master surface. (This incremental rotation array is equal to a unit matrix if nDir is equal to 2.) This incremental rotation matrix is provided so that vector- or tensor-valued state variables defined within the tangent plane can be rotated in this subroutine. For example, the second and third components of the rdisp array (i.e., the relative slip components) are rotated by this amount before VUINTER is called. However, as already mentioned, the rotation of the tangent directions may not reflect a physical rotation of the master or slave surface.

# Conventions for heat flux and stress

A positive flux indicates heat flowing into a surface, and a negative flux denotes heat leaving the surface. Flux must be specified for both surfaces, and they need not be equal and opposite so that effects such as frictional dissipation and differential surface heating can be modeled.

A positive normal stress denotes a pressure directed into the surface (opposite the local normal direction). Positive shear stresses denote shear tractions in the direction of the local surface tangents.

# User subroutine interface

```txt
subroutine vuinter(
C Write only
    1 sfd, scd, spd, svd,
C Read/Write -
    2 stress, fluxSlv, fluxMst, sed, statev,
C Read only -
    3 kStep, kInc, nFacNod, nSlvNod, nMstNod, nSurfDir,
    4 nDir, nStateVar, nProps, nTemp, nPred, numDefTfv, 
```
