<!-- source-page: 161 -->

```c
* ncarray)
C
    include 'aba_param.inc'
C
    parameter( io_creep_equiv_creepinc    = 1,
    *    io_creep_deqcreepinc_deqcreep    = 2,
    *    io_creep_deqcreepinc_dqtild    = 3,
    *    io_creep_deqcreepinc_dinv1crp    = 4,
    *    io_creep_deqcreepinc_dinv1    = 5,
    *    io_creep_deqcreepinc_dinv2    = 6,
    *    io_creep_deqcreepinc_ddetf    = 7,
    *    io_creep_deqcreepinc_dpress    = 8 )
C
    parameter( i_creep_kstep    = 1,
    *    i_creep_kinc    = 2,
    *    i_creep_noel    = 3,
    *    i_creep_npt    = 4,
    *    i_creep_layer    = 5,
    *    i_creep_kspt    = 6,
    *    i_creep_lend    = 7 )
C
    parameter( ir_creep_step_time    = 1,
    *    ir_creep_total_time    = 2,
    *    ir_creep_creep_time    = 3,
    *    ir_creep_timeinc    = 4,
    *    ir_creep_equiv_creep_strain    = 5,
    *    ir_creep_qtild    = 6,
    *    ir_creep_inv1crp    = 7,
    *    ir_creep_inv1    = 8,
    *    ir_creep_inv2    = 9,
    *    ir_creep_detf    = 10,
    *    ir_creep_press    = 11 )
C
    parameter( ic_creep_material_name    = 1 )
C
    dimension
    *    statev(nstatv),
    *    predef(nfield),
    *    dpred(nfield),
    *    coords(*),
    *    props(nprops),
    *    outputData(nOutput), 
```

<!-- source-page: 162 -->

```txt
* i_array(niarray),
* r_array(nrarray)

character*80 c_array(ncarray)

C

user coding to define outputData(io_creep_equiv_creepinc),
    outputData(io_creep_deqcreepinc_deqcreep),
    outputData(io_creep_deqcreepinc_dqtild),
    outputData(io_creep_deqcreepinc_dinv1crp),
    outputData(io_creep_deqcreepinc_dinv1),
    outputData(io_creep_deqcreepinc_dinv2),
    outputData(io_creep_deqcreepinc_ddetf) and
    outputData(io_creep_deqcreepinc_dpress)

return
end 
```

Variables to be defined   
outputData(io_creep_equiv_creepinc)
Equivalent creep strain increment, $\Delta\bar{\varepsilon}^{cr}$ .

outputData(io_creep_deqcreepinc_deqcreep)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial\bar{\varepsilon}^{cr}$ .

outputData(io_creep_deqcreepinc_dqtild)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial\tilde{q}$ .

outputData(io_creep_deqcreepinc_dinv1crp)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial I_{1}^{cr}$ .

outputData(io_creep_deqcreepinc_dinv1)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial\bar{I}_{1}$ .

outputData(io_creep_deqcreepinc_dinv2)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial\bar{I}_{2}$ .

outputData(io_creep_deqcreepinc_ddetf)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial J$ .

outputData(io_creep_deqcreepinc_dpress)
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial p$ .

<!-- source-page: 163 -->

# Variable that can be updated

# statev

An array containing the user-defined solution-dependent state variables at this point.

# Variables passed in for information

# nOutput

Size of array outputData.

# nstatv

Number of solution-dependent state variables associated with this material.

# networkid

Network identification number, which identifies the network for which creep is defined.

# coords

An array containing the current coordinates at this point.

# temp

Temperature at the end of the increment.

# dtemp

Increment of temperature.

# nfield

Number of field variables.

# predef

An array of interpolated values of predefined field variables at this point at the end of the increment, based on the values read in at the nodes and, optionally, redefined in user subroutine USDFLD.

# dpred

An array of increments of predefined field variables.

# nprops

User-specified number of property values associated with this creep model.

# props

An array of user-specified property values that are used to define the creep model.

# i\_array(i\_creep\_kstep)

Step number.

# i\_array(i\_creep\_kinc)

Increment number.

<!-- source-page: 164 -->

i\_array(i\_creep\_noel)

Element number.

i\_array(i\_creep\_npt)

Integration point.

i\_array(i\_creep\_layer)

Layer number (for layered solids).

i\_array(i\_creep\_kspt)

Section point number within the current layer.

i\_array(i\_creep\_lend)

