76
Writing a UMAT or VUMAT Lecture 7 L7.2 Agenda Overview Motivation Steps Required in Writing a UMAT or VUMAT UMAT Interface Example 1: UMAT for Isotropic Isothermal Elasticity Example 2: UMAT for Non-Isothermal Elasticity Example 3: UMAT for Neo-Hookean Hyperelasticity Example 4: UMAT for Kinematic Hardening Plasticity Example 5: UMAT for Isotropic Hardening Plasticity VUMAT Interface Writing User Subroutines with Abaqus Example 6: VUMAT for Isotropic Isothermal Elasticity Example 7: VUMAT for Neo-Hookean Hyperelasticity Example 8: VUMAT for Kinematic Hardening Plasticity Example 9: VUMAT for Isotropic Hardening Plasticity

Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

Writing a UMAT or VUMATLecture 7

L7.2

Agenda

• Overview• Motivation• Steps Required in Writing a UMAT or VUMAT• UMAT Interface• Example 1: UMAT for Isotropic Isothermal Elasticity• Example 2: UMAT for Non-Isothermal Elasticity• Example 3: UMAT for Neo-Hookean Hyperelasticity• Example 4: UMAT for Kinematic Hardening Plasticity• Example 5: UMAT for Isotropic Hardening Plasticity• VUMAT Interface

Writing User Subroutines with Abaqus

• Example 6: VUMAT for Isotropic Isothermal Elasticity• Example 7: VUMAT for Neo-Hookean Hyperelasticity• Example 8: VUMAT for Kinematic Hardening Plasticity• Example 9: VUMAT for Isotropic Hardening Plasticity

Page 2: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

OverviewOverview

L7.4

Overview

• Abaqus/Standard and Abaqus/Explicit have interfaces that allow the user to implement general constitutive equations.

• In Abaqus/Standard the user-defined material model is implemented i b tiin user subroutine UMAT.

• In Abaqus/Explicit the user-defined material model is implemented in user subroutine VUMAT.

• Use UMAT and VUMAT when none of the existing material models included in the Abaqus material library accurately represents the behavior of the material to be modeled.

Writing User Subroutines with Abaqus

Page 3: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.5

Overview

• These interfaces make it possible to define any (proprietary) constitutive model of arbitrary complexity.

• User-defined material models can be used with any Abaqus structural l t telement type.

• Multiple user materials can be implemented in a single UMAT or VUMATroutine and can be used together.

• In this lecture the implementation of material models in UMAT or VUMATwill be discussed and illustrated with a number of examples.

Writing User Subroutines with Abaqus

MotivationMotivation

Page 4: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.7

Motivation

• Proper testing of advanced constitutive models to simulate experimental results often requires complex finite element models.

• Advanced structural elements

• Complex loading conditions

• Thermomechanical loading

• Contact and friction conditions

• Static and dynamic analysis

Writing User Subroutines with Abaqus

L7.8

Motivation

• Special analysis problems occur if the constitutive model simulates material instabilities and localization phenomena.

• Special solution techniques are required for quasi-static analysis.

• Robust element formulations should be available.

• Explicit dynamic solution algorithms with robust contact algorithms are desired.

• In addition, robust features are required to present and visualize the results.

• Contour and path plots of state variables.

• X–Y plots

Writing User Subroutines with Abaqus

X Y plots.

• Tabulated results.

Page 5: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.9

Motivation

• The material model developer should be concerned only with the development of the material model and not the development and maintenance of the FE software.

D l t l t d t t i l d li• Developments unrelated to material modeling

• Porting problems with new systems

• Long-term program maintenance of user-developed code

Writing User Subroutines with Abaqus

L7.10

Motivation

• “Finite Element Modelling of the Damage Process in Ice,”R. F. McKenna, I. J. Jordaan, and J. Xiao, ABAQUS Users’ Conference Proceedings, 1990

Writing User Subroutines with Abaqus

Schematic cross-section of a level ice flow impacting a vertical structure

Calculated force exerted on the spherical indenter

Finite element discretization of the spherical indentation problem

Page 6: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.11

Motivation

• “The Numerical Simulation of Excavations in Deep Level Mining,” M. F. Snyman, G. P. Mitchell, and J. B. Martin, ABAQUS Users’ Conference Proceedings, 1991

Writing User Subroutines with Abaqus

Shear fracture mechanisms

L7.12

Motivation

• “Combined Micromechanical and Structural Finite Element Analysis of Laminated Composites,” R. M. HajAli, D. A. Pecknold, and M. F. Ahmad, ABAQUS Users’ Conference Proceedings, 1993

Effect of degrading shear modulus on the post-buckling response of a hydrostatically-loaded cylindrical shell with various layups

Writing User Subroutines with Abaqus

Integrated micromechanical/structural modeling

Normalized micromechanical failure criteria in a hydrostatically-loaded cylinder

Page 7: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.13

Motivation

• “Deformation Processing of Metal Powders: Cold and Hot Isostatic Pressing,” R. M. Govindarajan and N. Aravas, private communication, 1993

Writing User Subroutines with Abaqus

Schematic representation of the CIP specimen; the table shows the material properties

Deformed finite element mesh (solid lines) of the top 1 inch of the CIP specimen against the original mesh (broken lines); the powder region is shaded for clarity.

L7.14

Motivation

• “Macroscopic Shape Change and Evolution of Crystallographic Texture in Pre-textured FCC Metals,” S. R. Kalidindi and Anand, JMPS, vol. 42, pp. 459-490,1994.

Writing User Subroutines with Abaqus

Page 8: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

Steps Required in Writing a UMAT or VUMAT

L7.16

Steps Required in Writing a UMAT or VUMAT

• Proper definition of the constitutive equation, which requires one of the following:

• Explicit definition of stress (Cauchy stress for large-strain li ti )applications)

• Definition of the stress rate only (in corotational framework)

• Furthermore, it is likely to require:

• Definition of dependence on time, temperature, or field variables

• Definition of internal state variables, either explicitly or in rate form

Writing User Subroutines with Abaqus

Page 9: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.17

Steps Required in Writing a UMAT or VUMAT

• Transformation of the constitutive rate equation into an incremental equation using a suitable integration procedure:

• Forward Euler (explicit integration)

• Backward Euler (implicit integration)

• Midpoint method

Writing User Subroutines with Abaqus

L7.18

Steps Required in Writing a UMAT or VUMAT

• This is the hard part! Forward Euler (explicit) integration methods are simple but have a stability limit,

stabε εΔ < Δ ,where Δεstab is usually less than the elastic strain magnitude.

• For explicit integration the time increment must be controlled.

• For implicit or midpoint integration the algorithm is more complicated and often requires local iteration. However, there is usually no stability limit.

• An incremental expression for the internal state variables must also be obtained.

Writing User Subroutines with Abaqus

Page 10: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.19

Steps Required in Writing a UMAT or VUMAT

• Calculation of the (consistent) Jacobian (required for Abaqus/Standard UMAT only).

• For small-deformation problems (e.g., linear elasticity) or large-d f ti bl ith ll l h ( t ldeformation problems with small volume changes (e.g., metal plasticity), the consistent Jacobian is

where Δσ is the increment in (Cauchy) stress and Δε is the increment in strain. (In finite-strain problems, ε is an approximation to the logarithmic strain.)

• This matrix may be nonsymmetric as a result of the constitutive

∂Δ=

∂ΔC ,

σε

Writing User Subroutines with Abaqus

• This matrix may be nonsymmetric as a result of the constitutive equation or integration procedure.

• The Jacobian is often approximated such that a loss of quadratic convergence may occur.

L7.20

Steps Required in Writing a UMAT or VUMAT

• It is easily calculated for forward integration methods (usually the elasticity matrix).

• If large deformations with large volume changes are considered (e.g., d d t l ti it ) th t f f th i t t J bipressure-dependent plasticity), the exact form of the consistent Jacobian

should be used to ensure rapid convergence. Here, J is the determinant of the deformation gradient.

1 ( )JJ

∂Δ=

∂ΔC σ

ε

Writing User Subroutines with Abaqus

Page 11: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.21

Steps Required in Writing a UMAT or VUMAT

• Hyperelastic constitutive equations

• Total-form constitutive equations relating the Cauchy stress and the deformation gradient F are commonly used to model, for example, rubber elasticity.

• In this case, the consistent Jacobian is defined through

where J = | F |, C is the material Jacobian, δD is the virtual rate of deformation

( ) ( : )J Jδ δ δ δ= ⋅ ⋅ ,C D + W Wσ σ − σ

Writing User Subroutines with Abaqus

and δW is the virtual spin tensor

1( )symδ δ −= ⋅ ,D F F

1( )asymδ δ −= ⋅ .W F F

L7.22

Steps Required in Writing a UMAT or VUMAT

• Coding the UMAT or VUMAT:

• Follow FORTRAN or C conventions.

• Make sure that all variables are defined and initialized properly.p p y

• Use Abaqus utility routines as required.

• Assign enough storage space for state variables with the ∗DEPVAR option.

Writing User Subroutines with Abaqus

Page 12: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.23

Steps Required in Writing a UMAT or VUMAT

• Verifying the UMAT or VUMAT with a small (one element) input file.

Run tests with all displacements prescribed to verify the integration algorithm for stresses and state variables. Suggested tests include:

1

• Uniaxial

• Uniaxial in oblique direction

• Uniaxial with finite rotation

• Finite shear

Run similar tests with load prescribed to verify the accuracy of the Jacobian.

C t t lt ith l ti l l ti t d d Ab

2

3

Writing User Subroutines with Abaqus

Compare test results with analytical solutions or standard Abaqus material models, if possible. If the above verification is successful, apply to more complicated problems.

3

UMAT InterfaceUMAT Interface

Page 13: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.25

UMAT Interface

• These input lines act as the interface to a UMAT in which isotropic hardening plasticity is defined.*MATERIAL NAME ISOPLAS*MATERIAL, NAME=ISOPLAS*USER MATERIAL, CONSTANTS=8, UNSYMM30.E6, 0.3, 30.E3, 0., 40.E3, 0.1, 50.E3, 0.5*DEPVAR13*INITIAL CONDITIONS, TYPE=SOLUTION

Data line to specify initial solution-dependent variables

• The ∗USER MATERIAL option is used to input material constants for the UMAT.

Writing User Subroutines with Abaqus

• The unsymmetric equation solution technique will be used if the UNSYMM parameter is used.

L7.26

UMAT Interface

• The ∗DEPVAR option is used to allocate space at each material point for solution-dependent state variables (SDVs).

• The ∗INITIAL CONDITIONS, TYPE=SOLUTION option is used to i iti li SDV if th t ti t linitialize SDVs if they are starting at a nonzero value.

• As with all other user subroutines, coding for the UMAT is supplied in a separate file.

• The user subroutine must be invoked in a restarted analysis because user subroutines are not saved on the restart file.

Writing User Subroutines with Abaqus

Page 14: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.27

UMAT Interface

• Additional notes:• If a constant material Jacobian is used and no other nonlinearity is

present, reassembly can be avoided by invoking the quasi-Newton th d ith th i t limethod with the input line*SOLUTION TECHNIQUE, REFORM KERNEL=n

where n is the number of iterations done without reassembly.

• This does not offer advantages if other nonlinearities (such as contact changes) are present.

Writing User Subroutines with Abaqus

L7.28

UMAT Interface

• Solution-dependent state variables can be output with identifiers SDV1, SDV2, etc. Contour, path, and X–Y plots of SDVs can be plotted in Abaqus/Viewer.I l d l i l b ti i th l i If th• Include only a single UMAT subroutine in the analysis. If more than one material must be defined, test on the material name in UMAT and branch.

Writing User Subroutines with Abaqus

Page 15: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.29

UMAT Interface

