User login

Navigation

You are here

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.


有人能帮我吗?我哈ve 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 do not designate thermal expansion for abaqus, how Abaqus calculate the strain?

Frank Richter's picture

Get the file
http://万博manbetx平台m.limpotrade.com/files/WritingUser Subroutines with ABAQUS.pdf
it may show up as
http://万博manbetx平台m.limpotrade.com/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.

Frank Richter's picture

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 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.

另一方面,我有一个问题,你开启t 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 reply,

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,

Yes, even I have the same question myself. I am not sure about this.

Mandar

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

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

Thanks,

Mandar

Frank Richter's picture

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 your reply. Here is some other issue.

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?

Thanks in advance.

Mandar

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

Subscribe to Comments for

More comments

Syndicate

Subscribe to Syndicate