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.
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
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
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
Hi Chen,
Yes, even I have the same question myself. I am not sure about this.
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,
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.
see .dat and .log file. These are messages files abaqus refers to.