•The UMAT subroutine header is shown below:subroutine umat(stress, statev, ddsdde, sse, spd, scd, rpl, 1 ddsddt,drplde, drpldt, stran, dstran, time, dtime, temp, dtemp, 2 predef, dpred, cmname, ndi, nshr, ntens, nstatv, props, nprops, p , p , , , , , , p p , p p ,3 coords, drot, pnewdt, celent, dfgrd0, dfgrd1, noel, npt, layer, 4 kspt, kstep, kinc)

cinclude 'aba_param.inc'

ccharacter*80 cmname

cdimension stress(ntens), statev(nstatv), ddsdde(ntens, ntens),1 ddsddt(ntens), drplde(ntens), stran(ntens), dstran(ntens),2 time(2) predef(1) dpred(1) props(nprops) coords(3)

Writing User Subroutines with Abaqus

2 time(2) predef(1), dpred(1), props(nprops), coords(3), 3 drot(3, 3), dfgrd0(3, 3), dfgrd1(3, 3)

The include statement sets the proper precision for floating point variables (REAL*8 on most machines).

The material name, CMNAME, is an 80-byte character variable.

L7.30

UMAT Interface

• UMAT variables• The following quantities are available in UMAT:

• Stress, strain, and SDVs at the start of the increment, ,

• Strain increment, rotation increment, and deformation gradient at the start and end of the increment

• Total and incremental values of time, temperature, and user-defined field variables

• Material constants, material point position, and a characteristic element length

