0% found this document useful (0 votes)
480 views9 pages

UMAT Example

The user subroutine UMAT is for ABAQUS/Standard and incorporates elastic-plastic behavior with linear isotropic hardening. It is formulated for plane strain and axisymmetric elements with implicit integration and consistent Jacobian. The subroutine calculates the stress increment using an incremental plasticity approach with Newton-Raphson iterations to determine the plastic strain increment. It updates the stress, plastic strain, and isotropic hardening variables at each increment. Several utility subroutines are included to calculate the effective stress, deviatoric stress, Jacobian, and for matrix operations.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
Download as docx, pdf, or txt
0% found this document useful (0 votes)
480 views9 pages

UMAT Example

The user subroutine UMAT is for ABAQUS/Standard and incorporates elastic-plastic behavior with linear isotropic hardening. It is formulated for plane strain and axisymmetric elements with implicit integration and consistent Jacobian. The subroutine calculates the stress increment using an incremental plasticity approach with Newton-Raphson iterations to determine the plastic strain increment. It updates the stress, plastic strain, and isotropic hardening variables at each increment. Several utility subroutines are included to calculate the effective stress, deviatoric stress, Jacobian, and for matrix operations.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1/ 9

***********************************************************************************

** UMAT, FOR ABAQUS/STANDARD INCORPORATING ELASTIC-PLASTIC LINEAR


**
** ISOTROPIC HARDENING. LARGE DEFORMATION FORMULATION FOR PLANE STRAIN
**
** AND AXI-SYMMETRIC ELEMENTS. IMPLICIT INTEGRATION WITH CONSISTENT JACOBIAN
***********************************************************************************
***********************************************************************************
**
**
**
*USER SUBROUTINE
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
C
C
DIMENSION STRESS(NTENS),STATEV(NSTATV),
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)
C
C
PARAMETER (M=3,N=3,ID=3,ZERO=0.D0,ONE=1.D0,TWO=2.D0,THREE=3.D0,
+
SIX=6.D0, NINE=9.D0, TOLER=1.D-5)
C
DIMENSION XIDEN(M,N),XNV(4),DPSTRAN(4), STRESSOLD(4),
+
DESTRAN(4), DSTRESS(4), XNDIR(M,N),
+
STR(M,N),DSTR(M,N), DPSTRN(M,N),
+
DV(4), DDS(4,4), DPROD(4), DYPROD(4,4)
C
DOUBLE PRECISION COUNT
DOUBLE PRECISION p, r
FOUT=111
OPEN(UNIT=111,FILE="D:\DAVID\ABQ.OUT",STATUS='UNKNOWN')
C
C
C
C
C
C-------------------------------------------------------------------C
C
SPECIFY MATERIAL PROPERTIES
C
C

**

E = 210000.0
XNUE = 0.3
SIGY0 = 240.
h = 0.0
C
C
C

ZERO MATRICES WITH UNSPECIFIED COMPONENTS


DO I=1,M
DO J=1,N
STR(I,J)=0.0
END DO
END DO

C
C
C
C

RECOVER EFFECTIVE PLASTIC STRAIN, p, AND ISOTROPIC


HARDENING VARIABLE, r,FROM PREVIOUS TIME STEP
p = STATEV(1)
r = STATEV(2)
COUNT = STATEV(3)
write(FOUT,*) ' '
write(FOUT,22) 'COUNT = ', COUNT
write(FOUT,22) 'Time = ', TIME(1)
write(FOUT,22) 'PE Before = ', p
write(FOUT,*) 'Delta E11 = ', DSTRAN(1)
write(FOUT,*) 'Delta E22 = ', DSTRAN(2)
write(FOUT,*) 'Delta E12 = ', DSTRAN(4)
write(FOUT,*) 'Delta E33 = ', DSTRAN(3)
22 format (A,E)

C
C
C
C

SET UP ELASTICITY MATRIX


