Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

UMAT subroutine help

Status
Not open for further replies.

elle53

Structural
Apr 16, 2015
4
0
0
GB
Dear all,

I am trying to get familiar with UMAT subroutines so I started experimenting with a simple UMAT for thermo-elastic behaviour.

I've written the following code and run a coupled temperature displacement analysis using the UMAT code. I then compared the results with the same model that used the built-in software capabilities instead of the UMAT. Although shear stress components are fine, direct stress components are off.

Any ideas why is this the case?

Here is the code:

SUBROUTINE UMAT(STRESS, STATEV, DDSDDE, SSE, SPD, SCD, RPL,
1 DDSDDT, DRPLDE, DRPLDT, STRAN, DSTRAN, TIME, DTIME, TEMP, DTEMP,
2 PREDEF, DPRED, CMNAME, NDI, NSHR, NTENS, NSTATV, PROPS, NPROPS,
3 COORDS, DROT, PNEWDT, CELENT, DFGRD0, DFGRD1, NOEL, NPT, LAYER,
4 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(NTENS),
2 PREDEF(1), DPRED(1), PROPS(NPROPS), COORDS(3), DROT(3, 3),
3 DFGRD0(3, 3), DFGRD1(3, 3), TIME(2)
C
DOUBLE PRECISION alpg, depsth, depsK, EMOD, POIS, deps(NTENS)

C
Integer i, j
C
C -----------------------------MATERIAL PROPERTIES-----------------------------------
EMOD = 70000D0
POIS = 0.22D0
alp = 0.000009D0
C
C --------------------------THERMOELASTICITY------------------------------
C
LAMDA=POIS*EMOD/((1D0+POIS)*(1D0-2D0*POIS)) !Lame 1st constant
MI=EMOD/(2D0*(1D0+POIS)) !Lame 2nd constant
C
depsth = alp*DTEMP !Thermal strain increment
depsK=SUM(DSTRAN(1:NDI))-3D0*depsth !εkk-3*depsth
deps(1:NDI)=DSTRAN(1:NDI)-depsth !εij-depsth*δij
deps(NDI+1:NTENS)=0.5D0*DSTRAN(NDI+1:NTENS) !εij-depsth*δij
C
DO i=1, NDI
STRESS(i)=STRESS(i)+(LAMDA*depsK)+(2D0*MI*deps(i))
END DO
DO j=NDI+1,NTENS
STRESS(j)=STRESS(j)+2D0*MI*deps(j)
END DO
C
C Tangent stiffness matrix
DO i=1, NDI
DO j=1, NDI
DDSDDE(i, j)=LAMDA
END DO
DDSDDE(i, i)=LAMDA+2D0*MI
DDSDDE(i+NDI, i+NDI)=MI
END DO
C
C
RETURN
END

Many thanks!
 
Status
Not open for further replies.
Back
Top