• Element integration point and composite layer number (for shells

Writing User Subroutines with Abaqus

Element, integration point, and composite layer number (for shells and layered solids)

• Current step and increment numbers

Page 16: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.31

UMAT Interface

• The following quantities must be defined:

• Stress, SDVs, and material Jacobian

• The following variables may be defined:g y

• Strain energy, plastic dissipation, and “creep” dissipation

• Suggested new (reduced) time increment

• Complete descriptions of all parameters are provided in the UMAT section in Chapter 1 of the Abaqus User Subroutines Reference Manual.

Writing User Subroutines with Abaqus

L7.32

UMAT Interface

• The header is usually followed by dimensioning of local arrays. It is good practice to define constants via parameters and to include comments.

dimension eelas(6), eplas(6), flow(6)c

parameter(zero=0.d0, one=1.d0, two=2.d0, three=3.d0, six=6.d0,1 enumax=.4999d0, newton=10, toler=1.0d-6)

cc ----------------------------------------------------------------c umat for isotropic elasticity and isotropic mises plasticityc cannot be used for plane stressc ----------------------------------------------------------------c props(1) - ec props(2) - nu

Writing User Subroutines with Abaqus

p p ( )c props(3..) - yield and hardening datac calls uhard for curve of yield stress vs. plastic strainc ----------------------------------------------------------------

• The PARAMETER assignments yield accurate floating point constant definitions on any platform.

Page 17: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.33

UMAT Interface

• UMAT utilities• Utility routines SINV, SPRINC, SPRIND, and ROTSIG can be called to assist

in coding UMAT.

• SINV will return the first and second invariants of a tensor.

• SPRINC will return the principal values of a tensor.

• SPRIND will return the principal values and directions of a tensor.

• ROTSIG will rotate a tensor with an orientation matrix.

• XIT will terminate an analysis and close all files associated with the analysis properly.

F d t il di th t i d i ki th ll f

Writing User Subroutines with Abaqus

• For details regarding the arguments required in making these calls, refer to the UMAT section in Chapter 1 of the Abaqus User Subroutines Reference Manual and the examples in this lecture.

L7.34

UMAT Interface

• UMAT conventions• Stresses and strains are stored as vectors.

• For plane stress elements: σ11, σ22, σ12.For plane stress elements: σ11, σ22, σ12.

• For (generalized) plane strain and axisymmetric

elements: σ11, σ22, σ33, σ12.

• For three-dimensional elements: σ11, σ22, σ33, σ12 , σ13, σ23.

• The shear strain is stored as engineering shear strain; e.g.,

Th d f ti di t F i l t d th di i l12 122γ ε= .

Writing User Subroutines with Abaqus

• The deformation gradient, Fij, is always stored as a three-dimensional matrix.

Page 18: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.35

UMAT Interface

• UMAT formulation aspects• For geometrically nonlinear analysis the strain increment and

incremental rotation passed into the routine are based on the Hughes-Wi t f lWinget formulae.

• Linearized strain and rotation increments are calculated in the mid-increment configuration.

• Approximations are made, particularly if rotation increments are large: more accurate measures can be obtained from the deformation gradient if desired.

• The user must define the Cauchy stress: when this stress reappears during the next increment it will have been rotated with the incremental

Writing User Subroutines with Abaqus

during the next increment, it will have been rotated with the incremental rotation, DROT, passed into the subroutine.

• The stress tensor can be rotated back using the utility routine ROTSIG if this is not desired.

L7.36

UMAT Interface

• If the ∗ORIENTATION option is used in conjunction with UMAT, stress and strain components will be in the local system (again, this basis system rotates with the material in finite-strain analysis).T t t i bl t b t t d i th b ti ( )• Tensor state variables must be rotated in the subroutine (use ROTSIG).

• If UMAT is used with reduced-integration elements or shear flexible shell or beam elements, the hourglass stiffness and the transverse shear stiffness must be specified with the ∗HOURGLASS STIFFNESS and ∗TRANSVERSE SHEAR STIFFNESS options, respectively.

Writing User Subroutines with Abaqus

Page 19: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.37

UMAT Interface

• Usage hints• At the start of a new increment, the strain increment is extrapolated from

the previous increment.

• This extrapolation, which may sometimes cause trouble, is turned off with ∗STEP, EXTRAPOLATION=NO.

• If the strain increment is too large, the variable PNEWDT can be used to suggest a reduced time increment.

• The code will abandon the current time increment in favor of a time increment given by PNEWDT*DTIME.

• The characteristic element length can be used to define softening

Writing User Subroutines with Abaqus

behavior based on fracture energy concepts.

Example 1: UMAT for Isotropic Isothermal Elasticity

Page 20: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.39

UMAT for Isotropic Isothermal Elasticity

• Governing equations• Isothermal elasticity equation (with Lamé’s constants):

or in a Jaumann (corotational) rate form:

• The Jaumann rate equation is integrated in a corotational framework:

2ij ij kk ijσ λδ ε με= + ,

2Jij ij kk ijσ λδ ε με= + .& &&

2J λδΔ Δ Δ

Writing User Subroutines with Abaqus

• The appropriate coding is shown on the following pages.

2Jij ij kk ijσ λδ ε μ εΔ = Δ + Δ .

L7.40

UMAT for Isotropic Isothermal Elasticity

• Coding for isotropic isothermal elasticity

c ----------------------------------------------------------------c umat for isotropic elasticityc cannot be used for plane stressc ----------------------------------------------------------------c props(1) - ec props(2) - nuc ----------------------------------------------------------------c

if (ndi.ne.3) thenwrite (7, *) ’This umat may only be used for elements

1 with three direct stress components’call xit

endifcc elastic properties

Writing User Subroutines with Abaqus

c elastic propertiesemod=props(1)enu=props(2)ebulk3=emod/(one-two*enu)eg2=emod/(one+enu)eg=eg2/twoeg3=three*egelam=(ebulk3-eg2)/three

Page 21: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.41

UMAT for Isotropic Isothermal Elasticity

cc elastic stiffnessc

do k1=1, ndido k2=1, ndi

ddsdde(k2 k1)=elamddsdde(k2, k1)=elamend doddsdde(k1, k1)=eg2+elam

end dodo k1=ndi+1, ntens

ddsdde(k1 ,k1)=egend do

cc calculate stressc

do k1=1, ntensdo k2=1, ntens

stress(k2)=stress(k2)+ddsdde(k2, k1)*dstran(k1)

Writing User Subroutines with Abaqus

end doend do

creturnend

L7.42

UMAT for Isotropic Isothermal Elasticity

• Remarks• This very simple UMAT yields exactly the same results as the Abaqus

∗ELASTIC option.

• This is true even for large-strain calculations: all necessary large-strain contributions are generated by Abaqus.

• The routine can be used with and without the ∗ORIENTATION option.

• It is usually straightforward to write a single routine that handles (generalized) plane strain, axisymmetric, and three-dimensional geometries.

• Generally, plane stress must be treated as a separate case

Writing User Subroutines with Abaqus

because the stiffness coefficients are different.

• The routine is written in incremental form as a preparation for subsequent elastic-plastic examples.

Page 22: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.43

UMAT for Isotropic Isothermal Elasticity

• Even for linear analysis UMAT is called twice for the first iteration of each increment: once for assembly and once for recovery.

• Subsequently, it is called once per iteration: assembly and recovery bi dare combined.

• A check is performed on the number of direct stress components, and the analysis is terminated by calling the subroutine XIT.

• A message is written to the message file (unit=7).

Writing User Subroutines with Abaqus

Example 2: UMAT for Non-Isothermal Elasticity

Page 23: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.45

UMAT for Non-Isothermal Elasticity

• Governing equations• Non-isothermal elasticity equation:

or in a Jaumann (corotational) rate form:

• The Jaumann rate equation is integrated in a corotational framework:

( ) 2 ( )el el elij ij kk ij ij ij ijT T Tσ λ δ ε μ ε ε ε α δ= + = −, ,

2 2J el el el el elij ij kk ij ij kk ij ij ij ijTσ λδ ε με λδ ε με ε ε α δ= + + + = −, .& && & & && &

J el el el el el

Writing User Subroutines with Abaqus

• The appropriate coding is shown on the following pages.

2 2J el el el el elij ij kk ij ij kk ij ij ij ijTσ λδ ε μ ε λδ ε με ε ε α δΔ = Δ + Δ + Δ + Δ Δ = Δ − Δ, .

L7.46

UMAT for Non-Isothermal Elasticity

• Coding for non-isothermal elasticity

c local arraysc ----------------------------------------------------------------c eelas - elastic strainsc etherm - thermal strainsc dtherm - incremental thermal strainsc deldse - change in stiffness due to temperature changec ----------------------------------------------------------------

dimension eelas(6), etherm(6), dtherm(6), deldse(6,6)c

parameter(zero=0.d0, one=1.d0, two=2.d0, three=3.d0, six=6.d0)c ----------------------------------------------------------------c umat for isotropic thermo-elasticity with linearly varyingc moduli - cannot be used for plane stressc ----------------------------------------------------------------c props(1) - e(t0)

Writing User Subroutines with Abaqus

c props(1) - e(t0)c props(2) - nu(t0)c props(3) - t0c props(4) - e(t1)c props(5) - nu(t1)c props(6) - t1c props(7) - alphac props(8) - t_initial

Page 24: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.47

UMAT for Non-Isothermal Elasticity

c elastic properties at start of incrementc

fac1=(temp-props(3))/(props(6)-props(3))if (fac1 .lt. zero) fac1=zeroif (fac1 .gt. one) fac1=onefac0=one-fac1

01

1 0

0 1

T TfT Tf

−=

≤ ≤fac0=one fac1emod=fac0*props(1)+fac1*props(4)enu=fac0*props(2)+fac1*props(5)ebulk3=emod/(one-two*enu)eg20=emod/(one+enu)eg0=eg20/twoelam0=(ebulk3-eg20)/three

cc elastic properties at end of incrementc

fac1=(temp+dtemp-props(3))/(props(6)-props(3))if (fac1 .lt. zero) fac1=zeroif (fac1 .gt. one) fac1=one

1

0 1

0 0 1 1

0 11

( ) ( ) ( ).

ff fE T f E T f E Tetc

≤ ≤= −

= +

Writing User Subroutines with Abaqus

fac0=one-fac1emod=fac0*props(1)+fac1*props(4)enu=fac0*props(2)+fac1*props(5)ebulk3=emod/(one-two*enu)eg2=emod/(one+enu)eg=eg2/twoelam=(ebulk3-eg2)/three

L7.48

UMAT for Non-Isothermal Elasticity

do k1=1,ntensdo k2=1,ntens

deldse(k2,k1)=zeroend do

end doccc elastic stiffness at end of increment and stiffness change c

do k1=1,ndido k2=1,ndi

ddsdde(k2,k1)=elamdeldse(k2,k1)=elam-elam0

end doddsdde(k1,k1)=eg2+elamdeldse(k1,k1)=eg2+elam-eg20-elam0

end dodo k1=ndi+1,ntens

ddsdde(k1,k1)=eg

λΔλ

2μ + λ2Δμ + Δλ

μ

Writing User Subroutines with Abaqus

deldse(k1,k1)=eg-eg0end do

cc calculate thermal expansionc

do k1=1,ndietherm(k1)=props(7)*(temp-props(8))dtherm(k1)=props(7)*dtemp

end do

μΔμ

εth; no thermal strain at initial temperatureΔεth

Page 25: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.49

UMAT for Non-Isothermal Elasticity

do k1=ndi+1,ntensetherm(k1)=zerodtherm(k1)=zero

end docc calculate stress elastic strain and thermal strainc calculate stress, elastic strain and thermal strainc

do k1=1, ntensdo k2=1, ntens

stress(k2)=stress(k2)+ddsdde(k2,k1)*(dstran(k1)-dtherm(k1))1 +deldse(k2,k1)*( stran(k1)-etherm(k1))

end doetherm(k1)=etherm(k1)+dtherm(k1)eelas(k1)=stran(k1)+dstran(k1)-etherm(k1)

end docc store elastic and thermal strains in state variable arrayc

Δσ

εth at end of increment

εel at end of increment

Writing User Subroutines with Abaqus

do k1=1, ntensstatev(k1)=eelas(k1)statev(k1+ntens)=etherm(k1)

end doreturnend

L7.50

UMAT for Non-Isothermal Elasticity

• Remarks• This UMAT yields exactly the same results as the ∗ELASTIC option with

temperature dependence.

• The routine is written in incremental form, which allows generalization to more complex temperature dependence.

Writing User Subroutines with Abaqus

Page 26: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

Example 3: UMAT for Neo-Hookean Hyperelasticity

L7.52

UMAT for Neo-Hookean Hyperelasticity

• Governing equations• The ∗ELASTIC option does not work well for finite elastic strains

because a proper finite-strain energy function is not defined.

• Hence, we define a proper strain energy density function:

• Here I1, I2, and J are the three strain invariants, expressed in terms of the left Cauchy-Green tensor, B:

21 2 10 1

1

1( , , ) ( 3) ( 1)U U I I J C I JD

= = − + − .

21( ) ( ) d t( )TI t I I t J( )B B B B F F F

Writing User Subroutines with Abaqus

21 2 1( ) ( ) det( )

2TI tr I I tr J= = − ⋅ = ⋅ =, , .( ) ,B B B B F F F

Page 27: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.53

UMAT for Neo-Hookean Hyperelasticity

• In actuality, we use the deviatoric invariants and (see Section 4.6.1 of the Abaqus Theory Manual for more information).

• The constitutive equation can be written directly in terms of the f

1I 2I

deformation gradient:

• We define the virtual rate of deformation as

2 310

1

2 1 2 ( 1)3ij ij ij kk ij ij ijC B B J B B J

J Dσ δ δ⎛ ⎞= − + − =⎜ ⎟

⎝ ⎠, .

1 11 ( )2ij im mj mi jmD F F F Fδ δ δ− −≡ + .

Writing User Subroutines with Abaqus

• The Kirchhoff stress is defined through

2

ij ijJτ σ= .

L7.54

UMAT for Neo-Hookean Hyperelasticity

• The material Jacobian derives from the variation in Kirchhoff stress:

ij ik kj ik kj ijkl klW W JC Dδτ δ τ τ δ δ− + = ,

where Cijkl are the components of the Jacobian. Using the Neo-Hookean model,

101

1 ( )2 22 (2 1)

2 2 23 3 9

ik jl ik jl il jk il jk

ijkl ij kl

ij kl ij kl ij kl mm

B B B BC C J

J DB B B

δ δ δ δδ δ

δ δ δ δ

⎛ ⎞+ + +⎜ ⎟= + −⎜ ⎟

⎜ ⎟− − +⎜ ⎟⎝ ⎠

.

Writing User Subroutines with Abaqus

• The expression is fairly complex, but it is straightforward to implement.

• For details of the derivation see Section 4.6.1 of the Abaqus Theory Manual.

• The appropriate coding is shown on the following pages.

Page 28: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.55

UMAT for Neo-Hookean Hyperelasticity

• Coding for neo-Hookean hyperelasticity

c local arraysc ----------------------------------------------------------------c eelas - logarithmic elastic strainsc eelasp - principal elastic strainsc bbar - deviatoric right cauchy-green tensorc bbarp - principal values of bbarc bbarn - principal direction of bbar (and eelas)c distgr - deviatoric deformation gradient (distortion tensor)c ----------------------------------------------------------------c

dimension eelas(6), eelasp(3), bbar(6), bbarp(3), bbarn(3, 3),1 distgr(3,3)

cparameter(zero=0.d0, one=1.d0, two=2.d0, three=3.d0, four=4.d0)parameter(small=1 d-6)

Writing User Subroutines with Abaqus

parameter(small=1.d-6)cc ----------------------------------------------------------------c umat for neo-hookean hyperelasticityc cannot be used for plane stressc ----------------------------------------------------------------c props(1) - c10c props(2) - d1

L7.56

UMAT for Neo-Hookean Hyperelasticity

c ----------------------------------------------------------------cc elastic propertiesc

c10=props(1)d1 =props(2)d1 =props(2)

penalty=small/c10if(d1.lt.penalty) d1=penalty

cc jacobian and distortion tensorc

det=dfgrd1(1, 1)*dfgrd1(2, 2)*dfgrd1(3, 3)1 -dfgrd1(1, 2)*dfgrd1(2, 1)*dfgrd1(3, 3)if(nshr.eq.3) then

det=det+dfgrd1(1, 2)*dfgrd1(2, 3)*dfgrd1(3, 1)1 +dfgrd1(1, 3)*dfgrd1(3, 2)*dfgrd1(2, 1)2 -dfgrd1(1, 3)*dfgrd1(3, 1)*dfgrd1(2, 2)

J

Penalty value for D1 to model incompressibility

Writing User Subroutines with Abaqus

3 -dfgrd1(2, 3)*dfgrd1(3, 2)*dfgrd1(1, 1)end ifscale=det**(-one/three)do k1=1, 3

do k2=1, 3distgr(k2, k1)=scale*dfgrd1(k2, k1)

end doend do

1/3J −=F F

Page 29: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.57

UMAT for Neo-Hookean Hyperelasticity

c calculate deviatoric left cauchy-green deformation tensorc

bbar(1)=distgr(1, 1)**2+distgr(1, 2)**2+distgr(1, 3)**2bbar(2)=distgr(2, 1)**2+distgr(2, 2)**2+distgr(2, 3)**2bbar(3)=distgr(3 3)**2+distgr(3 1)**2+distgr(3 2)**2bbar(3)=distgr(3, 3) 2+distgr(3, 1) 2+distgr(3, 2) 2bbar(4)=distgr(1, 1)*distgr(2, 1)+distgr(1, 2)*distgr(2, 2)

1 +distgr(1, 3)*distgr(2, 3)if(nshr.eq.3) then

bbar(5)=distgr(1, 1)*distgr(3, 1)+distgr(1, 2)*distgr(3, 2)1 +distgr(1, 3)*distgr(3, 3)

bbar(6)=distgr(2, 1)*distgr(3, 1)+distgr(2, 2)*distgr(3, 2)1 +distgr(2, 3)*distgr(3, 3)end if

cc calculate the stressc

trbbar=(bbar(1)+bbar(2)+bbar(3))/three

= ⋅ TB F F

1 tr( )3

B

Writing User Subroutines with Abaqus

eg=two*c10/detek=two/d1*(two*det-one)pr=two/d1*(det-one)do k1=1,ndi

stress(k1)=eg*(bbar(k1)-trbbar)+prend do

( )3

102 CJ

L7.58

UMAT for Neo-Hookean Hyperelasticity

do k1=ndi+1,ndi+nshrstress(k1)=eg*bbar(k1)

end doc calculate the stiffnessc

eg23=eg*two/threeeg23=eg two/threeddsdde(1, 1)= eg23*(bbar(1)+trbbar)+ekddsdde(2, 2)= eg23*(bbar(2)+trbbar)+ekddsdde(3, 3)= eg23*(bbar(3)+trbbar)+ekddsdde(1, 2)=-eg23*(bbar(1)+bbar(2)-trbbar)+ekddsdde(1, 3)=-eg23*(bbar(1)+bbar(3)-trbbar)+ekddsdde(2, 3)=-eg23*(bbar(2)+bbar(3)-trbbar)+ekddsdde(1, 4)= eg23*bbar(4)/twoddsdde(2, 4)= eg23*bbar(4)/twoddsdde(3, 4)=-eg23*bbar(4)ddsdde(4, 4)= eg*(bbar(1)+bbar(2))/twoif(nshr.eq.3) then

ddsdde(1, 5)= eg23*bbar(5)/two

Writing User Subroutines with Abaqus

ddsdde(2, 5)=-eg23*bbar(5)ddsdde(3, 5)= eg23*bbar(5)/twoddsdde(1, 6)=-eg23*bbar(6)ddsdde(2, 6)= eg23*bbar(6)/twoddsdde(3, 6)= eg23*bbar(6)/twoddsdde(5, 5)= eg*(bbar(1)+bbar(3))/twoddsdde(6, 6)= eg*(bbar(2)+bbar(3))/two

Page 30: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.59

UMAT for Neo-Hookean Hyperelasticity

ddsdde(4,5)= eg*bbar(6)/twoddsdde(4,6)= eg*bbar(5)/twoddsdde(5,6)= eg*bbar(4)/two

end ifdo k1=1, ntens

do k2=1 k1-1do k2=1, k1 1ddsdde(k1, k2)=ddsdde(k2, k1)

end doend do

cc calculate logarithmic elastic strains (optional)c

call sprind(bbar, bbarp, bbarn, 1, ndi, nshr)eelasp(1)=log(sqrt(bbarp(1))/scale)eelasp(2)=log(sqrt(bbarp(2))/scale)eelasp(3)=log(sqrt(bbarp(3))/scale)eelas(1)=eelasp(1)*bbarn(1,1)**2+eelasp(2)*bbarn(2, 1)**2

1 +eelasp(3)*bbarn(3, 1)**2

Call to SPRIND

Writing User Subroutines with Abaqus

eelas(2)=eelasp(1)*bbarn(1, 2)**2+eelasp(2)*bbarn(2, 2)**21 +eelasp(3)*bbarn(3, 2)**2eelas(3)=eelasp(1)*bbarn(1, 3)**2+eelasp(2)*bbarn(2, 3)**2

1 +eelasp(3)*bbarn(3, 3)**2

L7.60

UMAT for Neo-Hookean Hyperelasticity

eelas(4)=two*(eelasp(1)*bbarn(1, 1)*bbarn(1, 2)1 +eelasp(2)*bbarn(2, 1)*bbarn(2, 2)2 +eelasp(3)*bbarn(3, 1)*bbarn(3, 2))if(nshr eq 3) then

Engineering strain

if(nshr.eq.3) theneelas(5)=two*(eelasp(1)*bbarn(1, 1)*bbarn(1, 3)

1 +eelasp(2)*bbarn(2, 1)*bbarn(2, 3)2 +eelasp(3)*bbarn(3, 1)*bbarn(3, 3))

eelas(6)=two*(eelasp(1)*bbarn(1, 2)*bbarn(1, 3)1 +eelasp(2)*bbarn(2, 2)*bbarn(2, 3)2 +eelasp(3)*bbarn(3, 2)*bbarn(3, 3))end if

cc store elastic strains in state variable arrayc

do k1=1, ntensstatev(k1)=eelas(k1) For output purposes only

Writing User Subroutines with Abaqus

end doc

returnend

p p p y

Page 31: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.61

UMAT for Neo-Hookean Hyperelasticity

• Remarks• This UMAT yields exactly the same results as the ∗HYPERELASTIC

option with N = 1 and C01 = 0.

• Note the use of the utility SPRIND.CALL SPRIND(BBAR, BBARP, BBARN, 1, NDI, NSHR)

• Tensor BBAR consists of NDI direct components and NSHR shear components.

• SPRIND returns the principal values and direction cosines of the principal directions of BBAR in BBARP and BBARN, respectively.

A l f 1 i d th f th t t i di t th t BBAR

Writing User Subroutines with Abaqus

• A value of 1 is used as the fourth argument to indicate that BBAR contains tensor shear components. (A value of 2 is used for engineering shear components.)

• Hyperelastic materials are often implemented more easily in user subroutine UHYPER.

L7.62

UMAT for Neo-Hookean Hyperelasticity

• Modeling incompressibility with a UMAT• This UMAT can also be used to simulate approximately incompressible

response in rubber materials.

• Incompressibility is enforced using a penalty method.

• A finite bulk modulus K is required.

• K must be chosen large enough to model incompressibility accurately but small enough to avoid loss of precision due to ill-conditioning.

• As a general guideline, choose K to be 104 −106 orders of magnitude greater than the shear modulus μ

Writing User Subroutines with Abaqus

magnitude greater than the shear modulus μ.

• It is strongly recommended that you use hybrid elements when modeling incompressibility with a UMAT.

Page 32: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.63

UMAT for Neo-Hookean Hyperelasticity

• For incompressible pressure-sensitive materials, the element choice is particularly important when using a UMAT.

• For these materials, the deviatoric response is affected by the tpressure stress.

• Thus, accurate pressure values are very important.

• Volumetric locking, however, will adversely affect the pressure.

• First-order quad and brick elements are recommended because they use the technique to alleviate volumetric locking.

• The deformation gradient that is passed into the UMAT includes the effects of this technique (uniform volumetric response)

β

Writing User Subroutines with Abaqus

• First-order wedge elements should be avoided.

• For these elements, the technique is not applied.

• Degenerated bricks should be used instead, if a brick-dominated mesh requires filling in with wedge-shaped elements.

β

Example 4: UMAT for Kinematic Hardening Plasticity

Page 33: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.65

UMAT for Kinematic Hardening Plasticity

• Governing equations• Elasticity:

2el elσ λδ ε με+

or in a Jaumann (corotational) rate form:

• The Jaumann rate equation is integrated in a corotational framework:

2ij ij kk ijσ λδ ε με= + ,

2J el elij ij kk ijσ λδ ε με= + .& &&

Writing User Subroutines with Abaqus

2J el elij ij kk ijσ λδ ε μ εΔ = Δ + Δ .

L7.66

UMAT for Kinematic Hardening Plasticity

• Plasticity:

• Yield function: 3 ( )( ) 02 ij ij ij ij yS Sα α σ− − − = .

• Equivalent plastic strain rate:

• Plastic flow law:

23

pl pl plij ijε ε ε= .& & &

3 ( )2

pl plij ij ij ySε α ε σ= − && .

Writing User Subroutines with Abaqus

• Prager-Ziegler (linear) kinematic hardening: 23

plij ijhα ε= .&&

Page 34: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.67

UMAT for Kinematic Hardening Plasticity

• Integration procedure• We first calculate the equivalent stress based on purely elastic behavior

(elastic predictor):

• Plastic flow occurs if the elastic predictor is larger than the yield stress. The backward Euler method is used to integrate the equations:

Aft i l ti bt i l d f i f th

3 ( )( ) 22

pr pr o pr o pr oij ij ij ij ij ij ijS S S S eσ α α μ= − − = + Δ, .

3 ( )2

pl pr o pl prij ij ijSε α ε σΔ = − Δ .

Writing User Subroutines with Abaqus

• After some manipulation we obtain a closed form expression for the equivalent plastic strain increment:

( ) ( 3 )pl pry hε σ σ μΔ = − + .

L7.68

UMAT for Kinematic Hardening Plasticity

• This leads to the following update equations for the shift tensor, the stress, and the plastic strain:

32

pl pl plij ij ij ijhα η ε ε η εΔ = Δ Δ = Δ,

• In addition, you can readily obtain the consistent Jacobian:

21 ( )3

o pr pr o prij ij ij ij y ij ij ij ijkk Sσ α α η σ δ σ η α σ= + Δ + + = − .,

* * *

* * *

2 31 3

2( )

ij ij kk ij ij kl kl

pl pr

hh

h k

σ λ δ ε μ ε μ η η εμ

λ

⎛ ⎞Δ = Δ + Δ + − Δ⎜ ⎟+⎝ ⎠

Δ

& & &&

Writing User Subroutines with Abaqus

• The integration procedure for kinematic hardening is described in Section 1.2.15 of the Abaqus User Subroutines Reference Manual.

• The appropriate coding is shown on the following pages.

2( )3

pl pry h kμ μ σ ε σ λ μ= + Δ = −, .

Page 35: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.69

UMAT for Kinematic Hardening Plasticity

• Coding for kinematic hardening plasticity

c local arraysc ----------------------------------------------------------------c eelas - elastic strainsc eplas - plastic strainsc alpha - shift tensorc flow - plastic flow directionsc olds - stress at start of incrementc oldpl - plastic strains at start of incrementc

dimension eelas(6), eplas(6), alpha(6), flow(6), olds(6), oldpl(6)c

parameter(zero=0.d0, one=1.d0, two=2.d0, three=3.d0, six=6.d0,1 enumax=.4999d0, toler=1.0d-6)

cc ----------------------------------------------------------------

Writing User Subroutines with Abaqus

c ----------------------------------------------------------------c umat for isotropic elasticity and mises plasticityc with kinematic hardening - cannot be used for plane stressc ----------------------------------------------------------------c props(1) - ec props(2) - nuc props(3) - syieldc props(4) - hard

L7.70

UMAT for Kinematic Hardening Plasticity

c ----------------------------------------------------------------cc elastic propertiesc

emod=props(1)enu=min(props(2) enumax)enu=min(props(2), enumax)ebulk3=emod/(one-two*enu)eg2=emod/(one+enu)eg=eg2/twoeg3=three*egelam=(ebulk3-eg2)/three

cc elastic stiffnessc

do k1=1, ndido k2=1, ndi

ddsdde(k2, k1)=elam

Writing User Subroutines with Abaqus

end doddsdde(k1, k1)=eg2+elam

end dodo k1=ndi+1, ntens

ddsdde(k1, k1)=egend do

Page 36: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.71

UMAT for Kinematic Hardening Plasticity

cc recover elastic strain, plastic strain and shift tensor and rotate c note: use code 1 for (tensor) stress code 2 for (engineering) strainc note: use code 1 for (tensor) stress, code 2 for (engineering) strainc

call rotsig(statev( 1), drot, eelas, 2, ndi, nshr)call rotsig(statev( ntens+1), drot, eplas, 2, ndi, nshr)call rotsig(statev(2*ntens+1), drot, alpha, 1, ndi, nshr)

cc save stress and plastic strains andc calculate predictor stress and elastic strainc

do k1=1, ntensolds(k1)=stress(k1)oldpl(k1)=eplas(k1)

Calls to ROTSIG

Writing User Subroutines with Abaqus

eelas(k1)=eelas(k1)+dstran(k1)do k2=1, ntens

stress(k2)=stress(k2)+ddsdde(k2, k1)*dstran(k1)end do

end do

L7.72

UMAT for Kinematic Hardening Plasticity

cc calculate equivalent von mises stressc

smises=(stress(1)-alpha(1)-stress(2)+alpha(2))**21 +(stress(2)-alpha(2)-stress(3)+alpha(3))**22 +(stress(3)-alpha(3)-stress(1)+alpha(1))**22 +(stress(3) alpha(3) stress(1)+alpha(1)) 2do k1=ndi+1,ntens

smises=smises+six*(stress(k1)-alpha(k1))**2end dosmises=sqrt(smises/two)

cc get yield stress and hardening modulusc

syield=props(3)hard=props(4)

prσ

yσh

Writing User Subroutines with Abaqus

Page 37: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.73

UMAT for Kinematic Hardening Plasticity

cc determine if actively yieldingc

if(smises.gt.(one+toler)*syield) thencc actively yieldingc actively yieldingc separate the hydrostatic from the deviatoric stressc calculate the flow directionc

shydro=(stress(1)+stress(2)+stress(3))/threedo k1=1,ndi

flow(k1)=(stress(k1)-alpha(k1)-shydro)/smisesend dodo k1=ndi+1,ntens

flow(k1)=(stress(k1)-alpha(k1))/smisesend do

cc solve for equivalent plastic strain increment

p−

23

n

Writing User Subroutines with Abaqus

cdeqpl=(smises-syield)/(eg3+hard) plεΔ

L7.74

UMAT for Kinematic Hardening Plasticity

cc update shift tensor, elastic and plastic strains and stressc

do k1=1,ndialpha(k1)=alpha(k1)+hard*flow(k1)*deqpleplas(k1)=eplas(k1)+three/two*flow(k1)*deqpleplas(k1)=eplas(k1)+three/two flow(k1) deqpleelas(k1)=eelas(k1)-three/two*flow(k1)*deqplstress(k1)=alpha(k1)+flow(k1)*syield+shydro

end dodo k1=ndi+1,ntens

alpha(k1)=alpha(k1)+hard*flow(k1)*deqpleplas(k1)=eplas(k1)+three*flow(k1)*deqpleelas(k1)=eelas(k1)-three*flow(k1)*deqplstress(k1)=alpha(k1)+flow(k1)*syield

end docc calculate plastic dissipationc

Writing User Subroutines with Abaqus

spd=zerodo k1=1,ntens

spd=spd+(stress(k1)+olds(k1))*(eplas(k1)-oldpl(k1))/twoend do

Page 38: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.75

UMAT for Kinematic Hardening Plasticity

cc formulate the jacobian (material tangent)c first calculate effective modulic

effg=eg*(syield+hard*deqpl)/smiseseffg2=two*effgeffg2=two effgeffg3=three*effgefflam=(ebulk3-effg2)/threeeffhrd=eg3*hard/(eg3+hard)-effg3do k1=1, ndi

do k2=1, ndiddsdde(k2, k1)=efflam

end doddsdde(k1, k1)=effg2+efflam

end dodo k1=ndi+1, ntens

ddsdde(k1, k1)=effgend do

Writing User Subroutines with Abaqus

do k1=1, ntensdo k2=1, ntensddsdde(k2, k1)=ddsdde(k2, k1)+effhrd*flow(k2)*flow(k1)

end doend do

endif

L7.76

UMAT for Kinematic Hardening Plasticity

cc store elastic strains, plastic strains and shift tensorc in state variable arrayc

do k1=1,ntensstatev(k1)=eelas(k1)statev(k1)=eelas(k1)statev(k1+ntens)=eplas(k1)statev(k1+2*ntens)=alpha(k1)

end doc

returnend

Writing User Subroutines with Abaqus

Page 39: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.77

UMAT for Kinematic Hardening Plasticity

• Remarks• This UMAT yields exactly the same results as the *PLASTIC,

HARDENING=KINEMATIC option in Abaqus with the exception of a h d t ti t i th b k t t th t d t l l i thhydrostatic term in the back-stress tensor that does not play a role in the solution.

• This minor difference emerges because the UMAT implementation uses Prager’s evolution law for the back stress, which yields a deviatoric back-stress tensor.

• The model in Abaqus uses Ziegler’s evolution law, which includes an additional hydrostatic contribution to the back-stress tensor.

Writing User Subroutines with Abaqus

L7.78

UMAT for Kinematic Hardening Plasticity

• For large-strain calculations, the necessary rotations of stress and strain are taken care of by Abaqus.

• Rotation of the shift tensor and the elastic and plastic strains is li h d b th ll t Th llaccomplished by the calls to ROTSIG. The call

call rotsig(statev(1), drot, eelas, 2, ndi, nshr)

applies the incremental rotation, DROT, to STATEV and stores the result in ELAS.

• STATEV consists of NDI direct components and NSHR shear components.

• A value of 1 is used as the fourth argument to indicate that the

Writing User Subroutines with Abaqus

• A value of 1 is used as the fourth argument to indicate that the transformed array contains tensor shear components such as αij. A value of 2 indicates that the array contains engineering shear components, such as

• The rotation should be applied prior to the integration procedure.

plijε .

Page 40: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.79

UMAT for Kinematic Hardening Plasticity

• The routine is written for linear hardening because the classical Prager-Ziegler theory is limited to this case.

• More complex nonlinear kinematic hardening models are much diffi lt t i t tmore difficult to integrate.

• However, once a suitable integration procedure is obtained, the implementation in UMAT is straightforward and follows the examples discussed here.

Writing User Subroutines with Abaqus

Example 5: UMAT for Isotropic Hardening Plasticity

Page 41: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.81

UMAT for Isotropic Hardening Plasticity

• Governing equations• Elasticity:

2el elσ λδ ε με+

or in a Jaumann (corotational) rate form:

• The Jaumann rate equation is integrated in a corotational framework:

2ij ij kk ijσ λδ ε με= + ,

2J el elij ij kk ijσ λδ ε με= + .& &&

Writing User Subroutines with Abaqus

2J el elij ij kk ijσ λδ μ εΔ = Δ + Δ .

L7.82

UMAT for Isotropic Hardening Plasticity

• Plasticity:

• Yield function:

• Equivalent plastic strain:

3 1( ) 02 3

plij ij y ij ij ij kkS S Sσ ε σ δ σ− = = −, .

0

23

tpl pl pl pl pl

ij ijdtε ε ε ε ε= =∫ , .& & & &

Writing User Subroutines with Abaqus

• Plastic flow law:

32

ijpl plij

y

Sε ε

σ= .&&

Page 42: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.83

UMAT for Isotropic Hardening Plasticity

• Integration procedure• We first calculate the von Mises stress based on purely elastic behavior

(elastic predictor):

• If the elastic predictor is larger than the current yield stress, plastic flow occurs. The backward Euler method is used to integrate the equations.

• After some manipulation we can reduce the problem to a single equation in terms of the incremental equivalent plastic strain:

3 22

pr pr pr pr oij ij ij ij ijS S S S eσ μ= = + Δ, .

Writing User Subroutines with Abaqus

• This equation is solved with Newton’s method.

3 ( )pr pl plyσ μ ε σ ε− Δ = .

L7.84

UMAT for Isotropic Hardening Plasticity

• After the equation is solved, the following update equations for the stress and the plastic strain can be used:

1 3pr pl plσ η σ δ σ ε η ε= + Δ = Δ

• In addition, you can readily obtain the consistent Jacobian:

3 2ij ij y ij ij ijkk

pr prij ijS

σ η σ δ σ ε η ε

η σ

= + Δ = Δ

=

, ,

.

* * *

* * *

2 31 32

ij ij kk ij ij kl kl

pr pl

hh

k h d d

σ λ δ ε μ ε μ η η εμ

λ

⎛ ⎞Δ = Δ + Δ + − Δ⎜ ⎟+⎝ ⎠

,& & &&

Writing User Subroutines with Abaqus

• A detailed discussion about the isotropic plasticity integration algorithm can be found in Section 4.2.2 of the Abaqus Theory Manual.

• The appropriate coding is shown on the following pages.

3pr pl

y yk h d dμ μσ σ λ μ σ ε= = − =, .,

Page 43: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.85

UMAT for Isotropic Hardening Plasticity

• Coding for isotropic Mises plasticity

c local arraysc ----------------------------------------------------------------c eelas - elastic strainsc eplas - plastic strainsc flow - direction of plastic flowc ----------------------------------------------------------------c

dimension eelas(6),eplas(6),flow(6), hard(3)c

parameter(zero=0.d0, one=1.d0, two=2.d0, three=3.d0, six=6.d0,1 enumax=.4999d0, newton=10, toler=1.0d-6)

cc ----------------------------------------------------------------c umat for isotropic elasticity and isotropic mises plasticityc cannot be used for plane stress

Writing User Subroutines with Abaqus

c cannot be used for plane stressc ----------------------------------------------------------------c props(1) - ec props(2) - nuc props(3..) - syield an hardening datac calls uhard for curve of yield stress vs. plastic strainc ----------------------------------------------------------------

L7.86

UMAT for Isotropic Hardening Plasticity

cc elastic propertiesc

emod=props(1)enu=min(props(2), enumax)ebulk3=emod/(one-two*enu)

Prevents incompressible elasticityebulk3=emod/(one two enu)eg2=emod/(one+enu)eg=eg2/twoeg3=three*egelam=(ebulk3-eg2)/three

cc elastic stiffnessc

do k1=1, ndido k2=1, ndi

ddsdde(k2, k1)=elamend do

Writing User Subroutines with Abaqus

ddsdde(k1, k1)=eg2+elamend dodo k1=ndi+1, ntens

ddsdde(k1, k1)=egend do

Page 44: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.87

UMAT for Isotropic Hardening Plasticity

c recover elastic and plastic strains and rotate forwardc also recover equivalent plastic strainc

call rotsig(statev( 1), drot, eelas, 2, ndi, nshr)call rotsig(statev(ntens+1), drot, eplas, 2, ndi, nshr)eqplas=statev(1+2*ntens)eqplas=statev(1+2 ntens)

cc calculate predictor stress and elastic strainc

do k1=1, ntensdo k2=1, ntens

stress(k2)=stress(k2)+ddsdde(k2, k1)*dstran(k1)end doeelas(k1)=eelas(k1)+dstran(k1)

end docc calculate equivalent von mises stressc

Writing User Subroutines with Abaqus

smises=(stress(1)-stress(2))**2+(stress(2)-stress(3))**21 +(stress(3)-stress(1))**2do k1=ndi+1,ntens

smises=smises+six*stress(k1)**2end dosmises=sqrt(smises/two) prσ

L7.88

UMAT for Isotropic Hardening Plasticity

c c get yield stress from the specified hardening curvec

nvalue=nprops/2-1call uhard(syiel0, hard, eqplas, eqplasrt,time,dtime,temp,

1 dtemp noel npt layer kspt kstep kinc cmname nstatvPasses back

Number of σy-εpldata pairs

1 dtemp,noel,npt,layer,kspt,kstep,kinc,cmname,nstatv,2 statev,numfieldv,predef,dpred,nvalue,props(3))

cc determine if actively yieldingc

if (smises.gt.(one+toler)*syiel0) thencc actively yieldingc separate the hydrostatic from the deviatoric stressc calculate the flow directionc

shydro=(stress(1)+stress(2)+stress(3))/threedo k1=1,ndi

σy(εpl) and h

Where σy-εpl data begins

Writing User Subroutines with Abaqus

flow(k1)=(stress(k1)-shydro)/smisesend dodo k1=ndi+1, ntens

flow(k1)=stress(k1)/smisesend do

23

n

Page 45: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.89

UMAT for Isotropic Hardening Plasticity

cc solve for equivalent von mises stressc and equivalent plastic strain increment using newton iterationc

syield=syiel0deqpl=zero Initial guessdeqpl=zerodo kewton=1, newton

rhs=smises-eg3*deqpl-syielddeqpl=deqpl+rhs/(eg3+hard(1))call uhard(syield,hard,eqplas+deqpl,eqplasrt,time,dtime,temp,

1 dtemp,noel,npt,layer,kspt,kstep,kinc,cmname,nstatv,2 statev,numfieldv,predef,dpred,nvalue,props(3))

if(abs(rhs).lt.toler*syiel0) goto 10end do

cc write warning message to the .msg filec

write(7,2) newton

Initial guess

Residual

Passes back σy(εpl) and h

Writing User Subroutines with Abaqus

2 format(//,30x,’***warning - plasticity algorithm did not ’,1 ’converge after ’,i3,’ iterations’)

10 continue

L7.90

UMAT for Isotropic Hardening Plasticity

cc update stress, elastic and plastic strains and c equivalent plastic strainc

do k1=1,ndistress(k1)=flow(k1)*syield+shydrostress(k1)=flow(k1) syield+shydroeplas(k1)=eplas(k1)+three/two*flow(k1)*deqpleelas(k1)=eelas(k1)-three/two*flow(k1)*deqpl

end dodo k1=ndi+1,ntens

stress(k1)=flow(k1)*syieldeplas(k1)=eplas(k1)+three*flow(k1)*deqpleelas(k1)=eelas(k1)-three*flow(k1)*deqpl

end doeqplas=eqplas+deqpl

cc calculate plastic dissipationc

PEEQ

Writing User Subroutines with Abaqus

spd=deqpl*(syiel0+syield)/two

Page 46: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.91

UMAT for Isotropic Hardening Plasticity

cc formulate the jacobian (material tangent)c first calculate effective modulic

effg=eg*syield/smiseseffg2=two*effgeffg2=two effgeffg3=three/two*effg2efflam=(ebulk3-effg2)/threeeffhrd=eg3*hard(1)/(eg3+hard(1))-effg3do k1=1, ndi

do k2=1, ndiddsdde(k2, k1)=efflam

end doddsdde(k1, k1)=effg2+efflam

end dodo k1=ndi+1, ntens

ddsdde(k1, k1)=effgend do

Writing User Subroutines with Abaqus

do k1=1, ntensdo k2=1, ntensddsdde(k2, k1)=ddsdde(k2, k1)+effhrd*flow(k2)*flow(k1)

end doend do

endif

L7.92

UMAT for Isotropic Hardening Plasticity

cc store elastic and (equivalent) plastic strains c in state variable arrayc

do k1=1, ntensstatev(k1)=eelas(k1)statev(k1)=eelas(k1)statev(k1+ntens)=eplas(k1)

end dostatev(1+2*ntens)=eqplas

creturnend

subroutine uhard(syield,hard,eqplas,eqplasrt,time,dtime,temp,1 dtemp,noel,npt,layer,kspt,kstep,kinc,2 cmname,nstatv,statev,numfieldv,3 predef,dpred,nvalue,table)

Writing User Subroutines with Abaqus

include ’aba_param.inc’

character*80 cmnamedimension hard(3),statev(nstatv),time(*),

1 predef(numfieldv),dpred(*)

Page 47: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.93

UMAT for Isotropic Hardening Plasticity

cdimension table(2, nvalue)

cparameter(zero=0.d0)

cc set yield stress to last value of table hardening to zeroc set yield stress to last value of table, hardening to zeroc

syield=table(1, nvalue)hard(1)=zero

c if more than one entry, search tablec

if(nvalue.gt.1) thendo k1=1, nvalue-1

eqpl1=table(2,k1+1)if(eqplas.lt.eqpl1) theneqpl0=table(2, k1)if(eqpl1.le.eqpl0) then

write(7, 1)

Linear interpolation:

1. Find interval

2. Interpolate

Writing User Subroutines with Abaqus

1 format(//, 30x, ’***Error - plastic strain must be ‘,1 ‘entered in ascending order’)

call xitendif

L7.94

UMAT for Isotropic Hardening Plasticity

cc current yield stress and hardeningc

deqpl=eqpl1-eqpl0syiel0=table(1, k1)syiel1=table(1 k1+1)syiel1=table(1, k1+1)dsyiel=syiel1-syiel0hard(1)=dsyiel/deqplsyield=syiel0+(eqplas-eqpl0)*hard(1)goto 10

endifend do

10 continueendifreturnend

This is what gets passed back

Writing User Subroutines with Abaqus

Page 48: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.95

UMAT for Isotropic Hardening Plasticity

• Remarks• This UMAT yields exactly the same results as the ∗PLASTIC option with

ISOTROPIC hardening.

• This result is also true for large-strain calculations. The necessary rotations of stress and strain are taken care of by Abaqus.

• The rotation of elastic and plastic strain, prior to integration, is accomplished by the calls to ROTSIG.

Writing User Subroutines with Abaqus

L7.96

UMAT for Isotropic Hardening Plasticity

• The routine calls user subroutine UHARD to recover a piecewise linear hardening curve.

• It is straightforward to replace the piecewise linear curve by an l ti d i tianalytic description.

• A local Newton iteration is used to determine the current yield stress and hardening modulus.

• If the data are not given in ascending order of strain, the routine XITis called, which closes all files and terminates execution.

Writing User Subroutines with Abaqus

Page 49: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

VUMAT InterfaceVUMAT Interface

L7.98

VUMAT Interface

• These input lines act as the interface to a VUMAT in which kinematic hardening plasticity is defined.

*MATERIAL NAME=KINPLAS*MATERIAL, NAME=KINPLAS*USER MATERIAL, CONSTANTS=430.E6, 0.3, 30.E3, 40.E3*DEPVAR5*INITIAL CONDITIONS, TYPE=SOLUTIONData line to specify initial solution-dependent variables

Writing User Subroutines with Abaqus

Page 50: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.99

VUMAT Interface

• The input lines are identical to those for the UMAT interface.

• The user subroutine must be kept in a separate file.

• The user subroutine must be invoked in a restarted analysis ybecause user subroutines are not saved in the restart file.

Writing User Subroutines with Abaqus

L7.100

VUMAT Interface

• Additional notes:• Solution-dependent state variables can be output with identifiers SDV1,

SDV2, etc. Contour, path, and X–Y plots of SDVs can be plotted in /Abaqus/Viewer.

• Include only a single VUMAT subroutine in the analysis. If more than one material must be defined, test on the material name in the VUMAT routine and branch.

Writing User Subroutines with Abaqus

Page 51: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.101

VUMAT Interface

• The VUMAT subroutine header is shown below:

subroutine vumat(c Read only (unmodifiable) variables-c Read only (unmodifiable) variables

1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,2 stepTime, totalTime, dt, cmname, coordMp, charLength,3 props, density, strainInc, relSpinInc,4 tempOld, stretchOld, defgradOld, fieldOld,5 stressOld, stateOld, enerInternOld, enerInelasOld,6 tempNew, stretchNew, defgradNew, fieldNew,

c write only (modifiable) variables -7 stressNew, stateNew, enerInternNew, enerInelasNew)

cinclude 'vaba_param.inc'

c

Writing User Subroutines with Abaqus

c

L7.102

VUMAT Interface

dimension props(nprops), density(nblock), coordMp(nblock),1 charLength(nblock), strainInc(nblock, ndir+nshr),2 relSpinInc(nblock, nshr), tempOld(nblock),3 stretchOld(nblock, ndir+nshr),defgradOld(nblock,ndir+nshr+nshr),4 fieldOld(nblock, nfieldv), stressOld(nblock, ndir+nshr),( , ), ( , ),5 stateOld(nblock, nstatev), enerInternOld(nblock),6 enerInelasOld(nblock), tempNew(nblock),7 stretchNew(nblock, ndir+nshr),defgradNew(nblock,ndir+nshr+nshr),8 fieldNew(nblock, nfieldv), stressNew(nblock,ndir+nshr),9 stateNew(nblock, nstatev), enerInternNew(nblock),1 enerInelasNew(nblock)

ccharacter*80 cmname

Writing User Subroutines with Abaqus

Page 52: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.103

VUMAT Interface

• VUMAT variables• The following quantities are available in VUMAT, but they cannot be

redefined:• Stress, stretch, and SDVs at the start of the increment• Relative rotation vector and deformation gradient at the start and

end of an increment and strain increment• Total and incremental values of time, temperature, and user-defined

field variables at the start and end of an increment• Material constants, density, material point position, and a

characteristic element lengthI t l d di i t d i t th b i i f th i t

Writing User Subroutines with Abaqus

• Internal and dissipated energies at the beginning of the increment• Number of material points to be processed in a call to the routine

(NBLOCK)• A flag indicating whether the routine is being called during an

annealing process

L7.104

VUMAT Interface

• The following quantities must be defined:

• Stress and SDVs at the end of an increment

• The following variables may be defined:

• Internal and dissipated energies at the end of the increment

• Many of these variables are equivalent or similar to those in UMAT.

• Complete descriptions of all parameters are provided in the VUMATsection in Chapter 1 of the Abaqus User Subroutines Reference Manual.

Writing User Subroutines with Abaqus

Page 53: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.105

VUMAT Interface

• Comparison of VUMAT and UMAT interfaces• There are a number of significant differences between the UMAT and VUMAT interfaces.

• VUMAT uses a two-state architecture: the initial values are in the OLDarrays, the new values must be put in the NEW arrays.

• The VUMAT is written with a vector interface, which means that blocks of data are passed to the subroutine.

• The material Jacobian does not need to be defined.

• No information is provided about element numbers.

• The time increment cannot be redefined

Writing User Subroutines with Abaqus

The time increment cannot be redefined.

L7.106

VUMAT Interface

• The header is usually followed by dimensioning of local arrays. It is good practice to define constants via parameters and to include comments.

parameter( zero = 0.d0, one = 1.d0, two = 2.d0, three = 3.d0,1 third = one/three, half = 0.5d0, two_thirds = two/three,2 three_halfs = 1.5d0)

• The parameter assignments yield accurate floating point constant definitions on any platform.

Writing User Subroutines with Abaqus

Page 54: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.107

VUMAT Interface

• VUMAT conventions• Stresses and strains are stored as vectors.

• For plane stress elements: σ11, σ22, σ12.For plane stress elements: σ11, σ22, σ12.

• For plane strain and axisymmetric elements: σ11, σ22, σ33, σ12.

• For three-dimensional elements: σ11, σ22, σ33, σ12 , σ23, σ31.

• For three-dimensional elements this storage scheme is inconsistent with that for Abaqus/Standard.

• The shear strains are stored as tensor shear strains; e.g.,

Writing User Subroutines with Abaqus

12 1212

ε γ= .

L7.108

VUMAT Interface

• The deformation gradient is stored similar to the way in which symmetric tensors are stored.

• For plane stress elements: F11, F22, F12, F21.

• For plane strain and axisymmetric elements: F11, F22, F33, F12, F21.

• For three-dimensional elements: F11, F22, F33, F12, F23 , F31, F21, F32 , F13.

Writing User Subroutines with Abaqus

Page 55: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.109

VUMAT Interface

• VUMAT formulation aspects• Vector interface

• In VUMAT the data are passed in and out in large blocks (dimension p g (nblock); nblock typically is equal to 64 or 128.

• Each entry in an array of length nblock corresponds to a single material point. All material points in the same block have the same material name and belong to the same element type.

• This structure allows vectorization of the routine. • A vectorized VUMAT should make sure that all operations are

done in vector mode with nblock the vector length.

Writing User Subroutines with Abaqus

• In vectorized code, branching inside loops should be avoided.• Element type-based branching should be outside the nblock

loop.

L7.110

VUMAT Interface

• Corotational formulation• The constitutive equation is formulated in a corotational framework,

based on the Green-Naghdi rate.

• The incremental rotation is obtained from the total rotation F = R · U with the expression ΔΩ = ΔR · RT .

• The strain increment is obtained with Hughes-Winget.

• Other measures can be obtained from the deformation gradient.

• The relative spin increment Δω − ΔΩ is also provided.

Δ

Writing User Subroutines with Abaqus

• The quantity Δω is used with the Jaumann rate. In Abaqus the Jaumann rate is used in certain instances: e.g., solid elements using the built-in linear elastic and plastic material models.

Page 56: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.111

VUMAT Interface

• The user must define the Cauchy stress: this stress reappears during the next increment as the “old” stress.

• There is no need to rotate tensor state variables.

• A rotation is needed, however, if a rate other than the Green-Naghdi rate is desired.

• For example, to use the Jaumann rate, evaluate the expression defined by Hughes and Winget for the rotation increment using the relative spin increment:

11 1( ) ( )2 2

−⎡ ⎤ ⎡ ⎤Δ = − Δ Δ ⋅ + Δ Δ⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦

R I Iω − Ω ω − Ω

Writing User Subroutines with Abaqus

Then, rotate all “old” tensor quantities before performing constitutive updates. For example, for the stress tensor:

2 2⎣ ⎦ ⎣ ⎦

t t tΔ = Δ ⋅ ⋅ Δ + ΔT+ R Rσ σ σstressNew

stressOld

L7.112

VUMAT Interface

• VUMATs and hyperelasticity• Hyperelastic constitutive equations relate the Cauchy stress σ to the

deformation gradient F through the left Cauchy-Green deformation tensor B.

• Using F for hyperelastic constitutive models in a VUMAT presents some difficulties, however, because…

• Abaqus/Explicit uses a corotational system which automatically accounts for rigid body rotations.

• The deformation gradient that is passed into the VUMAT is referred to a fixed basis associated with the original configuration.

Writing User Subroutines with Abaqus

• It also incorporates the rotations—recall the deformation gradient can be written as F = R · U, where R is the rotation tensor and U is the stretch tensor.

Page 57: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.113

VUMAT Interface

• Thus, to avoid including the effects of the rotations twice, hyperelastic constitutive models implemented in a VUMAT should be formulated in terms of the stretch tensor U.

Thi ll t bt i th t ti l C h t di tl• This allows you to obtain the corotational Cauchy stress directly.• Example 7 illustrates how to derive the corotational Cauchy stress

from the more general expression for the Cauchy stress.

Writing User Subroutines with Abaqus

Example 6: VUMAT for Isotropic Isothermal Elasticity

Page 58: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.115

VUMAT for Isotropic Isothermal Elasticity

• The governing equations and integration procedure are the same as in Example 1.

• The Jacobian is not required.

Writing User Subroutines with Abaqus

L7.116

VUMAT for Isotropic Isothermal Elasticity

• Coding for isotropic isothermal elasticity VUMATc elastic constantsc

e = props(1)xnu = props(2) twomu = e / ( one + xnu )sixmu = three * twomualamda = twomu * ( e - twomu ) / ( sixmu - two * e )

do k = 1, nblocktrace = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)

* + twomu * strainInc(k,1) + alamda * tracestressNew(k,2) = stressOld(k,2)

* + twomu * strainInc(k,2) + alamda * tracestressNew(k,3) = stressOld(k,3)

Writing User Subroutines with Abaqus

* + twomu * strainInc(k,3) + alamda * tracestressNew(k,4)=stressOld(k,4) + twomu * strainInc(k,4)if ( nshr .gt. 1 ) thenstressNew(k,5)=stressOld(k,5) + twomu * strainInc(k,5)stressNew(k,6)=stressOld(k,6) + twomu * strainInc(k,6)

end if

2μ since tensor shear strain

Page 59: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.117

VUMAT for Isotropic Isothermal Elasticity

c Update the specific internal energy -c

if ( nshr .eq. 1 ) then

stressPower = half * (* ( stressOld(k 1) + stressNew(k 1) ) * strainInc(k 1) + ( stressOld(k,1) + stressNew(k,1) ) strainInc(k,1) +* ( stressOld(k,2) + stressNew(k,2) ) * strainInc(k,2) +* ( stressOld(k,3) + stressNew(k,3) ) * strainInc(k,3) ) +* ( stressOld(k,4) + stressNew(k,4) ) * strainInc(k,4)

else

stressPower = half * (* ( stressOld(k,1) + stressNew(k,1) ) * strainInc(k,1) +* ( stressOld(k,2) + stressNew(k,2) ) * strainInc(k,2) +* ( stressOld(k,3) + stressNew(k,3) ) * strainInc(k,3) ) +* ( stressOld(k,4) + stressNew(k,4) ) * strainInc(k,4) + * ( stressOld(k,5) + stressNew(k,5) ) * strainInc(k,5) +

Writing User Subroutines with Abaqus

* ( stressOld(k,6) + stressNew(k,6) ) * strainInc(k,6)

end ifenerInternNew(k) = enerInternOld(k) + stressPower / density(k)

end doc

returnend

L7.118

VUMAT for Isotropic Isothermal Elasticity

• Remarks• This very simple VUMAT yields exactly the same results as the Abaqus

∗ELASTIC option.

• This is true even for large-strain calculations.

• The routine handles plane strain, axisymmetric, and three-dimensional geometries.

• Plane stress must be treated as a separate case.

• The routine is written in incremental form as a preparation for subsequent elastic-plastic VUMAT examples.

• Special coding techniques are used to obtain vectorized coding

Writing User Subroutines with Abaqus

Special coding techniques are used to obtain vectorized coding.

• All small loops inside the material routine are “unrolled.”

Page 60: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

Example 7: VUMAT for Neo-Hookean Hyperelasticity

L7.120

VUMAT for Neo-Hookean Hyperelasticity

• In this example, we derive an expression for the corotational Cauchy stress and implement it in a VUMAT.

• Recall the constitutive equation given earlier in Example 3:

• Substituting F = R · U into the above expressions yields

2 310

1

2 1 2tr( ) ( 1)3

C J JJ D

⎛ ⎞= − + − =⎜ ⎟⎝ ⎠

, .B B I I B Bσ

Writing User Subroutines with Abaqus

1 310

1

2 1 2tr( ) ( 1)3

C J JJ D

⎧ ⎫⎛ ⎞= − + − =⎨ ⎬⎜ ⎟⎝ ⎠⎩ ⎭

, where .2 2 TR U U I I R U Uσ

Page 61: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.121

VUMAT for Neo-Hookean Hyperelasticity

• The corotational stress is the quantity contained within the curly brackets:

• This expression is implemented in the following code.

• The Jacobian is not required.

corot10

1

2 1 2tr( ) ( 1)3

C JJ D

⎛ ⎞= − + −⎜ ⎟⎝ ⎠

.2 2U U I Iσ

Writing User Subroutines with Abaqus

L7.122

VUMAT for Neo-Hookean Hyperelasticity

• Coding for neo-Hookean hyperelasticity VUMATcc neo-Hookean hyperelasticity for c plane strain, axisymmetric, and 3D casescc ----------------------------------------------------------------c props(1) - c10c props(2) - d1c ----------------------------------------------------------------cc elastic propertiesc

c10=props(1)d1 =props(2)

Writing User Subroutines with Abaqus

shrMod = two*c10blkMod = two/d1

Page 62: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.123

VUMAT for Neo-Hookean Hyperelasticity

cc Assume purely (linear) elastic material at the c beginning of the analysisc

if ( totalTime .eq. zero ) then( q )do k = 1, nblock

twomu = two*shrModalamda = blkMod - third*twomuevol = strainInc(k,1)+strainInc(k,2)+strainInc(k,3)do i = 1, ndir+nshr

stressNew(k,i) = stressOld(k,1) + twomu * strainInc(k,i)end do do i = 1, ndir

stressNew(k,i) = stressNew(k,1) + alamda * evolend do

end do

Writing User Subroutines with Abaqus

end doreturn

end if

L7.124

VUMAT for Neo-Hookean Hyperelasticity

c calculate b matrix, stresses, etc. in block formc

do k = 1, nblockcc calculate left cauchy-green tensor in terms of stretch tensory gc and jacobianc

bxx = stretchNew(k,1) * stretchNew(k,1)* + stretchNew(k,4) * stretchNew(k,4)

byy = stretchNew(k,4) * stretchNew(k,4)* + stretchNew(k,2) * stretchNew(k,2)

bzz = stretchNew(k,3) * stretchNew(k,3)bxy = stretchNew(k,1) * stretchNew(k,4)

* + stretchNew(k,4) * stretchNew(k,2)bxz = zerobyz = zero

= ⋅ = ⋅ =T 2b U U U U U

Writing User Subroutines with Abaqus

byz = zerodetu = stretchNew(k,3) *

* ( stretchNew(k,1) * stretchNew(k,2) * - stretchNew(k,4) * stretchNew(k,4) )

J = =F U

Page 63: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.125

VUMAT for Neo-Hookean Hyperelasticity

if ( nshr .gt. 1 ) thenbxx = bxx + stretchNew(k,6) * stretchNew(k,6)byy = byy + stretchNew(k,5) * stretchNew(k,5)bzz = bzz + stretchNew(k,6) * stretchNew(k,6)

* + stretchNew(k,5) * stretchNew(k,5)( , ) ( , )bxy = bxy + stretchNew(k,6) * stretchNew(k,5)bxz = stretchNew(k,1) * stretchNew(k,6)

* + stretchNew(k,4) * stretchNew(k,5)* + stretchNew(k,6) * stretchNew(k,3)

byz = stretchNew(k,4) * stretchNew(k,6)* + stretchNew(k,2) * stretchNew(k,5)* + stretchNew(k,5) * stretchNew(k,3)

detu = detu* + stretchNew(k,6) * * ( stretchNew(k,4) * stretchNew(k,5) * - stretchNew(k 6) * stretchNew(k 2) )

Extend for 3D

Writing User Subroutines with Abaqus

* - stretchNew(k,6) * stretchNew(k,2) )* - stretchNew(k,5) * * ( stretchNew(k,1) * stretchNew(k,5) * - stretchNew(k,6) * stretchNew(k,4) )

end if

L7.126

VUMAT for Neo-Hookean Hyperelasticity

xpow = exp ( - log(detu) * two_thirds )bxx = bxx * xpowbyy = byy * xpowbzz = bzz * xpowbxy = bxy * xpow

2/3 2/3J J− −= = =2 2b b U Uy y p

bxz = bxz * xpowbyz = byz * xpow

cc BI1 ( first invariant of BIJ ) c

bi1 = bxx + byy + bzzcc BDIJ ( deviatoric part of BIJ ) c

bdxx = bxx - third * bi1bdyy = byy - third * bi1

tr( )b

dev( )b

Writing User Subroutines with Abaqus

bdyy = byy - third * bi1bdzz = bzz - third * bi1bdxy = bxybdxz = bxzbdyz = byz

dev( )b

Page 64: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.127

VUMAT for Neo-Hookean Hyperelasticity

c c Calculate strain energy and its various derivativesc neo-Hookean: U = (1/2)*shrMod*(I1-3)c +(1/2)*blkMod*(J-1)^2c

duDi1 = half * shrModduDi3 = blkMod * ( detu - one )

cc Calculate Cauchy (true) stressesc

detuInv = one / detufactor = two * duDi1 * detuInv

c stressNew(k,1) = factor * bdxx + duDi3 stressNew(k,2) = factor * bdyy + duDi3 stressNew(k 3) = factor * bdzz + duDi3

Writing User Subroutines with Abaqus

stressNew(k,3) = factor * bdzz + duDi3 stressNew(k,4) = factor * bdxy if ( nshr .gt. 1 ) thenstressNew(k,5) = factor * bdyz stressNew(k,6) = factor * bdxz

end if

L7.128

VUMAT for Neo-Hookean Hyperelasticity

cc Update the internal specific energy (per unit mass)c

enerInternNew(k) = half * shrMod * ( bi1 - three ) * + half * blkMod * ( detu - one )**2( )

enerInternNew(k) = enerInternNew(k)/density(k)c

end doc

returnend

Writing User Subroutines with Abaqus

Page 65: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.129

VUMAT for Neo-Hookean Hyperelasticity

• Remarks• In the datacheck phase VUMAT is called with a set of fictitious strains and

a totalTime and stepTime both equal to 0.0.

• A check is done on the user’s constitutive relation, and an initial stable time increment is determined based on calculated equivalent initial material properties.

• Ensure that elastic properties are used in this call to VUMAT; otherwise, too large an initial time increment may be used, leading to instability.

• A warning message is printed to the status (.sta) file informing the th t thi h k i b i f d

Writing User Subroutines with Abaqus

user that this check is being performed.• This VUMAT yields exactly the same results as the ∗HYPERELASTIC

option with N = 1 and C01 = 0.

Example 8: VUMAT for Kinematic Hardening Plasticity

Page 66: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.131

VUMAT for Kinematic Hardening Plasticity

• The governing equations and integration procedure are the same as in Example 4.

• The Jacobian is not required.

Writing User Subroutines with Abaqus

L7.132

VUMAT for Kinematic Hardening Plasticity

• Coding for kinematic hardening plasticity VUMAT

c J2 Mises plasticity with kinematic hardening for plane strain case.c The state variables are stored as:cc state(*, 1) = back stress component 11c state(*, 2) = back stress component 22c state(*, 3) = back stress component 33c state(*, 4) = back stress component 12c state(*, 5) = equivalent plastic strainc

e = props(1)xnu = props(2)yield = props(3)hard = props(4)

c

Writing User Subroutines with Abaqus

c elastic constantsc

twomu = e / ( one + xnu )thremu = three_halfs * twomusixmu = three * twomualamda = twomu * ( e - twomu ) / ( sixmu - two * e )term = one / ( twomu * ( one + hard/thremu ) )con1 = sqrt( two_thirds )

Page 67: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.133

VUMAT for Kinematic Hardening Plasticity

cc If stepTime equals to zero, assume the material pure elastic and usec initial elastic modulusc

if( stepTime .eq. zero ) then( p q )c

do i = 1, nblockcc Trial Stress

trace = strainInc (i, 1) + strainInc (i, 2) + strainInc (i, 3)stressNew(i, 1)=stressOld(i, 1) + alamda*trace

1 + twomu*strainInc(i,1)stressNew(i, 2)=stressOld(i, 2) + alamda*trace

1 + twomu*strainInc(i, 2)stressNew(i, 3)=stressOld(i, 3) + alamda*trace

1 + twomu*strainInc(i 3)

Writing User Subroutines with Abaqus

1 + twomu*strainInc(i,3)stressNew(i, 4)=stressOld(i, 4)

1 + twomu*strainInc(i, 4)end do

celse

L7.134

VUMAT for Kinematic Hardening Plasticity

cc Plasticity calculations in block formc

do i = 1, nblockc Elastic predictor stressp

trace = strainInc(i, 1) + strainInc(i, 2) + strainInc(i, 3)sig1= stressOld(i, 1) + alamda*trace + twomu*strainInc(i, 1)sig2= stressOld(i, 2) + alamda*trace + twomu*strainInc(i, 2)sig3= stressOld(i, 3) + alamda*trace + twomu*strainInc(i, 3)sig4= stressOld(i, 4) + twomu*strainInc(i, 4)

c Elastic predictor stress measured from the back stresss1 = sig1 - stateOld(i, 1)s2 = sig2 - stateOld(i, 2)s3 = sig3 - stateOld(i, 3)s4 = sig4 - stateOld(i, 4)

c Deviatoric part of predictor stress measured from the back stress

Writing User Subroutines with Abaqus

c Deviatoric part of predictor stress measured from the back stresssmean = third * ( s1 + s2 + s3 ) ds1 = s1 - smeands2 = s2 - smeands3 = s3 - smean

c Magnitude of the deviatoric predictor stress differencedsmag = sqrt( ds1**2 + ds2**2 + ds3**2 + two*s4**2 )

Page 68: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.135

VUMAT for Kinematic Hardening Plasticity

cc Check for yield by determining the factor for plasticity, zero for c elastic, one for yieldc

radius = con1 * yieldyfacyld = zeroif( dsmag - radius .ge. zero ) facyld = one

cc Add a protective addition factor to prevent a divide by zero when c c DSMAG is zero. If DSMAG is zero, we will not have exceeded the yield c stress and FACYLD will be zero.c

dsmag = dsmag + ( one - facyld )cc Calculated increment in gamma c (this explicitly includes the time step)

Writing User Subroutines with Abaqus

c (this explicitly includes the time step)c

diff = dsmag - radiusdgamma = facyld * term * diff

L7.136

VUMAT for Kinematic Hardening Plasticity

cc Update equivalent plastic strainc

deqps = con1 * dgammastateNew(i, 5) = stateOld(i, 5) + deqps( , ) ( , ) qp

cc Divide DGAMMA by DSMAG so that the deviatoric stresses are c explicitly converted to tensors of unit magnitude in the c following calculationsc

dgamma = dgamma / dsmagcc Update back stressc

factor = hard * dgamma * two_thirdsstateNew(i 1) = stateOld(i 1) + factor * ds1

Writing User Subroutines with Abaqus

stateNew(i, 1) = stateOld(i, 1) + factor * ds1stateNew(i, 2) = stateOld(i, 2) + factor * ds2stateNew(i, 3) = stateOld(i, 3) + factor * ds3stateNew(i, 4) = stateOld(i, 4) + factor * s4

Page 69: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.137

VUMAT for Kinematic Hardening Plasticity

cc Update stressc

factor = twomu * dgamma stressNew(i, 1) = sig1 - factor * ds1( , ) gstressNew(i, 2) = sig2 - factor * ds2stressNew(i, 3) = sig3 - factor * ds3stressNew(i, 4) = sig4 - factor * s4

cc Update the specific internal energy -c

stressPower = half * (1 ( stressOld(i, 1)+stressNew(i, 1) )*strainInc(i, 1)2 + ( stressOld(i, 2)+stressNew(i, 2) )*strainInc(i, 2)3 + ( stressOld(i, 3)+stressNew(i, 3) )*strainInc(i, 3)4 + two*( stressOld(i 4)+stressNew(i 4) )*strainInc(i 4) )

Writing User Subroutines with Abaqus

4 + two*( stressOld(i, 4)+stressNew(i, 4) )*strainInc(i, 4) )enerInternNew(i) = enerInternOld(i)

1 + stressPower/density(i)

L7.138

VUMAT for Kinematic Hardening Plasticity

cc Update the dissipated inelastic specific energy -c

smean = third* (stressNew(i, 1)+stressNew(i, 2)1 + stressNew(i, 3))( , ))

