Files
2026-08-18 23:24:35 +09:00

353 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- source-page: 561 -->
# jElem
Array of element numbers.
# kIntPt
Integration point number.
# kLayer
Layer number (for composite shells).
# kSecPt
Section point number within the current layer.
# 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.
# cmname
User-specified 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, you should not use “ABQ\_” as the leading string for cmname.
# coordMp(nblock,\*)
Material point coordinates. It is the midplane material point for shell elements and the centroid for beam elements.
# 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), direct(k,3,1) give the (1, 2, 3) components of the first material direction; direct(k,1,2), direct(k,2,2), direct(k,3,2) give the second material direction, etc. For shell and membrane elements, the first two directions are in the plane of the element and the third direction is the normal. This information is not available for beam elements.
# 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
<!-- source-page: 562 -->
counterclockwise rotation around the normal vector that defines the orientation. If no orientation is used, T is an identity matrix. Orientation is not available for beam elements.
charLength(nblock)
Characteristic element length, which is either the default value based on the geometric mean or the user-defined characteristic element length defined in user subroutine VUCHARLENGTH. The default value is a typical length of a line across an element for a first-order element; it is half of the same typical length for a second-order element. For beams and trusses the default value is a characteristic length along the element axis. For membranes and shells it is a characteristic length in the reference surface. For axisymmetric elements it is a characteristic length in the rz plane only. For cohesive elements it is equal to the constitutive thickness.
props(nprops)
User-supplied material properties.
stateOld (nblock, nstatev)
State variables at each material point at the beginning of the increment.
Example: Damaged elasticity model
Included below is an example of user subroutine VUSDFLD. In this example a truss element is loaded in tension. A damaged elasticity model is introduced: the modulus decreases as a function of the maximum tensile strain that occurred during the loading history. The maximum tensile strain is stored as a solution-dependent state variable (see “Defining solution-dependent field variables” in “Predefined fields,” Section 34.6.1 of the Abaqus Analysis Users Guide).
Input file
```csv
*HEADING
Damaged elasticity model with user subroutine vusdfld
*ELEMENT, TYPE=T2D2, ELSET=ONE
1, 1, 2
*NODE, NSET=NALL
1, 0., 0.
2, 10., 0.
*SOLID SECTION, ELSET=ONE, MATERIAL=ELASTIC
1.
*MATERIAL, NAME=ELASTIC
*ELASTIC, DEPENDENCIES=1
** Table of modulus values decreasing as a function
** of field variable 1.
2000., 0.3, 0., 0.00
1500., 0.3, 0., 0.01
1200., 0.3, 0., 0.02
1000., 0.3, 0., 0.04
```
<!-- source-page: 563 -->
```csv
* DENSITY
1.0e-6
* USER DEFINED FIELD
* DEPVAR
1
1, EPSMAX, "Maximum strain value"
* BOUNDARY
1, 1, 2
2, 2
* AMPLITUDE, NAME=LOAD1
0.0, 0.0, 1.0, 1.0
* AMPLITUDE, NAME=LOAD2
0.0, 0.0, 2.0, 1.0
* AMPLITUDE, NAME=UNLOAD
0.0, 1.0, 1.0, 0.0
* STEP, NLGEOM=NO
* DYNAMIC, EXPLICIT
, 1.0
* CLOAD, AMPLITUDE=LOAD1
2, 1, 20.
* OUTPUT, FIELD, VARIABLE=PRESELECT
* OUTPUT, HISTORY, VARIABLE=PRESELECT
* ELEMENT OUTPUT, ELSET=ONE
S, E, SDV
* NODE OUTPUT, NSET=NALL
RF, CF, U
* END STEP
* STEP, NLGEOM=NO
* DYNAMIC, EXPLICIT
, 1.0
* CLOAD, AMPLITUDE=UNLOAD
2, 1, 20.
* END STEP
* STEP, NLGEOM=NO
* DYNAMIC, EXPLICIT
, 2.0
* CLOAD, AMPLITUDE=LOAD2
2, 1, 40.
* END STEP
```
<!-- source-page: 564 -->
User subroutine
```fortran
subroutine vusdfld(
c Read only -
* nblock, nstatev, nfieldv, nprops, ndir, nshr,
* jElem, kIntPt, kLayer, kSecPt,
* steTime, totalTime, dt, cmname,
* coordMp, direct, T, charLength, props,
* stateOld,
c Write only -
* stateNew, field )
c
include 'vaba_param.inc'
c
dimension jElem(nblock), coordMp(nblock,*),
* direct(nblock,3,3), T(nblock,3,3),
* charLength(nblock), props(nprops),
* stateOld(nblock,nstatev),
* stateNew(nblock,nstatev),
* field(nblock,nfieldv)
character*80 cmname
c
c Local arrays from vgetvrm are dimensioned to
c maximum block size (maxblk)
c
parameter( nrData=6 )
character*3 cData(maxblk*nrData)
dimension rData(maxblk*nrData), jData(maxblk*nrData)
c
jStatus = 1
call vgetvrm('LE', rData, jData, cData, jStatus )
c
if( jStatus .ne. 0 ) then
call xplb_abqerr(-2,'Utility routine VGETVRM '//
* 'failed to get variable.',0,zero,' ')
call xplb_exit
end if
c
call setField( nblock, nstatev, nfieldv, nrData,
* rData, stateOld, stateNew, field)
c
return
```
<!-- source-page: 565 -->
```prolog
end
subroutine setField( nblock, nstatev, nfieldv, nrData,
* strain, stateOld, stateNew, field )
include 'vaba_param.inc'
dimension stateOld(nblock, nstatev),
* stateNew(nblock, nstatev),
* field(nblock, nfieldv), strain(nblock, nrData)
do k = 1, nblock
Absolute value of current strain:
eps = abs( strain(k, 1) )
Maximum value of strain up to this point in time:
epsmax = stateOld(k, 1)
Use the maximum strain as a field variable
field(k, 1) = max( eps, epsmax )
Store the maximum strain as a solution dependent state
stateNew(k, 1) = field(k, 1)
end do
return
end
```
<!-- source-page: 566 -->
<!-- source-page: 567 -->
# 1.2.25 VUTRS: User subroutine to define a reduced time shift function for a viscoelastic material.
# Product: Abaqus/Explicit
# References
• “Time domain viscoelasticity,” Section 22.7.1 of the Abaqus Analysis Users Guide
• \*TRS
• \*VISCOELASTIC
• “Transient thermal loading of a viscoelastic slab,” Section 3.1.2 of the Abaqus Benchmarks Guide
# Overview
User subroutine VUTRS:
• can be used to define a temperature-time shift for a time domain viscoelastic analysis;
• will be called for all material points of elements for which a user-defined shift function is specified to define the time-temperature correspondence as part of the viscoelastic material definition;
• can use and update solution-dependent state variables; and
• can have incoming field variables redefined by user subroutine VUSDFLD.
# User subroutine interface
```txt
subroutine vuts(
c Read only variables -
1 nblock, nstatev, nfieldv, nprops,
2 timeTime, totalTime, dt,
3 cmname, props, density, coordMp,
4 tempOld, fieldOld, stateOld,
5 tempNew, fieldNew,
c Write only variables -
6 shift, stateNew )
c
include 'vaba_param.inc'
c
dimension props(nprops), density(nblock), coordMp(nblock,*),
1 tempOld(nblock), tempNew(nblock),
2 fieldOld(nblock, nfieldv), fieldNew(nblock, nfieldv),
3 stateOld(nblock, nstatev), stateNew(nblock, nstatev),
4 shift(nblock, 2)
```
<!-- source-page: 568 -->
```lua
c
character*80 cmname
c
do 100 k=1, nblock
user coding to define shift(k,1) and shift(k,2)
100 continue
c
return
end
```
# Variable to be defined
shift(nblock,2)
Array that defines the shift function, A ( ), at the material points. For material point k, shift(k,1) defines the shift function at the beginning of the increment, and shift(k,2) defines the shift function at the end of the increment. Abaqus/Explicit will apply an averaging scheme to these values that assumes that the natural logarithm of the shift function can be approximated by a linear function over the increment.
If either shift(k,1) or shift(k,2) is less than or equal to zero, no time shift will be applied.
# Variable that can be updated
stateNew(nblock,nstatev)
Array containing the solution-dependent state variables at the material points. This array will be passed in containing the values of these variables at the start of the increment unless they are updated in user subroutine VUSDFLD, in which case the updated values are passed in. If any of the solution-dependent state variables are being used in conjunction with the viscoelastic behavior, they must be updated in this subroutine to their values at the end of the increment.
# Variables passed in for information
nblock
Number of material points to be processed in this call to VUTRS.
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 Users Guide).
nfieldv
Number of user-defined external field variables.
nprops
User-specified number of user-defined material properties.
<!-- source-page: 569 -->
# 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.
# 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.
# density(nblock)
Current density at the material points in the midstep configuration. This value may be inaccurate in problems where the volumetric strain increment is very small. If an accurate value of the density is required in such cases, the analysis should be run in double precision. This value of the density is not affected by mass scaling.
# coordMp(nblock,\*)
Material point coordinates. It is the midplane material point for shell elements and the centroid for beam elements.
# tempOld(nblock)
Temperatures at each material point at the beginning of the increment.
# fieldOld(nblock,nfieldv)
Values of the user-defined field variables at each material point at the beginning of the increment.
# stateOld(nblock,nstatev)
State variables at each material point at the beginning of the increment.
# tempNew(nblock)
Temperatures at each material point at the end of the increment.
# fieldNew(nblock,nfieldv)
Values of the user-defined field variables at each material point at the end of the increment.
<!-- source-page: 570 -->