At present I'm trying to create an UMAT for simple viscoelastic behavior.
I would like to implement the differential equation model ( as described in the finite element method Zienkiewicz chapter 3)
s = 2G(mu0*E + sum(mu_m*qm) (eq.1)
where
qdot + 1/lambdam*q = Edot
So for every new increment I have to calculate q_(n+1) and fill it in eq.1 and finally I calculate the jacobian.
So far I succeeded to implement all this, and it turned out that the subroutine works on 1 element.
Now I notice that in case ABAQUS needs more iterations I do not reach convergence.
So I'm wondering what might go wrong during these iterations. What about updates of the statev vector during the iterations?
Below I copy the UMAT file that I made:
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CM NAME,
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNE WDT,
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KIN C)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
DIMENSION STRESS(NTENS),STATEV(NSTATV),
1 DDSDDE(NTENS,NTENS),
2 DDSDDT(NTENS),DRPLDE(NTENS),
3 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED (1),
4 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGR D1(3,3)
DIMENSION DSTRES(6),D(3,3)
DOUBLE PRECISION ONE, TWO, THREE
DOUBLE PRECISION KQN(6), KQ(6)
DOUBLE PRECISION K, G, LAMBDA1, MU0, MU1, ID(3,3)
DOUBLE PRECISION TERM1, KE(6), KDE(6), KEM, KDEM
INTEGER K1, K2
C VARIABLES
ONE = 1.0
TWO = 2.0
THREE = 3.0
ID(1,1) = 2d0/3d0
ID(1,2) = -1d0/3d0
ID(1,3) = -1d0/3d0
C
C
ID(2,1) = -1d0/3d0
ID(2,2) = 2d0/3d0
ID(2,3) = -1d0/3d0
C
C
ID(3,1) = -1d0/3d0
ID(3,2) = -1d0/3d0
ID(3,3) = 2d0/3d0
C ELASTIC PROPERTIES
G = 2.0E9
K = 1.8E9
MU0 = 0.5
MU1 = 0.4
LAMBDA1 = 1000.0
C DEVIATORIC STRAIN DEFINITION
C CALL DEVIATORIC(ID)
DO K1 = 1,3
KEM = 0.0
KDEM = 0.0
DO K2 = 1,3
KEM = ID(K1,K2)*STRAN(K2) + KEM
KDEM = ID(K1,K2)*DSTRAN(K2) + KDEM
END DO
KE(K1) = KEM
KDE(K1) = KDEM
END DO
DO K1 = 4,6
KE(K1) = 0.5*STRAN(K1)
KDE(K1) = 0.5*DSTRAN(K1)
END DO
EV = 0.0
DEV = 0.0
DO K1 = 1,3
EV = EV + STRAN(K1)
DEV = DEV + DSTRAN(K1)
END DO
IF (KINC.LE.1) THEN
DO K1 = 1,6
KQN(K1) = KE(K1)
STATEV(K1) = KQN(K1)
END DO
GOTO 10
ELSE
DO K1 = 1,6
KQ(K1) = STATEV(K1)
KQN(K1) = ((1.0 - (0.5*DTIME)/LAMBDA1)*KQ(K1)
1 + KDE(K1))/(1.0 + 0.5*DTIME/LAMBDA1)
END DO
END IF
DO K1 = 1,6
STATEV(K1) = KQN(K1)
END DO
10 DO K1 = 1,3
STRESS(K1) = 2.0*G*(MU0*KE(K1) + MU1*KQN(K1))
END DO
DO K1 = 4,6
STRESS(K1) = 2.0*G*(MU0*KE(K1) + MU1*KQN(K1))
END DO
DO K1 = 1,3
STRESS(K1) = STRESS(K1) + K*EV
END DO
C DEFINE THE JACOBIAN OR TANGENTIAL MATRIX.
TERM1 = 2.0*G*(MU0 + MU1/(1.0+0.5*DTIME/LAMBDA1))
DO K1 = 1,6
DO K2 = 1,6
DDSDDE(K2,K1) = 0.0
END DO
END DO
DO K1 = 1,3
DO K2 = 1,3
DDSDDE(K1,K2) = TERM1*ID(K1,K2) + K
END DO
END DO
DO K1 = 4,6
DDSDDE(K1,K1) = 0.5*TERM1
END DO
STATEV(7) = KINC
write(6,*) 'state', statev
RETURN
END
Jan


Reply With Quote

Bookmarks