<!-- source-page: 51 -->

# 1.1.7 FLOW: User subroutine to define nonuniform seepage coefficient and associated sink pore pressure for consolidation analysis.

# Product: Abaqus/Standard

# References

• “Pore fluid flow,” Section 34.4.7 of the Abaqus Analysis User’s Guide   
• \*FLOW   
• \*SFLOW

# Overview

User subroutine FLOW:

• can be used in a soils consolidation analysis to define the variation of the reference pore pressure and the seepage coefficient as functions of position, time, pore pressure, element number, integration point number, etc.;   
• will be called at each integration point of element surfaces for which element-based or surface-based nonuniform surface seepage flow is defined; and   
• ignores any amplitude references that may appear with the associated nonuniform flow definition.

# User subroutine interface

```fortran
SUBROUTINE FLOW(H, SINK, U, KSTEP, KINC, TIME, NOEL, NPT, COORDS, 1 JLTYP, SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION TIME(2), COORDS(3)
CHARACTER*80 SNAME
user coding to define H and SINK
RETURN
END 
```

<!-- source-page: 52 -->

# Variables to be defined

# H

Seepage coefficient at this point. Units are F−1 L3 T−1 . H will be passed into the routine as the reference seepage coefficient value specified as part of the element-based or surface-based flow definition. If the reference value is not defined, H will be passed in as zero.

# SINK

Sink pore pressure. SINK will be passed into the routine as the reference pore pressure value specified as part of the element-based or surface-based flow definition. If the reference value is not defined, SINK will be passed in as zero.

# Variables passed in for information

# U

Estimated surface total pore pressure at this time and at this point.

# KSTEP

Step number.

# KINC

Increment number.

# TIME(1)

Current value of step time (defined only in transient analysis).

# TIME(2)

Current value of total time (defined only in transient analysis).

# NOEL

Element number.

# NPT

Surface integration point number.

# COORDS

An array containing the coordinates of this integration point. 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 point.

# JLTYP

Identifies the element face for which this call to FLOW is being made for an element-based flow. This information is useful when several nonuniform flow conditions are being imposed on an element at the same time. See Part VI, “Elements,” of the Abaqus Analysis User’s Guide for identification of the element faces. The key is as follows:

<!-- source-page: 53 -->

<table><tr><td>JLTYP</td><td>Flow type</td></tr><tr><td>0</td><td>Surface-based flow</td></tr><tr><td>61</td><td>Q1NU</td></tr><tr><td>62</td><td>Q2NU</td></tr><tr><td>63</td><td>Q3NU</td></tr><tr><td>64</td><td>Q4NU</td></tr><tr><td>65</td><td>Q5NU</td></tr><tr><td>66</td><td>Q6NU</td></tr></table>

# SNAME

Surface name for which this call to FLOW is being made for a surface-based flow (JLTYP=0). For an element-based flow the surface name is passed in as a blank.

<!-- source-page: 54 -->

<!-- source-page: 55 -->

# 1.1.8 FRIC: User subroutine to define frictional behavior for contact surfaces.

# Product: Abaqus/Standard

# References

• “Frictional behavior,” Section 37.1.5 of the Abaqus Analysis User’s Guide   
• \*FRICTION   
• “Thermal-stress analysis of a disc brake,” Section 5.1.1 of the Abaqus Example Problems Guide   
• “FRIC,” Section 4.1.4 of the Abaqus Verification Guide

# Overview

# User subroutine FRIC:

• can be used to define the frictional behavior between contacting surfaces;   
• can be used when the extended versions of the classical Coulomb friction model provided in Abaqus are too restrictive and a more complex definition of shear transmission between contacting surfaces is required;   
• will be called at points on the slave surface of a contact pair and at the integration points in a contact element (only when the contact point is closed) for which the contact interaction property model contains user-subroutine-defined friction;   
• must provide the entire definition of shear interaction between the contacting surfaces; and   
• can use and update solution-dependent state variables.

# User subroutine interface

```txt
SUBROUTINE FRIC(LM, TAU, DDTDDG, DDTDDP, DSLIP, SED, SFD,
1 DDTDDT, PNEWDT, STATEV, DGAM, TAULM, PRESS, DPRESS, DDPDDH, SLIP,
2 KSTEP, KINC, TIME, DTIME, NOEL, CINAME, SLNAME, MSNAME, NPT, NODE,
3 NPATCH, COORDS, RCOORD, DROT, TEMP, PREDEF, NFDIR, MCRD, NPRED,
4 NSTATV, CHRLNGTH, PROPS, NPROPS)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CINAME, SLNAME, MSNAME
C
DIMENSION TAU(NFDIR), DDTDDG(NFDIR, NFDIR), DDTDDP(NFDIR),
1 DSLIP(NFDIR), DDTDDT(NFDIR, 2), STATEV(*), DGAM(NFDIR),
2 TAULM(NFDIR), SLIP(NFDIR), TIME(2), COORDS(MCRD), 
```

