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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | ZoneNum | |||
real(kind=r64), | intent(in), | DIMENSION(:) | :: | SurfaceTemperatures |
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 CalcCeilingDiffuserInletCorr(ZoneNum, SurfaceTemperatures)
! SUBROUTINE INFORMATION:
! AUTHOR Rick Strand
! DATE WRITTEN August 2000
! RE-ENGINEERED July 2003 (Peter Graham Ellis)
! MODIFIED July 2003, (CC) set a flag for reference temperature so that supply air temperature
! is used as the reference in the inside heat balance calculations
! PURPOSE OF THIS FUNCTION:
! This subroutine calculates the interior convection coefficients
! for ceiling diffusers correlated to the inlet air temperature.
! METHODOLOGY EMPLOYED:
! na
! REFERENCES:
! Fisher, D.E. and C.O. Pedersen, Convective Heat Transfer in Building Energy and
! Thermal Load Calculations, ASHRAE Transactions, vol. 103, Pt. 2, 1997, p.137
! USE STATEMENTS:
USE DataEnvironment, ONLY: OutBaroPress
USE Psychrometrics, ONLY: PsyRhoAirFnPbTdbW, PsyWFnTdpPb
USE DataHeatBalFanSys, ONLY: MAT
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: ZoneNum ! Zone number
REAL(r64), DIMENSION(:), INTENT(IN) :: SurfaceTemperatures ! For CalcASHRAEDetailed, if called
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: ACH ! Air changes per hour
INTEGER :: ZoneNode ! Zone node as defined in system simulation
REAL(r64) :: ZoneVolume ! Zone node as defined in system simulation
REAL(r64) :: ZoneMassFlowRate ! Zone node as defined in system simulation
REAL(r64) :: AirDensity ! zone air density
INTEGER :: SurfNum ! DO loop counter for surfaces
REAL(r64) :: Tilt ! Surface tilt
REAL(r64) :: ZoneMult
! FLOW:
IF (SysSizingCalc .OR. ZoneSizingCalc .OR. .NOT. ALLOCATED(Node)) THEN
ACH = 0.0d0
ELSE
! Set local variables
ZoneVolume = Zone(ZoneNum)%Volume
ZoneNode = Zone(ZoneNum)%SystemZoneNodeNumber
ZoneMult = Zone(ZoneNum)%Multiplier * Zone(ZoneNum)%ListMultiplier
AirDensity = PsyRhoAirFnPbTdbW(OutBaroPress, Node(ZoneNode)%Temp, PsyWFnTdpPb(Node(ZoneNode)%Temp, OutBaroPress))
ZoneMassFlowRate = Node(ZoneNode)%MassFlowRate/ZoneMult
IF (ZoneMassFlowRate < MinFlow) THEN
ACH = 0.0d0
ELSE
! Calculate ACH
ACH = ZoneMassFlowRate / AirDensity / ZoneVolume * SecInHour
! Limit ACH to range of correlation
ACH = MIN(ACH, MaxACH)
ACH = MAX(ACH, 0.0d0)
END IF
END IF
DO SurfNum = Zone(ZoneNum)%SurfaceFirst,Zone(ZoneNum)%SurfaceLast
IF (.NOT. Surface(SurfNum)%HeatTransSurf) CYCLE ! Skip non-heat transfer surfaces
IF (ACH <= 3.0d0) THEN ! Use the other convection algorithm
IF (.NOT. Construct(Surface(SurfNum)%Construction)%TypeIsWindow) THEN
CALL CalcASHRAEDetailedIntConvCoeff(SurfNum,SurfaceTemperatures(SurfNum),MAT(ZoneNum))
ELSE
CALL CalcISO15099WindowIntConvCoeff(SurfNum,SurfaceTemperatures(SurfNum),MAT(ZoneNum))
ENDIF
ELSE ! Use forced convection correlations
Tilt = Surface(SurfNum)%Tilt
! assume that reference air temp for user defined convection coefficient is the mean air temperature (=MAT)
! Calculate the convection coefficient based on inlet (supply) air conditions
IF (Tilt < 45.0d0) THEN
HConvIn(SurfNum) = 0.49d0 * ACH**0.8d0 ! Ceiling correlation
ELSE IF (Tilt > 135.0d0) THEN
HConvIn(SurfNum) = 0.13d0 * ACH**0.8d0 ! Floor correlation
ELSE
HConvIn(SurfNum) = 0.19d0 * ACH**0.8d0 ! Wall correlation
END IF
! set flag for reference air temperature
Surface(SurfNum)%TAirRef = ZoneSupplyAirTemp
END IF
! Establish some lower limit to avoid a zero convection coefficient (and potential divide by zero problems)
IF (HConvIn(SurfNum) < LowHConvLimit) HConvIn(SurfNum) = LowHConvLimit
END DO ! SurfNum
IF (ACH > 100.0d0) CALL ShowWarningError('CeilingDiffuser convection correlation is out of range: ACH > 100')
RETURN
END SUBROUTINE CalcCeilingDiffuserInletCorr