equivStress = sqrt( three_halfs1 * ( (stressNew(i, 1)-smean)**22 + (stressNew(i, 2)-smean)**23 + (stressNew(i, 3)-smean)**24 + two * stressNew(i, 4)**2 ) )

cplasticWorkInc = equivStress * deqpsenerInelasNew(i) = enerInelasOld(i)

1 + plasticWorkInc / density(i)c

end do

Writing User Subroutines with Abaqus

end doc

end ifreturnend

Page 70: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.139

VUMAT for Kinematic Hardening Plasticity

• Remarks• Special coding techniques are used to obtain vectorized coding.

• All small loops inside the material routine are “unrolled.”p

• The same code is executed regardless of whether the behavior is purely elastic or elastic plastic.

• Special care must be taken to avoid divides by zero.

• No external subroutines are called inside the loop.

• The use of local scalar variables inside the loop is allowed.

• The compiler will automatically expand these local scalar variables t l l t

Writing User Subroutines with Abaqus

to local vectors.

• Iterations should be avoided.

• If iterations cannot be avoided, use a fixed number of iterations and do not test on convergence.

Example 9: VUMAT for Isotropic Hardening Plasticity

Page 71: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.141

VUMAT for Isotropic Hardening Plasticity

• The governing equations and integration procedure are the same as in Example 5, with the exception of the expression for the increment of equivalent plastic strain, which is approximated to avoid local iterations.