<!-- source-page: 56 -->

3 RCOORD(MCRD),DROT(2,2),TEMP(2),PREDEF(2,\*),PROPS(NPROPS)

user coding to define LM, TAU, DDTDDG, DDTDDP, and, optionally, DSLIP, SED, SFD, DDTDDT, PNEWDT, STATEV

RETURN END

Variables to be defined

# In all cases

LM

Relative motion flag. User subroutine FRIC is called only if the contact point is determined to be closed; that is, if the contact pressure is positive (the contact point was closed in the previous iteration) or if the contact point is overclosed (the contact point was open in the previous iteration).

During iterations LM is passed into the subroutine as the value defined during the previous iteration. At the start of an increment or if the contact point opened during the previous iteration, this variable will be passed into the routine depending on the contact condition in the previous increment. If the contact point was slipping, LM is equal to 0; if the contact point was sticking, LM is equal to 1; and if the contact point was open, LM is equal to 2.

Set LM equal to 0 if relative motion is allowed (either due to slip or elastic stick). In this case the subroutine must specify the frictional stress $\tau _ { 1 }$ (and $\tau _ { 2 }$ for three-dimensional analysis) as a function of the relative sliding motion $\gamma _ { 1 }$ (and $\gamma _ { 2 } )$ , the interface contact pressure p, and other predefined or user-defined state variables. In addition, the subroutine must define the derivatives of the frictional stress with respect to $\gamma _ { 1 } , ( \gamma _ { 2 } )$ , and p. For instance, in the case of isotropic elastic sticking, $\partial \tau _ { 1 } / \partial \gamma _ { 1 } =$ $\partial \tau _ { 2 } / \partial \gamma _ { 2 } = k _ { e l a s } , \partial \tau _ { 1 } / \partial \gamma _ { 2 } = \partial \tau _ { 2 } / \partial \gamma _ { 1 } = 0$ , where $k _ { e l a s }$ is the elastic stiffness of the interface.

Set LM equal to 1 if no relative motion is allowed; a rigid sticking condition at the interface is enforced by a Lagrange multiplier method. In this case no further variables need to be updated. If LM is always set to 1, a “perfectly rough” interface is created. It is not advisable to set LM to 1 when the finite-sliding, surface-to-surface contact formulation is used.

Set LM equal to 2 if friction is ignored (frictionless sliding is assumed). In this case no further variables need to be updated. If LM is always set to 2, a “perfectly smooth” interface is created.

You can make decisions about the stick/slip condition based on incremental slip information and calculated frictional stresses. These quantities are passed in by Abaqus/Standard, as discussed below.

To avoid convergence problems for the general class of frictional contact problems, set LM to 2 and exit this routine if the contact point was open at the end of the previous increment; that is, if Abaqus/Standard sets LM=2 when it calls this routine, simply exit the routine.

<!-- source-page: 57 -->

# If the return value of LM is 0

# TAU(NFDIR)

These values are passed in as the values of the frictional stress components, $\tau _ { \alpha }$ , at the beginning of the increment and must be updated to the values at the end of the increment. Here, and in the rest of this description, Greek subscripts ( , ) refer to frictional shear directions. The orientation of these directions on contact surfaces is defined in “Contact formulations in Abaqus/Standard,” Section 38.1.1 of the Abaqus Analysis User’s Guide.

# DDTDDG(NFDIR,NFDIR)

$\partial \Delta \tau _ { \alpha } / \partial \Delta \gamma _ { \beta }$ , partial derivative of the frictional stress in direction with respect to the relative motion in direction $\beta .$ .

# DDTDDP(NFDIR)

$\partial \Delta \tau _ { \alpha } / \partial \Delta p .$ , partial derivative of the frictional stress in direction with respect to the contact pressure. Since these terms yield an unsymmetric contribution to the stiffness matrix, they are used only if the unsymmetric equation solver is used (see “Defining an analysis,” Section 6.1.2 of the Abaqus Analysis User’s Guide).

# Variables that can be updated

# DSLIP(NFDIR)

$\Delta \gamma _ { \alpha } ^ { s l }$ , increment in nonrecoverable sliding motion (slip). If LM was 0 in the previous iteration, this array is passed in as the user-defined values during the previous iteration; otherwise, it will be zero. The array should be updated only if the return value of LM is 0.

This array is useful to detect slip reversals between iterations. It is used by the output options to indicate whether this point is sticking or slipping. Upon convergence of an increment, the values in DSLIP(NFDIR) are accumulated in SLIP(NFDIR), which are stored as the plastic strains.

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

