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 | |||
integer, | intent(in) | :: | NaturalConvModelEqNum | |||
integer, | intent(in) | :: | ForcedConvModelEqNum | |||
real(kind=r64), | intent(out) | :: | Hc |
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 EvaluateExtHcModels(SurfNum, NaturalConvModelEqNum, ForcedConvModelEqNum, Hc)
! SUBROUTINE INFORMATION:
! AUTHOR Brent Grifith
! DATE WRITTEN Aug 2010
! MODIFIED na
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! central case statement for evaluating exterior specific convection models
! METHODOLOGY EMPLOYED:
! separated out long case statement for selecting models.
! REFERENCES:
!
! USE STATEMENTS:
USE DataHeatBalSurface, ONLY: TH, QdotConvOutRepPerArea
USE DataEnvironment , ONLY: WindSpeed, WindDir
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
INTEGER, INTENT(IN) :: SurfNum
INTEGER, INTENT(IN) :: NaturalConvModelEqNum
INTEGER, INTENT(IN) :: ForcedConvModelEqNum
REAL(r64), INTENT(OUT) :: Hc
! SUBROUTINE PARAMETER DEFINITIONS:
! na
! INTERFACE BLOCK SPECIFICATIONS:
! na
! DERIVED TYPE DEFINITIONS:
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(R64) :: Hf = 0.d0 ! the forced, or wind driven portion of film coefficient
REAL(R64) :: Hn = 0.d0 ! the natural, or bouyancy driven portion of film coefficient
INTEGER :: ConstructNum
REAL(r64) :: SurfWindSpeed
REAL(r64) :: HydraulicDiameter
! first call Hn models
SELECT CASE (NaturalConvModelEqNum)
CASE (HcExt_None)
Hn = 0.d0
CASE (HcExt_UserCurve)
CALL CalcUserDefinedOutsideHcModel(SurfNum, Surface(SurfNum)%OutConvHnUserCurveIndex, Hn)
CASE (HcExt_NaturalASHRAEVerticalWall)
Hn = CalcASHRAEVerticalWall( (TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp) )
CASE (HcExt_NaturalWaltonUnstableHorizontalOrTilt)
Hn = CalcWaltonUnstableHorizontalOrTilt( (TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp) , &
Surface(SurfNum)%CosTilt ) !TODO verify CosTilt in vs out
CASE (HcExt_NaturalWaltonStableHorizontalOrTilt)
Hn = CalcWaltonStableHorizontalOrTilt( (TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp) , &
Surface(SurfNum)%CosTilt ) !TODO verify CosTilt in vs out
CASE (HcExt_AlamdariHammondVerticalWall)
Hn = CalcAlamdariHammondVerticalWall( (TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp) , &
Surface(SurfNum)%OutConvFaceHeight , SurfNum)
CASE (HcExt_FohannoPolidoriVerticalWall)
Hn = CalcFohannoPolidoriVerticalWall( (TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp) , &
Surface(SurfNum)%OutConvFaceHeight , &
TH(SurfNum, 1, 1), &
-QdotConvOutRepPerArea(SurfNum) , SurfNum)
! CASE (HcExt_ISO15099Windows)
CASE (HcExt_AlamdariHammondStableHorizontal)
IF (Surface(SurfNum)%OutConvFacePerimeter > 0.d0) THEN
HydraulicDiameter = 4.d0 * Surface(SurfNum)%OutConvFaceArea / Surface(SurfNum)%OutConvFacePerimeter
ELSE
HydraulicDiameter = SQRT(Surface(SurfNum)%OutConvFaceArea)
ENDIF
Hn = CalcAlamdariHammondStableHorizontal((TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp), &
HydraulicDiameter, SurfNum )
CASE (HcExt_AlamdariHammondUnstableHorizontal)
IF (Surface(SurfNum)%OutConvFacePerimeter > 0.d0) THEN
HydraulicDiameter = 4.d0 * Surface(SurfNum)%OutConvFaceArea / Surface(SurfNum)%OutConvFacePerimeter
ELSE
HydraulicDiameter = SQRT(Surface(SurfNum)%OutConvFaceArea)
ENDIF
Hn = CalcAlamdariHammondUnstableHorizontal((TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp), &
HydraulicDiameter, SurfNum )
END SELECT
SELECT CASE (ForcedConvModelEqNum)
CASE (HcExt_None)
Hf = 0.d0
CASE (HcExt_UserCurve)
Call CalcUserDefinedOutsideHcModel(SurfNum, Surface(SurfNum)%OutConvHfUserCurveIndex, Hf)
CASE (HcExt_SparrowWindward)
ConstructNum = Surface(SurfNum)%Construction
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcSparrowWindward(Material(Construct(ConstructNum)%LayerPoint(1))%Roughness, &
Surface(SurfNum)%OutConvFacePerimeter, &
Surface(SurfNum)%OutConvFaceArea, &
SurfWindSpeed , SurfNum)
CASE (HcExt_SparrowLeeward)
ConstructNum = Surface(SurfNum)%Construction
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcSparrowLeeward(Material(Construct(ConstructNum)%LayerPoint(1))%Roughness, &
Surface(SurfNum)%OutConvFacePerimeter, &
Surface(SurfNum)%OutConvFaceArea, &
SurfWindSpeed, SurfNum )
CASE (HcExt_MoWiTTWindward)
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcMoWITTWindward( TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp, SurfWindSpeed)
CASE (HcExt_MoWiTTLeeward)
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcMoWITTLeeward( (TH(SurfNum, 1, 1) - Surface(SurfNum)%OutDryBulbTemp), SurfWindSpeed)
CASE (HcExt_DOE2Windward)
ConstructNum = Surface(SurfNum)%Construction
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcDOE2Windward(TH(SurfNum, 1, 1), Surface(SurfNum)%OutDryBulbTemp, &
Surface(SurfNum)%CosTilt, SurfWindSpeed, &
Material(Construct(ConstructNum)%LayerPoint(1))%Roughness)
CASE (HcExt_DOE2Leeward)
ConstructNum = Surface(SurfNum)%Construction
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcDOE2Leeward(TH(SurfNum, 1, 1), Surface(SurfNum)%OutDryBulbTemp, &
Surface(SurfNum)%CosTilt, SurfWindSpeed, &
Material(Construct(ConstructNum)%LayerPoint(1))%Roughness)
CASE (HcExt_NusseltJurges)
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcNusseltJurges(SurfWindSpeed)
CASE (HcExt_McAdams)
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcMcAdams(SurfWindSpeed)
CASE (HcExt_Mitchell)
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcMitchell(SurfWindSpeed,CubeRootOfOverallBuildingVolume, SurfNum)
CASE (HcExt_ClearRoof)
IF (.NOT. Surface(SurfNum)%ExtWind) THEN
SurfWindSpeed = 0.d0 ! No wind exposure
ELSE IF (Surface(SurfNum)%Class == SurfaceClass_Window .AND. SurfaceWindow(SurfNum)%ShadingFlag == ExtShadeOn) THEN
SurfWindSpeed = 0.d0 ! Assume zero wind speed at outside glass surface of window with exterior shade
ELSE
SurfWindSpeed = Surface(SurfNum)%WindSpeed
ENDIF
Hf = CalcClearRoof(SurfNum,TH(SurfNum, 1, 1), Surface(SurfNum)%OutDryBulbTemp, &
SurfWindSpeed , WindDir , Surface(SurfNum)%OutConvFaceArea, &
Surface(SurfNum)%OutConvFacePerimeter)
CASE (HcExt_BlockenWindward)
Hf = CalcBlockenWindward(WindSpeed, WindDir, Surface(SurfNum)%Azimuth)
CASE (HcExt_EmmelVertical)
Hf = CalcEmmelVertical(WindSpeed, WindDir, Surface(SurfNum)%Azimuth, SurfNum)
CASE (HcExt_EmmelRoof)
Hf = CalcEmmelRoof(WindSpeed, WindDir, RoofLongAxisOutwardAzimuth, SurfNum)
END SELECT
Hc = Hf + Hn
IF (Hc < AdaptiveHcOutsideLowLimit ) Hc = AdaptiveHcOutsideLowLimit
RETURN
END SUBROUTINE EvaluateExtHcModels