EBULK3 = E/(ONE-TWO*XNUE)
XK = EBULK3/THREE
EG2 = E/(ONE+XNUE)
EG = EG2/TWO
ELAM = (EBULK3-EG2)/THREE

C
C
DO K1 = 1, 3
DO K2 = 1, 3
DDSDDE(K2,K1) = ELAM
END DO
DDSDDE(K1,K1) = EG2 + ELAM
END DO
C
DDSDDE(4,4) = EG
C
C

DEFINE IDENTITY MATRIX

C
DO 50 I=1,M
DO 50 J=1,N
IF(I .EQ. J) THEN
XIDEN(I,J)=1.0D0
ELSE
XIDEN(I,J)=0.0D0
END IF
50 CONTINUE
C
C
SAVE STRESS AT BEGINNING OF TIME STEP IN STRESSOLD
C
DO K=1,4
STRESSOLD(K) = STRESS(K)
END DO
C
C
write(FOUT,*) ' STRESS11 = ', STRESSOLD(1)
C
write(FOUT,*) ' STRESS22 = ', STRESSOLD(2)
C
write(FOUT,*) ' STRESS12 = ', STRESSOLD(4)
C
write(FOUT,*) ' STRESS33 = ', STRESSOLD(3)
C
C
OBTAIN TRIAL (ELASTIC) STRESS
C
CALL KMLT1(DDSDDE,DSTRAN,DSTRESS,NTENS)
DO K=1,NTENS
STRESS(K) = STRESS(K) + DSTRESS(K)
END DO
C
C
WRITE TRIAL STRESSES IN MATRIX FORM
C
DO K = 1,3
STR(K,K) = STRESS(K)
END DO
STR(1,2) = STRESS(4)
STR(2,1) = STRESS(4)
C
C
CALCULATE DEVIATORIC TRIAL STRESS
C
CALL KDEVIA(STR,XIDEN,DSTR)
C
C
CALCULATE EFFECTIVE TRIAL STRESS
C
CALL KEFFP(DSTR,PJ)
C
C DETERMINE TRIAL FLOW DIRECTION FOR USE WITH THE JACOBIAN
C
DO I=1,3
DO J=1,3
XNDIR(I,J) = DSTR(I,J)/PJ
END DO
END DO

C
C
C

...AND WRITE IN VOIGT NOTATION


DO K=1,3
XNV(K) = XNDIR(K,K)
END DO
XNV(4) = XNDIR(1,2)

C
C
C

DETERMINE IF THE YIELD CONDITION IS SATISFIED


ZY = PJ - r - SIGY0

C
write(FOUT,*) 'Current Eff Stress = ', PJ
31 format (A,E)
write(FOUT,*) 'Previous Yield Stress = ', (SIGY0+r)
32 format (A,E)
C
IF (ZY.GT.0.) THEN
C
C
C

USE NEWTON ITERATION TO DETERMINE EFFECTIVE PLASTIC STRAIN INCREMENT


r0 = r
dp = 0.
DO KNEWT=1,10
RES = PJ-3.*EG*dp-r-SIGY0
dp = dp + RES/(3.*EG+h)
r = r0 + h*dp
IF(DABS(RES).LT.TOLER) GOTO 10
END DO
10 CONTINUE

C
C
C

DETERMINE THE INCREMENTS IN PLASTIC STRAIN


DO I = 1,3
DO J = 1,3
DPSTRN(I,J) = (THREE/TWO)*dp*DSTR(I,J)/PJ
END DO
END DO

C
C
C

WRITE THE STRAIN INCREMENTS IN VOIGT NOTATION (WITH ENGG SHEARS)


DO K=1,3
DPSTRAN(K) = DPSTRN(K,K)
END DO
DPSTRAN(4) = 2*DPSTRN(1,2)

C
write(FOUT,*)
write(FOUT,*)
write(FOUT,*)
write(FOUT,*)
C