Th i t f i l t l ti t i i bt i d li itl th h• The increment of equivalent plastic strain is obtained explicitly through

where σy is the yield stress and is the plastic hardening at the beginning of the increment.

• This approximation is reasonable given that the size of the time

3

prypl

hσ σ

εμ

−Δ =

+,

plyh d dσ ε=

Writing User Subroutines with Abaqus

• This approximation is reasonable given that the size of the time increment used in an Abaqus/Explicit analysis is generally very small.

• The Jacobian is not required.

L7.142

VUMAT for Isotropic Hardening Plasticity

• Coding for isotropic hardening plasticity VUMAT

ccc

parameter ( zero = 0.d0, one = 1.d0, two = 2.d0,* third = 1.d0 / 3.d0, half = 0.5d0, op5 = 1.5d0)

cc For plane strain, axisymmetric, and 3D cases usingc the J2 Mises Plasticity with piecewise-linear isotropic hardening.cc The state variable is stored as:cc STATE(*,1) = equivalent plastic straincc User needs to input

Writing User Subroutines with Abaqus

c User needs to inputc props(1) Young’s modulusc props(2) Poisson’s ratioc props(3..) syield and hardening datac calls xhard for curve of yield stress vs. plastic strainc

Page 72: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.143

VUMAT for Isotropic Hardening Plasticity

