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) | :: | SurfNum | |||
real(kind=r64), | intent(in) | :: | SurfaceTemperature | |||
real(kind=r64), | intent(in) | :: | AirTemperature |
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 CalcISO15099WindowIntConvCoeff(SurfNum,SurfaceTemperature,AirTemperature)
! SUBROUTINE INFORMATION:
! AUTHOR B. Griffith
! DATE WRITTEN January 2009
! MODIFIED BG May 2009, added EMS override for window coeffs.
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Calculate interior surface convection coefficients for windows
! METHODOLOGY EMPLOYED:
! correlation documented in ISO 15099, Section 8.3.2.2
! REFERENCES:
! Internation Standard ISO 15099. Thermal performance of windows, doors and shading devices -- Detailed Calculations
! First Edition 2003-11-15. ISO 15099:2003(E)
! USE STATEMENTS:
USE Psychrometrics , ONLY: PsyCpAirFnWTdb, PsyRhoAirFnPbTdbW
USE DataHeatBalFanSys, ONLY: ZoneAirHumRatAvg
USE DataEnvironment, ONLY: OutHumRat, OutBaroPress
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: SurfNum ! surface number for which coefficients are being calculated
REAL(r64), INTENT(IN) :: SurfaceTemperature ! Temperature of surface for evaluation of HcIn
REAL(r64), INTENT(IN) :: AirTemperature ! Mean Air Temperature of Zone (or adjacent air temperature)
! SUBROUTINE PARAMETER DEFINITIONS:
REAL(r64), PARAMETER :: OneThird = (1.d0/3.d0) ! 1/3 in highest precision
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: DeltaTemp ! Temperature difference between the zone air and the surface
REAL(r64) :: TmeanFilm ! mean film temperature
REAL(r64) :: TmeanFilmKelvin ! mean film temperature for property evaluation
REAL(r64) :: rho ! density of air [kg/m3]
REAL(r64) :: g ! acceleration due to gravity [m/s2]
REAL(r64) :: Height ! window cavity height [m]
REAL(r64) :: Cp ! specific heat of air [J/kg-K]
REAL(r64) :: lambda ! thermal conductivity of air [W/m-K]
REAL(r64) :: mu ! dynamic viscosity of air [kg/m-s]
REAL(r64) :: RaH ! Rayleigh number for cavity height [ Non dim]
REAL(r64) :: RaCV ! Rayleigh number for slanted cavity
REAL(r64) :: tiltDeg ! glazing tilt in degrees
REAL(r64) :: sineTilt ! sine of glazing tilt
REAL(r64) :: Nuint ! Nusselt number for interior surface convection
REAL(r64) :: SurfTempKelvin ! surface temperature in Kelvin
REAL(r64) :: AirTempKelvin ! air temperature in Kelvin
REAL(r64) :: AirHumRat ! air humidity ratio
SurfTempKelvin = SurfaceTemperature + 273.15D0
AirTempKelvin = AirTemperature + 273.15D0
DeltaTemp = SurfaceTemperature - AirTemperature
! protect against wildly out of range temperatures
IF ((AirTempKelvin < 200.0D0) .OR. (AirTempKelvin > 400.0D0)) THEN ! out of range
HConvIn(SurfNum) = LowHConvLimit
RETURN
ENDIF
IF ((SurfTempKelvin < 180.0D0) .OR. (SurfTempKelvin > 450.0D0)) THEN ! out of range
HConvIn(SurfNum) = LowHConvLimit
RETURN
ENDIF
! Get humidity ratio
IF (Surface(SurfNum)%Zone > 0) Then
AirHumRat = ZoneAirHumRatAvg(Surface(SurfNum)%Zone)
ELSE
AirHumRat = OutHumRat
ENDIF
! mean film temperature
TmeanFilmKelvin = AirTempKelvin + 0.25D0*(SurfTempKelvin - AirTempKelvin) ! eq. 133 in ISO 15099
TmeanFilm = TmeanFilmKelvin - 273.15D0
rho = PsyRhoAirFnPbTdbW(OutBaroPress, TmeanFilm, AirHumRat, 'WindowTempsForNominalCond')
g = 9.81D0
Height = Surface(SurfNum)%Height
! the following properties are probably for dry air, should maybe be remade for moist-air
lambda = 2.873D-3 + 7.76D-5 * TmeanFilmKelvin ! Table B.1 in ISO 15099,
mu = 3.723D-6 + 4.94D-8 * TmeanFilmKelvin ! Table B.2 in ISO 15099
Cp = PsyCpAirFnWTdb(AirHumRat, TmeanFilm, 'WindowTempsForNominalCond')
TiltDeg= Surface(SurfNum)%Tilt
sineTilt=Surface(SurfNum)%SinTilt
! four cases depending on tilt and DeltaTemp (heat flow direction )
If (DeltaTemp > 0.0d0 ) TiltDeg = 180.0D0 - TiltDeg ! complement angle if cooling situation
RaH = ( rho**2 * Height**3 * g * Cp *(ABS(SurfTempKelvin-AirTempKelvin) ) ) &
/ (TmeanFilmKelvin * mu * lambda) ! eq 132 in ISO 15099
! case a)
IF ( (0.0D0 <= TiltDeg) .AND. (TiltDeg < 15.0D0) ) THEN
Nuint = 0.13d0*(RaH)**OneThird
! case b)
ELSEIF ( (15.0D0 <= TiltDeg) .AND. (TiltDeg <= 90.0D0) ) THEN
RaCV = 2.5D+5 * ( EXP(0.72d0*TiltDeg) / sineTilt)**0.2D0 ! eq. 137
IF (RaH <= RaCV) Then
Nuint = 0.56D0*(RaH * sineTilt)**0.25d0 ! eq. 135 in ISO 15099
ELSE
Nuint = 0.13D0 * (RaH**OneThird - RaCV**OneThird) &
+ 0.56D0 * (RaCV * sineTilt )**0.25D0 ! eq. 136 in ISO 15099
ENDIF
!case c)
ELSEIF ( (90.0D0 < TiltDeg) .AND. (TiltDeg <= 179.0D0) ) THEN
! bound by applicability
IF (RaH * sineTilt < 1.0D+5) THEN
Nuint = 0.56D0*(1.0D+5)**0.25d0 ! bounded
ElseIF (RaH * sineTilt >= 1.0D+11 ) THEN
Nuint = 0.56D0*(1.0D+11)**0.25d0 ! bounded
Else
Nuint = 0.56D0*(RaH * sineTilt)**0.25d0 ! eq.. 138
ENDIF
! case d)
ELSEIF ( (179.0D0 < TiltDeg) .AND. (TiltDeg <= 180.0D0) ) THEN
IF (RaH > 1.0D+11) THEN
Nuint = 0.58d0*1D+11**0.2D0 ! bounded
ELSE
Nuint = 0.58d0*RaH**0.2D0
ENDIF
ENDIF
HConvIn(SurfNum) = Nuint * lambda / Height
! EMS override point (Violates Standard 15099? throw warning? scary.
IF (Surface(SurfNum)%EMSOverrideIntConvCoef) HConvIn(SurfNum) = Surface(SurfNum)%EMSValueForIntConvCoef
! Establish some lower limit to avoid a zero convection coefficient (and potential divide by zero problems)
IF (HConvIn(SurfNum) < LowHConvLimit) HConvIn(SurfNum) = LowHConvLimit
RETURN
END SUBROUTINE CalcISO15099WindowIntConvCoeff