'Delta
'Delta
'Delta
'Delta

PE11
PE22
PE12
PE33

=
=
=
=

',
',
',
',

DPSTRAN(1)
DPSTRAN(2)
DPSTRAN(4)
DPSTRAN(3)

C
C

CALCULATE THE ELASTIC STRAIN INCREMENTS


DO K=1,4
DESTRAN(K)=DSTRAN(K)-DPSTRAN(K)
END DO

C
C
C

DETERMINE STRESS INCREMENT


CALL KMLT1(DDSDDE,DESTRAN,DSTRESS,NTENS)

C
write(FOUT,*)
write(FOUT,*)
write(FOUT,*)
write(FOUT,*)
C
C
C
C

'Delta
'Delta
'Delta
'Delta

ES11
ES22
ES12
ES33

=
=
=
=

',
',
',
',

DSTRESS(1)
DSTRESS(2)
DSTRESS(4)
DSTRESS(3)

UPDATE THE STRESS, EFFECTIVE PLASTIC STRAIN


(NOTE: ISOTROPIC HARDENING VARIABLE ALREADY UPDATED)
DO K = 1,NTENS
STRESS(K) = STRESSOLD(K) + DSTRESS(K)
END DO

C
p = p + dp
C
C
C

STORE UPDATED STATE VARIABLES


STATEV(1) = p
STATEV(2) = r
write(FOUT,12) 'PE After = ', p
12 format (A,E)

C
C
C DETERMINE JACOBIAN
C
C
XR = (PJ-3.*EG*dp)/PJ
C
Q = (ONE/(ONE+3.*EG/h)-XR)*THREE/TWO
C
DO I=1,3
C
DO J=1,3
C
DDSDDE(I,J) = 2*EG*Q*XNV(I)*XNV(J)
C
+ + (XK-EG*XR*TWO/THREE) + TWO*EG*XR*XIDEN(I,J)
C
END DO
C
END DO
C
DO K=1,3
C
DDSDDE(K,4) = TWO*EG*Q*XNV(K)*XNV(4)
C
DDSDDE(4,K) = DDSDDE(K,4)
C
END DO
C
DDSDDE(4,4) = TWO*EG*Q*XNV(4)*XNV(4) + EG*XR
C
C--------------------------------------------------------C Following using the continuum Jacobian ...

C
DO K1 = 1, 3
DO K2 = 1, 3
DDS(K2,K1) = ELAM
END DO
DDS(K1,K1) = EG2 + ELAM
END DO
C
DDS(4,4) = EG
C****************************************************************************
C Using the flow vector at the end of increment
C ** if user wanna use the flow vector at trial stress, delete code btw **
C
C
WRITE STRESSES AT TIME T+1 IN MATRIX FORM
C
DO K = 1,3
STR(K,K) = STRESS(K)
END DO
STR(1,2) = STRESS(4)
STR(2,1) = STRESS(4)
STR(1,3) = 0.0
STR(2,3) = 0.0
STR(3,1) = 0.0
STR(3,2) = 0.0
C
C
CALCULATE DEVIATORIC STRESS AT TIME T+1
C
CALL KDEVIA(STR,XIDEN,DSTR)
C
C
CALCULATE EFFECTIVE STRESS AT TIME T+1
C
CALL KEFFP(DSTR,PJ)
C
C DETERMINE TRIAL FLOW DIRECTION FOR USE WITH THE JACOBIAN
C
DO I=1,3
DO J=1,3
XNDIR(I,J) = DSTR(I,J)/PJ
END DO
END DO
C
C ...AND WRITE IN VOIGT NOTATION
C
DO K=1,3
XNV(K) = XNDIR(K,K)
END DO
XNV(4) = XNDIR(1,2)
C****************************************************************************
C
C DETERMINE JACOBIAN
C