Start/end of increment flag. The value of 0 denotes the beginning of the increment, and the value of 1 denotes the end of the increment.

niarray

Size of array i\_array.

r\_array(ir\_creep\_step\_time)

Value of step time at the end of the increment.

r\_array(ir\_creep\_total\_time)

Value of total time at the end of the increment.

r\_array(ir\_creep\_creep\_time)

Value of creep time at the end of the increment.

r\_array(ir\_creep\_timeinc)

Time increment.

r\_array(ir\_creep\_equiv\_creep\_strain)

Equivalent creep strain.

r\_array(ir\_creep\_qtild)

Equivalent deviatoric Kirchhoff stress.

r\_array(ir\_creep\_inv1crp)

The first invariant, , of the right Cauchy-Green creep strain tensor, .

r\_array(ir\_creep\_inv1)

The first invariant, , of the left Cauchy-Green strain tensor, .

r\_array(ir\_creep\_inv2)

The second invariant, , of the left Cauchy-Green strain tensor, .

<!-- source-page: 165 -->

r\_array(ir\_creep\_detf)

The determinant of the deformation gradient, .

r\_array(ir\_creep\_press)

Kirchhoff pressure.

nrarray

Size of array r\_array.

c\_array(ic\_creep\_material\_name)

User-specified material name, left justified. Some internal material models are given names starting with the “ABQ\_” character string. To avoid conflict, you should not use “ABQ\_” as the leading string for the material name.

ncarray

Size of array c\_array.

# Example: Bergstrom-Boyce model

As an example of the coding of user subroutine UCREEPNETWORK, consider the Bergstrom-Boyce model. In this case the equivalent creep strain rate is expressed as (see “Parallel rheological framework,” Section 22.8.2 of the Abaqus Analysis User’s Guide)

$$
\dot {\bar {\varepsilon}} ^ {c r} = A (\lambda^ {c r} - 1 + E) ^ {C} (\tilde {q}) ^ {m},
$$

where

$$
\lambda^ {c r} = \sqrt {\frac {1}{3} \mathbf {I} : \mathbf {C} ^ {c r}}
$$

and

$\mathbf{C}^{cr}$ is the right Cauchy-Green creep strain tensor, $\tilde{q}$ is the equivalent deviatoric Kirchhoff stress, and $A, m, C,$ and $E$ are material parameters.

The user subroutine would be coded as follows:
```c
subroutine ucreepnetwork (
C Must be updated
* outputData,
C Can be updated
* statev,
C Information (Read only)
* nOutput,
* nstatv,
* networkid, 
```

<!-- source-page: 166 -->

```txt
* coords,
* temp,
* dtemp,
* nfield,
* predef,
* dpred,
* nprops,
* props,
* i_array,
* niarray,
* r_array,
* nrarray,
* c_array,
* ncarray) 
```

include 'aba\_param.inc'   
```txt
parameter( io_creep_equiv_creepinc = 1,
* io_creep_deqcreepinc_deqcreep = 2,
* io_creep_deqcreepinc_dqtild = 3,
* io_creep_deqcreepinc_dinv1crp = 4,
* io_creep_deqcreepinc_dinv1 = 5,
* io_creep_deqcreepinc_dinv2 = 6,
* io_creep_deqcreepinc_ddetf = 7,
* io_creep_deqcreepinc_dpress = 8 ) 
```

```txt
parameter( i_creep_kstep = 1,
* i_creep_kinc = 2,
* i_creep_noel = 3,
* i_creep_npt = 4,
* i_creep_layer = 5,
* i_creep_kspt = 6,
* i_creep_lend = 7 
```

```c
parameter( ir_creep_step_time = 1,
* ir_creep_total_time = 2,
* ir_creep_creep_time = 3,
* ir_creep_timeinc = 4,
* ir_creep_equiv_creep_strain = 5,
* ir_creep_qtild = 6,
* ir_creep_inv1crp = 7,
* ir_creep_inv1 = 8, 
```

<!-- source-page: 167 -->

