477 lines
11 KiB
Markdown
477 lines
11 KiB
Markdown
<!-- 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
|