Hello,
I am currently developing a model to manipulate thermal strain during solidification.
I simulated a simple 3D coupled temperature-displacement procedure with the following input for temperature dependent expansion coefficeint:
*EXPANSION, ZERO=0
2.4E-05, 20
2.003E-05, 733
Now, I want to replicate the thermal strain (THE) result I obtained from the above analysis using UEXPAN subroutine. I tried using same values as above in UEXPAN as follows:
SUBROUTINE UEXPAN(EXPAN,DEXPANDT,TEMP,TIME,DTIME,PREDEF,DPRED,STATEV,CMNAME,NSTATV,NOEL)
INCLUDE 'ABA_PARAM.INC'
CHARACTER*80 CMNAME
DIMENSION EXPAN(*),DEXPANDT(*),TEMP(2),TIME(2),PREDEF(*),DPRED(*),STATEV(NSTATV)
real (kind = 8) :: dE, alpha_1, alpha_0, T1, T0, E0, E1
integer :: allocateError
real (kind = 8), dimension(:,:), allocatable, save :: T_Alpha ! contains density (temperature) table
allocate (T_Alpha(2,2), stat=allocateError)
T_Alpha(1,1) = 20
T_Alpha(2,1) = 733
T_Alpha(1,2) = 2.4E-05
T_Alpha(2,2) = 2.003E-05
T0 = TEMP(1)
T1 = TEMP(1)+TEMP(2)
alpha_1 = linearInterpolData(T1, T_Alpha)
alpha_0 = linearInterpolData(T0, T_Alpha)
E0 = alpha_0 * T0
E1 = alpha_1 * T1
dE = E1 - E0
EXPAN(1) = dE
DEXPANDT(1) = dE/TEMP(2)
RETURN
As you can see I tried to use the same values for expansion coefficient from before. linearInterpolData function will return a linearly interpolated value of expansion coefficient corresponding to the provided temperature. For out of bound input, it will return the nearest boundry value. I have checked this function thoroughly and it functions correctly.
The result (thermal strain) after using UEXPAN is not the same as using the same values without subroutine. Although the difference in the result is not huge, I am wondering if I am missing something in the implementation of the subroutine.