2.1. Subroutine UserPL (Writing Your Own Plasticity Laws)

Ansys, Inc. recommends using current-technology elements and the UserMat subroutine for defining your own material model. However, if you are using an archived element type and wish to define a plasticity or viscoplasticity material model, the UserPL subroutine is applicable to archived element SOLID65.

*deck,userpl                      USERDISTRIB
      subroutine userpl (elem,intpt,mat,ncomp,kfirst,kfsteq,e,nu,dens,
     x prop,d,ktform,timval,timinc,tem,dtem,toffst,flu,dflu,epel,eppl,
     x statev,usvr,epeq,plwork,sigepl,sigrat,depeq,dt)
c
c *** primary function:   allow users to write their own plasticity laws.
c                           this logic is accessed with tb,user.
c                           the below demonstration logic is the same as using
c                           tb,bkin, without adaptive descent (nropt,,,off).
c                           Other plasticity rules may require internal 
c                           iterations and/or the more general definition of
c                           plasticity theory, discussed in the Theory
c                           Manual.
c *** secondary function:    demonstrate the use of user-written plasticity laws
c                 in this routine:
c                    a.    update the nonlinear strain history
c                    b.    compute the material tangent matrix if requested
c
c *** Notice - This file contains ANSYS Confidential information ***
c
c
c         Copyright ANSYS.  All Rights Reserved.
c         *** ansys, inc.
c
c  input arguments:
c     variable (type,sze,intent)    description
c
c     elem     (int,sc,in)         - element number (label)
c     intpt    (int,sc,in)         - element integration point number
c     mat      (int,sc,in)         - material reference number
c     ncomp    (int,sc,in)         - no. of stress/strain components (1,4 or 6)
c                                    1 - x
c                                    4 - x,y,z,xy
c                                    6 - x,y,z,xy,yz,xz
c     kfirst   (int,sc,in)         - 1 if first time through, 0 otherwise
c                                    (useful for initializing state variables
c                                    to a non-zero value)
c     kfsteq   (int,sc,in)         - 1 if first equilibrium iteration of a
c                                    substep, 0 otherwise
c
c     e        (dp,sc,in)          - average elastic modulus
c     nu       (dp,sc,in)          - average poisson ratio
c     dens     (dp,sc,in)          - current material density (mass/volume)
c     prop                         - linear material property array
c              (dp,ar(9),in)         (ex,ey,ez, gxy,gyz,gxz, nuxy,nuyz,nuxz)
c              (dp,ar(1),in)         if ncomp=1 (ex)
c     d        (dp,ar(ncomp,ncomp),in)- elastic stress-strain matrix
c     ktform   (int,sc,in)         - request key for tangent matrix formation
c                                    (=1, form tangent  .ne.1, do not form)
c
c     timval   (dp,sc,in)          - current time value
c     timinc   (dp,sc,in)          - time increment over this substep
c
c     tem      (dp,sc,in)          - temperature at the end of this substep
c     dtem     (dp,sc,in)          - temperature increment over this substep
c     toffst   (dp,sc,in)          - temperature offset from absolute zero
c     flu      (dp,sc,in)          - fluence at the end of this substep
c     dflu     (dp,sc,in)          - fluence increment over this substep
c
c     epel     (dp,ar(ncomp),inout)- modified total strain (trial strain)
c                                    epel = eptot - eppl - eptherm - ...
c                                    if a large strain analysis, epel is
c                                    rotation neutralized and is the hencky
c                                    (i.e. log) strain
c     eppl     (dp,ar(ncomp),inout)- plastic strain from previous substep
c
c     statev   (dp,ar(ncomp,6),inout)- state variables from previous substep
c     usvr     (dp,ar(nuval,nintp),inout)- additional state variables from
c                                    previous equilibrium iteration (saved
c                                    if the nsvr command is used)
c
c     epeq     (dp,sc,inout)       - effective plastic strain from prev substep
c     plwork   (dp,sc,inout)       - accumulated plastic work from prev substep
c
c  output arguments:
c     variable (type,sze,intent)    description
c
c     epel     (dp,ar(ncomp),inout)- elastic strain
c     eppl     (dp,ar(ncomp),inout)- updated plastic strain
c
c     statev   (dp,ar(ncomp,6),inout)- updated state variables
c     usvr     (dp,ar(nuval,nintp),inout)- updated additional state variables
c
c     epeq     (dp,sc,inout)       - updated effective plastic strain
c     plwork   (dp,sc,inout)       - updated accumulated plastic work
c
c     sigepl   (dp,sc,out)         - stress value on stress-strain curve at epeq
c     sigrat   (dp,sc,out)         - ratio of trial stress to yield stress
c     depeq    (dp,sc,out)         - increment in plastic strain (equivalent)
c                                    (used for auto time stepping - time step
c                                    is reduced if it exceeds .05)
c
c     dt       (dp,ar(ncomp,ncomp),out)- material tangent modulus
c
c  fortran parameters (to be defined by the user):
c     variable (type)              description
c     numinp   (int)               - number of data items in the user-defined
c                                    data table (tbdat commands)
c     nuval    (int)               - number of additional state variables per
c                                    integration point
c     nintp    (int)               - maximum number of integration points of
c                                    an element to be used with this routine
c                                    (14 is the maximum)
c         note:  nuval x nintp = nstv(on nsvr command); cannot exceed 840!
c
c  internal variables:
c     variable (type,sze)      description
c     b        (dp,ar(6,6))    - 2nd derivative of the yield function
c     c        (dp,ar(6,12))   - part of deff
c     con      (dp,sc)         - temporary variable
c     deppl    (dp,ar(6))      - plastic strain increment
c     dfds     (dp,ar(6))      - derivative of the yield function (normal)
c     dlamb    (dp,sc)         - plastic multiplier
c     ep       (dp,ar(6))      - shifted strain
c     epshfo   (dp,ar(6))      - initial shift strain (center of the yield surf)
c     epshft   (dp,ar(6))      - shift strain (center of the yield surface)
c     et       (dp,sc)         - tangent modulus (stress/total strain)
c     h        (dp,sc)         - plastic tangent modulus (stress/plastic strain)
c     n2       (int,sc)        - ncomp squared, ncomp*ncomp
c     seqtr    (dp,sc)         - equivalent (von mises) trial stress
c     sigtr    (dp,ar(6))      - trial stress
c     sigy     (dp,sc)         - yield stress
c     vect     (dp,ar(6))      - temporary vector
c