e = props(1)xnu = props(2)twomu = e / ( one + xnu )alamda = xnu * twomu / ( one - two * xnu )thremu = op5 * twomuthremu = op5 * twomunvalue = nprops/2-1

cif ( stepTime .eq. zero ) then do k = 1, nblocktrace = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)

* + twomu * strainInc(k,1) + alamda * tracestressNew(k,2) = stressOld(k,2)

* + twomu * strainInc(k,2) + alamda * tracestressNew(k,3) = stressOld(k,3)

Writing User Subroutines with Abaqus

* + twomu * strainInc(k,3) + alamda * tracestressNew(k,4)=stressOld(k,4) + twomu * strainInc(k,4)if ( nshr .gt. 1 ) thenstressNew(k,5)=stressOld(k,5) + twomu * strainInc(k,5)stressNew(k,6)=stressOld(k,6) + twomu * strainInc(k,6)

end ifend do

else

L7.144

VUMAT for Isotropic Hardening Plasticity

do k = 1, nblock

peeqOld=stateOld(k,1)call xhard(yieldOld, hard, peeqOld, props(3), nvalue)

trace = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)

s11 = stressOld(k,1) + twomu * strainInc(k,1) + alamda * traces22 = stressOld(k,2) + twomu * strainInc(k,2) + alamda * traces33 = stressOld(k,3) + twomu * strainInc(k,3) + alamda * trace s12 = stressOld(k,4) + twomu * strainInc(k,4)