```python
* ir_creep_inv2 = 9,
* ir_creep_detf = 10,
* ir_creep_press = 11
C
    parameter(ic_creep_material_name = 1)
C
C model parameters
    parameter ( zero=0.0d0, half=0.5d0, one=1.0d0, two=2.0d0, & three=3.0d0, five=5.0d0, six=6.0d0 )
C
    dimension
    * statev(nstatv),
    * predef(nfield),
    * dpred(nfield),
    * coords(*),
    * props(nprops),
    * outputData(nOutput),
    * i_array(niarray),
    * r_array(nrarray)

    character*80 c_array(ncarray)
C
C Bergstrom-Boyce Model
C
    A = props(1)
    dm = props(2)
    C = props(3)
    E = props(4)
C
    dI1 = r_array(ir_creep_inv1crp)
    dLamb = (dI1/three)**half
    sigmaB = r_array(ir_creep_qtild)
    dt = r_array(ir_creep_timeinc)
C
C deq
    deq = dt*A*(dLamb-one+E)**C*sigmaB**dm
C
C d(deq)/(dI1crp)
    deqdi1 = deq*C/(dLamb-one+E)/dLamb/six
C
C d(eq)/d(eq)
    deqeq = zero 
```

<!-- source-page: 168 -->

```txt
C
C d(eq)/d(q)
    deqdq = dm*dt*A*(dLamb-one+E)**C*sigmaB**(dm-one)
C
C set output
    outputData(io_creep_equiv_creepinc) = deq
    outputData(io_creep_deqcreepinc_deqcreep) = deqeq
    outputData(io_creep_deqcreepinc_dqtild) = deqdq
    outputData(io_creep_deqcreepinc_dinv1crp) = deqdi1
    outputData(io_creep_deqcreepinc_dinv1) = zero
    outputData(io_creep_deqcreepinc_dinv2) = zero
    outputData(io_creep_deqcreepinc_ddetf) = zero
    outputData(io_creep_deqcreepinc_dpress) = zero
C
    return
    end 
```

<!-- source-page: 169 -->

# 1.1.24 UDECURRENT: User subroutine to define nonuniform volume current density in an eddy current or magnetostatic analysis.

Product: Abaqus/Standard

# References

• “Eddy current analysis,” Section 6.7.5 of the Abaqus Analysis User’s Guide   
• “Magnetostatic analysis,” Section 6.7.6 of the Abaqus Analysis User’s Guide   
• \*DECURRENT

# Overview

User subroutine UDECURRENT:

• can be used to define the variation of volume current density vector as a function of position, time, element number, etc. for a transient eddy current or magnetostatic analysis or as a function of position, excitation frequency, phase, element number, etc. for a time-harmonic eddy current analysis;   
• will be called at each load integration point for each element-based nonuniform volume current density definition during eddy current or magnetostatic analysis; and   
• ignores any amplitude references that may appear with the associated step definition or nonuniform distributed volume current density definition.

# User subroutine interface

```txt
subroutine udecurrent (
C Write only -
* bodycurrent,
C Read only -
* predef, coords, nBlock,
* i_array, niarray,
* r_array, nrarray,
* c_array, narray )
C
include 'aba_param.inc'
C
dimension bodycurrent(nBlock,*),
* predef(nBlock,2,*),
* coords(nBlock,*),
* i_array(*),
* r_array(*) 
```

<!-- source-page: 170 -->

```python
c
    character*80 c_array(*)

    parameter( i_udecurr_kstep = 1,
    * i_udecurr_kinc = 2,
    * i_udecurr_noel = 3,
    * i_udecurr_npt = 4,
    * i_udecurr_jltyp = 5,
    * i_udecurr_phase = 6,
    * i_udecurr_proc = 7,
    * i_udecurr_nfld = 8 )

    parameter( ir_udecurr_time_1 = 1,
    * ir_udecurr_time_2 = 2,
    * ir_udecurr_time_3 = 3 )

    parameter( i_jltyp_cj = 1 )

    parameter( i_proc_lf_th = 1,
    * i_proc_lf_td = 2,
    * i_proc_ms = 3 )

    parameter( i_udecurr_phase_real = 1,
    * i_udecurr_phase_imag = 2 )

    user coding to define bodycurrent
    return
    end 
```

# Variable to be defined

bodycurrent(nBlock,\*)

Components of the body current density vector for a block of load integration points. The units are $\mathrm { C L } ^ { - 2 } \mathrm { T } ^ { - 1 }$ . bodycurrent will be passed into the routine as the vector specified as part of the elementbased distributed volume current density definition. If the vector is not defined, bodycurrent will be passed in as zero.

# Variables passed in for information

predef(2,\*)

An array containing values of temperature and all the predefined field variables at the current load integration point, based on interpolation from the values specified at the nodes. The first value in a pair, predef(1,\*), corresponds to initial values; the second value, predef(2,\*), corresponds to
