SUBROUTINE SizeDXCoil(DXCoilNum)
! SUBROUTINE INFORMATION:
! AUTHOR Fred Buhl
! DATE WRITTEN January 2002
! Feb 2005 M. J. Witte, GARD Analytics, Inc.
! Add new coil type COIL:DX:MultiMode:CoolingEmpirical:
! July 2005 R. Raustad, FSEC
! Add new coil type COIL:DX:HEATPUMPWATERHEATER
! June 2007 L. Gu, FSEC
! Add new coil type COIL:DX:MULTISPEED:COOLING and HEATING
! January 2011, B. Griffithn NREL. add EMS overrides for autosized fields. 1`
! August 2013 Daeho Kang, add component sizing table entries
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! This subroutine is for sizing DX Coil components for which nominal capacity and air flow rate
! have not been specified in the input.
! METHODOLOGY EMPLOYED:
! Obtains cooling capacities and air flow rates from the zone or system sizing arrays.
! REFERENCES:
! na
! USE STATEMENTS:
USE DataSizing
USE CurveManager, ONLY: CurveValue
USE General, ONLY: RoundSigDigits, TrimSigDigits
USE ReportSizingManager, ONLY: ReportSizingOutput
USE OutputReportPredefined
USE DataAirSystems, ONLY: PrimaryAirSystem
USE StandardRatings, ONLY: CalcDXCoilStandardRating
USE General, ONLY: RoundSigDigits
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
Integer, Intent(IN) :: DXCoilNum
! SUBROUTINE PARAMETER DEFINITIONS:
CHARACTER(len=*), PARAMETER :: RoutineName='SizeDXCoil'
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
REAL(r64) :: rhoair
REAL(r64) :: CpAir
REAL(r64) :: MixTemp
REAL(r64) :: MixHumRat
REAL(r64) :: MixEnth
REAL(r64) :: MixWetBulb
REAL(r64) :: SupTemp
REAL(r64) :: SupHumRat
REAL(r64) :: SupEnth
REAL(r64) :: OutTemp
REAL(r64) :: OutAirFrac
REAL(r64) :: VolFlowRate
REAL(r64) :: CoolCapAtPeak
REAL(r64) :: TotCapTempModFac
REAL(r64) :: RatedVolFlowPerRatedTotCap !Rated Air Volume Flow Rate divided by Rated Total Capacity[m3/s-W)
INTEGER :: TimeStepNumAtMax
INTEGER :: DDNum
INTEGER :: CapacityStageNum ! Loop index for 1,Number of capacity stages
INTEGER :: DehumidModeNum ! Loop index for 1,Number of enhanced dehumidification modes
INTEGER :: Mode ! Operating mode for MultiMode DX coil; Always 1 for other coil types
INTEGER :: NumOfSpeedCompanion ! Number of speed for a companion cooling coil (Multispeed HO heating coil only
CHARACTER(len=MaxNameLength) :: equipName
LOGICAL :: OASysFlag ! Logical flag determines if parent object set OA Sys coil property
LOGICAL :: AirLoopSysFlag ! Logical flag determines if parent object set air loop coil property
REAL(r64) :: RatedAirVolFlowRateDes ! Design rated air volume flow for reporting
REAL(r64) :: RatedAirVolFlowRateUser ! Hard-sized rated air volume flow for reporting
REAL(r64) :: RatedAirVolFlowRate2Des ! Design rated low speed air volume flow for reporting
REAL(r64) :: RatedAirVolFlowRate2User ! Hard-sized rated low speed air volume flow for reporting
REAL(r64) :: RatedTotCapDes ! Design rated total capacity for reproting
REAL(r64) :: RatedTotCapUser ! Hard-sized rated total capacity for reproting
REAL(r64) :: RatedTotCap2Des ! Design rated low speed total capacity for reproting
REAL(r64) :: RatedTotCap2User ! Hard-sized rated low speed total capacity for reproting
REAL(r64) :: RatedSHRDes ! Design ratd SHR for reporting
REAL(r64) :: RatedSHRUser ! Hard-sized ratd SHR for reporting
REAL(r64) :: RatedSHR2Des ! Design ratd low speed SHR for reporting
REAL(r64) :: RatedSHR2User ! Hard-sized ratd low speed SHR for reporting
REAL(r64) :: EvapCondAirFlowDes ! Design evaporative condenser air flow for reporting
REAL(r64) :: EvapCondAirFlowUser ! Hard-sized evaporative condenser air flow for reporting
REAL(r64) :: EvapCondAirFlow2Des ! Design low speed evaporative condenser air flow for reporting
REAL(r64) :: EvapCondAirFlow2User ! Hard-sized low speed evaporative condenser air flow for reporting
REAL(r64) :: EvapCondPumpElecNomPowerDes ! Design evaporative condenser pump rated power consumption for reporting
REAL(r64) :: EvapCondPumpElecNomPowerUser ! Hard-sized evaporative condenser pump rated power consumption for reporting
REAL(r64) :: EvapCondPumpElecNomPower2Des ! Design low speed condenser pump rated power consumption for reporting
REAL(r64) :: EvapCondPumpElecNomPower2User ! Hard-sized low speed condenser pump rated power consumption for reporting
REAL(r64) :: DefrostCapacityDes ! Design defrost heater capacity for reporting
REAL(r64) :: DefrostCapacityUser ! Hard-sized defrost heater capacity for reporting
REAL(r64) :: MSRatedAirVolFlowRateDes ! Design multispeed rated air volume flow rate for reporting
REAL(r64) :: MSRatedAirVolFlowRateUser ! Hard-sized multispeed rated air volume flow rate for reporting
REAL(r64) :: MSRatedTotCapDes ! Design multispeed rated total capacity for reporting
REAL(r64) :: MSRatedTotCapUser ! Hard-sized multispeed rated total capacity for reporting
REAL(r64) :: MSRatedSHRDes ! Design multispeed rated SHR for reporting
REAL(r64) :: MSRatedSHRUser ! Hard-sized multispeed rated SHR for reporting
REAL(r64) :: MSEvapCondAirFlowDes ! Design evaporative condenser air flow for reporting
REAL(r64) :: MSEvapCondAirFlowUser ! Hard-sized evaporative condenser air flow for reporting
REAL(r64) :: MSEvapCondAirFlow2Des ! Design low speed evaporative condenser air flow for reporting
REAL(r64) :: MSEvapCondAirFlow2User ! Hard-sized low speed evaporative condenser air flow for reporting
REAL(r64) :: MSEvapCondPumpElecNomPowerDes ! Design evaporative condenser pump rated power consumption for reporting
REAL(r64) :: MSEvapCondPumpElecNomPowerUser ! Hard-sized evaporative condenser pump rated power consumption for reporting
REAL(r64) :: MSEvapCondPumpElecNomPower2Des ! Design low speed condenser pump rated power consumption for reporting
REAL(r64) :: MSEvapCondPumpElecNomPower2User ! Hard-sized low speed condenser pump rated power consumption for reporting
REAL(r64) :: MSDefrostCapacityDes ! Design defrost heater capacity for reporting
REAL(r64) :: MSDefrostCapacityUser ! Hard-sized defrost heater capacity for reporting
LOGICAL:: HardSizeNoDesRun ! Indicator to a hard-sized field with no design sizing data
LOGICAL:: IsAutoSize ! Indicator to autosize for reporting
LOGICAL:: IsCoolCoilCapAutosize ! Indicator to cooling capacity autosize for reporting
LOGICAL :: SizingDesRunThisAirSys ! true if a particular air system had a Sizing:System object and system sizing done
LOGICAL :: SizingDesRunThisZone ! true if a particular zone had a Sizing:Zone object and zone sizing was done
! Initiate all reporting variables
IF (SysSizingRunDone .OR. ZoneSizingRunDone) THEN
HardSizeNoDesRun = .FALSE.
ELSE
HardSizeNoDesRun = .TRUE.
ENDIF
IF (CurSysNum > 0) THEN
CALL CheckThisAirSystemForSizing(CurSysNum, SizingDesRunThisAirSys )
ELSE
SizingDesRunThisAirSys = .FALSE.
ENDIF
IF (CurZoneEqNum > 0) THEN
CALL CheckThisZoneForSizing(CurZoneEqNum, SizingDesRunThisZone)
ELSE
SizingDesRunThisZone = .FALSE.
ENDIF
IsAutoSize = .FALSE.
IsCoolCoilCapAutosize = .FALSE.
RatedAirVolFlowRateDes = 0.0d0
RatedAirVolFlowRateUser = 0.0d0
RatedAirVolFlowRate2Des = 0.0d0
RatedAirVolFlowRate2User = 0.0d0
RatedTotCapDes = 0.0d0
RatedTotCapUser = 0.0d0
RatedTotCap2Des = 0.0d0
RatedTotCap2User = 0.0d0
RatedSHRDes = 0.0d0
RatedSHRUser = 0.0d0
RatedSHR2Des = 0.0d0
RatedSHR2User = 0.0d0
EvapCondAirFlowDes = 0.0d0
EvapCondAirFlowUser = 0.0d0
EvapCondAirFlow2Des = 0.0d0
EvapCondAirFlow2User = 0.0d0
EvapCondPumpElecNomPowerDes = 0.0d0
EvapCondPumpElecNomPowerUser = 0.0d0
EvapCondPumpElecNomPower2Des = 0.0d0
EvapCondPumpElecNomPower2User = 0.0d0
DefrostCapacityDes = 0.0d0
DefrostCapacityUser = 0.0d0
MSRatedAirVolFlowRateDes = 0.0d0
MSRatedAirVolFlowRateUser = 0.0d0
MSRatedTotCapDes = 0.0d0
MSRatedTotCapUser = 0.0d0
MSRatedSHRDes = 0.0d0
MSRatedSHRUser = 0.0d0
MSEvapCondAirFlowDes = 0.0d0
MSEvapCondAirFlowUser = 0.0d0
MSEvapCondAirFlow2Des = 0.0d0
MSEvapCondAirFlow2User = 0.0d0
MSEvapCondPumpElecNomPowerDes = 0.0d0
MSEvapCondPumpElecNomPowerUser = 0.0d0
MSEvapCondPumpElecNomPower2Des = 0.0d0
MSEvapCondPumpElecNomPower2User = 0.0d0
MSDefrostCapacityDes = 0.0d0
MSDefrostCapacityUser = 0.0d0
! EXTERNAL ReportSizingOutput
! NOTE: we are sizing COIL:DX:HeatingEmpirical on the COOLING load. Thus the cooling and
! and heating capacities of a DX heat pump system will be identical. In real life the ARI
! heating and cooling capacities are close but not identical.
DO DehumidModeNum = 0, DXCoil(DXCoilNum)%NumDehumidModes
DO CapacityStageNum = 1, DXCoil(DXCoilNum)%NumCapacityStages
Mode = DehumidModeNum*2 + CapacityStageNum
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
! Sizing rated air volume flow rate
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_HeatingEmpirical .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilVRF_Cooling .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilVRF_Heating) THEN
IF (SizingDesRunThisAirSys) HardSizeNoDesRun = .FALSE.
IF (CurSysNum > 0) THEN
! If hard-sized, check if system sizing data is available for system coil
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) > 0.0d0) THEN
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Air Flow Rate [m3/s]', DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Air Flow Rate (non-bypassed) [m3/s]', &
DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated High Speed Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated Air Flow Rate [m3/s]', DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
END IF
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
IF (CurOASysNum > 0) THEN
IF (OASysEqSizing(CurOASysNum)%AirFlow) THEN
! Parent object sets flow rate
RatedAirVolFlowRateDes = OASysEqSizing(CurOASysNum)%AirVolFlow
ELSE
RatedAirVolFlowRateDes = FinalSysSizing(CurSysNum)%DesOutAirVolFlow
END IF
ELSE
IF (UnitarySysEqSizing(CurSysNum)%AirFlow) THEN
! Parent object sets flow rate
RatedAirVolFlowRateDes = UnitarySysEqSizing(CurSysNum)%AirVolFlow
ELSE
RatedAirVolFlowRateDes = FinalSysSizing(CurSysNum)%DesMainVolFlow
END IF
END IF
END IF
ELSE IF (CurZoneEqNum > 0) THEN
! If hard-sized, check if zone sizing data is available for zone coil
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) > 0.0d0) THEN
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Air Flow Rate [m3/s]', DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Air Flow Rate (non-bypassed) [m3/s]', &
DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated High Speed Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated Air Flow Rate [m3/s]', DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))
END IF
END IF
ELSE ! autosize or hard-sized with zone sizing data
IF(ZoneEqSizing(CurZoneEqNum)%AirFlow)THEN
! Parent object sets flow rate
RatedAirVolFlowRateDes = ZoneEqSizing(CurZoneEqNum)%AirVolFlow
ELSE
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
IF(ZoneCoolingOnlyFan)THEN
RatedAirVolFlowRateDes = FinalZoneSizing(CurZoneEqNum)%DesCoolVolFlow
ELSE
RatedAirVolFlowRateDes = &
MAX(FinalZoneSizing(CurZoneEqNum)%DesCoolVolFlow,FinalZoneSizing(CurZoneEqNum)%DesHeatVolFlow)
END IF
END IF ! IF(ZoneEqSizing(CurZoneEqNum)%AirFlow)THEN
END IF
END IF
IF (RatedAirVolFlowRateDes < SmallAirVolFlow) THEN
RatedAirVolFlowRateDes = 0.0d0
END IF
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRateEMSOverrideON(Mode)) THEN
RatedAirVolFlowRateDes = DXCoil(DXCoilNum)%RatedAirVolFlowRateEMSOverrideValue(Mode)
END IF
END IF
IF(DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_HeatPumpWaterHeater) THEN
IF(DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) == AutoCalculate)THEN
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1) = DXCoil(DXCoilNum)%RatedTotCap2 * 0.00005035d0
DXCoil(DXCoilNum)%AirVolFlowAutoSized = .TRUE.
END IF
IF(DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow == AutoCalculate)THEN
DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow = DXCoil(DXCoilNum)%RatedTotCap2 * 0.00000004487d0
DXCoil(DXCoilNum)%WaterVolFlowAutoSized = .TRUE.
! Reporting autosize info for DX coils used with HPWHs will list the info out of order in the eio, report it later
! CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
! 'Rated Condenser Water Volume Flow Rate [m3/s]', DXCoil(DXCoilNum)%RatedHPWHCondWaterFlow)
END IF
ELSE
IF (.NOT. HardSizeNoDesRun) THEN
IF (.NOT. DXCoil(DXCoilNum)%AirVolFlowAutoSized .OR. .NOT. DXCoil(DXCoilNum)%WaterVolFlowAutoSized) THEN
IF (IsAutosize) THEN ! Design Size values are available for both autosized and hard-sized
DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) = RatedAirVolFlowRateDes
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Air Flow Rate [m3/s]', RatedAirVolFlowRateDes)
! For Multimode Coil, Rated flow must be adjusted for bypass fraction
RatedAirVolFlowRateDes = RatedAirVolFlowRateDes * &
(1-DXCoil(DXCoilNum)%BypassedFlowFrac(Mode))
DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) = RatedAirVolFlowRateDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Air Flow Rate (non-bypassed) [m3/s]', RatedAirVolFlowRateDes)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated High Speed Air Flow Rate [m3/s]',RatedAirVolFlowRateDes)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Air Flow Rate [m3/s]', RatedAirVolFlowRateDes)
END IF
ELSE ! Hard size with sizing data
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) > 0.0d0 .AND. RatedAirVolFlowRateDes > 0.d0) THEN
RatedAirVolFlowRateUser = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode)
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Air Flow Rate [m3/s]', RatedAirVolFlowRateDes, &
'User-Specified Rated Air Flow Rate [m3/s]', RatedAirVolFlowRateUser)
! For Multimode Coil, Rated flow must be adjusted for bypass fraction
RatedAirVolFlowRateDes = RatedAirVolFlowRateDes * &
(1-DXCoil(DXCoilNum)%BypassedFlowFrac(Mode))
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Air Flow Rate (non-bypassed) [m3/s]', RatedAirVolFlowRateDes, &
'User-Specified Rated Air Flow Rate (non-bypassed) [m3/s]', RatedAirVolFlowRateUser)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated High Speed Air Flow Rate [m3/s]',RatedAirVolFlowRateDes, &
'User-Specified Rated High Speed Air Flow Rate [m3/s]',RatedAirVolFlowRateUser)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Air Flow Rate [m3/s]', RatedAirVolFlowRateDes, &
'User-Specified Rated Air Flow Rate [m3/s]', RatedAirVolFlowRateUser)
END IF
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedAirVolFlowRateDes - RatedAirVolFlowRateUser)/RatedAirVolFlowRateUser) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for '//TRIM(DXCoil(DXCoilNum)%DXCoilType) &
//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Air Volume Flow Rate of '// &
TRIM(RoundSigDigits(RatedAirVolFlowRateUser,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Rated Air Volume Flow Rate of ' // &
TRIM(RoundSigDigits(RatedAirVolFlowRateDes,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
ENDIF
ENDIF
END IF
END IF
END IF
END IF
END IF
OASysFlag = .FALSE.
AirLoopSysFlag = .FALSE.
! logicals used when parent sizes coil
IF (CurOASysNum > 0)OASysFlag = OASysEqSizing(CurOASysNum)%Capacity
IF (CurSysNum > 0)AirLoopSysFlag = UnitarySysEqSizing(CurSysNum)%Capacity
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
! Sizing rated total capacity
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilVRF_Cooling) THEN
IsCoolCoilCapAutosize = .TRUE.
IF (SizingDesRunThisAirSys .OR. SizingDesRunThisZone) HardSizeNoDesRun = .FALSE.
IF (CurSysNum > 0) THEN
! If hard-sized, check if system sizing data is available for system coil
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) > 0.0d0) THEN
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Total Cooling Capacity (gross) [W]', DXCoil(DXCoilNum)%RatedTotCap(Mode))
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated High Speed Total Cooling Capacity (gross) [W]', &
DXCoil(DXCoilNum)%RatedTotCap(Mode))
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated Total Cooling Capacity (gross) [W]', &
DXCoil(DXCoilNum)%RatedTotCap(Mode))
END IF
END IF
ELSE ! autosize or hard-sized with system sizing data
IF (OASysFlag) THEN
RatedTotCapDes = OASysEqSizing(CurOASysNum)%DesCoolingLoad
ELSE IF (AirLoopSysFlag) THEN
RatedTotCapDes = UnitarySysEqSizing(CurSysNum)%DesCoolingLoad
ELSE
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
VolFlowRate = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode)
IF (VolFlowRate >= SmallAirVolFlow) THEN
IF (CurOASysNum > 0) THEN ! coil is in the OA stream
MixTemp = FinalSysSizing(CurSysNum)%CoolOutTemp
MixHumRat = FinalSysSizing(CurSysNum)%CoolOutHumRat
SupTemp = FinalSysSizing(CurSysNum)%PrecoolTemp
SupHumRat = FinalSysSizing(CurSysNum)%PrecoolHumRat
ELSE ! coil is on the main air loop
SupTemp = FinalSysSizing(CurSysNum)%CoolSupTemp
SupHumRat = FinalSysSizing(CurSysNum)%CoolSupHumRat
IF (PrimaryAirSystem(CurSysNum)%NumOACoolCoils == 0) THEN ! there is no precooling of the OA stream
MixTemp = FinalSysSizing(CurSysNum)%CoolMixTemp
MixHumRat = FinalSysSizing(CurSysNum)%CoolMixHumRat
ELSE ! there is precooling of OA stream
IF (VolFlowRate > 0.0d0) THEN
OutAirFrac = FinalSysSizing(CurSysNum)%DesOutAirVolFlow / VolFlowRate
ELSE
OutAirFrac = 1.0d0
END IF
OutAirFrac = MIN(1.0d0,MAX(0.0d0,OutAirFrac))
MixTemp = OutAirFrac*FinalSysSizing(CurSysNum)%PrecoolTemp + &
(1.0d0-OutAirFrac)*FinalSysSizing(CurSysNum)%CoolRetTemp
MixHumRat = OutAirFrac*FinalSysSizing(CurSysNum)%PrecoolHumRat + &
(1.0d0-OutAirFrac)*FinalSysSizing(CurSysNum)%CoolRetHumRat
END IF
END IF
OutTemp = FinalSysSizing(CurSysNum)%CoolOutTemp
rhoair = PsyRhoAirFnPbTdbW(StdBaroPress,MixTemp,MixHumRat,RoutineName)
MixEnth = PsyHFnTdbW(MixTemp,MixHumRat,RoutineName)
MixWetBulb = PsyTwbFnTdbWPb(MixTemp,MixHumRat,StdBaroPress,RoutineName)
SupEnth = PsyHFnTdbW(SupTemp,SupHumRat,RoutineName)
TotCapTempModFac = CurveValue(DXCoil(DXCoilNum)%CCapFTemp(Mode),MixWetBulb,OutTemp)
CoolCapAtPeak = MAX(0.0d0, (rhoair * VolFlowRate * (MixEnth-SupEnth)))
IF(TotCapTempModFac .GT. 0.0d0)THEN
RatedTotCapDes = CoolCapAtPeak / TotCapTempModFac
ELSE
RatedTotCapDes = CoolCapAtPeak
END IF
ELSE
RatedTotCapDes = 0.0d0
END IF
END IF ! IF(OASysFlag) THEN or ELSE IF(AirLoopSysFlag) THEN
IF(RatedTotCapDes .GT. 0.0d0)THEN
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) / RatedTotCapDes
ELSE
RatedVolFlowPerRatedTotCap = 0.0d0
END IF
! check capacity to make sure design volume flow per total capacity is within range
IF (RatedVolFlowPerRatedTotCap .LT. MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the minimum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Minimum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MinRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MinRatedVolFlowPerRatedTotCap(DXCT)
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
ELSEIF (RatedVolFlowPerRatedTotCap .GT. MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the maximum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Maximum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MaxRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MaxRatedVolFlowPerRatedTotCap(DXCT)
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
END IF
END IF
ELSE IF (CurZoneEqNum > 0) THEN
! If hard-sized, check if zone sizing data is available for system coil
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) > 0.0d0) THEN
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Total Cooling Capacity (gross) [W]', &
DXCoil(DXCoilNum)%RatedTotCap(Mode))
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated High Speed Total Cooling Capacity (gross) [W]', &
DXCoil(DXCoilNum)%RatedTotCap(Mode))
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated Total Cooling Capacity (gross) [W]', &
DXCoil(DXCoilNum)%RatedTotCap(Mode))
END IF
END IF
ELSE ! autosize or hard-sized with system sizing data
IF (ZoneEqSizing(CurZoneEqNum)%Capacity) THEN ! Parent object calculated capacity
DXCoil(DXCoilNum)%RatedTotCap(Mode) = ZoneEqSizing(CurZoneEqNum)%DesCoolingLoad
ELSE
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
VolFlowRate = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode)
IF (VolFlowRate >= SmallAirVolFlow) THEN
IF(ZoneEqDXCoil)THEN
IF (ZoneEqSizing(CurZoneEqNum)%OAVolFlow > 0.0d0) THEN
MixTemp = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInTemp
MixHumRat = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInHumRat
ELSE
MixTemp = FinalZoneSizing(CurZoneEqNum)%ZoneRetTempAtCoolPeak
MixHumRat = FinalZoneSizing(CurZoneEqNum)%ZoneHumRatAtCoolPeak
END IF
ELSE
MixTemp = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInTemp
MixHumRat = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInHumRat
END IF
SupTemp = FinalZoneSizing(CurZoneEqNum)%CoolDesTemp
SupHumRat = FinalZoneSizing(CurZoneEqNum)%CoolDesHumRat
TimeStepNumAtMax = FinalZoneSizing(CurZoneEqNum)%TimeStepNumAtCoolMax
DDNum = FinalZoneSizing(CurZoneEqNum)%CoolDDNum
IF (DDNum > 0 .and. TimeStepNumAtMax > 0) THEN
OutTemp = DesDayWeath(DDNum)%Temp(TimeStepNumAtMax)
ELSE
OutTemp = 0.0d0
ENDIF
rhoair = PsyRhoAirFnPbTdbW(StdBaroPress,MixTemp,MixHumRat,RoutineName)
MixEnth = PsyHFnTdbW(MixTemp,MixHumRat,RoutineName)
MixWetBulb = PsyTwbFnTdbWPb(MixTemp,MixHumRat,StdBaroPress,RoutineName)
SupEnth = PsyHFnTdbW(SupTemp,SupHumRat,RoutineName)
TotCapTempModFac = CurveValue(DXCoil(DXCoilNum)%CCapFTemp(Mode),MixWetBulb,OutTemp)
CoolCapAtPeak = MAX(0.0d0, (rhoair * VolFlowRate * (MixEnth-SupEnth)))
IF(TotCapTempModFac .GT. 0.0d0)THEN
RatedTotCapDes = CoolCapAtPeak / TotCapTempModFac
ELSE
RatedTotCapDes = CoolCapAtPeak
END IF
ELSE
RatedTotCapDes = 0.0d0
END IF
END IF
END IF ! End of desing sizing
IF(RatedTotCapDes .GT. 0.0d0)THEN
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) / RatedTotCapDes
ELSE
RatedVolFlowPerRatedTotCap = 0.0d0
END IF
! check capacity to make sure design volume flow per total capacity is within range
IF (RatedVolFlowPerRatedTotCap .LT. MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the minimum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Minimum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MinRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MinRatedVolFlowPerRatedTotCap(DXCT)
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
ELSEIF (RatedVolFlowPerRatedTotCap .GT. MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the maximum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Maximum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MaxRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MaxRatedVolFlowPerRatedTotCap(DXCT)
IF (.NOT. DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode) .AND. DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
END IF
END IF ! End of sys/zone coil type
IF (.NOT. HardSizeNoDesRun) THEN
IF (IsAutosize) THEN ! Design Size values are available for both autosized and hard-sized
! Set Design Size and User-Specified values
IF (DXCoil(DXCoilNum)%RatedTotCapEMSOverrideOn(Mode)) THEN
RatedTotCapDes = DXCoil(DXCoilNum)%RatedTotCapEMSOverrideValue(Mode)
ENDIF
DXCoil(DXCoilNum)%RatedTotCap(Mode) = RatedTotCapDes
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Total Cooling Capacity (gross) [W]', RatedTotCapDes)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated High Speed Total Cooling Capacity (gross) [W]', RatedTotCapDes)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Total Cooling Capacity (gross) [W]', RatedTotCapDes)
END IF
ELSE ! Hard size with sizing data
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) > 0.0d0 .AND. RatedTotCapDes > 0.0d0) THEN
RatedTotCapUser = DXCoil(DXCoilNum)%RatedTotCap(Mode)
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Total Cooling Capacity (gross) [W]', RatedTotCapDes, &
'User-Specified Rated Total Cooling Capacity (gross) [W]', RatedTotCapUser)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated High Speed Total Cooling Capacity (gross) [W]', RatedTotCapDes, &
'User-Specified Rated High Speed Total Cooling Capacity (gross) [W]', RatedTotCapUser)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Total Cooling Capacity (gross) [W]', RatedTotCapDes, &
'User-Specified Rated Total Cooling Capacity (gross) [W]', RatedTotCapUser)
END IF
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedTotCapDes - RatedTotCapUser)/RatedTotCapUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Total Cooling Capacity of '// &
TRIM(RoundSigDigits(RatedTotCapUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Total Cooling Capacity of ' // &
TRIM(RoundSigDigits(RatedTotCapDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
END IF
! Heating coil capacity
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilVRF_Cooling) THEN
DXCoolCap = DXCoil(DXCoilNum)%RatedTotCap(Mode)
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_HeatingEmpirical .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilVRF_Heating) THEN
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
! IF (.NOT. DXCoil(DXCoilNum)%AirVolFlowAutoSized .AND. .NOT. DXCoil(DXCoilNum)%WaterVolFlowAutoSized) THEN
IF (SizingDesRunThisAirSys .OR. SizingDesRunThisZone) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated Total Heating Capacity [W]', DXCoil(DXCoilNum)%RatedTotCap(Mode))
END IF
ELSE ! autosize or hard-sized with system sizing data
IF (OASysFlag) THEN
IF (UnitarySysEqSizing(CurSysNum)%DesHeatingLoad .GT. 0.0d0) THEN
DXCoil(DXCoilNum)%RatedTotCap(Mode) = OASysEqSizing(CurOASysNum)%DesHeatingLoad
RatedTotCapDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)
ELSE
DXCoil(DXCoilNum)%RatedTotCap(Mode) = OASysEqSizing(CurOASysNum)%DesCoolingLoad * &
DXCoil(DXCoilNum)%HeatSizeRatio
RatedTotCapDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)
END IF
ELSE IF (AirLoopSysFlag) THEN
IF(UnitarySysEqSizing(CurSysNum)%DesHeatingLoad .GT. 0.0d0)THEN
DXCoil(DXCoilNum)%RatedTotCap(Mode) = UnitarySysEqSizing(CurSysNum)%DesHeatingLoad
ELSE
DXCoil(DXCoilNum)%RatedTotCap(Mode) = UnitarySysEqSizing(CurSysNum)%DesCoolingLoad * &
DXCoil(DXCoilNum)%HeatSizeRatio
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)
ELSE IF(DXCoil(DXCoilNum)%CoolingCoilPresent)THEN
DXCoil(DXCoilNum)%RatedTotCap(Mode) = DXCoolCap * DXCoil(DXCoilNum)%HeatSizeRatio
RatedTotCapDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)
ELSE
IF (CurSysNum > 0) THEN
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
VolFlowRate = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode)
IF (VolFlowRate >= SmallAirVolFlow) THEN
IF (CurOASysNum > 0) THEN ! coil is in the OA stream
MixTemp = FinalSysSizing(CurSysNum)%CoolOutTemp
MixHumRat = FinalSysSizing(CurSysNum)%CoolOutHumRat
SupTemp = FinalSysSizing(CurSysNum)%PrecoolTemp
SupHumRat = FinalSysSizing(CurSysNum)%PrecoolHumRat
ELSE ! coil is on the main air loop
SupTemp = FinalSysSizing(CurSysNum)%CoolSupTemp
SupHumRat = FinalSysSizing(CurSysNum)%CoolSupHumRat
IF (PrimaryAirSystem(CurSysNum)%NumOACoolCoils == 0) THEN ! there is no precooling of the OA stream
MixTemp = FinalSysSizing(CurSysNum)%CoolMixTemp
MixHumRat = FinalSysSizing(CurSysNum)%CoolMixHumRat
ELSE ! there is precooling of OA stream
IF (VolFlowRate > 0.0d0) THEN
OutAirFrac = FinalSysSizing(CurSysNum)%DesOutAirVolFlow / VolFlowRate
ELSE
OutAirFrac = 1.0d0
END IF
OutAirFrac = MIN(1.0d0,MAX(0.0d0,OutAirFrac))
MixTemp = OutAirFrac*FinalSysSizing(CurSysNum)%PrecoolTemp + &
(1.0d0-OutAirFrac)*FinalSysSizing(CurSysNum)%CoolRetTemp
MixHumRat = OutAirFrac*FinalSysSizing(CurSysNum)%PrecoolHumRat + &
(1.0d0-OutAirFrac)*FinalSysSizing(CurSysNum)%CoolRetHumRat
END IF
END IF
OutTemp = FinalSysSizing(CurSysNum)%CoolOutTemp
rhoair = PsyRhoAirFnPbTdbW(StdBaroPress,MixTemp,MixHumRat,RoutineName)
MixEnth = PsyHFnTdbW(MixTemp,MixHumRat,RoutineName)
MixWetBulb = PsyTwbFnTdbWPb(MixTemp,MixHumRat,StdBaroPress,RoutineName)
SupEnth = PsyHFnTdbW(SupTemp,SupHumRat,RoutineName)
TotCapTempModFac = CurveValue(DXCoil(DXCoilNum)%CCapFTemp(Mode),MixWetBulb,OutTemp)
CoolCapAtPeak = MAX(0.0d0, (rhoair * VolFlowRate * (MixEnth-SupEnth)))
IF(TotCapTempModFac .GT. 0.0d0)THEN
RatedTotCapDes = CoolCapAtPeak / TotCapTempModFac
ELSE
RatedTotCapDes = CoolCapAtPeak
END IF
ELSE
RatedTotCapDes = 0.0d0
END IF
IF(RatedTotCapDes .GT. 0.0d0)THEN
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) / RatedTotCapDes
ELSE
RatedVolFlowPerRatedTotCap = 0.0d0
END IF
! check capacity to make sure design volume flow per total capacity is within range
IF (RatedVolFlowPerRatedTotCap .LT. MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Heating Capacity will be limited by the minimum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Minimum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MinRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MinRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
ELSEIF (RatedVolFlowPerRatedTotCap .GT. MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Heating Capacity will be limited by the maximum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Maximum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MaxRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MaxRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
END IF
ELSEIF (CurZoneEqNum > 0) THEN
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
VolFlowRate = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode)
IF (VolFlowRate >= SmallAirVolFlow) THEN
IF(ZoneEqSizing(CurZoneEqNum)%Capacity)THEN
IF(ZoneEqSizing(CurZoneEqNum)%DesHeatingLoad .GT. 0.0d0)THEN
DXCoil(DXCoilNum)%RatedTotCap(Mode) = ZoneEqSizing(CurZoneEqNum)%DesHeatingLoad
ELSE
DXCoil(DXCoilNum)%RatedTotCap(Mode) = ZoneEqSizing(CurZoneEqNum)%DesCoolingLoad * &
DXCoil(DXCoilNum)%HeatSizeRatio
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)
ELSE
IF(ZoneEqDXCoil)THEN
IF (ZoneEqSizing(CurZoneEqNum)%OAVolFlow > 0.0d0) THEN
MixTemp = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInTemp
MixHumRat = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInHumRat
ELSE
MixTemp = FinalZoneSizing(CurZoneEqNum)%ZoneRetTempAtCoolPeak
MixHumRat = FinalZoneSizing(CurZoneEqNum)%ZoneHumRatAtCoolPeak
END IF
ELSE
MixTemp = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInTemp
MixHumRat = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInHumRat
END IF
SupTemp = FinalZoneSizing(CurZoneEqNum)%CoolDesTemp
SupHumRat = FinalZoneSizing(CurZoneEqNum)%CoolDesHumRat
TimeStepNumAtMax = FinalZoneSizing(CurZoneEqNum)%TimeStepNumAtCoolMax
DDNum = FinalZoneSizing(CurZoneEqNum)%CoolDDNum
IF (DDNum > 0 .and. TimeStepNumAtMax > 0) THEN
OutTemp = DesDayWeath(DDNum)%Temp(TimeStepNumAtMax)
ELSE
OutTemp = 0.0d0
ENDIF
rhoair = PsyRhoAirFnPbTdbW(StdBaroPress,MixTemp,MixHumRat,RoutineName)
MixEnth = PsyHFnTdbW(MixTemp,MixHumRat,RoutineName)
MixWetBulb = PsyTwbFnTdbWPb(MixTemp,MixHumRat,StdBaroPress,RoutineName)
SupEnth = PsyHFnTdbW(SupTemp,SupHumRat,RoutineName)
TotCapTempModFac = CurveValue(DXCoil(DXCoilNum)%CCapFTemp(Mode),MixWetBulb,OutTemp)
CoolCapAtPeak = MAX(0.0d0, (rhoair * VolFlowRate * (MixEnth-SupEnth)))
IF(TotCapTempModFac .GT. 0.0d0)THEN
RatedTotCapDes = CoolCapAtPeak / TotCapTempModFac
ELSE
RatedTotCapDes = CoolCapAtPeak
END IF
ENDIF
ELSE
RatedTotCapDes = 0.0d0
END IF
IF(RatedTotCapDes .GT. 0.0d0)THEN
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) / RatedTotCapDes
ELSE
RatedVolFlowPerRatedTotCap = 0.0d0
END IF
! check capacity to make sure design volume flow per total capacity is within range
IF (RatedVolFlowPerRatedTotCap .LT. MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Heating Capacity will be limited by the minimum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Minimum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MinRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MinRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
ELSE IF (RatedVolFlowPerRatedTotCap .GT. MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Heating Capacity will be limited by the maximum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Maximum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MaxRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
RatedTotCapDes = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) &
/ MaxRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(RatedTotCapDes,3))
END IF
END IF
END IF ! zone or sys coil
END IF
END IF
IF (.NOT. HardSizeNoDesRun) THEN ! .AND. .NOT. DXCoil(DXCoilNum)%CoolingCoilPresent) THEN
IF (IsAutoSize) THEN
IF (DXCoil(DXCoilNum)%CoolingCoilPresent) THEN
RatedTotCapDes = DXCoolCap * DXCoil(DXCoilNum)%HeatSizeRatio
DXCoil(DXCoilNum)%RatedTotCap(Mode) = RatedTotCapDes
ELSE
DXCoil(DXCoilNum)%RatedTotCap(Mode) = RatedTotCapDes
END IF
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Total Heating Capacity [W]', RatedTotCapDes)
ELSE
IF (DXCoil(DXCoilNum)%RatedTotCap(Mode) > 0.0d0 .AND. RatedTotCapDes > 0.0d0) THEN
RatedTotCapUser = DXCoil(DXCoilNum)%RatedTotCap(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Total Heating Capacity [W]', RatedTotCapDes, &
'User-Specified Rated Total Heating Capacity [W]', RatedTotCapUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedTotCapDes - RatedTotCapUser)/RatedTotCapUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Total Heating Capacity of '// &
TRIM(RoundSigDigits(RatedTotCapUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Total Heating Capacity of ' // &
TRIM(RoundSigDigits(RatedTotCapDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF ! End of design sizing
END IF ! End of zone/sys coil type Rated Total Heating Capacity
END IF ! heating coil
! Sizing RatedSHR
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%RatedSHR(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilVRF_Cooling) THEN
CpAir = PsyCpAirFnWTdb(RatedInletAirHumRat,RatedInletAirTemp,RoutineName)
IF (SizingDesRunThisAirSys .OR. SizingDesRunThisZone) HardSizeNoDesRun = .FALSE.
IF (CurSysNum > 0) THEN
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedSHR(Mode) > 0.0d0) THEN
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Sensible Heat Ratio', DXCoil(DXCoilNum)%RatedSHR(Mode))
ELSEIF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated High Speed Sensible Heat Ratio', DXCoil(DXCoilNum)%RatedSHR(Mode))
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated Sensible Heat Ratio', DXCoil(DXCoilNum)%RatedSHR(Mode))
END IF
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
END IF
ELSE IF (CurZoneEqNum > 0) THEN
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%RatedSHR(Mode) > 0.0d0) THEN
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'User-Specified Rated Sensible Heat Ratio', DXCoil(DXCoilNum)%RatedSHR(Mode))
ELSEIF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'User-Specified Rated High Speed Sensible Heat Ratio', DXCoil(DXCoilNum)%RatedSHR(Mode))
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name//':'// &
DXCoil(DXCoilNum)%CoilPerformanceName(Mode), &
'User-Specified Rated Sensible Heat Ratio', DXCoil(DXCoilNum)%RatedSHR(Mode))
END IF
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
END IF
END IF ! End of Sys/Zone coil type
IF (.NOT. HardSizeNoDesRun) THEN
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) >= SmallAirVolFLow .AND. DXCoil(DXCoilNum)%RatedTotCap(Mode) > 0.0d0) THEN
! For autosizing the rated SHR, we set a minimum SHR of 0.676 and a maximum of 0.798. The min SHR occurs occurs at the
! minimum flow / capacity ratio = MinRatedVolFlowPerRatedTotCap = 0.00004027 [m3/s / W] = 300 [cfm/ton].
! The max SHR occurs at maximum flow / capacity ratio = MaxRatedVolFlowPerRatedTotCap = 0.00006041 [m3/s / W] = 450 [cfm/ton].
! For flow / capacity ratios between the min and max we linearly interpolate between min and max SHR. Thus rated SHR is a
! linear function of the rated flow / capacity ratio. This linear function (see below) is the result of a regression
! of flow/capacity ratio vs SHR for several actual coils.
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode) / DXCoil(DXCoilNum)%RatedTotCap(Mode)
IF (DXCT == RegularDXCoil) THEN
IF (RatedVolFlowPerRatedTotCap > MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
RatedSHRDes = 0.431d0 + 6086.d0*MaxRatedVolFlowPerRatedTotCap(DXCT)
ELSE IF (RatedVolFlowPerRatedTotCap < MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
RatedSHRDes = 0.431d0 + 6086.d0*MinRatedVolFlowPerRatedTotCap(DXCT)
ELSE
RatedSHRDes = 0.431d0 + 6086.d0*RatedVolFlowPerRatedTotCap
END IF
ELSE ! DOASDXCoil, or DXCT = 2
IF (RatedVolFlowPerRatedTotCap > MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
RatedSHRDes = 0.389d0 + 7684.d0*MaxRatedVolFlowPerRatedTotCap(DXCT)
ELSE IF (RatedVolFlowPerRatedTotCap < MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
RatedSHRDes = 0.389d0 + 7684.d0*MinRatedVolFlowPerRatedTotCap(DXCT)
ELSE
RatedSHRDes = 0.389d0 + 7684.d0*RatedVolFlowPerRatedTotCap
END IF
ENDIF
ELSE
RatedSHRDes = 1.0d0
END IF
IF (DXCoil(DXCoilNum)%RatedSHREMSOverrideOn(Mode)) THEN
RatedSHRDes = DXCoil(DXCoilNum)%RatedSHREMSOverrideValue(mode)
END IF
IF (IsAutosize) THEN ! Design Size values are available for both autosized and hard-sized
DXCoil(DXCoilNum)%RatedSHR(Mode) = RatedSHRDes
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Sensible Heat Ratio', RatedSHRDes)
ELSEIF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated High Speed Sensible Heat Ratio', RatedSHRDes)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Sensible Heat Ratio', RatedSHRDes)
END IF
ELSE ! Hard size with sizing data
IF (DXCoil(DXCoilNum)%RatedSHR(Mode) > 0.0d0 .AND. RatedSHRDes > 0.0d0) THEN
RatedSHRUser = DXCoil(DXCoilNum)%RatedSHR(Mode)
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Rated Sensible Heat Ratio', RatedSHRDes, &
'User-Specified Rated Sensible Heat Ratio', RatedSHRUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedSHRDes - RatedSHRUser)/RatedSHRUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Sensible Heat Ratio of ' //TRIM(RoundSigDigits(RatedSHRUser,3)))
CALL ShowContinueError('differs from Design Size Sensible Heat Ratio of ' // &
TRIM(RoundSigDigits(RatedSHRDes,3)))
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated High Speed Sensible Heat Ratio', RatedSHRDes, &
'User-Specified Rated High Speed Sensible Heat Ratio', RatedSHRUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedSHRDes - RatedSHRUser)/RatedSHRUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated High Speed Sensible Heat Ratio of ' // &
TRIM(RoundSigDigits(RatedSHRUser,3)))
CALL ShowContinueError('differs from Design Size Rated High Speed Sensible Heat Ratio of ' // &
TRIM(RoundSigDigits(RatedSHRDes,3)))
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Sensible Heat Ratio', RatedSHRDes, &
'User-Specified Rated Sensible Heat Ratio', RatedSHRUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedSHRDes - RatedSHRUser)/RatedSHRUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Sensible Heat Ratio of ' //TRIM(RoundSigDigits(RatedSHRUser,3)))
CALL ShowContinueError('differs from Design Size Sensible Heat Ratio of ' // &
TRIM(RoundSigDigits(RatedSHRDes,3)))
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
END IF ! End of reproting
END IF ! End of Rated SHR
! Sizing evaporator condenser air flow
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%EvapCondAirFlow(Mode) == AutoSize) THEN
IsAutoSize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
! Auto size condenser air flow to Total Capacity * 0.000114 m3/s/w (850 cfm/ton)
EvapCondAirFlowDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)*0.000114d0
! Design data is always available
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%EvapCondAirFlow(Mode) = EvapCondAirFlowDes
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Evaporative Condenser Air Flow Rate [m3/s]',EvapCondAirFlowDes)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size High Speed Evaporative Condenser Air Flow Rate [m3/s]',EvapCondAirFlowDes)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Evaporative Condenser Air Flow Rate [m3/s]',EvapCondAirFlowDes)
END IF
ELSE ! Hard size with sizig data
IF (DXCoil(DXCoilNum)%EvapCondAirFlow(Mode) > 0.0d0 .AND. EvapCondAirFlowDes > 0.0d0) THEN
EvapCondAirFlowUser = DXCoil(DXCoilNum)%EvapCondAirFlow(Mode)
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlowDes, &
'User-Specified Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlowUser)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size High Speed Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlowDes, &
'User-Specified High Speed Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlowUser)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlowDes, &
'User-Specified Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlowUser)
END IF
IF (DisplayExtraWarnings) THEN
IF ((ABS(EvapCondAirFlowDes - EvapCondAirFlowUser)/EvapCondAirFlowUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Evaporative Condenser Air Flow Rate of '// &
TRIM(RoundSigDigits(EvapCondAirFlowUser,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Evaporative Condenser Air Flow Rate of ' // &
TRIM(RoundSigDigits(EvapCondAirFlowDes,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Sizing evaporative condenser air flow 2
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%EvapCondAirFlow2 == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
! Auto size low speed condenser air flow to 1/3 Total Capacity * 0.000114 m3/s/w (850 cfm/ton)
EvapCondAirFlow2Des = 0.3333d0*DXCoil(DXCoilNum)%RatedTotCap(Mode)*0.000114d0
! Design Size data is always available
IF (IsAutoSize) THEN
DXCoil(DXCoilNum)%EvapCondAirFlow2 = EvapCondAirFlow2Des
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Low Speed Evaporative Condenser Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%EvapCondAirFlow2)
ELSE
IF (DXCoil(DXCoilNum)%EvapCondAirFlow2 > 0.0d0 .AND. EvapCondAirFlow2Des > 0.0d0 ) THEN
EvapCondAirFlow2User = DXCoil(DXCoilNum)%EvapCondAirFlow2
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Low Speed Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlow2Des, &
'User-Specified Low Speed Evaporative Condenser Air Flow Rate [m3/s]', EvapCondAirFlow2User)
IF (DisplayExtraWarnings) THEN
IF ((ABS(EvapCondAirFlow2Des - EvapCondAirFlow2User)/EvapCondAirFlow2User) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Low Speed Evaporative Condenser Air Flow Rate of '// &
TRIM(RoundSigDigits(EvapCondAirFlow2User,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Low Speed Evaporative Condenser Air Flow Rate of ' // &
TRIM(RoundSigDigits(EvapCondAirFlow2Des,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Sizing evaporative condenser pump electric nominal power
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
! Auto size high speed evap condenser pump power to Total Capacity * 0.004266 w/w (15 w/ton)
EvapCondPumpElecNomPowerDes = DXCoil(DXCoilNum)%RatedTotCap(Mode)*0.004266d0
IF (IsAutoSize) THEN
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(Mode) = EvapCondPumpElecNomPowerDes
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerDes)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size High Speed Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerDes)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerDes)
END IF
ELSE
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(Mode) > 0.0d0 .AND. EvapCondPumpElecNomPowerDes > 0.0d0 &
.AND. .NOT. HardSizeNoDesRun ) THEN
EvapCondPumpElecNomPowerUser = DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(Mode)
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoStageWHumControl) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, TRIM(DXCoil(DXCoilNum)%Name)//':'// &
TRIM(DXCoil(DXCoilNum)%CoilPerformanceName(Mode)), &
'Design Size Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerDes, &
'User-Specified Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerUser)
ELSE IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size High Speed Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerDes, &
'User-Specified High Speed Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerUser)
ELSE
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerDes, &
'User-Specified Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPowerUser)
END IF
IF (DisplayExtraWarnings) THEN
IF ((ABS(EvapCondPumpElecNomPowerDes - EvapCondPumpElecNomPowerUser)/EvapCondPumpElecNomPowerUser) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Evaporative Condenser Pump Rated Power Consumption of '// &
TRIM(RoundSigDigits(EvapCondPumpElecNomPowerUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Evaporative Condenser Pump Rated Power Consumption of ' // &
TRIM(RoundSigDigits(EvapCondPumpElecNomPowerDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Sizing low speed evaporative condenser pump electric nominal power
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
!Auto size low speed evap condenser pump power to 1/3 Total Capacity * 0.004266 w/w (15 w/ton)
EvapCondPumpElecNomPower2Des = 0.3333d0*DXCoil(DXCoilNum)%RatedTotCap(Mode)*0.004266d0
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 = EvapCondPumpElecNomPower2Des
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Low Speed Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPower2Des)
ELSE
IF (DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 > 0.0d0 .AND. EvapCondPumpElecNomPower2Des > 0.0d0 &
.AND. .NOT. HardSizeNoDesRun ) THEN
EvapCondPumpElecNomPower2User = DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Low Speed Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPower2Des, &
'User-Specified Low Speed Evaporative Condenser Pump Rated Power Consumption [W]', &
EvapCondPumpElecNomPower2User)
IF (DisplayExtraWarnings) THEN
IF ((ABS(EvapCondPumpElecNomPower2Des - EvapCondPumpElecNomPower2User)/EvapCondPumpElecNomPower2User) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for '&
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Low Speed Evaporative Condenser Pump Rated Power Consumption of '// &
TRIM(RoundSigDigits(EvapCondPumpElecNomPower2User,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Low Speed Evaporative Condenser Pump Rated Power Consumption' &
// ' of ' // TRIM(RoundSigDigits(EvapCondPumpElecNomPower2Des,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Sizing rated low speed air flow rate
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate2 == AutoSize) THEN
IsAutoSize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
RatedAirVolFlowRate2Des = 0.3333d0*DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode)
! Design Size data is always available
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%RatedAirVolFlowRate2 = RatedAirVolFlowRate2Des
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Low Speed Air Flow Rate [m3/s]', RatedAirVolFlowRate2Des)
ELSE
IF (DXCoil(DXCoilNum)%RatedAirVolFlowRate2 > 0.0d0 .AND. RatedAirVolFlowRate2Des > 0.0d0 &
.AND. .NOT. HardSizeNoDesRun) THEN
RatedAirVolFlowRate2User = DXCoil(DXCoilNum)%RatedAirVolFlowRate2
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Low Speed Air Flow Rate [m3/s]', RatedAirVolFlowRate2Des, &
'User-Specified Rated Low Speed Air Flow Rate [m3/s]', RatedAirVolFlowRate2User)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedAirVolFlowRate2Des - RatedAirVolFlowRate2User)/RatedAirVolFlowRate2User) > &
AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Low Speed Air Flow Rate of '// &
TRIM(RoundSigDigits(RatedAirVolFlowRate2User,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Rated Low Speed Air Flow Rate of ' // &
TRIM(RoundSigDigits(RatedAirVolFlowRate2Des,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Sizing rated low speed total cooling capacity
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%RatedTotCap2 == AutoSize) THEN
IsAutoSize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
RatedTotCap2Des = 0.3333d0*DXCoil(DXCoilNum)%RatedTotCap(Mode)
! Design Size data is always available
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%RatedTotCap2 = RatedTotCap2Des
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Low Speed Total Cooling Capacity (gross) [W]', RatedTotCap2Des)
ELSE
IF (DXCoil(DXCoilNum)%RatedTotCap2 > 0.0d0 .AND. RatedTotCap2Des > 0.d0 &
.AND. .NOT. HardSizeNoDesRun ) THEN
RatedTotCap2User = DXCoil(DXCoilNum)%RatedTotCap2
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Low Speed Total Cooling Capacity (gross) [W]', RatedTotCap2Des, &
'User-Specified Rated Low Speed Total Cooling Capacity (gross) [W]', RatedTotCap2User)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedTotCap2Des - RatedTotCap2User)/RatedTotCap2User) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Low Speed Total Cooling Capacity (gross) of '// &
TRIM(RoundSigDigits(RatedTotCap2User,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Rated Low Speed Total Cooling Capacity (gross) of ' // &
TRIM(RoundSigDigits(RatedTotCap2Des,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
IF(DXCoil(DXCoilNum)%EvapCondAirFlow2 .GT. DXCoil(DXCoilNum)%EvapCondAirFlow(Mode)) THEN
CALL ShowSevereError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Evaporative Condenser low speed air flow must be less than or equal to high speed air flow.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%EvapCondAirFlow2,2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%EvapCondAirFlow(Mode),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
IF(DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2 .GT. DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(Mode))THEN
CALL ShowSevereError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Evaporative Condenser low speed pump power must be less than or equal to high speed pump power.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%EvapCondPumpElecNomPower2,2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%EvapCondPumpElecNomPower(Mode),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
IF(DXCoil(DXCoilNum)%RatedTotCap2 .GT. DXCoil(DXCoilNum)%RatedTotCap(Mode))THEN
CALL ShowSevereError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Rated Total Cooling Capacity, Low Speed must be less than or equal to '// &
'Rated Total Cooling Capacity, High Speed.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%RatedTotCap2,2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%RatedTotCap(Mode),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
IF(DXCoil(DXCoilNum)%RatedAirVolFlowRate2 .GT. DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode))THEN
CALL ShowFatalError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Rated Air Volume Flow Rate, low speed must be less than or equal to '//&
'Rated Air Volume Flow Rate, high speed.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate2,2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
END IF
!END IF
! Sizing rated low speed SHR2
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%RatedSHR2 == AutoSize) THEN
IsAutoSize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingTwoSpeed) THEN
RatedSHR2Des = DXCoil(DXCoilNum)%RatedSHR(Mode)
! Design Size data is always available
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%RatedSHR2 = RatedSHR2Des
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Low Speed Sensible Heat Ratio', RatedSHR2Des)
ELSE
IF (DXCoil(DXCoilNum)%RatedSHR2 > 0.0d0 .AND. RatedSHR2Des > 0.0d0 .AND. .NOT. HardSizeNoDesRun) THEN
RatedSHR2User = DXCoil(DXCoilNum)%RatedSHR2
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Rated Low Speed Sensible Heat Ratio', RatedSHR2Des, &
'User-Specified Rated Low Speed Sensible Heat Ratio', RatedSHR2User)
IF (DisplayExtraWarnings) THEN
IF ((ABS(RatedSHR2Des - RatedSHR2User)/RatedSHR2User) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Low Speed Sensible Heat Ratio of '// &
TRIM(RoundSigDigits(RatedSHR2User,3)))
CALL ShowContinueError('differs from Design Size Rated Low Speed Sensible Heat Ratio of ' // &
TRIM(RoundSigDigits(RatedSHR2Des,3)))
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Sizing resistive defrost heater capacity
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%DefrostCapacity == AutoSize) THEN
IsAutoSize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DXCoilType_Num /= CoilVRF_Heating) THEN
!IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_MultiSpeedHeating .OR. &
! DXCoil(DXCoilNum)%DXCoilType_Num == Coil_HeatingAirToAirVariableSpeed) THEN
IF (DXCoil(DXCoilNum)%DefrostStrategy == Resistive) THEN
DefrostCapacityDes = DXCoolCap
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%DefrostCapacity = DefrostCapacityDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Resistive Defrost Heater Capacity [W]', DefrostCapacityDes)
ELSE
IF (DXCoil(DXCoilNum)%DefrostCapacity > 0.0d0 .AND. DefrostCapacityDes > 0.0d0 .AND. .NOT. HardSizeNoDesRun) THEN
DefrostCapacityUser = DXCoil(DXCoilNum)%DefrostCapacity
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Resistive Defrost Heater Capacity [W]', DefrostCapacityDes, &
'User-Specified Resistive Defrost Heater Capacity [W]', DefrostCapacityUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(DefrostCapacityDes - DefrostCapacityUser)/DefrostCapacityUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Resistive Defrost Heater Capacity of '// &
TRIM(RoundSigDigits(DefrostCapacityUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Resistive Defrost Heater Capacity of ' // &
TRIM(RoundSigDigits(DefrostCapacityDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
ELSE
DXCoil(DXCoilNum)%DefrostCapacity = 0.0d0
END IF
END IF
END DO ! End capacity stages loop
END DO ! End dehumidification modes loop
! Autosizing for multispeed cooling coil
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_MultiSpeedCooling) THEN
! flow rate auto size
DO Mode = DXCoil(DXCoilNum)%NumOfSpeeds,1,-1
! Sizing multispeed air volume flow rate
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (Mode == DXCoil(DXCoilNum)%NumOfSpeeds) THEN
IF (CurSysNum > 0) THEN
IF (SizingDesRunThisAirSys ) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode))
END IF
ELSE
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
IF (CurOASysNum > 0) THEN
MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum)%DesOutAirVolFlow
ELSE
MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum)%DesMainVolFlow
END IF
END IF
ELSE IF (CurZoneEqNum > 0) THEN
IF (SizingDesRunThisZone) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode))
END IF
ELSE
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
MSRatedAirVolFlowRateDes = MAX(FinalZoneSizing(CurZoneEqNum)%DesCoolVolFlow, &
FinalZoneSizing(CurZoneEqNum)%DesHeatVolFlow)
END IF
END IF
IF (MSRatedAirVolFlowRateDes < SmallAirVolFlow) THEN
MSRatedAirVolFlowRateDes = 0.0d0
END IF
ELSE
MSRatedAirVolFlowRateDes = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds)* &
Mode/DXCoil(DXCoilNum)%NumOfSpeeds
END IF
IF (.NOT. HardSizeNoDesRun) THEN
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) = MSRatedAirVolFlowRateDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Air Flow Rate [m3/s]', &
MSRatedAirVolFlowRateDes)
ELSE
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) > 0.0d0 .AND. MSRatedAirVolFlowRateDes > 0.d0 &
.AND. .NOT. HardSizeNoDesRun ) THEN
MSRatedAirVolFlowRateUser = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Air Flow Rate [m3/s]', &
MSRatedAirVolFlowRateDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Air Flow Rate [m3/s]', &
MSRatedAirVolFlowRateUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSRatedAirVolFlowRateDes - MSRatedAirVolFlowRateUser)/MSRatedAirVolFlowRateUser) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Air Volume Flow Rate of '// &
TRIM(RoundSigDigits(MSRatedAirVolFlowRateUser,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Rated Air Volume Flow Rate of ' // &
TRIM(RoundSigDigits(MSRatedAirVolFlowRateDes,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
END DO
! Ensure flow rate at lower speed must be lower or equal to the flow rate at higher speed. Otherwise, a severe error is isssued.
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds-1
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) .GT. DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode+1)) THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Speed '//Trim(TrimSigDigits(Mode))//' Rated Air Flow Rate must be less than or equal to '//&
'Speed '//Trim(TrimSigDigits(Mode+1))//' Rated Air Flow Rate.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode),2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode+1),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
END DO
! Sizing multispeed rated total capacity
DO Mode = DXCoil(DXCoilNum)%NumOfSpeeds,1,-1
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) == AutoSize) Then
IsAutosize = .TRUE.
END IF
IF (Mode .eq. DXCoil(DXCoilNum)%NumOfSpeeds) THEN
IF (CurSysNum > 0) THEN
IF (SizingDesRunThisAirSys) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Total Cooling Capacity [W]', &
DXCoil(DXCoilNum)%MSRatedTotCap(Mode))
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
VolFlowRate = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode)
IF (VolFlowRate >= SmallAirVolFlow) THEN
IF (CurOASysNum > 0) THEN ! coil is in the OA stream
MixTemp = FinalSysSizing(CurSysNum)%CoolOutTemp
MixHumRat = FinalSysSizing(CurSysNum)%CoolOutHumRat
SupTemp = FinalSysSizing(CurSysNum)%PrecoolTemp
SupHumRat = FinalSysSizing(CurSysNum)%PrecoolHumRat
ELSE ! coil is on the main air loop
SupTemp = FinalSysSizing(CurSysNum)%CoolSupTemp
SupHumRat = FinalSysSizing(CurSysNum)%CoolSupHumRat
IF (PrimaryAirSystem(CurSysNum)%NumOACoolCoils == 0) THEN ! there is no precooling of the OA stream
MixTemp = FinalSysSizing(CurSysNum)%CoolMixTemp
MixHumRat = FinalSysSizing(CurSysNum)%CoolMixHumRat
ELSE ! there is precooling of OA stream
IF (VolFlowRate > 0.0d0) THEN
OutAirFrac = FinalSysSizing(CurSysNum)%DesOutAirVolFlow / VolFlowRate
ELSE
OutAirFrac = 1.0d0
END IF
OutAirFrac = MIN(1.0d0,MAX(0.0d0,OutAirFrac))
MixTemp = OutAirFrac*FinalSysSizing(CurSysNum)%PrecoolTemp + &
(1.0d0-OutAirFrac)*FinalSysSizing(CurSysNum)%CoolRetTemp
MixHumRat = OutAirFrac*FinalSysSizing(CurSysNum)%PrecoolHumRat + &
(1.0d0-OutAirFrac)*FinalSysSizing(CurSysNum)%CoolRetHumRat
END IF
END IF
OutTemp = FinalSysSizing(CurSysNum)%CoolOutTemp
rhoair = PsyRhoAirFnPbTdbW(StdBaroPress,MixTemp,MixHumRat,RoutineName)
MixEnth = PsyHFnTdbW(MixTemp,MixHumRat,RoutineName)
MixWetBulb = PsyTwbFnTdbWPb(MixTemp,MixHumRat,StdBaroPress,RoutineName)
SupEnth = PsyHFnTdbW(SupTemp,SupHumRat,RoutineName)
TotCapTempModFac = CurveValue(DXCoil(DXCoilNum)%MSCCapFTemp(Mode),MixWetBulb,OutTemp)
CoolCapAtPeak = MAX(0.0d0, (rhoair * VolFlowRate * (MixEnth-SupEnth)))
IF(TotCapTempModFac .GT. 0.0d0)THEN
MSRatedTotCapDes = CoolCapAtPeak / TotCapTempModFac
ELSE
MSRatedTotCapDes = CoolCapAtPeak
END IF
IF(MSRatedTotCapDes .GT. 0.0d0)THEN
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) / MSRatedTotCapDes
ELSE
RatedVolFlowPerRatedTotCap = 0.0d0
END IF
! check capacity to make sure design volume flow per total capacity is within range
IF (RatedVolFlowPerRatedTotCap .LT. MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the minimum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil speed = '//TrimSigDigits(Mode,0))
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Minimum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MinRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
MSRatedTotCapDes = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) / MinRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
END IF
ELSEIF (RatedVolFlowPerRatedTotCap .GT. MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the maximum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil speed = '//TrimSigDigits(Mode,0))
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Maximum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MaxRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
MSRatedTotCapDes = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) / MaxRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
END IF
END IF
ELSE
MSRatedTotCapDes = 0.0d0
END IF
END IF
ELSE IF (CurZoneEqNum > 0) THEN
IF (SizingDesRunThisZone) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Total Cooling Capacity [W]', &
DXCoil(DXCoilNum)%MSRatedTotCap(Mode))
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
VolFlowRate = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode)
IF (VolFlowRate >= SmallAirVolFlow) THEN
MixTemp = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInTemp
MixHumRat = FinalZoneSizing(CurZoneEqNum)%DesCoolCoilInHumRat
SupTemp = FinalZoneSizing(CurZoneEqNum)%CoolDesTemp
SupHumRat = FinalZoneSizing(CurZoneEqNum)%CoolDesHumRat
TimeStepNumAtMax = FinalZoneSizing(CurZoneEqNum)%TimeStepNumAtCoolMax
DDNum = FinalZoneSizing(CurZoneEqNum)%CoolDDNum
IF (DDNum > 0 .and. TimeStepNumAtMax > 0) THEN
OutTemp = DesDayWeath(DDNum)%Temp(TimeStepNumAtMax)
ELSE
OutTemp = 0.0d0
ENDIF
rhoair = PsyRhoAirFnPbTdbW(StdBaroPress,MixTemp,MixHumRat,RoutineName)
MixEnth = PsyHFnTdbW(MixTemp,MixHumRat,RoutineName)
MixWetBulb = PsyTwbFnTdbWPb(MixTemp,MixHumRat,StdBaroPress,RoutineName)
SupEnth = PsyHFnTdbW(SupTemp,SupHumRat,RoutineName)
TotCapTempModFac = CurveValue(DXCoil(DXCoilNum)%MSCCapFTemp(Mode),MixWetBulb,OutTemp)
CoolCapAtPeak = MAX(0.0d0, (rhoair * VolFlowRate * (MixEnth-SupEnth)))
IF(TotCapTempModFac .GT. 0.0d0)THEN
MSRatedTotCapDes = CoolCapAtPeak / TotCapTempModFac
ELSE
MSRatedTotCapDes = CoolCapAtPeak
END IF
IF(MSRatedTotCapDes .GT. 0.0d0)THEN
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) / MSRatedTotCapDes
ELSE
RatedVolFlowPerRatedTotCap = 0.0d0
END IF
! check capacity to make sure design volume flow per total capacity is within range
IF (RatedVolFlowPerRatedTotCap .LT. MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the minimum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil speed = '//TrimSigDigits(Mode,0))
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Minimum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MinRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
MSRatedTotCapDes =DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) &
/ MinRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
END IF
ELSE IF (RatedVolFlowPerRatedTotCap .GT. MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
IF(DisplayExtraWarnings)THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('...Rated Total Cooling Capacity will be limited by the maximum rated volume flow per'// &
' rated total capacity ratio.')
CALL ShowContinueError('...DX coil speed = '//TrimSigDigits(Mode,0))
CALL ShowContinueError('...DX coil volume flow rate (m3/s) = '// &
TrimSigDigits(DXCoil(DXCoilNum)%RatedAirVolFlowRate(Mode),6))
CALL ShowContinueError('...Requested capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
CALL ShowContinueError('...Requested flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(RatedVolFlowPerRatedTotCap,3))
CALL ShowContinueError('...Maximum flow/capacity ratio (m3/s/W) = '// &
TrimSigDigits(MaxRatedVolFlowPerRatedTotCap(DXCT),3))
END IF
MSRatedTotCapDes =DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) &
/MaxRatedVolFlowPerRatedTotCap(DXCT)
IF(DisplayExtraWarnings)THEN
CALL ShowContinueError('...Adjusted capacity (W) = '//TrimSigDigits(MSRatedTotCapDes,3))
END IF
END IF
ELSE
MSRatedTotCapDes = 0.0d0
END IF
END IF
END IF
ELSE
MSRatedTotCapDes = DXCoil(DXCoilNum)%MSRatedTotCap(DXCoil(DXCoilNum)%NumOfSpeeds)* &
Mode/DXCoil(DXCoilNum)%NumOfSpeeds
END IF
IF (.NOT. HardSizeNoDesRun) THEN
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%MSRatedTotCap(Mode) = MSRatedTotCapDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Total Cooling Capacity [W]', MSRatedTotCapDes)
ELSE
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) > 0.0d0 .AND. MSRatedTotCapDes > 0.0d0 .AND. .NOT. HardSizeNoDesRun) THEN
MSRatedTotCapUser = DXCoil(DXCoilNum)%MSRatedTotCap(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Total Cooling Capacity [W]', MSRatedTotCapDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Total Cooling Capacity [W]', MSRatedTotCapUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSRatedTotCapDes - MSRatedTotCapUser)/MSRatedTotCapUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Total Cooling Capacity of '// &
TRIM(RoundSigDigits(MSRatedTotCapUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Rated Totla Cooling Capacity of ' // &
TRIM(RoundSigDigits(MSRatedTotCapDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
END DO
! Ensure capacity at lower speed must be lower or equal to the capacity at higher speed.
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds-1
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) .GT. DXCoil(DXCoilNum)%MSRatedTotCap(Mode+1)) THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Speed '//Trim(TrimSigDigits(Mode))//' Rated Total Cooling Capacity must be less than or equal to '//&
'Speed '//Trim(TrimSigDigits(Mode+1))//' Rated Total Cooling Capacity.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedTotCap(Mode),2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedTotCap(Mode+1),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
END DO
! Rated SHR
DO Mode = DXCoil(DXCoilNum)%NumOfSpeeds,1,-1
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSRatedSHR(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (Mode .eq. DXCoil(DXCoilNum)%NumOfSpeeds) THEN
IF (CurSysNum > 0) THEN
IF (SizingDesRunThisAirSys) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedSHR(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Sensible Heat Ratio', &
DXCoil(DXCoilNum)%MSRatedSHR(Mode))
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
END IF
ELSE IF (CurZoneEqNum > 0) THEN
IF (SizingDesRunThisZone) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedSHR(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Sensible Heat Ratio', &
DXCoil(DXCoilNum)%MSRatedSHR(Mode))
END IF
ELSE ! autosize or hard-sized with system sizing data
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
END IF
END IF
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) >= SmallAirVolFLow .AND. &
DXCoil(DXCoilNum)%MSRatedTotCap(Mode) > 0.0d0) THEN
! For autosizing the rated SHR, we set a minimum SHR of 0.676 and a maximum of 0.798. The min SHR occurs occurs at the
! minimum flow / capacity ratio = MinRatedVolFlowPerRatedTotCap = 0.00004027 [m3/s / W] = 300 [cfm/ton].
! The max SHR occurs at maximum flow / capacity ratio = MaxRatedVolFlowPerRatedTotCap = 0.00006041 [m3/s / W] = 450 [cfm/ton].
! For flow / capacity ratios between the min and max we linearly interpolate between min and max SHR. Thus rated SHR is a
! linear function of the rated flow / capacity ratio. This linear function (see below) is the result of a regression
! of flow/capacity ratio vs SHR for several actual coils.
RatedVolFlowPerRatedTotCap = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) / DXCoil(DXCoilNum)%MSRatedTotCap(Mode)
IF (RatedVolFlowPerRatedTotCap > MaxRatedVolFlowPerRatedTotCap(DXCT)) THEN
MSRatedSHRDes = 0.431d0 + 6086.d0*MaxRatedVolFlowPerRatedTotCap(DXCT)
ELSE IF (RatedVolFlowPerRatedTotCap < MinRatedVolFlowPerRatedTotCap(DXCT)) THEN
MSRatedSHRDes = 0.431d0 + 6086.d0*MinRatedVolFlowPerRatedTotCap(DXCT)
ELSE
MSRatedSHRDes = 0.431d0 + 6086.d0*RatedVolFlowPerRatedTotCap
END IF
ELSE
MSRatedSHRDes = 1.0d0
END IF
ELSE
MSRatedSHRDes = DXCoil(DXCoilNum)%MSRatedSHR(Mode+1)
END IF
IF (.NOT. HardSizeNoDesRun) THEN
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%MSRatedSHR(Mode) = MSRatedSHRDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Sensible Heat Ratio', MSRatedSHRDes)
ELSE
IF (DXCoil(DXCoilNum)%MSRatedSHR(Mode) > 0.0d0 .AND. MSRatedSHRDes > 0.0d0 .AND. .NOT. HardSizeNoDesRun) THEN
MSRatedSHRUser = DXCoil(DXCoilNum)%MSRatedSHR(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Sensible Heat Ratio', MSRatedSHRDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Sensible Heat Ratio', MSRatedSHRUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSRatedSHRDes - MSRatedSHRUser)/MSRatedSHRUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Sensible Heat Ratio of '// &
TRIM(RoundSigDigits(MSRatedSHRUser,3)))
CALL ShowContinueError('differs from Design Size Rated Sensible Heat Ratio of ' // &
TRIM(RoundSigDigits(MSRatedSHRDes,3)))
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
END DO
! Rated Evapovative condenser airflow rates
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode) == AutoSize) THEN
IsAutoSize = .TRUE.
END IF
! Auto size condenser air flow to Total Capacity * 0.000114 m3/s/w (850 cfm/ton)
MSEvapCondAirFlowDes = DXCoil(DXCoilNum)%MSRatedTotCap(Mode)*0.000114d0
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode) = MSEvapCondAirFlowDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Evaporative Condenser Air Flow Rate [m3/s]', MSEvapCondAirFlowDes)
ELSE
IF (DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode) > 0.0d0 .AND. MSEvapCondAirFlowDes > 0.0d0 .AND. .NOT. HardSizeNoDesRun) THEN
MSEvapCondAirFlowUser = DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Evaporative Condenser Air Flow Rate [m3/s]', MSEvapCondAirFlowDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Evaporative Condenser Air Flow Rate [m3/s]', &
MSEvapCondAirFlowUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSEvapCondAirFlowDes - MSEvapCondAirFlowUser)/MSEvapCondAirFlowUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Evaporative Condenser Air Flow Rate of '// &
TRIM(RoundSigDigits(MSEvapCondAirFlowUser,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Evaporative Condenser Air Flow Rate of ' // &
TRIM(RoundSigDigits(MSEvapCondAirFlowDes,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END DO
! Ensure evaporative condesner airflow rate at lower speed must be lower or equal to one at higher speed.
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds-1
IF (DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode) .GT. DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode+1)) THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Speed '//TRIM(TrimSigDigits(Mode))//' Evaporative Condenser Air Flow Rate must be less than or equal to '//&
'Speed '//TRIM(TrimSigDigits(Mode+1))//' Evaporative Condenser Air Flow Rate.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode),2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSEvapCondAirFlow(Mode+1),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
END DO
! Sizing multispeed rated evapovative condenser pump power
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
! Auto size low speed evap condenser pump power to 1/3 Total Capacity * 0.004266 w/w (15 w/ton)
MSEvapCondPumpElecNomPowerDes = DXCoil(DXCoilNum)%MSRatedTotCap(Mode)*0.004266d0
! Design Size data is always available
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode) = MSEvapCondPumpElecNomPowerDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Evaporative Condenser Pump Power Consumption [W]', &
MSEvapCondPumpElecNomPowerDes)
ELSE
IF (DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode) > 0.0d0 .AND. MSEvapCondPumpElecNomPowerDes > 0.0d0 &
.AND. .NOT. HardSizeNoDesRun) THEN
MSEvapCondPumpElecNomPowerUser = DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Evaporative Condenser Pump Power Consumption [W]', &
MSEvapCondPumpElecNomPowerDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Evaporative Condenser Pump Power Consumption [W]', &
MSEvapCondPumpElecNomPowerUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSEvapCondPumpElecNomPowerDes - MSEvapCondPumpElecNomPowerUser)/MSEvapCondPumpElecNomPowerUser) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Evaporative Condenser Pump Rated Power Consumption of '// &
TRIM(RoundSigDigits(MSEvapCondPumpElecNomPowerUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Evaporative Condenser Pump Rated Power Consumption of ' // &
TRIM(RoundSigDigits(MSEvapCondPumpElecNomPowerDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END DO
! Ensure evaporative condesner pump power at lower speed must be lower or equal to one at higher speed.
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds-1
IF (DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode) .GT. DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode+1)) THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Speed '//TRIM(TrimSigDigits(Mode))// &
' Rated Evaporative Condenser Pump Power Consumption must be less than or equal to '//&
'Speed '//TRIM(TrimSigDigits(Mode+1))// &
' Rated Evaporative Condenser Pump Power Consumption.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode),2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSEvapCondPumpElecNomPower(Mode+1),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
END DO
END IF
! Autosizing for multispeed heating coil
IF (DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_MultiSpeedHeating) THEN
! flow rate auto size
DO Mode = DXCoil(DXCoilNum)%NumOfSpeeds,1,-1
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
! Sizing rated air flow rate
IF (Mode == DXCoil(DXCoilNum)%NumOfSpeeds) THEN
IF (CurSysNum > 0) THEN
IF (SizingDesRunThisAirSys) HardSizeNoDesRun = .FALSE.
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisAirSys) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode))
END IF
ELSE
CALL CheckSysSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
IF (CurOASysNum > 0) THEN
MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum)%DesOutAirVolFlow
ELSE
MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum)%DesMainVolFlow
END IF
END IF
ELSE IF (CurZoneEqNum > 0) THEN
IF (.NOT. IsAutosize .AND. .NOT. SizingDesRunThisZone) THEN
HardSizeNoDesRun = .TRUE.
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) > 0.0d0) THEN
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Air Flow Rate [m3/s]', &
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode))
END IF
ELSE
CALL CheckZoneSizing(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name)
MSRatedAirVolFlowRateDes = &
MAX(FinalZoneSizing(CurZoneEqNum)%DesCoolVolFlow,FinalZoneSizing(CurZoneEqNum)%DesHeatVolFlow)
END IF
END IF
IF (MSRatedAirVolFlowRateDes < SmallAirVolFlow) THEN
MSRatedAirVolFlowRateDes = 0.0d0
END IF
ELSE
MSRatedAirVolFlowRateDes = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(DXCoil(DXCoilNum)%NumOfSpeeds)* &
Mode/DXCoil(DXCoilNum)%NumOfSpeeds
END IF
IF (.NOT. HardSizeNoDesRun) THEN
IF (IsAutoSize) THEN
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) = MSRatedAirVolFlowRateDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Air Flow Rate [m3/s]', &
MSRatedAirVolFlowRateDes)
ELSE
IF (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) > 0.0d0 .AND. MSRatedAirVolFlowRateDes > 0.0d0 &
.AND. .NOT. HardSizeNoDesRun) THEN
MSRatedAirVolFlowRateUser = DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Air Flow Rate [m3/s]', &
MSRatedAirVolFlowRateDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Air Flow Rate [m3/s]', &
MSRatedAirVolFlowRateUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSRatedAirVolFlowRateDes - MSRatedAirVolFlowRateUser)/MSRatedAirVolFlowRateUser) &
> AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for '&
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Air Volume Flow Rate of '// &
TRIM(RoundSigDigits(MSRatedAirVolFlowRateUser,5))// ' [m3/s]')
CALL ShowContinueError('differs from Design Size Rated Air Volume Flow Rate of ' // &
TRIM(RoundSigDigits(MSRatedAirVolFlowRateDes,5))// ' [m3/s]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
End Do
! Ensure flow rate at lower speed must be lower or equal to the flow rate at higher speed. Otherwise, a severe error is isssued.
Do Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds-1
If (DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode) .GT. DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode+1)) Then
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Speed '//Trim(TrimSigDigits(Mode))//' Rated Air Flow Rate must be less than or equal to '//&
'Speed '//Trim(TrimSigDigits(Mode+1))//' Rated Air Flow Rate.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode),2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedAirVolFlowRate(Mode+1),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
End If
End Do
! Sizing rated total heating capacity
DO Mode = DXCoil(DXCoilNum)%NumOfSpeeds,1,-1
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (Mode .eq. DXCoil(DXCoilNum)%NumOfSpeeds) THEN
! Heating capacity is assumed to be equal to the cooling capacity
NumOfSpeedCompanion = DXCoil(DXCoil(DXCoilNum)%CompanionUpstreamDXCoil)%NumOfSpeeds
MSRatedTotCapDes = &
DXCoil(DXCoil(DXCoilNum)%CompanionUpstreamDXCoil)%MSRatedTotCap(NumOfSpeedCompanion)
ELSE
MSRatedTotCapDes = DXCoil(DXCoilNum)%MSRatedTotCap(DXCoil(DXCoilNum)%NumOfSpeeds)* &
Mode/DXCoil(DXCoilNum)%NumOfSpeeds
END IF
IF (IsAutosize) THEN
DXCoil(DXCoilNum)%MSRatedTotCap(Mode) = MSRatedTotCapDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Total Heating Capacity [W]', MSRatedTotCapDes)
ELSE
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) > 0.0d0 .AND. MSRatedTotCapDes > 0.0d0 .AND. .NOT. HardSizeNoDesRun ) THEN
MSRatedTotCapUser = DXCoil(DXCoilNum)%MSRatedTotCap(Mode)
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Speed '//TRIM(TrimSigDigits(Mode))//' Design Size Rated Total Heating Capacity [W]', MSRatedTotCapDes, &
'Speed '//TRIM(TrimSigDigits(Mode))//' User-Specified Rated Total Heating Capacity [W]', MSRatedTotCapUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(MSRatedTotCapDes - MSRatedTotCapUser)/MSRatedTotCapUser) > AutoVsHardSizingThreshold) THEN
CALL ShowMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Rated Total Heating Capacity of '// &
TRIM(RoundSigDigits(MSRatedTotCapUser,2))// ' [W]')
CALL ShowContinueError('differs from Design Size Rated Total Heating Capacity of ' // &
TRIM(RoundSigDigits(MSRatedTotCapDes,2))// ' [W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END DO
! Ensure capacity at lower speed must be lower or equal to the capacity at higher speed.
DO Mode = 1,DXCoil(DXCoilNum)%NumOfSpeeds-1
IF (DXCoil(DXCoilNum)%MSRatedTotCap(Mode) .GT. DXCoil(DXCoilNum)%MSRatedTotCap(Mode+1)) THEN
CALL ShowWarningError('SizeDXCoil: '//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name)//', '// &
'Speed '//TRIM(TrimSigDigits(Mode))//' Rated Total Heating Capacity must be less than or equal to '//&
'Speed '//TRIM(TrimSigDigits(Mode+1))//' Rated Total Heating Capacity.')
CALL ShowContinueError('Instead, '//TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedTotCap(Mode),2))//' > '// &
TRIM(RoundSigDigits(DXCoil(DXCoilNum)%MSRatedTotCap(Mode+1),2)))
CALL ShowFatalError('Preceding conditions cause termination.')
END IF
END DO
! Resistive Defrost Heater Capacity = capacity at the first stage
! Sizing defrost heater capacity
IsAutosize = .FALSE.
IF (DXCoil(DXCoilNum)%DefrostCapacity == AutoSize) THEN
IsAutosize = .TRUE.
END IF
IF (DXCoil(DXCoilNum)%DefrostStrategy == Resistive) THEN
DefrostCapacityDes = DXCoil(DXCoilNum)%MSRatedTotCap(1)
ELSE
DefrostCapacityDes = 0.0d0
END IF
IF (IsAutoSize) THEN
DXCoil(DXCoilNum)%DefrostCapacity = DefrostCapacityDes
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Resistive Defrost Heater Capacity', DefrostCapacityDes)
ELSE
IF (DXCoil(DXCoilNum)%DefrostCapacity > 0.0d0 .AND. DefrostCapacityDes > 0.0d0 .AND. .NOT. HardSizeNoDesRun) THEN
DefrostCapacityUser = DXCoil(DXCoilNum)%DefrostCapacity
CALL ReportSizingOutput(DXCoil(DXCoilNum)%DXCoilType, DXCoil(DXCoilNum)%Name, &
'Design Size Resistive Defrost Heater Capacity', DefrostCapacityDes, &
'User-Specified Resistive Defrost Heater Capacity', DefrostCapacityUser)
IF (DisplayExtraWarnings) THEN
IF ((ABS(DefrostCapacityDes - DefrostCapacityUser)/DefrostCapacityUser) > AutoVsHardSizingThreshold) THEN
CALL ShowWarningMessage('SizeDxCoil: Potential issue with equipment sizing for ' &
//TRIM(DXCoil(DXCoilNum)%DXCoilType)//' '//TRIM(DXCoil(DXCoilNum)%Name))
CALL ShowContinueError('User-Specified Resistive Defrost Heater Capacity of '// &
TRIM(RoundSigDigits(DefrostCapacityUser,2))// '[W]')
CALL ShowContinueError('differs from Design Size Resistive Defrost Heater Capacity of ' // &
TRIM(RoundSigDigits(DefrostCapacityDes,2))// '[W]')
CALL ShowContinueError('This may, or may not, indicate mismatched component sizes.')
CALL ShowContinueError('Verify that the value entered is intended and is consistent with other components.')
END IF
ENDIF
END IF
END IF
END IF
! Call routine that computes AHRI certified rating for single-speed DX Coils
IF ((DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_CoolingSingleSpeed .AND. DXCoil(DXCoilNum)%CondenserType(1) == AirCooled) &
.OR. DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_HeatingEmpirical) THEN
CALL CalcDXCoilStandardRating(DXCoil(DXCoilNum)%Name, &
DXCoil(DXCoilNum)%DXCoilType, &
DXCoil(DXCoilNum)%DXCoilType_Num, &
1, &
DXCoil(DXCoilNum)%RatedTotCap(1), &
DXCoil(DXCoilNum)%RatedCOP(1), &
DXCoil(DXCoilNum)%CCapFFlow(1), &
DXCoil(DXCoilNum)%CCapFTemp(1), &
DXCoil(DXCoilNum)%EIRFFlow(1), &
DXCoil(DXCoilNum)%EIRFTemp(1), &
DXCoil(DXCoilNum)%PLFFPLR(1), &
DXCoil(DXCoilNum)%RatedAirVolFlowRate(1), &
DXCoil(DXCoilNum)%FanPowerPerEvapAirFlowRate(1), &
DXCoil(DXCoilNum)%RegionNum, &
DXCoil(DXCoilNum)%MinOATCompressor, &
DXCoil(DXCoilNum)%OATempCompressorOn, &
DXCoil(DXCoilNum)%OATempCompressorOnOffBlank, &
DXCoil(DXCoilNum)%DefrostControl)
END IF
! Call routine that computes AHRI certified rating for multi-speed DX cooling Coils
IF ( DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_MultiSpeedCooling .OR. &
DXCoil(DXCoilNum)%DXCoilType_Num == CoilDX_MultiSpeedHeating ) THEN
CALL CalcDXCoilStandardRating(DXCoil(DXCoilNum)%Name, &
DXCoil(DXCoilNum)%DXCoilType, &
DXCoil(DXCoilNum)%DXCoilType_Num, &
DXCoil(DXCoilNum)%NumOfSpeeds, &
DXCoil(DXCoilNum)%MSRatedTotCap, &
DXCoil(DXCoilNum)%MSRatedCOP, &
DXCoil(DXCoilNum)%MSCCapFFlow, &
DXCoil(DXCoilNum)%MSCCapFTemp, &
DXCoil(DXCoilNum)%MSEIRFFlow, &
DXCoil(DXCoilNum)%MSEIRFTemp, &
DXCoil(DXCoilNum)%MSPLFFPLR, &
DXCoil(DXCoilNum)%MSRatedAirVolFlowRate, &
DXCoil(DXCoilNum)%MSFanPowerPerEvapAirFlowRate, &
DXCoil(DXCoilNum)%RegionNum, &
DXCoil(DXCoilNum)%MinOATCompressor, &
DXCoil(DXCoilNum)%OATempCompressorOn, &
DXCoil(DXCoilNum)%OATempCompressorOnOffBlank, &
DXCoil(DXCoilNum)%DefrostControl)
END If
!create predefined report entries
equipName = DXCoil(DXCoilNum)%Name
! put tables for cooling and heating separate
SELECT CASE (DXCoil(DXCoilNum)%DXCoilType_Num)
CASE (CoilDX_CoolingSingleSpeed, &
CoilDX_CoolingTwoSpeed, &
CoilDX_CoolingTwoStageWHumControl, &
CoilDX_MultiSpeedCooling)
CALL PreDefTableEntry(pdchCoolCoilType,equipName,DXCoil(DXCoilNum)%DXCoilType)
IF (DXCoil(DXCoilNum)%NumOfSpeeds .EQ. 0) Then
IF (DXCoil(DXCoilNum)%NumCapacityStages .EQ. 1) THEN
CALL PreDefTableEntry(pdchCoolCoilTotCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(1))
CALL PreDefTableEntry(pdchCoolCoilSensCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(1) &
* DXCoil(DXCoilNum)%RatedSHR(1))
CALL PreDefTableEntry(pdchCoolCoilLatCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(1) &
- DXCoil(DXCoilNum)%RatedTotCap(1) * DXCoil(DXCoilNum)%RatedSHR(1))
CALL PreDefTableEntry(pdchCoolCoilSHR,equipName,DXCoil(DXCoilNum)%RatedSHR(1))
CALL PreDefTableEntry(pdchCoolCoilNomEff,equipName,DXCoil(DXCoilNum)%RatedCOP(1))
ELSE
CALL PreDefTableEntry(pdchCoolCoilTotCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(2))
CALL PreDefTableEntry(pdchCoolCoilSensCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(2) &
* DXCoil(DXCoilNum)%RatedSHR(2))
CALL PreDefTableEntry(pdchCoolCoilLatCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(2) &
- DXCoil(DXCoilNum)%RatedTotCap(2) * DXCoil(DXCoilNum)%RatedSHR(2))
CALL PreDefTableEntry(pdchCoolCoilSHR,equipName,DXCoil(DXCoilNum)%RatedSHR(2))
CALL PreDefTableEntry(pdchCoolCoilNomEff,equipName,DXCoil(DXCoilNum)%RatedCOP(2))
END IF
ELSE
DO Mode=1,DXCoil(DXCoilNum)%NumOfSpeeds
CALL PreDefTableEntry(pdchCoolCoilTotCap,equipName,DXCoil(DXCoilNum)%MSRatedTotCap(Mode))
CALL PreDefTableEntry(pdchCoolCoilSensCap,equipName,DXCoil(DXCoilNum)%MSRatedTotCap(Mode) &
* DXCoil(DXCoilNum)%MSRatedSHR(Mode))
CALL PreDefTableEntry(pdchCoolCoilLatCap,equipName,DXCoil(DXCoilNum)%MSRatedTotCap(Mode) &
- DXCoil(DXCoilNum)%MSRatedTotCap(Mode) * DXCoil(DXCoilNum)%MSRatedSHR(Mode))
CALL PreDefTableEntry(pdchCoolCoilSHR,equipName,DXCoil(DXCoilNum)%MSRatedSHR(Mode))
CALL PreDefTableEntry(pdchCoolCoilNomEff,equipName,DXCoil(DXCoilNum)%MSRatedCOP(Mode))
END DO
END IF
CALL addFootNoteSubTable(pdstCoolCoil, 'Nominal values are gross at rated conditions, i.e., the supply air fan' &
//' heat and electric power NOT accounted for.')
CASE (CoilDX_HeatingEmpirical, &
CoilDX_MultiSpeedHeating, &
CoilDX_HeatPumpWaterHeater)
CALL PreDefTableEntry(pdchHeatCoilType,equipName,DXCoil(DXCoilNum)%DXCoilType)
IF (DXCoil(DXCoilNum)%NumOfSpeeds .EQ. 0) Then
IF (DXCoil(DXCoilNum)%NumCapacityStages .EQ. 1) THEN
CALL PreDefTableEntry(pdchHeatCoilNomCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(1))
CALL PreDefTableEntry(pdchHeatCoilNomEff,equipName,DXCoil(DXCoilNum)%RatedCOP(1))
ELSE
CALL PreDefTableEntry(pdchHeatCoilNomCap,equipName,DXCoil(DXCoilNum)%RatedTotCap(2))
CALL PreDefTableEntry(pdchHeatCoilNomEff,equipName,DXCoil(DXCoilNum)%RatedCOP(2))
END IF
ELSE
DO Mode=1,DXCoil(DXCoilNum)%NumOfSpeeds
CALL PreDefTableEntry(pdchHeatCoilNomCap,equipName,DXCoil(DXCoilNum)%MSRatedTotCap(Mode))
CALL PreDefTableEntry(pdchHeatCoilNomEff,equipName,DXCoil(DXCoilNum)%MSRatedCOP(Mode))
END DO
END IF
CALL addFootNoteSubTable(pdstHeatCoil, 'Nominal values are gross at rated conditions, i.e., the supply air fan' &
//' heat and electric power NOT accounted for.')
END SELECT
RETURN
END SUBROUTINE SizeDXCoil