Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. 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 ComputeLoadComponentDecayCurve
! SUBROUTINE INFORMATION:
! AUTHOR Jason Glazer
! DATE WRITTEN August 2012
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Determines the load component decay curve based on normal and pulse results from zone sizing.
! METHODOLOGY EMPLOYED:
! Decay curve is the fraction of the heat convected from a surface over the initial radiant heat
! absorbed by the surface.
! REFERENCES:
! na
! USE STATEMENTS:
USE DataSizing, ONLY: CalcFinalZoneSizing
USE DataZoneEquipment, ONLY: ZoneEquipConfig
USE DataSurfaces, ONLY: Surface, TotSurfaces
USE DataGlobals, ONLY: NumOfTimeStepInHour
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
! na
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
INTEGER :: ZoneNum = 0
INTEGER :: SurfNum = 0
INTEGER :: TimeStep = 0
INTEGER :: TimeOfPulse = 0
INTEGER :: CoolDesSelected = 0 !design day selected for cooling
INTEGER :: HeatDesSelected = 0 !design day selected for heating
INTEGER :: i
REAL(r64) :: diff
DO SurfNum = 1, TotSurfaces
ZoneNum = Surface(SurfNum)%Zone
IF (ZoneNum .EQ. 0) CYCLE
IF (.not. ZoneEquipConfig(ZoneNum)%IsControlled) CYCLE
CoolDesSelected = CalcFinalZoneSizing(ZoneNum)%CoolDDNum
!loop over timesteps after pulse occured
IF (CoolDesSelected .NE. 0) THEN
TimeOfPulse = radiantPulseTimestep(ZoneNum,CoolDesSelected)
! if the CoolDesSelected time is on a different day than
! when the pulse occurred, need to scan back and find when
! the pulse occurred.
IF (TimeOfPulse .EQ. 0) THEN
DO i = CoolDesSelected, 1, -1
TimeOfPulse = radiantPulseTimestep(ZoneNum,i)
IF (TimeOfPulse .NE. 0) EXIT
END DO
END IF
IF (TimeOfPulse == 0) TimeOfPulse=1
DO TimeStep = TimeOfPulse, NumOfTimeStepInHour* 24
IF (radiantPulseReceived(surfNum,CoolDesSelected) .NE. 0.0d0) THEN
diff = loadConvectedWithPulse(surfNum,TimeStep,CoolDesSelected) &
- loadConvectedNormal(surfNum,TimeStep,CoolDesSelected)
decayCurveCool(surfNum, TimeStep - TimeOfPulse + 1) = -diff / radiantPulseReceived(surfNum,CoolDesSelected)
ELSE
decayCurveCool(surfNum, TimeStep - TimeOfPulse + 1) = 0.0d0
END IF
END DO
END IF
HeatDesSelected = CalcFinalZoneSizing(ZoneNum)%HeatDDNum
IF (HeatDesSelected .NE. 0) THEN
TimeOfPulse = radiantPulseTimestep(ZoneNum,HeatDesSelected)
! scan back to the day that the heating pulse occurs, if necessary
IF (TimeOfPulse .EQ. 0) THEN
DO i = HeatDesSelected, 1, -1
TimeOfPulse = radiantPulseTimestep(ZoneNum,i)
IF (TimeOfPulse .NE. 0) EXIT
END DO
END IF
IF (TimeOfPulse == 0) TimeOfPulse=1
DO TimeStep = TimeOfPulse, NumOfTimeStepInHour* 24
IF (radiantPulseReceived(surfNum,HeatDesSelected) .NE. 0.0d0) THEN
diff = loadConvectedWithPulse(surfNum,TimeStep,HeatDesSelected) &
- loadConvectedNormal(surfNum,TimeStep,HeatDesSelected)
decayCurveHeat(surfNum, TimeStep - TimeOfPulse + 1) = -diff / radiantPulseReceived(surfNum,HeatDesSelected)
ELSE
decayCurveHeat(surfNum, TimeStep - TimeOfPulse + 1) = 0.0d0
END IF
END DO
END IF
END DO
END SUBROUTINE ComputeLoadComponentDecayCurve