if ( nshr .gt. 1 ) thens23 = stressOld(k,5) + twomu * strainInc(k,5)s13 = stressOld(k,6) + twomu * strainInc(k,6)

end if

Writing User Subroutines with Abaqus

end if

Page 73: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.145

VUMAT for Isotropic Hardening Plasticity

csmean = third * ( s11 + s22 + s33 )

s11 = s11 - smeans22 = s22 - smeans33 = s33 - smean

if ( nshr .eq. 1 ) then

vmises = sqrt( op5*(s11*s11+s22*s22+s33*s33+two*s12*s12) )

else

vmises = sqrt( op5 * ( s11 * s11 + s22 * s22 + s33 * s33 +* two * s12 * s12 + two * s13 * s13 + two * s23 * s23 ) )

Writing User Subroutines with Abaqus

end ifc

sigdif = vmises - yieldOldfacyld = zeroif ( sigdif .gt. zero ) facyld = onedeqps = facyld * sigdif / ( thremu + hard )

L7.146

VUMAT for Isotropic Hardening Plasticity

cc Update the stressc

yieldNew = yieldOld + hard * deqps factor = yieldNew / ( yieldNew + thremu * deqps )y / ( y qp )

stressNew(k,1) = s11 * factor + smeanstressNew(k,2) = s22 * factor + smeanstressNew(k,3) = s33 * factor + smeanstressNew(k,4) = s12 * factor

