PDA

View Full Version : ABAQUS Umat question


snowden
2004-08-23, 10:17
dear Jorgen:

I meet a problem. can you help me?

my question:
1. in abaqus, ABAQUS passs zero initial strain increment into subroutine umat and start the first increment of steps. but, in my model, there is a term which is devided by volumetric strain increment (dstran(1)+dstran(2)+dstran(3)). so, it can be implemented.

so can you give me some addvice to solve this problem?

2. this is my umat. in debeging, there is always a error:
code 1073741819.
can you help me with this problem?

many thanks!

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,
2 TEMP,DTEMP,PREDEF,DPREF,DPRED,MATERL,NDI,NSHR,NTEN S,
3 NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,DFGR D0,
4 DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
DIMENSION STRESS(NTENS),STATEV(NSTATV),DDSDDE(NTENS,NTENS),
1 DDSDDT(NTENS),DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NT ENS),
2 TIME(2),PREDEF(1),DPRED(1),PROPS(NPROPS),COORDS(3) ,DROT(3,3),
3 DFGRDO(3,3),DFGRD1(3,3)

DIMENSION CNE(6,6),GES(6),CALG11(6),CALG1(6,6),A(6),CALG(6,6 ),
1 SIGM(6),CN(6,6),TEMP(6),DSIGM(6),F(6)
DATA NEWTON,TOLER/10,1.0D-6/
C
c ELASTIC PROPERTIES
c
C IF(NPROPS.EQ.2) THEN
C
KAPAV=PROPS(1)
ENU=PROPS(2)
P0=PROPS(3)
c
C FORM THE UNIT STIFFNESS CNE, THE STIFFNESS EQUALS TO
C
IF(ENU.GT.0.4999.AND.ENU.LT.0.5001) ENU=0.499
EMOD=3.0*0.5*(1.0-2.0*ENU)/(1.0+ENU)
EG=1.0+4.0*EMOD/3.0
EG2=1.0-2.0*EMOD/3.0
ELAM=(EG-EG2)*0.5
C

C
C DEFINITE THE VOLUMETRIC STRAIN
C
DEV=0.0
DO K1=1,3
DEV=DEV+DSTRAN(K1)
ENDDO

C FORM THE CONSTANT ELASTIC STIFFNESS,CNE
C
DO 20 K1=1,6
DO 10 K2=1,6
CNE(K2,K1)=0.0
10 CONTINUE
20 CONTINUE
C
DO 40 K1=1,3
DO 30 K2=1,3
CNE(K2,K1)=EG2
30 CONTINUE
CNE(K1,K1)=EG
40 CONTINUE
CNE(4,4)=ELAM
C
SIGM=0.0
TEMP=0.0
PN=P0
DO 25 KNEWTON=1,NEWTON
K=PN/DEV*(EXP(DEV/KAPAV)-1.0)
DO I=1,NTENS
DO J=1,NTENS
C SIGM(J)=SIGM(J)+K*CNE(J,I)*DSTRAN(I)
DSIGM(I)=K*CNE(I,J)*DSTRAN(J)
SIGM(I)=SIGM(I)+K*CNE(I,J)*DSTRAN(J)
ENDDO
ENDDO
C
DO I=1,6
F(I)=SIGM(I)-TEMP(I)
ENDDO
C
DO I=1,6
IF(ABS(F(I)).LT.TOLER*SIGM(I)) GOTO 3
ENDDO
C
P=(SIGM(1)+SIGM(2)+SIGM(3))/3.0
C
PN=P
TEMP=SIGM
C
25 CONTINUE
WRITE(6,2) NEWTON
2 FORMAT(//,30X,'***WARNING-NOT CONVERGENCE',I3,'ITERATIONS')
3 CONTINUE

C
C UPDATE THE STRESS WHEN THE CONVERGENCE IS ACHIEVED
C
DO 60 K1=1,NTENS
STRESS(K1)=SIGM(K1)
60 CONTINUE

C FORM JACOBIAN MATRIX
C THE CONSISTENT TANGENT MODULI CALG: KN*CNE+(CNE:DE)*(PN+1/KAPAV-KN)/DEV
C
C
DO 500 K1=1,6
GES(K1)=1.0
500 CONTINUE
C
KN=(PN/(DEV))*(EXP(DEV/KAPAV)-1.0)
C
AA=(PN/DEV)*(EXP(DEV/KAPAV))/DEV-KN/DEV
A=AA*GES
C
DO I=1,6
DO J=1,6
CALG1(J,I)=(CNE(J,I)*DSTRAN(I))*A(I)
C
CALG(J,I)=KN*CNE(J,I)+CALG1(J,I)
ENDDO
ENDDO
C
DO I=1,NTENS
DO J=1,NTENS
DDSDDE(J,I)=0.0
ENDDO
ENDDO
C
DO I=1,NTENS
DO J=1,NTENS
DDSDDE(I,J)=DDSDDE(I,J)+CALG(I,J)
ENDDO
ENDDO
C
RETURN
END

many thanks

Jorgen
2004-08-24, 04:26
Here are a few comments:

(1) Yes, ABAQUS passes an initial strain increment at time 0 to "try out the UMAT". I do not understand why that is a problem for your. Can you explain more.

(2) When do you get the error message? Is it at the first increment, or later in on? Does the error occur inside your subroutine? If so, which line causes the error?

To answer these questions I would add print-statements inside the UMAT code to verify that the subroutine is doing what you think it should be doing.

Jorgen

snowden
2004-08-24, 05:00
dear Jorgen:

thank you very much. I explain my model as follows:

I want to simulate stress-dependent nonlinear elastic model.

at last, I got update algorithm of stress:

sigma(n+1)=sigma(n)+p(n)/dev*[exp(dev/kapav)-1]*cne*dstran

where, sigm(n+1)--stress at n+1; p(n)--mean stress at n; dev--increment of volumetric strain; kapav--one parameter; cne--unit known matrix; dstran-increment of strain


when I debug my subroutine, the subroutine can not be implemented.
I think it is possible to the case that p(n) is devided by dev.

thank you very much.

snowden
2004-08-24, 05:04
dear Jorgen:

for the second problem. I have solved

It turns to be that one variable temp is duplicated, which has been definited by ABAQUS internally.


thank you for your kind concern.