# how abaqus obtain DSTRAN by using UMAT for non-isothermal case

Hi, all,

I recently encounted a big question regarding to the temperature dependent UMAT case.

I used the UMAT for non-isothermal elasticity as followed. The DDSDDE calculating part is not shown here.

You can see that I output  ETHERM(K1),EELAS(K1),STRAN(K1),DSTRAN(K1) at the beginning of the code.

And this UMAT also saves ETHERM and EELAS to state variable array.

Job set up is no loading and using the static general step. But essentially it is a free expansion with thermal expansion coef of 6e-6 and temperature from 0 to 80, which is reflected in UMAT only. After Abaqus completes the job, these resluts are all correct, SDV(1-6)=EELAS=0, SDV(7-9)=ETHERM=4.8e-4. And the DSTRAN is 4.8e-4 as well.

My question is that how abaqus knows DSTRAN here, since I did not apply any mechanical loading and not tell abaqus that this is a thermal expansion analysis here. I think DSTRAN is supposed to be given by specific dispalcement or thermal expasion.

Could someone help me with that? I have been struggling with this for a while.

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*8 CMNAME
C
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)

DIMENSION EELAS(6), ETHERM(6), DTHERM(6), DELDSE(6,6)
C
PARAMETER(ZERO=0.D0, ONE=1.D0, TWO=2.D0, THREE=3.D0, SIX=6.D0)
C ----------------------------------------------------------------
C     UMAT FOR ISOTROPIC THERMO-ELASTICITY WITH LINEARLY VARYING
C     MODULI - CANNOT BE USED FOR PLANE STRESS
C ----------------------------------------------------------------
C     PROPS(1) - E(T0)
C     PROPS(2) - NU(T0)
C     PROPS(3) - T0
C     PROPS(4) - E(T1)
C     PROPS(5) - NU(T1)
C     PROPS(6) - T1
C     PROPS(7) - ALPHA
C     PROPS(8) - T_INITIAL
C     ELASTIC PROPERTIES AT START OF INCREMENT
C

WRITE (6,*) 'ENTER UMAT'

DO K1=1, NTENS
WRITE(6,*) ETHERM(K1),EELAS(K1),STRAN(K1),DSTRAN(K1)
END DO

C
C     CALCULATE THERMAL EXPANSION
C

DO K1=1,NDI
ETHERM(K1)=PROPS(7)*(TEMP-PROPS(8))
DTHERM(K1)=PROPS(7)*DTEMP

END DO
DO K1=NDI+1,NTENS
ETHERM(K1)=ZERO
DTHERM(K1)=ZERO
END DO
C
C     CALCULATE STRESS, ELASTIC STRAIN AND THERMAL STRAIN
C
DO K1=1, NTENS
DO K2=1, NTENS
STRESS(K2)=STRESS(K2)+DDSDDE(K2,K1)*(DSTRAN(K1)-DTHERM(K1))+DELDSE(K2,K1)*(STRAN(K1)-ETHERM(K1))
END DO
ETHERM(K1)=ETHERM(K1)+DTHERM(K1)
EELAS(K1)=STRAN(K1)+DSTRAN(K1)-ETHERM(K1)
END DO

C
C     STORE ELASTIC AND THERMAL STRAINS IN STATE VARIABLE ARRAY
C
DO K1=1, NTENS
STATEV(K1)=EELAS(K1)
STATEV(K1+NTENS)=ETHERM(K1)
END DO
RETURN
END

Thanks for helping.

Chen

Email: chen1164@purdue.edu

### Another question is since I

Another question is since I do not designate thermal expansion for abaqus, how Abaqus calculate the strain?

### get the subroutine manual

Get the file
http://imechanica.org/files/Writing User Subroutines with ABAQUS.pdf
it may show up as
http://imechanica.org/files/Writing%20User%20Subroutines%20with%20ABAQUS.pdf

------------------------------------------
Ruhr-University
Bochum
Germany

Hi, thanks for your reply. I have that file in hand. I just do not know how abaqus with UMAT gets strain updated. Since I did not desigante any loading and thermal expansion property in abaqus at all.

### Abaqus is in charge

The strain incrementation is provided by Abaqus. See the chapter on UMAT in the common Subroutine Manual

------------------------------------------
Ruhr-University
Bochum
Germany

### STRAN and DSTRAN are

STRAN and DSTRAN are already elastic strains only meaning that ABAQUS deducts thermal strains if any from the total strain and then provides it to UMAT as input. Bottomline line is that you can't deduct thermal strain again from STARN+DSTRAN inside the UMAT to calculate elastic strain. I hope this helps.

On the other hand, I have a question that you might be able to answer. Is it possible to update strain instead of stress in UMAT or any other subroutine for that matter? I know that I can update strain using UEXPAN but that subroutine is not serving me the purpose of my calculations.

Thanks,

Mandar

### Hi, Mandar, thanks for your

But my question lies on how abaqus know DTRAN at the very beginning. Since I do not have any loading applied here.

Basically, the DSTRAN or STRAN are calculated from displacement field and passed into UMAT to update STRESS by UMAT.

Hi Chen,

Mandar

### I am kinda understanding it

I am kinda understanding it now. But only for this case...

### Can you explain it? It

Can you explain it? It would be very interesting to understand.

Thanks,

Mandar

### not possible

User's manual

15.1.1 User subroutines: overview

User subroutines must perform their intended function without overwriting other parts of Abaqus. In particular, you should redefine only those variables identified in this chapter as “variables to be defined.” Redefining “variables passed in for information” will have unpredictable effects.

------------------------------------------
Ruhr-University
Bochum
Germany

### Hi Frank,  Thanks for

Hi Frank,

I just finished coding UMAT for hyperelastic material and tested it on
one element for uniaxial and simple shear boundary conditions. It works
fine for one element. But, if I try to run a simulation for more than
one element, ABAQUS exits with an error. The message says that the error
can be found in message file if the file exists and obviously the .msg
file does not exist. Do you have any idea about what could be going wrong or
where should I look for the kind of error I am encountering with?

Mandar

### see .dat and .log file.

see .dat and .log file. These are messages files abaqus refers to. 