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.
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 ComputeIntThermalAbsorpFactors
! SUBROUTINE INFORMATION:
! AUTHOR Legacy Code (George Walton)
! DATE WRITTEN Legacy: Dec 1976
! MODIFIED Nov. 99, FCW: to take into account movable interior shades and switchable glazing
! June 01, FCW: to take into account interior blinds.
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This routine computes the fractions of long-wave radiation from lights, equipment and people
! that is absorbed by each zone surface.
! METHODOLOGY EMPLOYED:
! The fraction is assumed to be proportional to the product of the surface area times its thermal absorptivity.
! REFERENCES:
! BLAST Routine: CITAF - Compute Interior Thermal Absorption Factors
! USE STATEMENTS:
USE HeatBalanceMovableInsulation
USE General, ONLY: InterpSw, InterpSlatAng
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 ConstrNum ! Construction number
INTEGER ConstrNumSh ! Shaded construction number
INTEGER FirstZoneSurf ! Index of first surface in current zone
INTEGER LastZoneSurf ! Index of last surface in current zone
REAL(r64) SUM1 ! Intermediate calculation value
REAL(r64) SUM2 ! Intermediate calculation value
INTEGER SurfNum ! DO loop counter for zone surfaces
INTEGER ZoneNum ! Loop counter for Zones
INTEGER ShadeFlag ! Window shading flag
REAL(r64) HMovInsul ! Conductance of movable insulation
INTEGER RoughIndexMovInsul ! Roughness index of movable insulation
REAL(r64) AbsExt ! Solar absorptance of movable insulation
REAL(r64) DividerThermAbs ! Window divider thermal absorptance
INTEGER MatNumSh ! Shade layer material number
REAL(r64) TauShIR ! Shade or blind IR transmittance
REAL(r64) EffShDevEmiss ! Effective emissivity of shade or blind
IF (.NOT. ALLOCATED(ITABSF)) THEN
ALLOCATE(ITABSF(TotSurfaces))
ITABSF=0.0d0
ALLOCATE(TMULT(NumOfZones))
TMULT=0.0d0
ALLOCATE(TCONV(NumOfZones))
TCONV=0.0d0
ENDIF
DO SurfNum = 1,TotSurfaces
IF (.not. Surface(SurfNum)%HeatTransSurf) CYCLE
ConstrNum = Surface(SurfNum)%Construction
ShadeFlag = SurfaceWindow(SurfNum)%ShadingFlag
ITABSF(SurfNum) = Construct(ConstrNum)%InsideAbsorpThermal
IF(Construct(ConstrNum)%TransDiff <= 0.0d0) THEN ! Opaque surface
RoughIndexMovInsul = 0
IF(Surface(SurfNum)%MaterialMovInsulExt > 0) &
CALL EvalOutsideMovableInsulation(SurfNum,HMovInsul,RoughIndexMovInsul,AbsExt)
IF (RoughIndexMovInsul > 0) & ! Movable outside insulation present
ITABSF(SurfNum) = Material(Surface(SurfNum)%MaterialMovInsulExt)%AbsorpThermal
END IF
! For window with an interior shade or blind, emissivity is a combination of glass and shade/blind emissivity
IF(ShadeFlag==IntShadeOn .OR. ShadeFlag==IntBlindOn) &
ITABSF(SurfNum) = & ! For shades, following interpolation just returns value of first element in array
InterpSlatAng(SurfaceWindow(SurfNum)%SlatAngThisTS,SurfaceWindow(SurfNum)%MovableSlats, &
SurfaceWindow(SurfNum)%EffShBlindEmiss) + &
InterpSlatAng(SurfaceWindow(SurfNum)%SlatAngThisTS,SurfaceWindow(SurfNum)%MovableSlats, &
SurfaceWindow(SurfNum)%EffGlassEmiss)
END DO
DO ZoneNum=1,NumOfZones
SUM1 = 0.0D0
SUM2 = 0.0D0
FirstZoneSurf=Zone(ZoneNum)%SurfaceFirst
LastZoneSurf=Zone(ZoneNum)%SurfaceLast
DO SurfNum = FirstZoneSurf, LastZoneSurf
IF (.not. Surface(SurfNum)%HeatTransSurf) CYCLE
ConstrNum = Surface(SurfNum)%Construction
ShadeFlag = SurfaceWindow(SurfNum)%ShadingFlag
IF(ShadeFlag /= SwitchableGlazing) THEN
SUM1 = SUM1 + Surface(SurfNum)%Area * ITABSF(SurfNum)
ELSE ! Switchable glazing
SUM1 = SUM1 + Surface(SurfNum)%Area * InterpSw(SurfaceWindow(SurfNum)%SwitchingFactor, &
Construct(ConstrNum)%InsideAbsorpThermal, &
Construct(SurfaceWindow(SurfNum)%ShadedConstruction)%InsideAbsorpThermal)
END IF
! Window frame and divider effects
IF(SurfaceWindow(SurfNum)%FrameArea > 0.0d0) SUM1 = SUM1 + SurfaceWindow(SurfNum)%FrameArea * &
(1.d0+0.5d0*SurfaceWindow(SurfNum)%ProjCorrFrIn) * SurfaceWindow(SurfNum)%FrameEmis
IF(SurfaceWindow(SurfNum)%DividerArea > 0.0d0) THEN
DividerThermAbs = SurfaceWindow(SurfNum)%DividerEmis
IF(SurfaceWindow(SurfNum)%DividerType == Suspended) &
! Suspended (between-glass) divider; relevant emissivity is inner glass emissivity
DividerThermAbs = Construct(ConstrNum)%InsideAbsorpThermal
IF(ShadeFlag==IntShadeOn.OR.ShadeFlag==IntBlindOn) THEN
! Interior shade or blind in place
ConstrNumSh = SurfaceWindow(SurfNum)%ShadedConstruction
MatNumSh = Construct(ConstrNumSh)%LayerPoint(Construct(ConstrNumSh)%TotLayers)
TauShIR = Material(MatNumSh)%TransThermal
EffShDevEmiss = SurfaceWindow(SurfNum)%EffShBlindEmiss(1)
IF(ShadeFlag==IntBlindOn) THEN
TauShIR = InterpSlatAng(SurfaceWindow(SurfNum)%SlatAngThisTS,SurfaceWindow(SurfNum)%MovableSlats, &
Blind(SurfaceWindow(SurfNum)%BlindNumber)%IRBackTrans)
EffShDevEmiss = InterpSlatAng(SurfaceWindow(SurfNum)%SlatAngThisTS,SurfaceWindow(SurfNum)%MovableSlats, &
SurfaceWindow(SurfNum)%EffShBlindEmiss)
END IF
SUM1 = SUM1 + SurfaceWindow(SurfNum)%DividerArea * (EffShDevEmiss + DividerThermAbs * TauShIR)
ELSE
SUM1 = SUM1 + SurfaceWindow(SurfNum)%DividerArea * (1.d0+SurfaceWindow(SurfNum)%ProjCorrDivIn) * &
DividerThermAbs
END IF
END IF
END DO ! End of loop over surfaces in zone
TMULT(ZoneNum) = 1.0d0/SUM1
TCONV(ZoneNum) = SUM2/SUM1
END DO ! End of loop over zones
RETURN
END SUBROUTINE ComputeIntThermalAbsorpFactors ! CITAF