UMAT Example
UMAT Example
**
E = 210000.0
XNUE = 0.3
SIGY0 = 240.
h = 0.0
C
C
C
C
C
C
C
C
C
C
C
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
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
C
C
C
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
C
C
C
C
C
C
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
C
C
C
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)
C
p = p + dp
C
C
C
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
**