Nodes of different colours represent the following:
Solid arrows point from a parent (sub)module to the submodule which is descended from it. Dashed arrows point from a module being used to the module or program unit using it. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | DXCoilName | |||
character(len=*), | intent(in) | :: | DXCoilType | |||
integer, | intent(in) | :: | CapFTempCurveIndex(nsp) | |||
integer, | intent(in) | :: | CapFFlowCurveIndex(nsp) | |||
integer, | intent(in) | :: | EIRFTempCurveIndex(nsp) | |||
integer, | intent(in) | :: | EIRFFlowCurveIndex(nsp) | |||
integer, | intent(in) | :: | PLFFPLRCurveIndex(nsp) | |||
real(kind=r64), | intent(in) | :: | RatedTotalCapacity(nsp) | |||
real(kind=r64), | intent(in) | :: | RatedCOP(nsp) | |||
real(kind=r64), | intent(in) | :: | RatedAirVolFlowRate(nsp) | |||
real(kind=r64), | intent(in) | :: | FanPowerPerEvapAirFlowRateFromInput(nsp) | |||
integer, | intent(in) | :: | nsp | |||
integer, | intent(in), | optional | :: | RegionNum | ||
real(kind=r64), | intent(in), | optional | :: | MinOATCompressor | ||
real(kind=r64), | intent(in), | optional | :: | OATempCompressorOn | ||
logical, | intent(in), | optional | :: | OATempCompressorOnOffBlank | ||
integer, | intent(in), | optional | :: | DefrostControl | ||
real(kind=r64), | intent(out) | :: | NetHeatingCapRatedHighTemp | |||
real(kind=r64), | intent(out) | :: | NetHeatingCapRatedLowTemp | |||
real(kind=r64), | intent(out) | :: | HSPF |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
SUBROUTINE MultiSpeedDXHeatingCoilStandardRatings(DXCoilName, DXCoilType, CapFTempCurveIndex, CapFFlowCurveIndex, &
EIRFTempCurveIndex, EIRFFlowCurveIndex, PLFFPLRCurveIndex, &
RatedTotalCapacity, RatedCOP, RatedAirVolFlowRate, &
FanPowerPerEvapAirFlowRateFromInput, nsp, RegionNum, MinOATCompressor, &
OATempCompressorOn, OATempCompressorOnOffBlank,DefrostControl, &
NetHeatingCapRatedHighTemp, NetHeatingCapRatedLowTemp,HSPF)
! SUBROUTINE INFORMATION:
! AUTHOR B. Nigusse, FSEC
! DATE WRITTEN December 2012
! MODIFIED
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Calculates the standard ratings net heating capacity and HSPF values for multi speed DX heating coils
! at the AHRI standard test condition(s).
! METHODOLOGY EMPLOYED:
! na
! REFERENCES:
! na
! USE STATEMENTS:
USE CurveManager, ONLY: CurveValue, GetCurveType
IMPLICIT NONE ! Enforce explicit typing of all variables in this routine
! SUBROUTINE ARGUMENT DEFINITIONS:
CHARACTER(len=*), INTENT(IN) :: DXCoilName ! Name of DX coil for which HSPF is calculated
CHARACTER(len=*), INTENT(IN) :: DXCoilType ! Type of DX coil for which HSPF is calculated
INTEGER, INTENT(IN) :: nsp ! Number of compressor speeds
INTEGER, INTENT(IN) :: CapFTempCurveIndex(nsp) ! Index for the capacity as a function of temperature modifier curve
INTEGER, INTENT(IN) :: CapFFlowCurveIndex(nsp) ! Index for the capacity as a function of flow fraction modifier curve
INTEGER, INTENT(IN) :: EIRFTempCurveIndex(nsp) ! Index for the EIR as a function of temperature modifier curve
INTEGER, INTENT(IN) :: EIRFFlowCurveIndex(nsp) ! Index for the EIR as a function of flow fraction modifier curve
INTEGER, INTENT(IN) :: PLFFPLRCurveIndex(nsp) ! Index for the PLF vs part-load ratio curve
REAL(r64), INTENT(IN) :: RatedTotalCapacity(nsp) ! Reference capacity of DX coil [W]
REAL(r64), INTENT(IN) :: RatedCOP(nsp) ! Reference coefficient of performance [W/W]
REAL(r64), INTENT(IN) :: RatedAirVolFlowRate(nsp)! Reference air flow rate of DX coil [m3/s]
REAL(r64), INTENT(IN) :: FanPowerPerEvapAirFlowRateFromInput(nsp) ! rated fan power per evap air flow rate [W/(m3/s)]
INTEGER, OPTIONAL, INTENT(IN) :: RegionNum ! Region number for calculating HSPF of single speed DX heating coil
INTEGER, OPTIONAL, INTENT(IN) :: DefrostControl ! defrost control; 1=timed, 2=on-demand
REAL(r64), OPTIONAL, INTENT(IN) :: MinOATCompressor ! Minimum OAT for heat pump compressor operation [C]
LOGICAL, OPTIONAL, INTENT(IN) :: OATempCompressorOnOffBlank ! Flag used to determine low temperature cut out factor
REAL(r64), OPTIONAL, INTENT(IN) :: OATempCompressorOn ! The outdoor tempearture when the compressor is automatically turned
! back on, if applicable, following automatic shut off. This field is
! used only for HSPF calculation. [C]
REAL(r64), INTENT(OUT) :: NetHeatingCapRatedHighTemp ! net heating capacity at maximum speed and High Temp
REAL(r64), INTENT(OUT) :: NetHeatingCapRatedLowTemp ! net heating capacity at maximum speed and low Temp
REAL(r64), INTENT(OUT) :: HSPF ! seasonale energy efficiency ratio of multi speed DX cooling coil
! SUBROUTINE PARAMETER DEFINITIONS:
!CHARACTER(len=*), PARAMETER :: RoutineName='MultiSpeedDXHeatingCoilStandardRatings: ' ! Include trailing blank space
! INTERFACE BLOCK SPECIFICATIONS
! na
! DERIVED TYPE DEFINITIONS
! na
! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
! Intermediate values calculated from the inputs in the idf file
REAL(r64) :: FanPowerPerEvapAirFlowRate(nsp) ! Fan power per air volume flow rate through the evaporator coil [W/(m3/s)]
REAL(r64) :: TotHeatCapTestH0(nsp) ! Total cooling capacity at A2 test condition (High speed)
REAL(r64) :: TotHeatCapTestH1(nsp) ! Total cooling capacity at B2 test condition (High speed)
REAL(r64) :: TotHeatCapTestH2(nsp) ! Total cooling capacity at B1 test condition (Low speed)
REAL(r64) :: TotHeatCapTestH3(nsp) ! Total cooling capacity at F1 test condition (Low speed)
REAL(r64) :: OutdoorUnitPowerTestH0(nsp) ! Outdoor Unit electric power at A2 test condition (High speed)
REAL(r64) :: OutdoorUnitPowerTestH1(nsp) ! Outdoor Unit electric power at B2 test condition (High speed)
REAL(r64) :: OutdoorUnitPowerTestH2(nsp) ! Outdoor Unit electric power at B1 test condition (Low speed)
REAL(r64) :: OutdoorUnitPowerTestH3(nsp) ! Outdoor Unit electric power at F1 test condition (Low speed)
REAL(r64) :: HeatingCapacityLS ! cooling capacity of Mult-speed DX coil at lower speed, [W]
REAL(r64) :: HeatingCapacityHS ! cooling capacity of Mult-speed DX coil at higher speed, [W]
REAL(r64) :: HeatingElecPowerLS ! outdoor unit electric power input at low speed, [W]
REAL(r64) :: HeatingElecPowerHS ! outdoor unit electric power input at high speed, [W]
REAL(r64) :: HeatingCapacityMax ! cooling capacity of Mult-speed DX coil at max speed, [W]
REAL(r64) :: HeatingElecPowerMax ! outdoor unit electric power input at Max speed, [W]
REAL(r64) :: TotHeatCapTestH1High(nsp) ! net heating capacity high speed at H1 test conditon, [W]
! Intermediate values calculated from the inputs in the idf file
REAL(r64) :: TotCapFlowModFac(nsp) ! Total capacity modifier f(actual flow vs rated flow) for each speed [-]
REAL(r64) :: EIRFlowModFac(nsp) ! EIR modifier f(actual supply air flow vs rated flow) for each speed [-]
REAL(r64) :: TotCapTempModFac = 0.0D0 ! Total capacity modifier (function of entering wetbulb, outside drybulb) [-]
REAL(r64) :: EIRTempModFac = 0.0D0 ! EIR modifier (function of entering wetbulb, outside drybulb) [-]
REAL(r64) :: TotCapTempModFacH0 = 0.0D0 ! Tot capacity modifier (function of entering wetbulb, outside drybulb) at H0 Test [-]
REAL(r64) :: EIRTempModFacH0 = 0.0D0 ! EIR modifier (function of entering wetbulb, outside drybulb) at H0 Test[-]
REAL(r64) :: TotCapTempModFacH1 = 0.0D0 ! Tot capacity modifier (function of entering wetbulb, outside drybulb) at H1 Test [-]
REAL(r64) :: EIRTempModFacH1 = 0.0D0 ! EIR modifier (function of entering wetbulb, outside drybulb) at H1 Test[-]
REAL(r64) :: TotCapTempModFacH2 = 0.0D0 ! Tot capacity modifier (function of entering wetbulb, outside drybulb) at H2 Test [-]
REAL(r64) :: EIRTempModFacH2 = 0.0D0 ! EIR modifier (function of entering wetbulb, outside drybulb) at H2 Test[-]
REAL(r64) :: TotCapTempModFacH3 = 0.0D0 ! Tot capacity modifier (function of entering wetbulb, outside drybulb) at H3 Test [-]
REAL(r64) :: EIRTempModFacH3 = 0.0D0 ! EIR modifier (function of entering wetbulb, outside drybulb) at H3 Test[-]
REAL(r64) :: PartLoadFactor = 0.0D0 ! Part load factor, accounts for thermal lag at compressor startup [-]
REAL(r64) :: OATempCompressorOff = 0.0D0 ! Minimum outdoor air temperature to turn the commpressor off
!
REAL(r64) :: PartLoadRatio = 0.0d0 ! compressor cycling ratio between successive speeds, [-]
REAL(r64) :: PartLoadFraction = 0.0d0 ! part-load fraction that account for the cyclic degradation, [-]
REAL(r64) :: NetHeatingCapWeighted = 0.0d0 ! net total heating cap weighted by the fraction of the binned cooling hours [W]
REAL(r64) :: TotHeatingElecPowerWeighted = 0.0d0 ! net total heat pump and resistance heating electric Energy input weighted by
! the fraction of the binned cooling hours
REAL(r64) :: BuildingHeatingLoad = 0.0d0 ! Building space heating load corresponding to an outdoor bin temperature [W]
REAL(r64) :: NetTotHeatCapBinned = 0.0d0 ! Net tot heatinging cap corresponding to an outdoor bin temperature [W]
REAL(r64) :: TotHeatElecPowerBinnedHP = 0.0d0 ! Total Heat Pump heating electric power consumption at outdoor bin temp [W]
REAL(r64) :: TotHeatElecPowerBinnedRH = 0.0d0 ! Total Resistance heating electric power consumption at outdoor bin temp [W]
REAL(r64) :: LoadFactor ! Fractional "on" time for last stage at the desired reduced capacity, (dimensionless)
REAL(r64) :: LowTempCutOutFactor = 0.0d0 ! Factor which corresponds to compressor operation depending on outdoor temperature
REAL(r64) :: NetHeatingCapRated = 0.0d0 ! Net Heating Coil capacity at Rated conditions, accounting for supply fan heat [W]
REAL(r64) :: ElecPowerRated = 0.0d0 ! Total system power at Rated conditions, accounting for supply fan heat [W]
REAL(r64) :: NetHeatingCapH2Test = 0.0d0 ! Net Heating Coil capacity at H2 test conditions, accounting for supply fan heat [W]
REAL(r64) :: ElecPowerH2Test = 0.0d0 ! Total system power at H2 test conditions, accounting for supply fan heat [W]
REAL(r64) :: NetHeatingCapH3Test = 0.0d0 ! Net Heating Coil capacity at H3 test conditions, accounting for supply fan heat [W]
REAL(r64) :: ElecPowerH3Test = 0.0d0 ! Total system power at H3 test conditions, accounting for supply fan heat [W]
REAL(r64) :: FractionalBinHours = 0.0d0 ! Fractional bin hours for the heating season [-]
REAL(r64) :: BuildingLoad = 0.0d0 ! Building space conditioning load corresponding to an outdoor bin temperature [W]
REAL(r64) :: HeatingModeLoadFactor = 0.0d0 ! Heating mode load factor corresponding to an outdoor bin temperature [-]
REAL(r64) :: NetHeatingCapReduced = 0.0d0 ! Net Heating Coil capacity corresponding to an outdoor bin temperature [W]
REAL(r64) :: TotalBuildingLoad = 0.0d0 ! Sum of building load over the entire heating season [W]
REAL(r64) :: TotalElectricalEnergy = 0.0d0 ! Sum of electrical energy consumed by the heatpump over the heating season [W]
REAL(r64) :: DemandDeforstCredit = 1.0d0 ! A factor to adjust HSPF if coil has demand defrost control [-]
REAL(r64) :: CheckCOP = 0.0d0 ! Checking COP at an outdoor bin temperature against unity [-]
REAL(r64) :: DesignHeatingRequirement = 0.0d0 ! The amount of heating required to maintain a given indoor temperature
! at a particular outdoor design temperature. [W]
REAL(r64) :: DesignHeatingRequirementMin = 0.0d0 ! minimum design heating requirement [W]
REAL(r64) :: DesignHeatingRequirementMax = 0.0d0 ! maximum design heating requirement [W]
REAL(r64) :: ElectricalPowerConsumption = 0.0d0 ! Electrical power corresponding to an outdoor bin temperature [W]
REAL(r64) :: HeatPumpElectricalEnergy = 0.0d0 ! Heatpump electrical energy corresponding to an outdoor bin temperature [W]
REAL(r64) :: TotalHeatPumpElectricalEnergy = 0.0d0 ! Sum of Heatpump electrical energy over the entire heating season [W]
REAL(r64) :: ResistiveSpaceHeatingElectricalEnergy = 0.0d0 ! resistance heating electrical energy corresponding to an
! outdoor bin temperature [W]
REAL(r64) :: TotalResistiveSpaceHeatingElectricalEnergy = 0.0d0 ! Sum of resistance heating electrical energy over the
! entire heating season [W]
!
INTEGER :: BinNum ! bin number counter
INTEGER :: spnum ! compressor speed number
INTEGER :: StandardDHRNum ! Integer counter for standardized DHRs
NetHeatingCapWeighted = 0.0d0
TotHeatingElecPowerWeighted = 0.0d0
DO spnum = 1, nsp
FanPowerPerEvapAirFlowRate(spnum)=0.0d0
IF( FanPowerPerEvapAirFlowRateFromInput(spnum) <= 0.0d0) THEN
FanPowerPerEvapAirFlowRate(spnum)=DefaultFanPowerPerEvapAirFlowRate
ELSE
FanPowerPerEvapAirFlowRate(spnum)=FanPowerPerEvapAirFlowRateFromInput(spnum)
ENDIF
END DO
! Proceed withe HSPF value calculation
DO spnum = 1, nsp
TotCapFlowModFac(spnum) = CurveValue(CapFFlowCurveIndex(spnum),AirMassFlowRatioRated)
SELECT CASE(GetCurveType(CapFTempCurveIndex(spnum)))
CASE('QUADRATIC', 'CUBIC')
TotCapTempModFacH0 = CurveValue(CapFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempH0Test)
TotCapTempModFacH1 = CurveValue(CapFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempRated)
TotCapTempModFacH2 = CurveValue(CapFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempH2Test)
TotCapTempModFacH3 = CurveValue(CapFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempH3Test)
CASE('BIQUADRATIC')
TotCapTempModFacH0 = CurveValue(CapFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempH0Test)
TotCapTempModFacH1 = CurveValue(CapFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempRated)
TotCapTempModFacH2 = CurveValue(CapFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempH2Test)
TotCapTempModFacH3 = CurveValue(CapFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempH3Test)
END SELECT
TotHeatCapTestH0(spnum) = RatedTotalCapacity(spnum) * TotCapTempModFacH0 * TotCapFlowModFac(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
TotHeatCapTestH1(spnum) = RatedTotalCapacity(spnum) * TotCapTempModFacH1 * TotCapFlowModFac(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
TotHeatCapTestH2(spnum) = RatedTotalCapacity(spnum) * TotCapTempModFacH2 * TotCapFlowModFac(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
TotHeatCapTestH3(spnum) = RatedTotalCapacity(spnum) * TotCapTempModFacH3 * TotCapFlowModFac(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
EIRFlowModFac(spnum) = CurveValue(EIRFFlowCurveIndex(spnum),AirMassFlowRatioRated)
SELECT CASE(GetCurveType(EIRFTempCurveIndex(spnum)))
CASE('QUADRATIC', 'CUBIC')
EIRTempModFacH0 = CurveValue(EIRFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempH0Test)
EIRTempModFacH1 = CurveValue(EIRFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempRated)
EIRTempModFacH2 = CurveValue(EIRFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempH2Test)
EIRTempModFacH3 = CurveValue(EIRFTempCurveIndex(spnum),HeatingOutdoorCoilInletAirDBTempH3Test)
CASE('BIQUADRATIC')
EIRTempModFacH0 = CurveValue(EIRFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempH0Test)
EIRTempModFacH1 = CurveValue(EIRFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempRated)
EIRTempModFacH2 = CurveValue(EIRFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempH2Test)
EIRTempModFacH3 = CurveValue(EIRFTempCurveIndex(spnum),HeatingIndoorCoilInletAirDBTempRated, &
HeatingOutdoorCoilInletAirDBTempH3Test)
END SELECT
IF ( RatedCOP(spnum) > 0.0d0) THEN
OutdoorUnitPowerTestH0(spnum) = TotHeatCapTestH0(spnum) * EIRFlowModFac(spnum) * EIRTempModFacH0 / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
OutdoorUnitPowerTestH1(spnum) = TotHeatCapTestH1(spnum) * EIRFlowModFac(spnum) * EIRTempModFacH1 / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
OutdoorUnitPowerTestH2(spnum) = TotHeatCapTestH2(spnum) * EIRFlowModFac(spnum) * EIRTempModFacH2 / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
OutdoorUnitPowerTestH3(spnum) = TotHeatCapTestH3(spnum) * EIRFlowModFac(spnum) * EIRTempModFacH3 / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
ENDIF
END DO
! determine the HP capacity at the rated condition (AHRI H1 high speed test Condition); and determine the
! the building heat requirement for the user specified region
NetHeatingCapRatedHighTemp = TotHeatCapTestH1(nsp)
NetHeatingCapRatedLowTemp = TotHeatCapTestH3(nsp)
IF (RegionNum .EQ. 5) THEN
DesignHeatingRequirementMin = NetHeatingCapRatedHighTemp
DesignHeatingRequirementMax = 2.20d0 * NetHeatingCapRatedHighTemp
ELSE
DesignHeatingRequirementMin = NetHeatingCapRatedHighTemp*(18.33d0 - OutdoorDesignTemperature(RegionNum)) / (60.0d0/1.80d0)
DesignHeatingRequirementMax = 2.20d0 * DesignHeatingRequirementMin
ENDIF
!
! Set the Design Heating Requirement to nearest standard value (From Table 18, AHRI/ANSI Std 210/240)
DO StandardDHRNum = 1, TotalNumOfStandardDHRs - 1
IF (DesignHeatingRequirementMin .LT. StandardDesignHeatingRequirement(1)) Then
DesignHeatingRequirement = MIN(StandardDesignHeatingRequirement(1), DesignHeatingRequirementMax)
ELSEIF ( DesignHeatingRequirementMin .GE. StandardDesignHeatingRequirement(StandardDHRNum) .AND. &
DesignHeatingRequirementMin .LT. StandardDesignHeatingRequirement(StandardDHRNum+1)) THEN
IF ((DesignHeatingRequirementMin - StandardDesignHeatingRequirement(StandardDHRNum)) .GT. &
(StandardDesignHeatingRequirement(StandardDHRNum+1) - DesignHeatingRequirementMin)) THEN
DesignHeatingRequirement = MIN(StandardDesignHeatingRequirement(StandardDHRNum+1), &
DesignHeatingRequirementMax)
ELSE
DesignHeatingRequirement = MIN(StandardDesignHeatingRequirement(StandardDHRNum), &
DesignHeatingRequirementMax)
ENDIF
ELSEIF(DesignHeatingRequirementMin .GE. StandardDesignHeatingRequirement(TotalNumOfStandardDHRs)) THEN
DesignHeatingRequirement = MIN(StandardDesignHeatingRequirement(StandardDHRNum), &
DesignHeatingRequirementMax)
ENDIF
END DO
!
! The minimum temperature below which the compressor is turned off
OATempCompressorOff = MinOATCompressor
DO BinNum = 1, TotalNumOfTemperatureBins(RegionNum) !NumOfOATempBins
Select Case (RegionNum)
Case (1)
FractionalBinHours = RegionOneFracBinHoursAtOutdoorBinTemp(BinNum)
Case (2)
FractionalBinHours = RegionTwoFracBinHoursAtOutdoorBinTemp(BinNum)
Case (3)
FractionalBinHours = RegionThreeFracBinHoursAtOutdoorBinTemp(BinNum)
Case (4)
FractionalBinHours = RegionFourFracBinHoursAtOutdoorBinTemp(BinNum)
Case (5)
FractionalBinHours = RegionFiveFracBinHoursAtOutdoorBinTemp(BinNum)
Case (6)
FractionalBinHours = RegionSixFracBinHoursAtOutdoorBinTemp(BinNum)
Case Default
FractionalBinHours = RegionFourFracBinHoursAtOutdoorBinTemp(BinNum)
End Select
! Calculate the building heating load
BuildingHeatingLoad = (18.33d0 - OutdoorBinTemperature(BinNum)) / (18.33d0 - OutdoorDesignTemperature(RegionNum)) &
* CorrectionFactor * DesignHeatingRequirement
IF ( (OutdoorBinTemperature(BinNum) .LE. -8.33d0) .OR. &
(OutdoorBinTemperature(BinNum) .GE. 7.20d0) ) THEN
HeatingCapacityMax = TotHeatCapTestH3(nsp) + ((TotHeatCapTestH1(nsp) - TotHeatCapTestH3(nsp)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempRated - HeatingOutdoorCoilInletAirDBTempH3Test))
HeatingElecPowerMax = OutdoorUnitPowerTestH3(nsp) &
+ ((OutdoorUnitPowerTestH1(nsp) - OutdoorUnitPowerTestH3(nsp)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempRated - HeatingOutdoorCoilInletAirDBTempH3Test))
ELSE
HeatingCapacityMax = TotHeatCapTestH3(nsp) + ((TotHeatCapTestH2(nsp) - TotHeatCapTestH3(nsp)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempH2Test - HeatingOutdoorCoilInletAirDBTempH3Test))
HeatingElecPowerMax = OutdoorUnitPowerTestH3(nsp) &
+ ((OutdoorUnitPowerTestH2(nsp) - OutdoorUnitPowerTestH3(nsp)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempH2Test - HeatingOutdoorCoilInletAirDBTempH3Test))
END IF
! determine the speed number
HeatSpeedLoop: DO spnum = 1, nsp-1
! Low Speed
IF ( OutdoorBinTemperature(BinNum) .LT. -8.33d0) THEN
HeatingCapacityLS = TotHeatCapTestH3(spnum) + ((TotHeatCapTestH1(spnum) - TotHeatCapTestH3(spnum)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempRated - HeatingOutdoorCoilInletAirDBTempH3Test))
HeatingElecPowerLS = OutdoorUnitPowerTestH3(spnum) + ((OutdoorUnitPowerTestH1(spnum) - OutdoorUnitPowerTestH3(spnum)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempRated - HeatingOutdoorCoilInletAirDBTempH3Test))
ELSEIF (OutdoorBinTemperature(BinNum) .GE. 4.44d0) THEN
HeatingCapacityLS = TotHeatCapTestH1(spnum) + ((TotHeatCapTestH0(spnum) - TotHeatCapTestH1(spnum)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempRated) &
/ (HeatingOutdoorCoilInletAirDBTempH0Test - HeatingOutdoorCoilInletAirDBTempRated))
HeatingElecPowerLS = OutdoorUnitPowerTestH1(spnum) + ((OutdoorUnitPowerTestH0(spnum) - OutdoorUnitPowerTestH1(spnum)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempRated) &
/ (HeatingOutdoorCoilInletAirDBTempH0Test - HeatingOutdoorCoilInletAirDBTempRated))
ELSE
HeatingCapacityLS = TotHeatCapTestH3(spnum) + ((TotHeatCapTestH2(spnum) - TotHeatCapTestH3(spnum)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempH2Test - HeatingOutdoorCoilInletAirDBTempH3Test))
HeatingElecPowerLS = OutdoorUnitPowerTestH3(spnum) + ((OutdoorUnitPowerTestH2(spnum) - OutdoorUnitPowerTestH3(spnum)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempH2Test - HeatingOutdoorCoilInletAirDBTempH3Test))
ENDIF
! High Speed
IF ( (OutdoorBinTemperature(BinNum) .LE. -8.33d0) .OR. &
(OutdoorBinTemperature(BinNum) .GE. 7.20d0) ) THEN
HeatingCapacityHS = TotHeatCapTestH3(spnum+1) + ((TotHeatCapTestH1(spnum+1) - TotHeatCapTestH3(spnum+1)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempRated - HeatingOutdoorCoilInletAirDBTempH3Test))
HeatingElecPowerHS = OutdoorUnitPowerTestH3(spnum+1) &
+ ((OutdoorUnitPowerTestH1(spnum+1) - OutdoorUnitPowerTestH3(spnum+1)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempRated - HeatingOutdoorCoilInletAirDBTempH3Test))
ELSE
HeatingCapacityHS = TotHeatCapTestH3(spnum+1) + ((TotHeatCapTestH2(spnum+1) - TotHeatCapTestH3(spnum+1)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempH2Test - HeatingOutdoorCoilInletAirDBTempH3Test))
HeatingElecPowerHS = OutdoorUnitPowerTestH3(spnum+1) &
+ ((OutdoorUnitPowerTestH2(spnum+1) - OutdoorUnitPowerTestH3(spnum+1)) &
* (OutdoorBinTemperature(BinNum) - HeatingOutdoorCoilInletAirDBTempH3Test) &
/ (HeatingOutdoorCoilInletAirDBTempH2Test - HeatingOutdoorCoilInletAirDBTempH3Test))
ENDIF
!
LowTempCutOutFactor = 0.0D0
IF(.NOT. OATempCompressorOnOffBlank) THEN
IF (OutdoorBinTemperature(BinNum) .LE. OATempCompressorOff) THEN
LowTempCutOutFactor = 0.0D0
ELSEIF (OutdoorBinTemperature(BinNum) .GT. OATempCompressorOff .and. &
OutdoorBinTemperature(BinNum) .LE. OATempCompressorOn) THEN
LowTempCutOutFactor = 0.5D0
ELSE
LowTempCutOutFactor = 1.0D0
ENDIF
ELSE
LowTempCutOutFactor = 1.0D0
ENDIF
IF (BuildingHeatingLoad .LE. HeatingCapacityLS ) THEN
IF (HeatingCapacityLS > 0.0d0) PartLoadRatio = MIN(1.0d0, BuildingHeatingLoad / HeatingCapacityLS)
NetTotHeatCapBinned = BuildingHeatingLoad
PartLoadFraction = 1.0d0 - CyclicDegradationCoeff * (1.0d0 - PartLoadRatio)
TotHeatElecPowerBinnedHP = (PartLoadRatio/PartLoadFraction) * HeatingElecPowerLS * LowTempCutOutFactor
TotHeatElecPowerBinnedRH = BuildingHeatingLoad * (1.0d0 - LowTempCutOutFactor)
Exit HeatSpeedLoop
ELSEIF ((BuildingHeatingLoad .GT. HeatingCapacityLS) .AND. (BuildingHeatingLoad .LT. HeatingCapacityHS)) THEN
! cycle between speed "spnum" and "spnum + 1"
LoadFactor = MIN(1.0d0, (HeatingCapacityHS - BuildingHeatingLoad)/(HeatingCapacityHS - HeatingCapacityLS))
LoadFactor = MAX(0.0d0, LoadFactor)
NetTotHeatCapBinned = BuildingHeatingLoad
TotHeatElecPowerBinnedHP = LoadFactor*HeatingElecPowerLS + (1.0d0-LoadFactor)*HeatingElecPowerHS
TotHeatElecPowerBinnedHP = TotHeatElecPowerBinnedHP * LowTempCutOutFactor
TotHeatElecPowerBinnedRH = BuildingHeatingLoad * (1.0d0 - LowTempCutOutFactor)
Exit HeatSpeedLoop
ELSEIF (BuildingHeatingLoad .GE. HeatingCapacityMax) THEN
NetTotHeatCapBinned = BuildingHeatingLoad
IF(.NOT. OATempCompressorOnOffBlank .AND. HeatingElecPowerMax > 0.0d0) THEN
IF ( (OutdoorBinTemperature(BinNum) .LE. OATempCompressorOff) .OR. &
(HeatingCapacityMax/HeatingElecPowerMax .LT. 1.0d0) ) THEN
LowTempCutOutFactor = 0.0D0
ELSEIF ( (OutdoorBinTemperature(BinNum) .GT. OATempCompressorOff .AND. &
OutdoorBinTemperature(BinNum) .LE. OATempCompressorOn) .AND. &
(HeatingCapacityMax/HeatingElecPowerMax .GT. 1.0d0) ) THEN
LowTempCutOutFactor = 0.5D0
ELSEIF ( (OutdoorBinTemperature(BinNum) .GT. OATempCompressorOn) .AND. &
(HeatingCapacityMax/HeatingElecPowerMax .GT. 1.0d0) ) THEN
LowTempCutOutFactor = 1.0D0
ENDIF
ELSE
LowTempCutOutFactor = 1.0D0
ENDIF
TotHeatElecPowerBinnedHP = HeatingElecPowerMax * LowTempCutOutFactor
TotHeatElecPowerBinnedRH = BuildingHeatingLoad - HeatingCapacityMax * LowTempCutOutFactor
Exit HeatSpeedLoop
ENDIF
END DO HeatSpeedLoop
NetHeatingCapWeighted = NetHeatingCapWeighted + NetTotHeatCapBinned * FractionalBinHours
TotHeatingElecPowerWeighted = TotHeatingElecPowerWeighted &
+ (TotHeatElecPowerBinnedHP + TotHeatElecPowerBinnedRH )* FractionalBinHours
END DO
IF (DefrostControl .EQ. Timed) THEN
DemandDeforstCredit = 1.0D0 ! Timed defrost control
ELSE
DemandDeforstCredit = 1.03D0 ! Demand defrost control
ENDIF
IF ( TotHeatingElecPowerWeighted > 0.0d0 ) THEN
HSPF = NetHeatingCapWeighted * DemandDeforstCredit / TotHeatingElecPowerWeighted
ELSE
HSPF = 0.0d0
ENDIF
RETURN
END SUBROUTINE MultiSpeedDXHeatingCoilStandardRatings