if ( nshr .gt. 1 ) then

stressNew(k,5) = s23 * factorstressNew(k,6) = s13 * factor

Writing User Subroutines with Abaqus

end ifcc Update the state variablesc

stateNew(k,1) = stateOld(k,1) + deqps

Page 74: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.147

VUMAT for Isotropic Hardening Plasticityc Update the specific internal energy -c

if ( nshr .eq. 1 ) then

stressPower = half * (* ( t Old(k 1) + t N (k 1) ) * t i I (k 1) +* ( stressOld(k,1) + stressNew(k,1) ) * strainInc(k,1) +* ( stressOld(k,2) + stressNew(k,2) ) * strainInc(k,2) +* ( stressOld(k,3) + stressNew(k,3) ) * strainInc(k,3) ) +* ( stressOld(k,4) + stressNew(k,4) ) * strainInc(k,4)

else

stressPower = half * (* ( stressOld(k,1) + stressNew(k,1) ) * strainInc(k,1) +* ( stressOld(k,2) + stressNew(k,2) ) * strainInc(k,2) +* ( stressOld(k,3) + stressNew(k,3) ) * strainInc(k,3) ) +

Writing User Subroutines with Abaqus

* ( stressOld(k,4) + stressNew(k,4) ) * strainInc(k,4) + * ( stressOld(k,5) + stressNew(k,5) ) * strainInc(k,5) + * ( stressOld(k,6) + stressNew(k,6) ) * strainInc(k,6)

end if

enerInternNew(k) = enerInternOld(k) + stressPower / density(k)

L7.148

VUMAT for Isotropic Hardening Plasticity

cc Update the dissipated inelastic specific energy -c

plasticWorkInc = half * ( yieldOld + yieldNew ) * deqpsenerInelasNew(k) = enerInelasOld(k)( ) ( )

* + plasticWorkInc / density(k)

end do

end ifc

returnend

Writing User Subroutines with Abaqus

Page 75: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.149

VUMAT for Isotropic Hardening Plasticity

subroutine xhard(syield, hard, eqplas, table, nvalue)include 'vaba_param.inc'

cdimension table(2 nvalue)dimension table(2, nvalue)

cparameter(zero=0.d0)

cc set yield stress to last value of table, hardening to zeroc

syield=table(1, nvalue)hard=zero

Writing User Subroutines with Abaqus

L7.150

VUMAT for Isotropic Hardening Plasticity

c if more than one entry, search tablec

if(nvalue.gt.1) thendo k1=1, nvalue-1eqpl1=table(2 k1+1)eqpl1=table(2,k1+1)if(eqplas.lt.eqpl1) theneqpl0=table(2, k1)

cc yield stress and hardeningc

deqpl=eqpl1-eqpl0syiel0=table(1, k1)syiel1=table(1, k1+1)dsyiel=syiel1-syiel0hard=dsyiel/deqpl

Writing User Subroutines with Abaqus

syield=syiel0+(eqplas-eqpl0)*hardgoto 10

endifend do

10 continueendifreturnend

Page 76: Writing a UMAT or VUMATread.pudn.com/downloads727/ebook/2906994/UMAT/USER-L07... · 2010-03-12 · L7.5 Overview • These interfaces make it possible to define any (proprietary)

L7.151

VUMAT for Isotropic Hardening Plasticity

• Remarks• This VUMAT yields very similar results as the ∗PLASTIC option with

ISOTROPIC hardening.

• This result is also true for large-strain calculations. The necessary rotations of stress and strain are taken care of by Abaqus.

• The key difference in the formulation is the use of the Green-Naghdi spin. Solid elements using the *PLASTIC option are formulated in terms of the Jaumann rate of stress but in terms of the Green-Naghdi rate of stress when used with a VUMAT.

• The routine calls a subroutine named XHARD to recover a piecewise linear hardening curve

Writing User Subroutines with Abaqus

hardening curve.• Simplified version of user subroutine VUHARD.

• It is straightforward to replace the piecewise linear curve by an analytic description.