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 | |||
real(kind=r64), | intent(out) | :: | NetCoolingCapRatedMaxSpeed | |||
real(kind=r64), | intent(out) | :: | SEER |
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 MultiSpeedDXCoolingCoilStandardRatings(DXCoilName, DXCoilType, CapFTempCurveIndex, CapFFlowCurveIndex, &
EIRFTempCurveIndex, EIRFFlowCurveIndex, PLFFPLRCurveIndex, &
RatedTotalCapacity, RatedCOP, RatedAirVolFlowRate, &
FanPowerPerEvapAirFlowRateFromInput, nsp, &
NetCoolingCapRatedMaxSpeed, SEER)
! SUBROUTINE INFORMATION:
! AUTHOR B. Nigusse, FSEC
! DATE WRITTEN December 2012
! MODIFIED
! RE-ENGINEERED na
! PURPOSE OF THIS SUBROUTINE:
! Calculates the standard ratings net cooling capacity and SEER values for multi speed DX cooling coils
! at the AHRI standard test condition(s).
! METHODOLOGY EMPLOYED:
! na
! REFERENCES:
! na
! USE STATEMENTS:
USE CurveManager, ONLY: CurveValue
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)]
REAL(r64), INTENT(OUT) :: NetCoolingCapRatedMaxSpeed ! net cooling capacity at maximum speed
REAL(r64), INTENT(OUT) :: SEER ! seasonale energy efficiency ratio of multi speed DX cooling coil
! SUBROUTINE PARAMETER DEFINITIONS:
!CHARACTER(len=*), PARAMETER :: RoutineName='MultiSpeedDXCoolingCoilStandardRatings: ' ! Include trailing blank space
REAL(r64), PARAMETER :: SizingFactor = 1.10d0 ! sizing factor per AHRI Std 210/240-2008
! 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) :: TotCoolCapTestA2(nsp) ! Total cooling capacity at A2 test condition (High speed)
REAL(r64) :: TotCoolCapTestB2(nsp) ! Total cooling capacity at B2 test condition (High speed)
REAL(r64) :: TotCoolCapTestB1(nsp) ! Total cooling capacity at B1 test condition (Low speed)
REAL(r64) :: TotCoolCapTestF1(nsp) ! Total cooling capacity at F1 test condition (Low speed)
REAL(r64) :: OutdoorUnitPowerTestA2(nsp) ! Outdoor Unit electric power at A2 test condition (High speed)
REAL(r64) :: OutdoorUnitPowerTestB2(nsp) ! Outdoor Unit electric power at B2 test condition (High speed)
REAL(r64) :: OutdoorUnitPowerTestB1(nsp) ! Outdoor Unit electric power at B1 test condition (Low speed)
REAL(r64) :: OutdoorUnitPowerTestF1(nsp) ! Outdoor Unit electric power at F1 test condition (Low speed)
REAL(r64) :: NetCoolingCapRated(nsp) ! net cooling capacity at each speed
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) :: CoolingCapacityLS = 0.0d0 ! cooling capacity of Mult-speed DX coil at lower speed, [W]
REAL(r64) :: CoolingCapacityHS = 0.0d0 ! cooling capacity of Mult-speed DX coil at higher speed, [W]
REAL(r64) :: CoolingElecPowerLS = 0.0d0 ! outdoor unit electric power input at low speed, [W]
REAL(r64) :: CoolingElecPowerHS = 0.0d0 ! outdoor unit electric power input at high speed, [W]
REAL(r64) :: CoolingCapacityMax = 0.0d0 ! cooling capacity of Mult-speed DX coil at max speed, [W]
REAL(r64) :: CoolingElecPowerMax = 0.0d0 ! outdoor unit electric power input at Max speed, [W]
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) :: NetCoolingCapWeighted = 0.0d0 ! net tot cooling cap weighted by the fraction of the binned cooling hours [W]
REAL(r64) :: TotCoolingElecPowerWeighted = 0.0d0 ! net total cooling electric power input weighted by the fraction of the
! binned cooling hours
REAL(r64) :: BuildingCoolingLoad = 0.0d0 ! Building space cooling load corresponding to an outdoor bin temperature [W]
REAL(r64) :: NetTotCoolCapBinned = 0.0d0 ! Net tot cooling cap corresponding to an outdoor bin temperature [W]
REAL(r64) :: TotCoolElecPowerBinned = 0.0d0 ! Total cooling electric power corresponding to an outdoor bin temperature [W]
REAL(r64) :: LoadFactor = 0.0d0 ! "on" time for last stage at the desired reduced capacity, (dimensionless)
INTEGER :: BinNum ! bin number counter
INTEGER :: spnum ! compressor speed number
TotCoolingElecPowerWeighted = 0.0d0
TotCoolingElecPowerWeighted = 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
! Calculate the capacity and power for each speed
DO spnum = 1, nsp
TotCapFlowModFac(spnum) = CurveValue(CapFFlowCurveIndex(spnum),AirMassFlowRatioRated)
TotCoolCapTestA2(spnum) = RatedTotalCapacity(spnum) &
* CurveValue(CapFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestA2) * TotCapFlowModFac(spnum) &
- FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
TotCoolCapTestB2(spnum) = RatedTotalCapacity(spnum) &
* CurveValue(CapFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestB2) * TotCapFlowModFac(spnum) &
- FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
TotCoolCapTestB1(spnum) = RatedTotalCapacity(spnum) &
* CurveValue(CapFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestB1) * TotCapFlowModFac(spnum) &
- FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
TotCoolCapTestF1(spnum) = RatedTotalCapacity(spnum) &
* CurveValue(CapFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestF1) * TotCapFlowModFac(spnum) &
- FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
EIRFlowModFac(spnum) = CurveValue(EIRFFlowCurveIndex(spnum),AirMassFlowRatioRated)
IF (RatedCOP(spnum) > 0.0d0) Then
OutdoorUnitPowerTestA2(spnum) = TotCoolCapTestA2(spnum) * EIRFlowModFac(spnum) &
* CurveValue(EIRFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestA2) / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
OutdoorUnitPowerTestB2(spnum) = TotCoolCapTestB2(spnum) * EIRFlowModFac(spnum) &
* CurveValue(EIRFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestB2) / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
OutdoorUnitPowerTestB1(spnum) = TotCoolCapTestB1(spnum) * EIRFlowModFac(spnum) &
* CurveValue(EIRFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestB1) / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
OutdoorUnitPowerTestF1(spnum) = TotCoolCapTestF1(spnum) * EIRFlowModFac(spnum) &
* CurveValue(EIRFTempCurveIndex(spnum),IndoorCoilInletAirWetbulbTempRated, &
OutdoorCoilInletAirDrybulbTempTestF1) / RatedCOP(spnum) &
+ FanPowerPerEvapAirFlowRate(spnum) * RatedAirVolFlowRate(spnum)
ENDIF
END DO
! Standard Rating cooling (net) capacity calculations:
NetCoolingCapRated(nsp) = TotCoolCapTestA2(nsp)
NetCoolingCapRatedMaxSpeed = NetCoolingCapRated(nsp)
! Calculate the SEER value based on contribution of each outdoor air bin temperature
DO BinNum = 1, NumOfOATempBins
BuildingCoolingLoad = (OutdoorBinTemperatureSEER(BinNum) - 18.3d0) / (35.0d0 - 18.3d0) &
* (TotCoolCapTestA2(nsp) / SizingFactor)
! determine the speed number
CoolingCapacityMax = TotCoolCapTestB2(nsp) &
+ ((TotCoolCapTestA2(nsp) - TotCoolCapTestB2(nsp)) &
/ (OutdoorCoilInletAirDrybulbTempTestA2 - OutdoorCoilInletAirDrybulbTempTestB2)) &
* (OutdoorBinTemperatureSEER(BinNum) - OutdoorCoilInletAirDrybulbTempTestB2)
CoolingElecPowerMax = OutdoorUnitPowerTestB2(nsp) &
+ ((OutdoorUnitPowerTestA2(nsp) - OutdoorUnitPowerTestB2(nsp)) &
/ (OutdoorCoilInletAirDrybulbTempTestA2 - OutdoorCoilInletAirDrybulbTempTestB2)) &
* (OutdoorBinTemperatureSEER(BinNum) - OutdoorCoilInletAirDrybulbTempTestB2)
SpeedLoop: DO spnum = 1, nsp-1
CoolingCapacityLS = TotCoolCapTestF1(spnum) &
+ ((TotCoolCapTestB1(spnum) - TotCoolCapTestF1(spnum)) &
/ (OutdoorCoilInletAirDrybulbTempTestB1 - OutdoorCoilInletAirDrybulbTempTestF1)) &
* (OutdoorBinTemperatureSEER(BinNum) - OutdoorCoilInletAirDrybulbTempTestF1)
CoolingElecPowerLS = OutdoorUnitPowerTestF1(spnum) &
+ ((OutdoorUnitPowerTestB1(spnum) - OutdoorUnitPowerTestF1(spnum)) &
/ (OutdoorCoilInletAirDrybulbTempTestB1 - OutdoorCoilInletAirDrybulbTempTestF1)) &
* (OutdoorBinTemperatureSEER(BinNum) - OutdoorCoilInletAirDrybulbTempTestF1)
CoolingCapacityHS = TotCoolCapTestB2(spnum+1) &
+ ((TotCoolCapTestA2(spnum+1) - TotCoolCapTestB2(spnum+1)) &
/ (OutdoorCoilInletAirDrybulbTempTestA2 - OutdoorCoilInletAirDrybulbTempTestB2)) &
* (OutdoorBinTemperatureSEER(BinNum) - OutdoorCoilInletAirDrybulbTempTestB2)
CoolingElecPowerHS = OutdoorUnitPowerTestB2(spnum+1) &
+ ((OutdoorUnitPowerTestA2(spnum+1) - OutdoorUnitPowerTestB2(spnum+1)) &
/ (OutdoorCoilInletAirDrybulbTempTestA2 - OutdoorCoilInletAirDrybulbTempTestB2)) &
* (OutdoorBinTemperatureSEER(BinNum) - OutdoorCoilInletAirDrybulbTempTestB2)
IF (BuildingCoolingLoad .LE. CoolingCapacityLS ) THEN
PartLoadRatio = MIN(1.0d0, BuildingCoolingLoad / CoolingCapacityLS)
NetTotCoolCapBinned = PartLoadRatio * CoolingCapacityLS
PartLoadFraction = 1.0d0 - CyclicDegradationCoeff * (1.0d0 - PartLoadRatio)
TotCoolElecPowerBinned = (PartLoadRatio/PartLoadFraction) * CoolingElecPowerLS
Exit SpeedLoop
ELSEIF ((BuildingCoolingLoad .GT. CoolingCapacityLS) .AND. &
(BuildingCoolingLoad .LT. CoolingCapacityHS)) THEN
! cycle between speed "spnum" and "spnum + 1"
LoadFactor = MIN(1.0d0, (CoolingCapacityHS - BuildingCoolingLoad)/(CoolingCapacityHS - CoolingCapacityLS))
LoadFactor = MAX(0.0d0, LoadFactor)
NetTotCoolCapBinned = LoadFactor*CoolingCapacityLS + (1.0d0-LoadFactor)*CoolingCapacityHS
TotCoolElecPowerBinned = LoadFactor*CoolingElecPowerLS + (1.0d0-LoadFactor)*CoolingElecPowerHS
Exit SpeedLoop
ELSEIF (BuildingCoolingLoad .GE. CoolingCapacityMax) THEN
NetTotCoolCapBinned = CoolingCapacityMax
TotCoolElecPowerBinned = CoolingElecPowerMax
Exit SpeedLoop
ENDIF
END DO SpeedLoop
NetCoolingCapWeighted = NetCoolingCapWeighted &
+ NetTotCoolCapBinned * CoolFracBinHoursAtOutdoorBinTemp(BinNum)
TotCoolingElecPowerWeighted = TotCoolingElecPowerWeighted &
+ TotCoolElecPowerBinned * CoolFracBinHoursAtOutdoorBinTemp(BinNum)
END DO
IF ( TotCoolingElecPowerWeighted > 0.0d0 ) THEN
SEER = NetCoolingCapWeighted / TotCoolingElecPowerWeighted
ELSE
SEER = 0.0d0
ENDIF
RETURN
END SUBROUTINE MultiSpeedDXCoolingCoilStandardRatings