```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), ``` ```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$ . # 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. 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, . 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, ``` ```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, ``` ```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 ``` ```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 ``` # 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(*) ``` ```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