# SFD

This variable should be defined as the incremental frictional dissipation. The units are energy per unit area if the contact element or contact pair calling FRIC uses stresses as opposed to forces. For regular stress analysis this variable is used for output only and has no effect on other solution variables. In coupled temperature-displacement and coupled thermal-electrical-structural analyses the dissipation is converted into heat if the gap heat generation model is used. If SFD is not defined, the heat generation is calculated based on the dissipation obtained as the product of the slip increment, DSLIP, and the frictional stress, TAU.

<!-- source-page: 58 -->

# DDTDDT(NFDIR,2)

$\partial \Delta \tau _ { \alpha } / \partial \Delta \theta _ { 1 } , \partial \Delta \tau _ { \alpha } / \partial \Delta \theta _ { 2 }$ partial derivatives of the frictional stress in direction with respect to the temperatures of the two surfaces. This is required only for coupled temperature-displacement and coupled thermal-electrical-structural elements, in which the frictional stress is a function of the surface temperatures.

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

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.

# STATEV(NSTATV)

An array containing the user-defined solution-dependent state variables. You specify the number of available state variables; see “Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide, for details. This array will be passed in containing the values of these variables at the start of the increment. If any of the solution-dependent state variables is being used in conjunction with the friction behavior, they must be updated in this subroutine to their values at the end of the increment.

# Variables passed in for information

# DGAM(NFDIR)

If LM was set to 0 in the previous iteration, this value is the increment of sliding motion in the current increment, $\Delta \gamma _ { \alpha }$ . Otherwise, it will be zero. Comparison with DSLIP(NFDIR) makes it possible to determine whether slip changes to stick at this point and/or if there is a slip direction reversal occurring at this point.

# TAULM(NFDIR)

If LM was set to 1 in the previous iteration, this value is the current value of the constraint stress at the end of the increment, $\tau _ { \alpha } ^ { L M }$ . Otherwise, it will be zero. Comparison with the critical shear stress makes it possible to determine whether stick changes to slip at this point.

<!-- source-page: 59 -->

# PRESS

p, contact pressure at end of increment.

# DPRESS

, increment in contact pressure.

# DDPDDH

/ , current contact stiffness, in the case of soft contact (“Contact pressure-overclosure relationships,” Section 37.1.2 of the Abaqus Analysis User’s Guide).

# SLIP(NFDIR)

Total nonrecoverable sliding motion (slip) at the beginning of the increment, $\gamma _ { \alpha } ^ { s l }$ . This value is the accumulated value of DSLIP(NFDIR) from previous increments.

# KSTEP

Step number.

# KINC

Increment number.

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

# NOEL

Element label for contact elements. Passed in as zero if contact surfaces are defined.

# CINAME

User-specified surface interaction name associated with the friction definition, left justified. For contact elements it is the element set name given for the interface definition associated with the friction definition; if an optional name is assigned to the interface definition, CINAME is passed in as this name, left justified.

# SLNAME

Slave surface name. Passed in as blank if contact elements are used.

# MSNAME

Master surface name. Passed in as blank if contact elements are used.

# NPT

Integration point number for contact elements. Passed in as zero if contact surfaces are defined.

<!-- source-page: 60 -->

# NODE

User-defined global slave 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 slave node of the constraint if the surface-to-surface contact formulation is used. Passed in as zero if called from a contact element.

# NPATCH

Not used.

# COORDS(MCRD)

An array containing the current coordinates of this point.

# RCOORD(MCRD)

If the master surface is defined as a rigid surface, this array is passed in containing the coordinates of the opposing point on the rigid surface in its current position and orientation.

# 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. Stress and slip components are already rotated by this amount before FRIC is called. This matrix is passed in as a unit matrix for two-dimensional and axisymmetric contact problems.

# TEMP(2)

Current temperature at the slave node and the opposing master surface, respectively.

# PREDEF(2,NPRED)

An array containing pairs of values of all the user-specified field variables at the end of the current increment (initial values at the beginning of the analysis and current values during the analysis). If FRIC is called from a contact pair, the first value in a pair corresponds to the slave node and the second value corresponds to the nearest point on the master surface. If FRIC is called from a large-sliding contact element, PREDEF(1,NPRED) corresponds to the value at the integration point of the element and PFREDEF(2,NPRED) corresponds to the nearest point on the opposing surface. If FRIC is called from a small-sliding contact element, PREDEF(1,NPRED) corresponds to the value at the integration point of the first side and PFREDEF(2,NPRED) corresponds to the value at the integration point on the opposite face of the element.

# NFDIR

Number of friction directions.

# MCRD

Number of coordinate directions at the contact point.

# NPRED

Number of predefined field variables.
