modify documents
This commit is contained in:
@@ -0,0 +1,416 @@
|
||||
<!-- source-page: 471 -->
|
||||
|
||||
# cmname
|
||||
|
||||
User-specified material name, left justified. It is passed in as an uppercase character string.
|
||||
|
||||
# coordMp(nblock,ndim)
|
||||
|
||||
Material point coordinates. It is the midplane material point for shell elements.
|
||||
|
||||
# coordNode(nblock,nnode,ndim)
|
||||
|
||||
Nodal coordinates.
|
||||
|
||||
# direct(nblock,3,3)
|
||||
|
||||
An array containing the direction cosines of the material directions in terms of the global basis directions. For material point k direct(k,1,1), direct(k,2,1), and direct(k,3,1) give the (1, 2, 3) components of the first material direction; direct(k,1,2), direct(k,2,2), and direct(k,3,2) give the second material direction and so on. For shell and membrane elements the first two directions are in the plane of the element and the third direction is the normal.
|
||||
|
||||
# T(nblock,3,3)
|
||||
|
||||
An array containing the direction cosines of the material orientation components relative to the element basis directions. For material point k this is the orientation that defines the material directions (direct) in terms of the element basis directions. For continuum elements T and direct are identical. For shell and membrane elements T(k,1,1) , T(k,1,2) , T(k,2,1) , T(k,2,2) , T(k,3,3) , and all other components are zero, where is the counterclockwise rotation around the normal vector that defines the orientation. If no orientation is used, T is an identity matrix.
|
||||
|
||||
# props(nprops)
|
||||
|
||||
User-supplied material properties.
|
||||
|
||||
# field(nblock,nfieldv)
|
||||
|
||||
Values of the user-defined field variables at each material point at the beginning of the increment. User subroutine VUCHARLENGTH is called before user subroutine VUSDFLD. Thus, any changes to the field variables made in user subroutine VUSDFLD are not available in user subroutine VUCHARLENGTH.
|
||||
|
||||
# stateOld (nblock, nstatev)
|
||||
|
||||
State variables at each material point at the beginning of the increment.
|
||||
|
||||
<!-- source-page: 472 -->
|
||||
|
||||
<!-- source-page: 473 -->
|
||||
|
||||
# 1.2.13 VUCREEPNETWORK: User subroutine to define time-dependent behavior (creep) for models defined within the parallel rheological framework.
|
||||
|
||||
# Product: Abaqus/Explicit
|
||||
|
||||
# References
|
||||
|
||||
• “Parallel rheological framework,” Section 22.8.2 of the Abaqus Analysis User’s Guide
|
||||
• “Nonlinear large-strain viscoelasticity with hyperelasticity,” Section 2.2.8 of the Abaqus Verification Guide
|
||||
• \*VISCOELASTIC
|
||||
|
||||
# Overview
|
||||
|
||||
User subroutine VUCREEPNETWORK:
|
||||
|
||||
• is intended to provide creep laws for nonlinear viscoelastic networks for models defined using the parallel rheological framework;
|
||||
• can use and update solution-dependent state variables; and
|
||||
• can be used in conjunction with user subroutine VUSDFLD to redefine any field variables before they are passed in.
|
||||
|
||||
# Model description
|
||||
|
||||
The user subroutine allows a creep law of the following general form to be defined:
|
||||
|
||||
$$
|
||||
\dot {\bar {\varepsilon}} ^ {c r} = g ^ {c r} (\bar {\varepsilon} ^ {c r}, I _ {1} ^ {c r}, \bar {I} _ {1}, \bar {I} _ {2}, J, p, q, t, \theta , F V),
|
||||
$$
|
||||
|
||||
where
|
||||
|
||||
$$
|
||||
I _ {1} ^ {c r} = \mathbf {I}: \mathbf {C} ^ {c r},
|
||||
$$
|
||||
|
||||
and
|
||||
|
||||
I is the identity tensor, $\mathbf{C}^{cr}$ is the right Cauchy-Green creep strain tensor, $\dot{\bar{\varepsilon}}^{cr}$ is the equivalent creep strain rate, $\bar{\varepsilon}^{cr}$ is the equivalent creep strain, $\bar{I}_1$ is the first invariant of $\bar{\mathbf{B}}$ , $\bar{I}_2$ is the second invariant of $\bar{\mathbf{B}}$ , $J$ is the determinant of the deformation gradient, $\mathbf{F}$ , $p$ is the Kirchhoff pressure,
|
||||
|
||||
<!-- source-page: 474 -->
|
||||
|
||||
$q$ is the equivalent deviatoric Kirchhoff stress, $t$ is the time, $\theta$ is the temperature, and $FV$ are field variables.
|
||||
|
||||
The left Cauchy-Green strain tensor, $\bar { \mathbf { B } } ,$ is defined as
|
||||
|
||||
$$
|
||||
\bar {\mathbf {B}} = \bar {\mathbf {F}} \bar {\mathbf {F}} ^ {T},
|
||||
$$
|
||||
|
||||
where is the deformation gradient with volume change eliminated, which is computed using
|
||||
|
||||
$$
|
||||
\bar {\mathbf {F}} = J ^ {- \frac {1}{3}} \mathbf {F}.
|
||||
$$
|
||||
|
||||
The user subroutine must define the increment of creep equivalent strain, $\Delta \bar { \varepsilon } ^ { c r }$ , as a function of the time increment, $\Delta t ,$ and the variables used in the definition of $\cdot g ^ { c r }$ , as well as the derivatives of the equivalent creep strain increment with respect to those variables. If any solution-dependent state variables are included in the definition of $\boldsymbol { g } ^ { c r }$ , they must also be integrated forward in time in this user subroutine.
|
||||
|
||||
User subroutine interface ```txt
|
||||
subroutine vucreepnetwork (
|
||||
C Read only -
|
||||
* nblock, networkid, nstatev, nfieldv,
|
||||
* nprops, nDg, stepTime, totalTime, dt,
|
||||
* jElem, kIntPt, kLayer, kSecPt, cmname,
|
||||
* props, coordMp, tempOld, fieldOld,
|
||||
* stateOld, tempNew, fieldNew,
|
||||
* nIarray, i_array, nRarray, r_array,
|
||||
* q, p, eqcs, TrCc,
|
||||
C Write only -
|
||||
* dg, stateNew )
|
||||
C
|
||||
include 'vaba_param.inc'
|
||||
C
|
||||
C indices for equivalent creep strain and its derivatives
|
||||
parameter( i_deqcs = 1,
|
||||
* i_DdeqcsDq = 2,
|
||||
* i_DdeqcsDeqcs = 3,
|
||||
* i_DdeqcsDilc = 4 )
|
||||
C
|
||||
C indices for strain invariants
|
||||
parameter( i_I1 = 1,
|
||||
* i_I2 = 2,
|
||||
```
|
||||
|
||||
<!-- source-page: 475 -->
|
||||
|
||||
```txt
|
||||
* i_J = 3)
|
||||
C
|
||||
dimension props(nprops),
|
||||
* tempOld(nblock),
|
||||
* fieldOld(nblock,nfieldv),
|
||||
* stateOld(nblock,nstatev),
|
||||
* tempNew(nblock),
|
||||
* fieldNew(nblock,nfieldv),
|
||||
* coordMp(nblock,*),
|
||||
* jElem(nblock),
|
||||
* i_array(nblock,nIarray),
|
||||
* r_array(nblock,nRarray),
|
||||
* q(nblock),
|
||||
* p(nblock),
|
||||
* eqcs(nblock),
|
||||
* TrCc(nblock),
|
||||
* stateNew(nblock,nstatev),
|
||||
* dg(nblock,nDg)
|
||||
|
||||
character*80 cmname
|
||||
C
|
||||
do 100 km = 1,nblock
|
||||
user coding
|
||||
100 continue
|
||||
|
||||
return
|
||||
end
|
||||
```
|
||||
Variables to be defined
|
||||
|
||||
dg (nblock, i_deqcs)
|
||||
Equivalent creep strain increment, $\Delta\bar{\varepsilon}^{cr}$ .
|
||||
|
||||
dg (nblock, i_DdeqcsDq)
|
||||
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial q$ .
|
||||
|
||||
dg (nblock, i_DdeqcsDeqcs)
|
||||
The derivative: $\partial\Delta\bar{\varepsilon}^{cr}/\partial\bar{\varepsilon}^{cr}$
|
||||
|
||||
dg(nblock,i_DdeqcsDilc)
|
||||
The first invariant, $I_1^{cr}$ , of the right Cauchy-Green creep strain tensor, $\mathbf{C}^{\mathrm{cr}}$ .
|
||||
|
||||
<!-- source-page: 476 -->
|
||||
|
||||
# Variable that can be updated
|
||||
|
||||
stateNew(nblock,nstatev)
|
||||
|
||||
Array containing the user-defined solution-dependent state variables at this point.
|
||||
|
||||
# Variables passed in for information
|
||||
|
||||
nblock
|
||||
|
||||
Number of material points to be processed in this call to user subroutine VUCREEPNETWORK.
|
||||
|
||||
networkid
|
||||
|
||||
Network identification number, which identifies the network for which creep is defined.
|
||||
|
||||
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.
|
||||
|
||||
nprops
|
||||
|
||||
User-specified number of user-defined material properties.
|
||||
|
||||
nDg
|
||||
|
||||
Size of array dg.
|
||||
|
||||
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.
|
||||
|
||||
jElem(nblock)
|
||||
|
||||
Array of element numbers.
|
||||
|
||||
kIntPt
|
||||
|
||||
Integration point number.
|
||||
|
||||
kLayer
|
||||
|
||||
Layer number (for composite shells).
|
||||
|
||||
kSecPt
|
||||
|
||||
Section point number within the current layer.
|
||||
|
||||
<!-- source-page: 477 -->
|
||||
|
||||
# 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.
|
||||
|
||||
# props(nprops)
|
||||
|
||||
User-supplied material properties.
|
||||
|
||||
# coordMp(nblock,\*)
|
||||
|
||||
Material point coordinates. It is the midplane material point for shell elements and the centroid for beam elements.
|
||||
|
||||
# tempOld(nblock)
|
||||
|
||||
Temperatures at the material points at the beginning of the increment.
|
||||
|
||||
# fieldOld(nblock,nfieldv)
|
||||
|
||||
Values of the user-defined field variables at the material points at the beginning of the increment.
|
||||
|
||||
# stateOld(nblock,nstatev)
|
||||
|
||||
State variables at the material points at the beginning of the increment.
|
||||
|
||||
# tempNew(nblock)
|
||||
|
||||
Temperatures at the material points at the end of the increment.
|
||||
|
||||
# fieldNew(nblock)
|
||||
|
||||
Values of the user-defined field variables at the material points at the end of the increment.
|
||||
|
||||
# nIarray
|
||||
|
||||
Size of array i\_array.
|
||||
|
||||
# i\_array(nblock,nIarray)
|
||||
|
||||
Array containing integer arguments. Currently it is not used.
|
||||
|
||||
# nRarray
|
||||
|
||||
Size of array r\_array.
|
||||
|
||||
# r\_array(nblock,i\_I1)
|
||||
|
||||
The first invariant, , of the left Cauchy-Green strain tensor, .
|
||||
|
||||
# r\_array(nblock,i\_I2)
|
||||
|
||||
The second invariant, , of the left Cauchy-Green strain tensor, .
|
||||
|
||||
# r\_array(nblock,i\_J)
|
||||
|
||||
The determinant of the deformation gradient, .
|
||||
|
||||
<!-- source-page: 478 -->
|
||||
|
||||
q(nblock)
|
||||
|
||||
Array containing equivalent deviatoric Kirchhoff stresses.
|
||||
|
||||
p(nblock)
|
||||
|
||||
Array containing Kirchhoff pressures.
|
||||
|
||||
eqcs(nblock)
|
||||
|
||||
Array containing equivalent creep strains.
|
||||
|
||||
TrCc(nblock)
|
||||
|
||||
Array containing the first invariants, , of the right Cauchy-Green creep strain tensor, .
|
||||
|
||||
# Example: Power-law strain hardening model
|
||||
|
||||
As an example of the coding of user subroutine VUCREEPNETWORK, consider the power-law strain hardening model. In this case the equivalent creep strain rate is expressed as
|
||||
|
||||
$$
|
||||
\dot {\bar {\varepsilon}} ^ {c r} = \left(A q ^ {n} [ (m + 1) \bar {\varepsilon} ^ {c r} ] ^ {m}\right) ^ {\frac {1}{m + 1}},
|
||||
$$
|
||||
|
||||
where
|
||||
|
||||
$\bar{\varepsilon}^{cr}$ is the equivalent creep strain, $q$ is the equivalent deviatoric Kirchhoff stress, and $A, m,$ and $n$ are material parameters.
|
||||
|
||||
The user subroutine would be coded as follows:
|
||||
```txt
|
||||
subroutine vucreepnetwork (
|
||||
C Read only -
|
||||
* nblock, networkid, nstatev, nfieldv,
|
||||
* nprops, nDg, stepTime, totalTime, dt,
|
||||
* jElem, kIntPt, kLayer, kSecPt, cmname,
|
||||
* props, coordMp, tempOld, fieldOld,
|
||||
* stateOld, tempNew, fieldNew,
|
||||
* nIarray, i_array, nRarray, r_array,
|
||||
* q, p, eqcs, TrCc,
|
||||
C Write only -
|
||||
* dg, stateNew )
|
||||
C
|
||||
include 'vaba_param.inc'
|
||||
C
|
||||
parameter ( one = 1.d0, half = 0.5d0 )
|
||||
parameter ( eqcsSmall = 1.d-8 )
|
||||
parameter ( rMinVal = 1.d-12 )
|
||||
```
|
||||
|
||||
<!-- source-page: 479 -->
|
||||
|
||||
C
|
||||
|
||||
```txt
|
||||
parameter( i_deqcs = 1,
|
||||
* i_DdeqcsDq = 2,
|
||||
* i_DdeqcsDeqcs = 3,
|
||||
* i_DdeqcsDilc = 4 )
|
||||
```
|
||||
|
||||
C
|
||||
|
||||
```javascript
|
||||
dimension props(nprops),
|
||||
* tempOld(nblock),
|
||||
* fieldOld(nblock,nfieldv),
|
||||
* stateOld(nblock,nstatev),
|
||||
* tempNew(nblock),
|
||||
* fieldNew(nblock,nfieldv),
|
||||
* coordMp(nblock,*),
|
||||
* jElem(nblock),
|
||||
* i_array(nblock,nIarray),
|
||||
* r_array(nblock,nRarray),
|
||||
* q(nblock),
|
||||
* p(nblock),
|
||||
* eqcs(nblock),
|
||||
* TrCc(nblock),
|
||||
* stateNew(nblock,nstatev),
|
||||
* dg(nblock,nDg)
|
||||
```
|
||||
|
||||
C
|
||||
|
||||
```txt
|
||||
character*80 cmname
|
||||
```
|
||||
|
||||
C
|
||||
|
||||
C Read properties
|
||||
|
||||
C
|
||||
|
||||
```txt
|
||||
rA = props(1)
|
||||
rN = props(2)
|
||||
rM = props(3)
|
||||
```
|
||||
|
||||
C
|
||||
|
||||
C Update equivalent creep strain and its derivatives
|
||||
|
||||
C
|
||||
|
||||
```txt
|
||||
do k = 1, nblock
|
||||
om1 = one / (one + rM)
|
||||
test = half - sign( half, q(k) - rMinVal )
|
||||
qInv = (one - test) / (q(k) + test)
|
||||
eqcs_t = eqcs(k)
|
||||
if (eqcs_t .le. eqcsSmall .and. q(k).gt.rMinVal ) then
|
||||
```
|
||||
|
||||
C Initial guess based on constant creep strain rate during increment eqcs\_t = dt\*(exp(log(rA)+rN\*log(q(k)))\* \* ((one+rM)\*dt)\*\*rM)
|
||||
|
||||
<!-- source-page: 480 -->
|
||||
|
||||
```txt
|
||||
end if
|
||||
test2 = half - sign( half, eqcs_t - rMinVal )
|
||||
eqcsInv = ( one - test2 ) / ( eqcs_t + test2 )
|
||||
g = dt*(exp(log(rA)+rN*log(q(k)))*
|
||||
* ((one+rM)*(test2+eqcs_t))**rM)**om1
|
||||
dg(k,i_deqcs) = g
|
||||
dg(k,i_DdeqcsDq) = qInv * rN * om1 * g
|
||||
dg(k,i_DdeqcsDeqcs) = eqcsInv * rM * om1 * g
|
||||
end do
|
||||
return
|
||||
end
|
||||
```
|
||||
Reference in New Issue
Block a user