Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer | :: | TempIndiceNum | ||||
real(kind=r64), | DIMENSION(2) | :: | Temp | |||
real(kind=r64), | DIMENSION(2) | :: | TempChange |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE DERIV(TempIndiceNum,Temp,TempChange)
! SUBROUTINE INFORMATION:
! AUTHOR Jaewook Lee
! DATE WRITTEN January 2000
! MODIFIED Rick Strand (for E+ implementation February 2000)
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! THIS SUBROUTINE CALCULATES HEAT TRANSFER TERMS INVOLVED IN THE
! THERMOREGULATORY SYSTEM TO OBTAIN THE RATES OF CHANGE OF CoreTemp & SkinTemp
! VIZ., CoreTempChange/TempChange & SkinTempChange/TempChange RESPECTIVELY.
! METHODOLOGY EMPLOYED:
! This subroutine is based heavily upon the work performed by Dan Maloney for
! the BLAST program. Many of the equations are based on the original Pierce
! development. See documentation for further details and references.
! REFERENCES:
! Maloney, Dan, M.S. Thesis, University of Illinois at Urbana-Champaign
! USE STATEMENTS:
! na
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER :: TempIndiceNum ! Number of temperature indices unused1208
REAL(r64), DIMENSION(2) :: Temp ! Temperature unused1208
REAL(r64), DIMENSION(2) :: TempChange ! Change of temperature
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: ActLevelTot ! Total activity level
REAL(r64) :: CoreSignalShiv ! Core signal when shivering occurs
REAL(r64) :: CoreSignalShivMax ! Maximum value of core signal when shivering occurs
REAL(r64) :: CoreSignalSkinSens ! The sensitivity of the skin signal increases
REAL(r64) :: CoreSignalSweatMax ! Maximum value of core signal when sweating occurs
REAL(r64) :: CoreSignalSweatWarm ! Core signal when sweating occurs
REAL(r64) :: CoreTempSweat ! Core temperature when sweating occurs
REAL(r64) :: CoreSignalWarm ! Warm core signal
REAL(r64) :: CoreSignalWarmMax ! Maximum value of warm core signal
REAL(r64) :: EvapHeatLossDrySweat ! Evaporative heat loss by sweating when total skin wettedness < 0.4
REAL(r64) :: Err ! Stop criteria for iteration
REAL(r64) :: ErrPrev ! Previous value of stop criteria for iteration
REAL(r64) :: EvapHeatLossSweatEst ! Estimated evaporative heat loss by sweating
REAL(r64) :: EvapHeatLossSweatEstNew ! New value of estimated evaporative heat loss by sweating
REAL(r64) :: IntHeatProdTot ! Total internal heat production
REAL(r64) :: SkinCndctMax ! Maximum value of skin conductance
REAL(r64) :: SkinSignalCold ! Cold skin signal
REAL(r64) :: SkinSignalColdMax ! Maximum value of cold skin signal
REAL(r64) :: SkinSignalSweatCold ! Cold skin signal for sweat inhibition
REAL(r64) :: SkinSignalSweatColdMax ! Maximum value of cold skin signal for sweat inhibition
REAL(r64) :: SkinCndctDilation ! Overall skin conductance due to vasodilation
REAL(r64) :: SkinCndctConstriction ! Overall skin conductance due to vasoconstriction
REAL(r64) :: SkinSignalShiv ! Skin signal when shivering occurs
REAL(r64) :: SkinSignalShivMax ! Maximum value of skin signal when shivering occurs
REAL(r64) :: SkinSignalSweatMax ! Skin signal when sweating occurs
REAL(r64) :: SkinSignalSweatWarm ! Maximum value of skin signal when sweating occurs
REAL(r64) :: SkinSignalWarm ! Warm skin signal
REAL(r64) :: SkinSignalWarmMax ! Maximum value of warm skin signal
REAL(r64) :: SkinTempSweat ! Skin temperature when sweating occurs
REAL(r64) :: SkinWetSignal ! Skin wettedness signal
REAL(r64) :: SweatCtrlFac ! Sweat control factor
REAL(r64) :: SweatSuppFac ! Sweat suppression factor due to skin wettedness
REAL(r64) :: WeighFac ! Weighting factor of core siganl
! THE CONTROLLING SYSTEM.
! THE CONTROLLING SIGNALS :
! SIGNALS FOR KS.
CoreSignalWarm = CoreTemp - 36.98d0
SkinSignalWarm = SkinTemp - 33.8d0
SkinSignalCold = 32.1d0 - SkinTemp
CoreSignalSkinSens = CoreTemp - 35.15d0
CoreSignalWarmMax = MAX(0.d0,CoreSignalWarm)
SkinSignalWarmMax = MAX(0.d0,SkinSignalWarm)
SkinSignalColdMax = MAX(0.d0,SkinSignalCold)
! SIGNALS FOR EvapHeatLossSweat.
CoreTempSweat = CoreTemp
IF(CoreTempSweat > 38.29d0) CoreTempSweat = 38.29d0
CoreSignalSweatWarm = CoreTempSweat - CoreTempNeut
SkinTempSweat = SkinTemp
IF(SkinTempSweat > 36.1d0) SkinTempSweat = 36.1d0
SkinSignalSweatWarm = SkinTempSweat - SkinTempNeut
CoreSignalSweatMax = MAX(0.d0,CoreSignalSweatWarm)
SkinSignalSweatMax = MAX(0.d0,SkinSignalSweatWarm)
SkinSignalSweatCold = 33.37d0 - SkinTemp
IF(SkinTempNeut < 33.37d0) SkinSignalSweatCold = SkinTempNeut - SkinTemp
SkinSignalSweatColdMax = MAX(0.d0,SkinSignalSweatCold)
! SIGNALS FOR SHIVERING.
CoreSignalShiv = 36.9d0 - CoreTemp
SkinSignalShiv = 32.5d0 - SkinTemp
CoreSignalShivMax = MAX(0.d0,CoreSignalShiv)
SkinSignalShivMax = MAX(0.d0,SkinSignalShiv)
! CONTROLLING FUNCTIONS :
! SHIVERING RESPONSE IN W/M**2.
ShivResponse = 20.d0*CoreSignalShivMax*SkinSignalShivMax + 5.d0*SkinSignalShivMax
IF(CoreTemp >= 37.1d0) ShivResponse = 0.0d0
! SWEAT FUNCTION IN W/M**2.
WeighFac = 260.d0+70.d0*AcclPattern
SweatCtrlFac = 1.d0 + 0.05d0*SkinSignalSweatColdMax**2.4d0
! EvapHeatLossDrySweat = SWEAT WHEN SkinWetTot < 0.4.
EvapHeatLossDrySweat = ((WeighFac*CoreSignalSweatMax + 0.1d0*WeighFac*SkinSignalSweatMax) &
*EXP(SkinSignalSweatMax/8.5d0))/SweatCtrlFac
! MAXIMUM EVAPORATIVE POWER, EvapHeatLossMax, IN W/M**2.
SkinVapPress = CalcSatVapPressFromTemp(SkinTemp)
EvapHeatLossMax = 2.2d0*Hc*(SkinVapPress - VapPress)*CloPermeatEff
IF(EvapHeatLossMax > 0.0d0) THEN
SkinWetSweat = EvapHeatLossDrySweat/EvapHeatLossMax
EvapHeatLossDiff = 0.408d0*(SkinVapPress - VapPress)
EvapHeatLoss = SkinWetSweat*EvapHeatLossMax+(1.d0 - SkinWetSweat)*EvapHeatLossDiff
SkinWetTot = EvapHeatLoss/EvapHeatLossMax
IF(Time == 0.0d0) THEN
EvapHeatLossSweat = EvapHeatLossDrySweat
EvapHeatLossSweatPrev = EvapHeatLossDrySweat
END IF
IF(SkinWetTot > 0.4d0) THEN
! ITERATION FOR SWEAT WHEN SkinWetTot IS GREATER THAT 0.4.
IterNum = 0
IF(SkinWetSweat > 1.0d0) SkinWetSweat = 1.d0
DO
EvapHeatLossSweatEst = EvapHeatLossSweatPrev
SkinWetSweat = EvapHeatLossSweatEst/EvapHeatLossMax
IF(SkinWetSweat > 1.0d0) SkinWetSweat = 1.d0
EvapHeatLossDiff = 0.408d0*(SkinVapPress - VapPress)
EvapHeatLoss = (1.d0 - SkinWetTot)*EvapHeatLossDiff + EvapHeatLossSweat
SkinWetTot = EvapHeatLoss/EvapHeatLossMax
IF(SkinWetTot > 1.0d0) SkinWetTot = 1.d0
SkinWetSignal = MAX(0.d0,SkinWetTot - .4d0)
SweatSuppFac = 0.5d0 + 0.5d0*EXP(-5.6d0*SkinWetSignal)
EvapHeatLossSweatEstNew = SweatSuppFac*EvapHeatLossDrySweat
IF(IterNum == 0) EvapHeatLossSweat = EvapHeatLossSweatEstNew
Err = EvapHeatLossSweatEst - EvapHeatLossSweatEstNew
IF (IterNum /= 0) THEN
IF((ErrPrev*Err) < 0.0d0) EvapHeatLossSweat = (EvapHeatLossSweatEst + EvapHeatLossSweatEstNew)/2.0d0
IF((ErrPrev*Err) >= 0.0d0) EvapHeatLossSweat = EvapHeatLossSweatEstNew
END IF
! STOP CRITERION FOR THE ITERATION.
IF((ABS(Err) <= 0.5d0) .OR. (IterNum >= 10)) EXIT
IterNum = IterNum + 1
EvapHeatLossSweatPrev = EvapHeatLossSweat
ErrPrev = Err
END DO
ELSE
EvapHeatLossSweat = EvapHeatLossDrySweat
END IF
ELSE
SkinWetSweat = 1.d0
SkinWetTot = 1.d0
EvapHeatLossSweat = 0.5d0*EvapHeatLossDrySweat
EvapHeatLoss = EvapHeatLossSweat
END IF
! OVERALL SKIN CONDUCTANCE, KS, IN W/M**2/C.
! SkinCndctDilation = EFFECT DUE TO VASODILATION.
! SkinCndctConstriction = EFFECT DUE TO VASOCONSTRICTION.
SkinCndctDilation = 42.45d0*CoreSignalWarmMax + 8.15d0*CoreSignalSkinSens**0.8d0*SkinSignalWarmMax
SkinCndctConstriction = 1.0d0 + 0.4d0*SkinSignalColdMax
! ThermCndct IS EQUIVALENT TO KS
ThermCndct = 5.3d0+(6.75d0+SkinCndctDilation)/SkinCndctConstriction
SkinCndctMax = 75.d0+10.d0*AcclPattern
IF(ThermCndct > SkinCndctMax) ThermCndct = SkinCndctMax
! PASSIVE ENERGY BALANCE EQUATIONS.
! TOTAL METABOLIC HEAT PRODUCTION RATE, ActLevel, IN W/M**2.
ActLevelTot = ActLevel + ShivResponse
IntHeatProdTot = ActLevelTot - WorkEff
! RESPIRATION HEAT LOSS, RespHeatLoss, IN W/M**0.
LatRespHeatLoss = 0.0023d0*ActLevelTot*(44.d0 - VapPress)
DryRespHeatLoss = 0.0014d0*ActLevelTot*(34.d0 - AirTemp)
RespHeatLoss = LatRespHeatLoss + DryRespHeatLoss
! HEAT FLOW FROM CORE TO SKIN, HeatFlow, IN W/M**2.
HeatFlow = ThermCndct*(CoreTemp - SkinTemp)
! TempChange(1) = CoreTempChange/TempChange, IN C/HR.
TempChange(1) = (IntHeatProdTot - RespHeatLoss - HeatFlow)/CoreThermCap
IF(EvapHeatLoss > EvapHeatLossMax) EvapHeatLoss = EvapHeatLossMax
! DRY HEAT EXCHANGE BY RADIATION & CONVECTION, R+C, IN W/M**2.
DryHeatLoss = H*CloBodyRat*CloThermEff*(SkinTemp - OpTemp)
! TempChange(2) = SkinTempChange/TempChange, IN C/HR.
TempChange(2) = (HeatFlow - EvapHeatLoss - DryHeatLoss)/SkinThermCap
RETURN
END SUBROUTINE DERIV