LeeAPower
Mechanical
- Nov 25, 2014
- 3
Folks,
I am working on HETVAL subroutine to calculate degree of cure/decomposition based on temperature history. Below code seperately calculate STATEV(1) during heating (DTEMP0 > 0) and cooling (DTEMP0 < 0). My goal is to permantenly update STATEV(1) based upon the highest temperature. Thus, if temperature decreases, STATEV(1) should not decrease. Am I missing something in my subroutine? I need your professional comments. Thank you.
J. Lee
-------------------------------------------------------------------------
SUBROUTINE HETVAL(CMNAME,TEMP,TIME,DTIME,STATEV,FLUX,PREDEF,DPRED)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
REAL(8) TEMP(2),STATEV(*),PREDEF(*),TIME(2),FLUX(2),DPRED(*),
1 DECOMP,TEMP0,DTEMP0,
C STATEV(1) = DEGREE OF LINEAR THERMAL DECOMPOISTION
C DEFINED IN THE RANGE OF 350~600C
DECOMP = STATEV(1)
C SAVE TEMPEATURE TO TEMP0
TEMP0 = TEMP(1)
C SAVE TEMPEATURE INCREASE TO DTEMP0
DTEMP0 = TEMP(2)
C RESIN BEGINS TO DECOMPOSE FROM 350-600C DURING HEATING
C FLUX(1) = HEAT FLUX
C FLUX(2) = RATE OF CHANGE OF HEAT FLUX PER TEMPERATURE
IF (DTEMP0 > 0.0) THEN
C UNDAMAGED RANGE
IF (TEMP0 < 350.0) THEN
STATEV(1) = 0.0
FLUX(1) = 0.0
FLUX(2) = 0.0
C PARTIALLY DAMAGED RANGE
ELSEIF (TEMP0 >= 350.0 .and. TEMP0 <= 600.0) THEN
STATEV(1) = (TEMP0-350.0)/250.0
FLUX(1) = 0.0
FLUX(2) = 0.0
C FULLY DAMAGED RANGE
ELSEIF (TEMP0 > 600.0) THEN
STATEV(1) = 1.0
FLUX(1) = 0.0
FLUX(2) = 0.0
END IF
C DURING COOLING
C DEGREE OF THE MATRIX DECOMPOSITION REMAINS CONSTANT
ELSEIF (DTEMP0 <= 0.0) THEN
STATEV(1) = DECOMP
FLUX(1) = 0.0
FLUX(2) = 0.0
END IF
C LIMIT UPPER BOUNDARY
C DEGREE OF THE MATRIX DECOMPOSITION NEVER EXCEED 1
IF (STATEV(1) > 1.0 ) THEN
STATEV(1) = 1.0
END IF
RETURN
END
I am working on HETVAL subroutine to calculate degree of cure/decomposition based on temperature history. Below code seperately calculate STATEV(1) during heating (DTEMP0 > 0) and cooling (DTEMP0 < 0). My goal is to permantenly update STATEV(1) based upon the highest temperature. Thus, if temperature decreases, STATEV(1) should not decrease. Am I missing something in my subroutine? I need your professional comments. Thank you.
J. Lee
-------------------------------------------------------------------------
SUBROUTINE HETVAL(CMNAME,TEMP,TIME,DTIME,STATEV,FLUX,PREDEF,DPRED)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
REAL(8) TEMP(2),STATEV(*),PREDEF(*),TIME(2),FLUX(2),DPRED(*),
1 DECOMP,TEMP0,DTEMP0,
C STATEV(1) = DEGREE OF LINEAR THERMAL DECOMPOISTION
C DEFINED IN THE RANGE OF 350~600C
DECOMP = STATEV(1)
C SAVE TEMPEATURE TO TEMP0
TEMP0 = TEMP(1)
C SAVE TEMPEATURE INCREASE TO DTEMP0
DTEMP0 = TEMP(2)
C RESIN BEGINS TO DECOMPOSE FROM 350-600C DURING HEATING
C FLUX(1) = HEAT FLUX
C FLUX(2) = RATE OF CHANGE OF HEAT FLUX PER TEMPERATURE
IF (DTEMP0 > 0.0) THEN
C UNDAMAGED RANGE
IF (TEMP0 < 350.0) THEN
STATEV(1) = 0.0
FLUX(1) = 0.0
FLUX(2) = 0.0
C PARTIALLY DAMAGED RANGE
ELSEIF (TEMP0 >= 350.0 .and. TEMP0 <= 600.0) THEN
STATEV(1) = (TEMP0-350.0)/250.0
FLUX(1) = 0.0
FLUX(2) = 0.0
C FULLY DAMAGED RANGE
ELSEIF (TEMP0 > 600.0) THEN
STATEV(1) = 1.0
FLUX(1) = 0.0
FLUX(2) = 0.0
END IF
C DURING COOLING
C DEGREE OF THE MATRIX DECOMPOSITION REMAINS CONSTANT
ELSEIF (DTEMP0 <= 0.0) THEN
STATEV(1) = DECOMP
FLUX(1) = 0.0
FLUX(2) = 0.0
END IF
C LIMIT UPPER BOUNDARY
C DEGREE OF THE MATRIX DECOMPOSITION NEVER EXCEED 1
IF (STATEV(1) > 1.0 ) THEN
STATEV(1) = 1.0
END IF
RETURN
END