CALL KMLT1(DDS,XNV,DPROD,NTENS)
CALL DOTPROD(XNV,DPROD,XNDN,NTENS)
C
HARD = XNDN+h
C
CALL KMLT1(DDS,XNV,DV,NTENS)
CALL DYADICPROD(DPROD,DV,DYPROD,NTENS)
DO I=1,4
DO J=1,4
DYPROD(I,J) = DYPROD(I,J)/HARD
END DO
END DO
C
DO I=1,4
DO J=1,4
DDSDDE(I,J) = DDS(I,J) - DYPROD(I,J)
END DO
END DO
C
C--------------------------------------------------------END IF
C
STATEV(3) = COUNT + 1
C
RETURN
END
**
***********************************************
**
UTILITY SUBROUTINES
*
***********************************************
**
**
***************************************************
**
MULTIPLY 4X4 MATRIX WITH 4X1 VECTOR *
***************************************************
*USER SUBROUTINE
SUBROUTINE KMLT1(DM1,DM2,DM,NTENS)
C
INCLUDE 'ABA_PARAM.INC'
C
PARAMETER (M=4)
C
DIMENSION DM1(M,M),DM2(M),DM(M)
C
DO 10 I=1,NTENS
X=0.0
DO 20 K=1,NTENS
Y=DM1(I,K)*DM2(K)
X=X+Y
20 CONTINUE
DM(I)=X

10

CONTINUE
RETURN
END

**
**
***************************************
**
EFFECTIVE STRESS
*
** (CONTRACTED MATRIX CALCULATION) *
***************************************
*USER SUBROUTINE
SUBROUTINE KEFFP(EFF1,VAL1)
C
INCLUDE 'ABA_PARAM.INC'
C
PARAMETER (M=3,N=3)
DIMENSION EFF1(M,N)
C
X=0.0
DO 10 I=1,M
DO 10 J=1,N
X=X+EFF1(I,J)*EFF1(I,J)
10 CONTINUE
IF(X .LE. 0.0) GO TO 20
VAL1=DSQRT((3.0/2.0)*X)
20 RETURN
END
**
**
**
********************************************
**
DOT PRODUCT OF TWO VECTORS
*
********************************************
*USER SUBROUTINE
SUBROUTINE DOTPROD(DM1,DM2,DM,NTENS)
C
INCLUDE 'ABA_PARAM.INC'
C
C
PARAMETER (M=4)
C
DIMENSION DM1(4),DM2(4)
C
Y=0.0
DO 20 K=1,NTENS
X=DM1(K)*DM2(K)
Y=X+Y
20 CONTINUE
DM=Y
RETURN
END
**
SUBROUTINE DYADICPROD(DM1,DM2,DM3,NTENS)

C
INCLUDE 'ABA_PARAM.INC'
C
C
C

PARAMETER (M=4)
DIMENSION DM1(4),DM2(4),DM3(4,4)

C
DO I=1,4
DO J=1,4
DM3(I,J) = DM1(I)*DM2(J)
END DO
END DO
C
RETURN
END
**
*****************************************************
** DEVIATORIC STRESS CALCULATION *
*****************************************************
*USER SUBROUTINE
SUBROUTINE KDEVIA(STRSS,XIDENTY,DEVITO)
C
INCLUDE 'ABA_PARAM.INC'
C
PARAMETER (M=3,N=3)
DIMENSION STRSS(M,N),XIDENTY(M,N),DEVITO(M,N)
C
X=0.0
DO 10 I=1,M
DO 10 J=1,N
IF(I .EQ. J) THEN
X=X+STRSS(I,J)
ELSE
END IF
10 CONTINUE
C
DO 20 I=1,M
DO 20 J=1,N
IF(I .EQ. J) THEN
DEVITO(I,J)=STRSS(I,J)-((1./3.)*X*XIDENTY(I,J))
ELSE
DEVITO(I,J)=STRSS(I,J)
END IF
20 CONTINUE
RETURN
END
**

You might also like