Gyawali
Civil/Environmental
- Sep 23, 2021
- 8
I want to solve the thermal transient analysis in Abaqus. The conductivity for my problem depends upon the temperature and time. Therefore, I have to use the Abaqus user subroutine. The temperature varies from 0 to 1. I have tried to run the analysis using the following USDFLD subroutine code which I have seen in the reply of thread799-281565 and modified for my equation. The problem is that whenever I change the equation, I still get the same result. What could be the problem? Can anyone help me, please?
For example If I use thermcond = D*exp(6*temper)*exp(currenttime*temp), instead of thermcond = D*exp(6*temper)/exp(currenttime*temp), I get the same result.
In the material section, I have assigned
Thermal conductivity, temperature, Field1 (which I have assigned equal to Thermal conductivity)
0.007346, 0, 0.007346
2.9634, 1, 2.9634
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,
1 TIME,DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,
2 KSPT,KSTEP,KINC,NDI,NSHR,COORD,JMAC,JMATYP,MATLAYO,LACCFLA)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME,ORNAME
CHARACTER*3 FLGRAY(15)
DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),
1 T(3,3),TIME(2)
DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*),COORD(*)
C enter constant-coefficient
PARAMETER (D = 0.007346)
C Use the current time:
currenttime = TIME(2)
C
C Get the temperature at the current integration point:
CALL GETVRM('TEMP',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,MATLAYO,LACCFLA)
C use the current temperature
temp = ARRAY(1)
C
C Determine the thermal conductivity:
thermcond = D*exp(6*temper)/exp(currenttime*temp)
C
C Set the field variable
FIELD(1) = thermcond
C
C Set the state variable
STATEV(1) = thermcond
C If error, write comment to .DAT file:
IF(JRCD.NE.0)THEN
WRITE(6,*) 'REQUEST ERROR IN USDFLD FOR ELEMENT NUMBER ',
1 NOEL,'INTEGRATION POINT NUMBER ',NPT
ENDIF
RETURN
END
Thank you in advance for your kind help.
For example If I use thermcond = D*exp(6*temper)*exp(currenttime*temp), instead of thermcond = D*exp(6*temper)/exp(currenttime*temp), I get the same result.
In the material section, I have assigned
Thermal conductivity, temperature, Field1 (which I have assigned equal to Thermal conductivity)
0.007346, 0, 0.007346
2.9634, 1, 2.9634
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,
1 TIME,DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,
2 KSPT,KSTEP,KINC,NDI,NSHR,COORD,JMAC,JMATYP,MATLAYO,LACCFLA)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME,ORNAME
CHARACTER*3 FLGRAY(15)
DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),
1 T(3,3),TIME(2)
DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*),COORD(*)
C enter constant-coefficient
PARAMETER (D = 0.007346)
C Use the current time:
currenttime = TIME(2)
C
C Get the temperature at the current integration point:
CALL GETVRM('TEMP',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,MATLAYO,LACCFLA)
C use the current temperature
temp = ARRAY(1)
C
C Determine the thermal conductivity:
thermcond = D*exp(6*temper)/exp(currenttime*temp)
C
C Set the field variable
FIELD(1) = thermcond
C
C Set the state variable
STATEV(1) = thermcond
C If error, write comment to .DAT file:
IF(JRCD.NE.0)THEN
WRITE(6,*) 'REQUEST ERROR IN USDFLD FOR ELEMENT NUMBER ',
1 NOEL,'INTEGRATION POINT NUMBER ',NPT
ENDIF
RETURN
END
Thank you in advance for your kind help.