diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index f9045ead866..6e72367f8eb 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -7001,16 +7001,16 @@ namespace DXCoils { SizingMethod = CoolingCapacitySizing; CompName = DXCoil(DXCoilNum).Name; FieldNum = 7 + (DXCoil(DXCoilNum).NumOfSpeeds - 1) * 13; - DataTotCapCurveIndex = DXCoil(DXCoilNum).MSCCapFTemp(Mode); - TempSize = DXCoil(DXCoilNum).MSRatedTotCap(Mode); + DataTotCapCurveIndex = DXCoil(DXCoilNum).MSCCapFTemp(DXCoil(DXCoilNum).NumOfSpeeds); + TempSize = DXCoil(DXCoilNum).MSRatedTotCap(DXCoil(DXCoilNum).NumOfSpeeds); PrintFlag = false; SizingString = DXCoilNumericFields(DXCoilNum).PerfMode(Mode).FieldNames(FieldNum) + " [W]"; } else if (DXCoil(DXCoilNum).DXCoilType_Num == CoilDX_MultiSpeedHeating) { SizingMethod = HeatingCapacitySizing; CompName = DXCoil(DXCoilNum).Name; FieldNum = 10 + (DXCoil(DXCoilNum).NumOfSpeeds - 1) * 5; - DataTotCapCurveIndex = DXCoil(DXCoilNum).MSCCapFTemp(Mode); - TempSize = DXCoil(DXCoilNum).MSRatedTotCap(Mode); + DataTotCapCurveIndex = DXCoil(DXCoilNum).MSCCapFTemp(DXCoil(DXCoilNum).NumOfSpeeds); + TempSize = DXCoil(DXCoilNum).MSRatedTotCap(DXCoil(DXCoilNum).NumOfSpeeds); PrintFlag = false; SizingString = DXCoilNumericFields(DXCoilNum).PerfMode(Mode).FieldNames(FieldNum) + " [W]"; } else { @@ -7626,6 +7626,8 @@ namespace DXCoils { DXCoil(DXCoilNum).Name, "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Sensible Heat Ratio", DXCoil(DXCoilNum).MSRatedSHR(Mode)); + // added for rated sensible cooling capacity estimate for html reporting, issue #7381 + DXCoil(DXCoilNum).RatedSHR(1) = DXCoil(DXCoilNum).MSRatedSHR(Mode); } } else { // autosize or hard-sized with system sizing data CheckSysSizing(DXCoil(DXCoilNum).DXCoilType, DXCoil(DXCoilNum).Name); @@ -7639,6 +7641,8 @@ namespace DXCoils { DXCoil(DXCoilNum).Name, "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Sensible Heat Ratio", DXCoil(DXCoilNum).MSRatedSHR(Mode)); + // added for rated sensible cooling capacity estimate for html reporting, issue #7381 + DXCoil(DXCoilNum).RatedSHR(1) = DXCoil(DXCoilNum).MSRatedSHR(Mode); } } else { // autosize or hard-sized with system sizing data CheckZoneSizing(DXCoil(DXCoilNum).DXCoilType, DXCoil(DXCoilNum).Name); @@ -7673,6 +7677,8 @@ namespace DXCoils { DXCoil(DXCoilNum).Name, "Speed " + TrimSigDigits(Mode) + " Design Size Rated Sensible Heat Ratio", MSRatedSHRDes); + // added for rated sensible cooling capacity estimate for html reporting, issue #7381 + DXCoil(DXCoilNum).RatedSHR(1) = MSRatedSHRDes; } else { if (DXCoil(DXCoilNum).MSRatedSHR(Mode) > 0.0 && MSRatedSHRDes > 0.0 && !HardSizeNoDesRun) { MSRatedSHRUser = DXCoil(DXCoilNum).MSRatedSHR(Mode); @@ -7813,121 +7819,34 @@ namespace DXCoils { } // Sizing rated air flow rate if (Mode == DXCoil(DXCoilNum).NumOfSpeeds) { - if (CurSysNum > 0) { - if (UnitarySysEqSizing.allocated()) { - if (UnitarySysEqSizing(CurSysNum).HeatingAirFlow) { - MSRatedAirVolFlowRateDes = UnitarySysEqSizing(CurSysNum).HeatingAirVolFlow; - } else { - if (SizingDesRunThisAirSys) HardSizeNoDesRun = false; - if (!IsAutoSize && !SizingDesRunThisAirSys) { - HardSizeNoDesRun = true; - if (DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) > 0.0) { - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Air Flow Rate [m3/s]", - DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode)); - } - } else { - CheckSysSizing(DXCoil(DXCoilNum).DXCoilType, DXCoil(DXCoilNum).Name); - if (CurOASysNum > 0) { - MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum).DesOutAirVolFlow; - } else { - MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum).DesMainVolFlow; - } - } - } - } else { - if (SizingDesRunThisAirSys) HardSizeNoDesRun = false; - if (!IsAutoSize && !SizingDesRunThisAirSys) { - HardSizeNoDesRun = true; - if (DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) > 0.0) { - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Air Flow Rate [m3/s]", - DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode)); - } - } else { - CheckSysSizing(DXCoil(DXCoilNum).DXCoilType, DXCoil(DXCoilNum).Name); - if (CurOASysNum > 0) { - MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum).DesOutAirVolFlow; - } else { - MSRatedAirVolFlowRateDes = FinalSysSizing(CurSysNum).DesMainVolFlow; - } - } - } - } else if (CurZoneEqNum > 0) { - if (ZoneEqSizing.allocated()) { - if (ZoneEqSizing(CurZoneEqNum).HeatingAirFlow) { - MSRatedAirVolFlowRateDes = ZoneEqSizing(CurZoneEqNum).HeatingAirVolFlow; - } else { - if (!IsAutoSize && !SizingDesRunThisZone) { - HardSizeNoDesRun = true; - if (DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) > 0.0) { - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Air Flow Rate [m3/s]", - DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode)); - } - } else { - CheckZoneSizing(DXCoil(DXCoilNum).DXCoilType, DXCoil(DXCoilNum).Name); - MSRatedAirVolFlowRateDes = - max(FinalZoneSizing(CurZoneEqNum).DesCoolVolFlow, FinalZoneSizing(CurZoneEqNum).DesHeatVolFlow); - } - } - } else { - if (!IsAutoSize && !SizingDesRunThisZone) { - HardSizeNoDesRun = true; - if (DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) > 0.0) { - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Air Flow Rate [m3/s]", - DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode)); - } - } else { - CheckZoneSizing(DXCoil(DXCoilNum).DXCoilType, DXCoil(DXCoilNum).Name); - MSRatedAirVolFlowRateDes = - max(FinalZoneSizing(CurZoneEqNum).DesCoolVolFlow, FinalZoneSizing(CurZoneEqNum).DesHeatVolFlow); - } - } - } - if (MSRatedAirVolFlowRateDes < SmallAirVolFlow) { - MSRatedAirVolFlowRateDes = 0.0; - } + CompName = DXCoil(DXCoilNum).Name; + FieldNum = 12 + (Mode - 1) * 5; + SizingString = DXCoilNumericFields(DXCoilNum).PerfMode(1).FieldNames(FieldNum) + " [m3/s]"; + SizingMethod = HeatingAirflowSizing; + CompType = DXCoil(DXCoilNum).DXCoilType; + TempSize = DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode); + DataIsDXCoil = true; + DataEMSOverrideON = DXCoil(DXCoilNum).RatedAirVolFlowRateEMSOverrideON(Mode); + DataEMSOverride = DXCoil(DXCoilNum).RatedAirVolFlowRateEMSOverrideValue(Mode); + RequestSizing(CompType, CompName, SizingMethod, SizingString, TempSize, PrintFlag, RoutineName); + DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) = TempSize; + DataIsDXCoil = false; + DataEMSOverrideON = false; + DataEMSOverride = 0.0; } else { - MSRatedAirVolFlowRateDes = - DXCoil(DXCoilNum).MSRatedAirVolFlowRate(DXCoil(DXCoilNum).NumOfSpeeds) * Mode / DXCoil(DXCoilNum).NumOfSpeeds; - } - if (!HardSizeNoDesRun) { - if (IsAutoSize) { - DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) = MSRatedAirVolFlowRateDes; - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " Design Size Rated Air Flow Rate [m3/s]", - MSRatedAirVolFlowRateDes); - } else { - if (DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) > 0.0 && MSRatedAirVolFlowRateDes > 0.0 && !HardSizeNoDesRun) { - MSRatedAirVolFlowRateUser = DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode); - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " Design Size Rated Air Flow Rate [m3/s]", - MSRatedAirVolFlowRateDes, - "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Air Flow Rate [m3/s]", - MSRatedAirVolFlowRateUser); - if (DisplayExtraWarnings) { - if ((std::abs(MSRatedAirVolFlowRateDes - MSRatedAirVolFlowRateUser) / MSRatedAirVolFlowRateUser) > - AutoVsHardSizingThreshold) { - ShowMessage("SizeDxCoil: Potential issue with equipment sizing for " + DXCoil(DXCoilNum).DXCoilType + ' ' + - DXCoil(DXCoilNum).Name); - ShowContinueError("User-Specified Rated Air Volume Flow Rate of " + RoundSigDigits(MSRatedAirVolFlowRateUser, 5) + - " [m3/s]"); - ShowContinueError("differs from Design Size Rated Air Volume Flow Rate of " + - RoundSigDigits(MSRatedAirVolFlowRateDes, 5) + " [m3/s]"); - ShowContinueError("This may, or may not, indicate mismatched component sizes."); - ShowContinueError("Verify that the value entered is intended and is consistent with other components."); - } - } - } - } + CompName = DXCoil(DXCoilNum).Name; + FieldNum = 12 + (Mode - 1) * 5; + SizingString = DXCoilNumericFields(DXCoilNum).PerfMode(1).FieldNames(FieldNum) + " [m3/s]"; + SizingMethod = AutoCalculateSizing; + CompType = DXCoil(DXCoilNum).DXCoilType; + // Auto size low speed flow to fraction of high speed capacity + DataConstantUsedForSizing = DXCoil(DXCoilNum).MSRatedAirVolFlowRate(DXCoil(DXCoilNum).NumOfSpeeds); + DataFractionUsedForSizing = (float)Mode / DXCoil(DXCoilNum).NumOfSpeeds; + TempSize = DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode); + RequestSizing(CompType, CompName, SizingMethod, SizingString, TempSize, bPRINT, RoutineName); + DXCoil(DXCoilNum).MSRatedAirVolFlowRate(Mode) = TempSize; + DataConstantUsedForSizing = 0.0; + DataFractionUsedForSizing = 0.0; } } @@ -7988,48 +7907,68 @@ namespace DXCoils { if (DXCoil(DXCoilNum).MSRatedTotCap(Mode) == AutoSize) { IsAutoSize = true; } + if (Mode == DXCoil(DXCoilNum).NumOfSpeeds) { - // Heating capacity is assumed to be equal to the cooling capacity - if (DXCoil(DXCoilNum).CompanionUpstreamDXCoil > 0) { - NumOfSpeedCompanion = DXCoil(DXCoil(DXCoilNum).CompanionUpstreamDXCoil).NumOfSpeeds; - MSRatedTotCapDes = DXCoil(DXCoil(DXCoilNum).CompanionUpstreamDXCoil).MSRatedTotCap(NumOfSpeedCompanion); - } else { - MSRatedTotCapDes = DXCoil(DXCoilNum).RatedTotCap(1); // sized above + + PrintFlag = true; + DataIsDXCoil = true; + CompName = DXCoil(DXCoilNum).Name; + CompType = DXCoil(DXCoilNum).DXCoilType; + SizingMethod = HeatingCapacitySizing; + FieldNum = 10 + (Mode - 1) * 5; + SizingString = DXCoilNumericFields(DXCoilNum).PerfMode(1).FieldNames(FieldNum) + " [W]"; + DataTotCapCurveIndex = DXCoil(DXCoilNum).MSCCapFTemp(Mode); + if (IsAutoSize || !HardSizeNoDesRun) { + // Heating capacity is assumed to be equal to the cooling capacity + SizingMethod = AutoCalculateSizing; + DataFractionUsedForSizing = 1.0; + if (DXCoil(DXCoilNum).CompanionUpstreamDXCoil > 0) { + NumOfSpeedCompanion = DXCoil(DXCoil(DXCoilNum).CompanionUpstreamDXCoil).NumOfSpeeds; + DataConstantUsedForSizing = DXCoil(DXCoil(DXCoilNum).CompanionUpstreamDXCoil).MSRatedTotCap(NumOfSpeedCompanion); + } else { + DataConstantUsedForSizing = DXCoil(DXCoilNum).RatedTotCap(1); // sized above + } } + TempSize = DXCoil(DXCoilNum).MSRatedTotCap(Mode); + DataEMSOverrideON = DXCoil(DXCoilNum).RatedTotCapEMSOverrideOn(Mode); + DataEMSOverride = DXCoil(DXCoilNum).RatedTotCapEMSOverrideValue(Mode); + RequestSizing(CompType, CompName, SizingMethod, SizingString, TempSize, PrintFlag, RoutineName); + DXCoil(DXCoilNum).MSRatedTotCap(Mode) = TempSize; + } else { - MSRatedTotCapDes = DXCoil(DXCoilNum).MSRatedTotCap(DXCoil(DXCoilNum).NumOfSpeeds) * Mode / DXCoil(DXCoilNum).NumOfSpeeds; - MSRatedTotCapDes = max(0.0, MSRatedTotCapDes); - } - if (IsAutoSize) { - DXCoil(DXCoilNum).MSRatedTotCap(Mode) = MSRatedTotCapDes; - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " Design Size Rated Total Heating Capacity [W]", - MSRatedTotCapDes); - } else { - if (DXCoil(DXCoilNum).MSRatedTotCap(Mode) > 0.0 && MSRatedTotCapDes > 0.0 && !HardSizeNoDesRun) { - MSRatedTotCapUser = DXCoil(DXCoilNum).MSRatedTotCap(Mode); - ReportSizingOutput(DXCoil(DXCoilNum).DXCoilType, - DXCoil(DXCoilNum).Name, - "Speed " + TrimSigDigits(Mode) + " Design Size Rated Total Heating Capacity [W]", - MSRatedTotCapDes, - "Speed " + TrimSigDigits(Mode) + " User-Specified Rated Total Heating Capacity [W]", - MSRatedTotCapUser); - if (DisplayExtraWarnings) { - if ((std::abs(MSRatedTotCapDes - MSRatedTotCapUser) / MSRatedTotCapUser) > AutoVsHardSizingThreshold) { - ShowMessage("SizeDxCoil: Potential issue with equipment sizing for " + DXCoil(DXCoilNum).DXCoilType + ' ' + - DXCoil(DXCoilNum).Name); - ShowContinueError("User-Specified Rated Total Heating Capacity of " + RoundSigDigits(MSRatedTotCapUser, 2) + " [W]"); - ShowContinueError("differs from Design Size Rated Total Heating Capacity of " + RoundSigDigits(MSRatedTotCapDes, 2) + - " [W]"); - ShowContinueError("This may, or may not, indicate mismatched component sizes."); - ShowContinueError("Verify that the value entered is intended and is consistent with other components."); - } - } + + PrintFlag = true; + CompName = DXCoil(DXCoilNum).Name; + CompType = DXCoil(DXCoilNum).DXCoilType; + SizingMethod = AutoCalculateSizing; + FieldNum = 10 + (Mode - 1) * 5; + SizingString = DXCoilNumericFields(DXCoilNum).PerfMode(1).FieldNames(FieldNum) + " [W]"; + if (IsAutoSize || !HardSizeNoDesRun) { + // Auto size low speed capacity to fraction of high speed capacity + DataConstantUsedForSizing = DXCoil(DXCoilNum).MSRatedTotCap(DXCoil(DXCoilNum).NumOfSpeeds); + DataFractionUsedForSizing = (float)Mode / DXCoil(DXCoilNum).NumOfSpeeds; + } else { + DataConstantUsedForSizing = DXCoil(DXCoilNum).MSRatedTotCap(Mode); + DataFractionUsedForSizing = 1.0; } + TempSize = DXCoil(DXCoilNum).MSRatedTotCap(Mode); + DataEMSOverrideON = DXCoil(DXCoilNum).RatedTotCapEMSOverrideOn(Mode); + DataEMSOverride = DXCoil(DXCoilNum).RatedTotCapEMSOverrideValue(Mode); + RequestSizing(CompType, CompName, SizingMethod, SizingString, TempSize, PrintFlag, RoutineName); + DXCoil(DXCoilNum).MSRatedTotCap(Mode) = TempSize; } - } + PrintFlag = false; + DataIsDXCoil = false; + DataFlowUsedForSizing = 0.0; + DataCoolCoilCap = 0.0; + DataTotCapCurveIndex = 0; + DataEMSOverrideON = false; + DataEMSOverride = 0.0; + DataConstantUsedForSizing = 0.0; + DataFractionUsedForSizing = 0.0; + DataTotCapCurveValue = 0.0; + } // Ensure capacity at lower speed must be lower or equal to the capacity at higher speed. for (Mode = 1; Mode <= DXCoil(DXCoilNum).NumOfSpeeds - 1; ++Mode) { if (DXCoil(DXCoilNum).MSRatedTotCap(Mode) > DXCoil(DXCoilNum).MSRatedTotCap(Mode + 1)) { @@ -9076,8 +9015,8 @@ namespace DXCoils { // since the TotCapTempModFac doesn't work properly with dry-coil conditions. InletAirHumRatTemp = RF * wADP + (1.0 - RF) * InletAirHumRatTemp; InletAirWetBulbC = PsyTwbFnTdbWPb(InletAirDryBulbTemp, InletAirHumRatTemp, OutdoorPressure); - // Eventually inlet air conditions will be used in DX Coil, these lines are commented out and marked with this comment line - // InletAirWetBulbC = PsyTwbFnTdbWPb(InletAirDryBulbTemp,InletAirHumRatTemp,InletAirPressure) + // Eventually inlet air conditions will be used in DX Coil, these lines are commented out and marked with this comment + // line InletAirWetBulbC = PsyTwbFnTdbWPb(InletAirDryBulbTemp,InletAirHumRatTemp,InletAirPressure) ++Counter; if (std::abs(werror) > Tolerance) continue; // Recalculate with modified inlet conditions break; @@ -10444,8 +10383,8 @@ namespace DXCoils { if (DXCoil(DXCoilNum).CAPFTErrIndex == 0) { ShowWarningMessage("The TotCapTempModFac curve value for DX heating coil " + DXCoil(DXCoilNum).Name + " =" + RoundSigDigits(TotCapTempModFac, 2)); - ShowContinueError( - "TotCapTempModFac curve value must be > 0. TotCapTempModFac curve value has been reset to 0.0 and simulation is continuing."); + ShowContinueError("TotCapTempModFac curve value must be > 0. TotCapTempModFac curve value has been reset to 0.0 and " + "simulation is continuing."); ShowContinueError("Check the IO reference manual for TotCapTempModFac curve guidance [ " + DXCoil(DXCoilNum).DXCoilType + " ]."); ShowContinueErrorTimeStamp(""); } @@ -11540,7 +11479,8 @@ namespace DXCoils { // This function checks to see if the ADP based on coil delta T and calculated bypass factor and the ADP based // on coil delta W and calculated bypass factor land on the saturation curve at the same place within a tolerance. // The result is passed back to the sizing routine as the new value for SHR. - // If the SHR is not autosized, this routine will still adjust the design SHR appropriately, however, the hard-sized SHR will not change. + // If the SHR is not autosized, this routine will still adjust the design SHR appropriately, however, the hard-sized SHR will not + // change. // Return value Real64 SHR(0.0); // the result - the adjusted design SHR @@ -12383,8 +12323,8 @@ namespace DXCoils { HeatReclaimDXCoil(DXCoilNum).AvailCapacity = DXCoil(DXCoilNum).TotalCoolingEnergyRate + DXCoil(DXCoilNum).ElecCoolingPower; // Waste heat calculation - // TODO: waste heat not considered even if defined in Cooling:DX:MultiSpeed, N16, \field Speed 1 Rated Waste Heat Fraction of Power - // Input + // TODO: waste heat not considered even if defined in Cooling:DX:MultiSpeed, N16, \field Speed 1 Rated Waste Heat Fraction of + // Power Input if (DXCoil(DXCoilNum).FuelType != FuelTypeElectricity) { if (DXCoil(DXCoilNum).MSWasteHeat(SpeedNumLS) == 0) { WasteHeatLS = DXCoil(DXCoilNum).MSWasteHeatFrac(SpeedNumLS); @@ -15382,8 +15322,8 @@ namespace DXCoils { if (WhichCoil != 0) { DXCoil(WhichCoil).ISHundredPercentDOASDXCoil = true; } else { - // DXCoil(WhichCoil)%ISHundredPercentDOASDXCoil = .FALSE. //Autodesk:BoundsViolation DXCoil(0): DXCoil is not allocated with a 0 element: - // Commented out + // DXCoil(WhichCoil)%ISHundredPercentDOASDXCoil = .FALSE. //Autodesk:BoundsViolation DXCoil(0): DXCoil is not allocated with a 0 + // element: Commented out ShowSevereError("SetDXCoilTypeData: Could not find Coil \"Name=\"" + CoilName + "\""); } } @@ -15926,8 +15866,8 @@ namespace DXCoils { CurrentEndTime = CurrentTime + SysTimeElapsed; // The following checks are not necessary for VRF-FluidTCtrl model. (1) OAT check is already performed in the VRF OU routines (2) - // VRF-FluidTCtrl model is physics based, not system curve based, and thus doesn't require special performance curves for operations at low - // inlet temperatures (zrp_Jul2016) + // VRF-FluidTCtrl model is physics based, not system curve based, and thus doesn't require special performance curves for operations at + // low inlet temperatures (zrp_Jul2016) // Print warning messages only when valid and only for the first ocurrance. Let summary provide statistics. // Wait for next time step to print warnings. If simulation iterates, print out // the warning for the last iteration only. Must wait for next time step to accomplish this. @@ -15940,7 +15880,8 @@ namespace DXCoils { // ShowContinueError( "... Operation at low inlet temperatures may require special performance curves." ); // } // ShowRecurringWarningErrorAtEnd( DXCoil( DXCoilNum ).DXCoilType + " \"" + DXCoil( DXCoilNum ).Name + "\" - Low condenser inlet - // temperature error continues...", DXCoil( DXCoilNum ).LowAmbErrIndex, DXCoil( DXCoilNum ).LowTempLast, DXCoil( DXCoilNum ).LowTempLast, _, + // temperature error continues...", DXCoil( DXCoilNum ).LowAmbErrIndex, DXCoil( DXCoilNum ).LowTempLast, DXCoil( DXCoilNum ).LowTempLast, + // _, // "[C]", "[C]" ); // } // } @@ -15953,7 +15894,8 @@ namespace DXCoils { // ShowContinueError( "... Operation at high inlet temperatures may require special performance curves." ); // } // ShowRecurringWarningErrorAtEnd( DXCoil( DXCoilNum ).DXCoilType + " \"" + DXCoil( DXCoilNum ).Name + "\" - High condenser inlet - // temperature error continues...", DXCoil( DXCoilNum ).HighAmbErrIndex, DXCoil( DXCoilNum ).HighTempLast, DXCoil( DXCoilNum ).HighTempLast, + // temperature error continues...", DXCoil( DXCoilNum ).HighAmbErrIndex, DXCoil( DXCoilNum ).HighTempLast, DXCoil( DXCoilNum + // ).HighTempLast, // _, "[C]", "[C]" ); // } // } @@ -16034,15 +15976,15 @@ namespace DXCoils { } // The following checks are not necessary for VRF-FluidTCtrl model. (1) OAT check is already performed in the VRF OU routines (2) - // VRF-FluidTCtrl model is physics based, not system curve based, and thus doesn't require special performance curves for operations at - // low inlet temperatures (zrp_Jul2016) + // VRF-FluidTCtrl model is physics based, not system curve based, and thus doesn't require special performance curves for operations + // at low inlet temperatures (zrp_Jul2016) // // check boundary for low ambient temperature and post warnings to individual DX coil buffers to print at end of time step // if ( OutdoorDryBulb < DXCoil( DXCoilNum ).MinOATCompressor && ! WarmupFlag ) { // DXCoil( DXCoilNum ).PrintLowAmbMessage = true; // DXCoil( DXCoilNum ).LowTempLast = OutdoorDryBulb; // if ( DXCoil( DXCoilNum ).LowAmbErrIndex == 0 ) { - // DXCoil( DXCoilNum ).LowAmbBuffer1 = DXCoil( DXCoilNum ).DXCoilType + " \"" + DXCoil( DXCoilNum ).Name + "\" - Condenser inlet - // temperature below " + RoundSigDigits( DXCoil( DXCoilNum ).MinOATCompressor, 2 ) + " C. Condenser inlet temperature = " + + // DXCoil( DXCoilNum ).LowAmbBuffer1 = DXCoil( DXCoilNum ).DXCoilType + " \"" + DXCoil( DXCoilNum ).Name + "\" - Condenser + // inlet temperature below " + RoundSigDigits( DXCoil( DXCoilNum ).MinOATCompressor, 2 ) + " C. Condenser inlet temperature = " + // RoundSigDigits( OutdoorDryBulb, 2 ); // DXCoil( DXCoilNum ).LowAmbBuffer2 = " ... Occurrence info = " + EnvironmentName + ", " + CurMnDy + " " + // CreateSysTimeIntervalString(); @@ -16054,11 +15996,11 @@ namespace DXCoils { // DXCoil( DXCoilNum ).PrintHighAmbMessage = true; // DXCoil( DXCoilNum ).HighTempLast = OutdoorDryBulb; // if ( DXCoil( DXCoilNum ).HighAmbErrIndex == 0 ) { - // DXCoil( DXCoilNum ).HighAmbBuffer1 = DXCoil( DXCoilNum ).DXCoilType + " \"" + DXCoil( DXCoilNum ).Name + "\" - Condenser inlet - // temperature above " + RoundSigDigits( DXCoil( DXCoilNum ).MaxOATCompressor, 2 ) + " C. Condenser temperature = " + RoundSigDigits( - // OutdoorDryBulb, 2 ); - // DXCoil( DXCoilNum ).HighAmbBuffer2 = " ... Occurrence info = " + EnvironmentName + ", " + CurMnDy + " " + - // CreateSysTimeIntervalString(); + // DXCoil( DXCoilNum ).HighAmbBuffer1 = DXCoil( DXCoilNum ).DXCoilType + " \"" + DXCoil( DXCoilNum ).Name + "\" - Condenser + // inlet temperature above " + RoundSigDigits( DXCoil( DXCoilNum ).MaxOATCompressor, 2 ) + " C. Condenser temperature = " + + // RoundSigDigits( OutdoorDryBulb, 2 ); DXCoil( DXCoilNum ).HighAmbBuffer2 = " ... Occurrence info = " + EnvironmentName + ", + // " + // + CurMnDy + " " + CreateSysTimeIntervalString(); // } // } diff --git a/src/EnergyPlus/WaterToAirHeatPumpSimple.cc b/src/EnergyPlus/WaterToAirHeatPumpSimple.cc index c6bf481762e..27320f7faa5 100644 --- a/src/EnergyPlus/WaterToAirHeatPumpSimple.cc +++ b/src/EnergyPlus/WaterToAirHeatPumpSimple.cc @@ -1889,6 +1889,7 @@ namespace WaterToAirHeatPumpSimple { if (SimpleWatertoAirHP(HPNum).RatedCapHeat == AutoSize && SimpleWatertoAirHP(HPNum).WatertoAirHPType == "HEATING") { IsAutoSize = true; } + if (SizingDesRunThisAirSys || SizingDesRunThisZone) HardSizeNoDesRun = false; // simply set heating capacity equal to the cooling capacity if (SimpleWatertoAirHP(HPNum).WatertoAirHPType == "HEATING") { RatedCapHeatDes = DXCoolCap; @@ -1937,6 +1938,14 @@ namespace WaterToAirHeatPumpSimple { ShowContinueError("Verify that the value entered is intended and is consistent with other components."); } } + } else { + if (SimpleWatertoAirHP(HPNum).RatedCapHeat > 0.0) { + RatedCapHeatUser = SimpleWatertoAirHP(HPNum).RatedCapHeat; + ReportSizingOutput("COIL:" + SimpleWatertoAirHP(HPNum).WatertoAirHPType + ":WATERTOAIRHEATPUMP:EQUATIONFIT", + SimpleWatertoAirHP(HPNum).Name, + "User-Specified Rated Heating Capacity [W]", + RatedCapHeatUser); + } } } diff --git a/tst/EnergyPlus/unit/DXCoils.unit.cc b/tst/EnergyPlus/unit/DXCoils.unit.cc index 36fa2d897e9..1967163b287 100644 --- a/tst/EnergyPlus/unit/DXCoils.unit.cc +++ b/tst/EnergyPlus/unit/DXCoils.unit.cc @@ -61,6 +61,7 @@ #include #include #include +#include #include #include #include @@ -108,7 +109,7 @@ TEST_F(EnergyPlusFixture, DXCoils_Test1) DXCoilNumericFields.allocate(NumDXCoils); DXCoilNumericFields(2).PerfMode.allocate(1); - DXCoilNumericFields(2).PerfMode(1).FieldNames.allocate(15); + DXCoilNumericFields(2).PerfMode(1).FieldNames.allocate(17); DXCoil(2).DefrostStrategy = Resistive; DXCoil(2).DefrostCapacity = 5000.0; DXCoil(2).Name = "DX Heating coil"; @@ -2079,7 +2080,6 @@ TEST_F(EnergyPlusFixture, CoilCoolingDXTwoSpeed_MinOADBTempCompOperLimit) ASSERT_EQ(-25.0, DXCoil(1).MinOATCompressor); // use default value at -25C } - TEST_F(SQLiteFixture, DXCoils_TestComponentSizingOutput_TwoSpeed) { EnergyPlus::sqlite->sqliteBegin(); @@ -2523,5 +2523,623 @@ TEST_F(SQLiteFixture, DXCoils_TestComponentSizingOutput_SingleSpeed) EnergyPlus::sqlite->sqliteCommit(); } +TEST_F(EnergyPlusFixture, TestMultiSpeedHeatingCoilSizingOutput) +{ + // Test rated heating capacity for Coil:Heating:DX:MultiSpeed #7381 + + std::string const idf_objects = delimited_string({ + + " Coil:Cooling:DX:MultiSpeed,", + " ashp clg coil, !- Name", + " , !- Availability Schedule Name", + " ashp unitary system Fan - Cooling Coil Node, !- Air Inlet Node Name", + " ashp unitary system Cooling Coil - Heating Coil Node, !- Air Outlet Node Name", + " , !- Condenser Air Inlet Node Name", + " AirCooled, !- Condenser Type", + " , !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", + " , !- Supply Water Storage Tank Name", + " , !- Condensate Collection Water Storage Tank Name", + " No, !- Apply Part Load Fraction to Speeds Greater than 1", + " No, !- Apply Latent Degradation to Speeds Greater than 1", + " 0, !- Crankcase Heater Capacity {W}", + " 10, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C}", + " 0, !- Basin Heater Capacity {W/K}", + " 2, !- Basin Heater Setpoint Temperature {C}", + " , !- Basin Heater Operating Schedule Name", + " Electricity, !- Fuel Type", + " 2, !- Number of Speeds", + " 10128.5361851424, !- Speed Gross Rated Total Cooling Capacity 1 {W}", + " 0.714668466400895, !- Speed Gross Rated Sensible Heat Ratio 1", + " 4.77462180051141, !- Speed Gross Rated Cooling COP 1 {W/W}", + " 0.558646076305085, !- Speed Rated Air Flow Rate 1 {m3/s}", + " 773.3, !- Speed Rated Evaporator Fan Power Per Volume Flow Rate 1 {W/(m3/s)}", + " Cool-Cap-fT1, !- Speed Total Cooling Capacity Function of Temperature Curve Name 1", + " Cool-Cap-fFF1, !- Speed Total Cooling Capacity Function of Flow Fraction Curve Name 1", + " Cool-EIR-fT1, !- Speed Energy Input Ratio Function of Temperature Curve Name 1", + " Cool-EIR-fFF1, !- Speed Energy Input Ratio Function of Flow Fraction Curve Name 1", + " Cool-PLF-fPLR1, !- Speed Part Load Fraction Correlation Curve Name 1", + " 1000, !- Speed Nominal Time for Condensate Removal to Begin 1 {s}", + " 1.5, !- Speed Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity 1 " + "{dimensionless}", + " 3, !- Speed Maximum Cycling Rate 1 {cycles/hr}", + " 45, !- Speed Latent Capacity Time Constant 1 {s}", + " 0.2, !- Speed Rated Waste Heat Fraction of Power Input 1 {dimensionless}", + " ConstantBiquadratic 1, !- Speed Waste Heat Function of Temperature Curve Name 1", + " 0.9, !- Speed Evaporative Condenser Effectiveness 1 {dimensionless}", + " AutoSize, !- Speed Evaporative Condenser Air Flow Rate 1 {m3/s}", + " AutoSize, !- Speed Rated Evaporative Condenser Pump Power Consumption 1 {W}", + " 14067.4113682534, !- Speed Gross Rated Total Cooling Capacity 2 {W}", + " 0.727729571918817, !- Speed Gross Rated Sensible Heat Ratio 2", + " 4.41853147094111, !- Speed Gross Rated Cooling COP 2 {W/W}", + " 0.649588460819866, !- Speed Rated Air Flow Rate 2 {m3/s}", + " 773.3, !- Speed Rated Evaporator Fan Power Per Volume Flow Rate 2 {W/(m3/s)}", + " Cool-Cap-fT2, !- Speed Total Cooling Capacity Function of Temperature Curve Name 2", + " Cool-Cap-fFF2, !- Speed Total Cooling Capacity Function of Flow Fraction Curve Name 2", + " Cool-EIR-fT2, !- Speed Energy Input Ratio Function of Temperature Curve Name 2", + " Cool-EIR-fFF2, !- Speed Energy Input Ratio Function of Flow Fraction Curve Name 2", + " Cool-PLF-fPLR2, !- Speed Part Load Fraction Correlation Curve Name 2", + " 1000, !- Speed Nominal Time for Condensate Removal to Begin 2 {s}", + " 1.5, !- Speed Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity 2 " + "{dimensionless}", + " 3, !- Speed Maximum Cycling Rate 2 {cycles/hr}", + " 45, !- Speed Latent Capacity Time Constant 2 {s}", + " 0.2, !- Speed Rated Waste Heat Fraction of Power Input 2 {dimensionless}", + " ConstantBiquadratic 1, !- Speed Waste Heat Function of Temperature Curve Name 2", + " 0.9, !- Speed Evaporative Condenser Effectiveness 2 {dimensionless}", + " AutoSize, !- Speed Evaporative Condenser Air Flow Rate 2 {m3/s}", + " AutoSize; !- Speed Rated Evaporative Condenser Pump Power Consumption 2 {W}", + + " Curve:Biquadratic,", + " Cool-Cap-fT1, !- Name", + " 1.658788451, !- Coefficient1 Constant", + " -0.0834530076, !- Coefficient2 x", + " 0.00342409032, !- Coefficient3 x**2", + " 0.0024332436, !- Coefficient4 y", + " -4.5036e-005, !- Coefficient5 y**2", + " -0.00053367984, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-Cap-fFF1, !- Name", + " 0.655239515, !- Coefficient1 Constant", + " 0.511655216, !- Coefficient2 x", + " -0.166894731, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " Cool-EIR-fT1, !- Name", + " -0.582915701, !- Coefficient1 Constant", + " 0.1581006726, !- Coefficient2 x", + " -0.00439794684, !- Coefficient3 x**2", + " -0.020335122, !- Coefficient4 y", + " 0.00107983368, !- Coefficient5 y**2", + " -0.0006395922, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-EIR-fFF1, !- Name", + " 1.639108268, !- Coefficient1 Constant", + " -0.998953996, !- Coefficient2 x", + " 0.359845728, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-PLF-fPLR1, !- Name", + " 0.89, !- Coefficient1 Constant", + " 0.11, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 1, !- Maximum Value of x {BasedOnField A2}", + " 0.7, !- Minimum Curve Output {BasedOnField A3}", + " 1; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " ConstantBiquadratic 1, !- Name", + " 1, !- Coefficient1 Constant", + " 0, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Coefficient4 y", + " 0, !- Coefficient5 y**2", + " 0, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Biquadratic,", + " Cool-Cap-fT2, !- Name", + " 1.472738138, !- Coefficient1 Constant", + " -0.0672218352, !- Coefficient2 x", + " 0.0029199042, !- Coefficient3 x**2", + " 5.16005999999982e-005, !- Coefficient4 y", + " -2.97756e-005, !- Coefficient5 y**2", + " -0.00035908596, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-Cap-fFF2, !- Name", + " 0.618281092, !- Coefficient1 Constant", + " 0.569060264, !- Coefficient2 x", + " -0.187341356, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " Cool-EIR-fT2, !- Name", + " -0.488195597, !- Coefficient1 Constant", + " 0.0991621818, !- Coefficient2 x", + " -0.00236967444, !- Coefficient3 x**2", + " 0.019503441, !- Coefficient4 y", + " 0.0004297698, !- Coefficient5 y**2", + " -0.00109743984, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-EIR-fFF2, !- Name", + " 1.570774717, !- Coefficient1 Constant", + " -0.914152018, !- Coefficient2 x", + " 0.343377302, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-PLF-fPLR2, !- Name", + " 0.89, !- Coefficient1 Constant", + " 0.11, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 1, !- Maximum Value of x {BasedOnField A2}", + " 0.7, !- Minimum Curve Output {BasedOnField A3}", + " 1; !- Maximum Curve Output {BasedOnField A3}", + + " Coil:Heating:DX:MultiSpeed,", + " ashp htg coil, !- Name", + " , !- Availability Schedule Name", + " ashp unitary system Cooling Coil - Heating Coil Node, !- Air Inlet Node Name", + " ashp unitary system Heating Coil - Supplemental Coil Node, !- Air Outlet Node Name", + " -17.7777777777778, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", + " , !- Outdoor Dry-Bulb Temperature to Turn On Compressor {C}", + " 50, !- Crankcase Heater Capacity {W}", + " 10, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C}", + " DefrostEIR, !- Defrost Energy Input Ratio Function of Temperature Curve Name", + " 4.44444444444444, !- Maximum Outdoor Dry-Bulb Temperature for Defrost Operation {C}", + " ReverseCycle, !- Defrost Strategy", + " OnDemand, !- Defrost Control", + " 0.058333, !- Defrost Time Period Fraction", + " AutoSize, !- Resistive Defrost Heater Capacity {W}", + " No, !- Apply Part Load Fraction to Speeds Greater than 1", + " Electricity, !- Fuel Type", + " 4, !- Region number for Calculating HSPF", + " 2, !- Number of Speeds", + " 10128.5361851424, !- Speed Gross Rated Heating Capacity 1 {W}", + " 4.4518131589158, !- Speed Gross Rated Heating COP 1 {W/W}", + " 0.531903646383625, !- Speed Rated Air Flow Rate 1 {m3/s}", + " 773.3, !- Speed Rated Supply Air Fan Power Per Volume Flow Rate 1 {W/(m3/s)}", + " HP_Heat-Cap-fT1, !- Speed Heating Capacity Function of Temperature Curve Name 1", + " HP_Heat-CAP-fFF1, !- Speed Heating Capacity Function of Flow Fraction Curve Name 1", + " HP_Heat-EIR-fT1, !- Speed Energy Input Ratio Function of Temperature Curve Name 1", + " HP_Heat-EIR-fFF1, !- Speed Energy Input Ratio Function of Flow Fraction Curve Name 1", + " HP_Heat-PLF-fPLR1, !- Speed Part Load Fraction Correlation Curve Name 1", + " 0.2, !- Speed Rated Waste Heat Fraction of Power Input 1 {dimensionless}", + " ConstantBiquadratic, !- Speed Waste Heat Function of Temperature Curve Name 1", + " 14067.4113682534, !- Speed Gross Rated Heating Capacity 2 {W}", + " 3.9871749697327, !- Speed Gross Rated Heating COP 2 {W/W}", + " 0.664879557979531, !- Speed Rated Air Flow Rate 2 {m3/s}", + " 773.3, !- Speed Rated Supply Air Fan Power Per Volume Flow Rate 2 {W/(m3/s)}", + " HP_Heat-Cap-fT2, !- Speed Heating Capacity Function of Temperature Curve Name 2", + " HP_Heat-CAP-fFF2, !- Speed Heating Capacity Function of Flow Fraction Curve Name 2", + " HP_Heat-EIR-fT2, !- Speed Energy Input Ratio Function of Temperature Curve Name 2", + " HP_Heat-EIR-fFF2, !- Speed Energy Input Ratio Function of Flow Fraction Curve Name 2", + " HP_Heat-PLF-fPLR2, !- Speed Part Load Fraction Correlation Curve Name 2", + " 0.2, !- Speed Rated Waste Heat Fraction of Power Input 2 {dimensionless}", + " ConstantBiquadratic; !- Speed Waste Heat Function of Temperature Curve Name 2", + + " Curve:Biquadratic,", + " DefrostEIR, !- Name", + " 0.1528, !- Coefficient1 Constant", + " 0, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Coefficient4 y", + " 0, !- Coefficient5 y**2", + " 0, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Biquadratic,", + " HP_Heat-Cap-fT1, !- Name", + " 0.84077409, !- Coefficient1 Constant", + " -0.0014336586, !- Coefficient2 x", + " -0.000150336, !- Coefficient3 x**2", + " 0.029628603, !- Coefficient4 y", + " 0.000161676, !- Coefficient5 y**2", + " -2.349e-005, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " HP_Heat-CAP-fFF1, !- Name", + " 0.741466907, !- Coefficient1 Constant", + " 0.378645444, !- Coefficient2 x", + " -0.119754733, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " HP_Heat-EIR-fT1, !- Name", + " 0.539472334, !- Coefficient1 Constant", + " 0.0165103146, !- Coefficient2 x", + " 0.00083874528, !- Coefficient3 x**2", + " -0.00403234020000001, !- Coefficient4 y", + " 0.00142404156, !- Coefficient5 y**2", + " -0.00211806252, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " HP_Heat-EIR-fFF1, !- Name", + " 2.153618211, !- Coefficient1 Constant", + " -1.737190609, !- Coefficient2 x", + " 0.584269478, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Quadratic,", + " HP_Heat-PLF-fPLR1, !- Name", + " 0.89, !- Coefficient1 Constant", + " 0.11, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 1, !- Maximum Value of x {BasedOnField A2}", + " 0.7, !- Minimum Curve Output {BasedOnField A3}", + " 1; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " ConstantBiquadratic, !- Name", + " 1, !- Coefficient1 Constant", + " 0, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Coefficient4 y", + " 0, !- Coefficient5 y**2", + " 0, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Biquadratic,", + " HP_Heat-Cap-fT2, !- Name", + " 0.831506971, !- Coefficient1 Constant", + " 0.0018392166, !- Coefficient2 x", + " -0.000187596, !- Coefficient3 x**2", + " 0.0266002056, !- Coefficient4 y", + " 0.000191484, !- Coefficient5 y**2", + " -6.5772e-005, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " HP_Heat-CAP-fFF2, !- Name", + " 0.76634609, !- Coefficient1 Constant", + " 0.32840943, !- Coefficient2 x", + " -0.094701495, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " HP_Heat-EIR-fT2, !- Name", + " 0.787746797, !- Coefficient1 Constant", + " -0.000652314599999999, !- Coefficient2 x", + " 0.00078866784, !- Coefficient3 x**2", + " -0.0023209056, !- Coefficient4 y", + " 0.00074760408, !- Coefficient5 y**2", + " -0.00109173096, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " HP_Heat-EIR-fFF2, !- Name", + " 2.001041353, !- Coefficient1 Constant", + " -1.58869128, !- Coefficient2 x", + " 0.587593517, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Quadratic,", + " HP_Heat-PLF-fPLR2, !- Name", + " 0.89, !- Coefficient1 Constant", + " 0.11, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 1, !- Maximum Value of x {BasedOnField A2}", + " 0.7, !- Minimum Curve Output {BasedOnField A3}", + " 1; !- Maximum Curve Output {BasedOnField A3}", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + // get input + GetDXCoils(); + SetPredefinedTables(); + // check multi-speed DX cooling coil + EXPECT_EQ("ASHP CLG COIL", DXCoil(1).Name); + EXPECT_EQ("Coil:Cooling:DX:MultiSpeed", DXCoil(1).DXCoilType); + SizeDXCoil(1); + EXPECT_EQ(14067.4113682534, DXCoil(1).MSRatedTotCap(2)); + EXPECT_EQ(10128.5361851424, DXCoil(1).MSRatedTotCap(1)); + EXPECT_EQ(0.649588460819866, DXCoil(1).MSRatedAirVolFlowRate(2)); + EXPECT_EQ(0.558646076305085, DXCoil(1).MSRatedAirVolFlowRate(1)); + + // check multi-speed DX heating coil + EXPECT_EQ("ASHP HTG COIL", DXCoil(2).Name); + EXPECT_EQ("Coil:Heating:DX:MultiSpeed", DXCoil(2).DXCoilType); + SizeDXCoil(2); + EXPECT_EQ(14067.4113682534, DXCoil(2).MSRatedTotCap(2)); + EXPECT_EQ(10128.5361851424, DXCoil(2).MSRatedTotCap(1)); + EXPECT_EQ(0.664879557979531, DXCoil(2).MSRatedAirVolFlowRate(2)); + EXPECT_EQ(0.531903646383625, DXCoil(2).MSRatedAirVolFlowRate(1)); +} +TEST_F(EnergyPlusFixture, TestMultiSpeedCoolingCoilTabularReporting) +{ + // Test rated sensible cooling capacity reporting for Coil:Cooling:DX:MultiSpeed #7381 + + std::string const idf_objects = delimited_string({ + + " Coil:Cooling:DX:MultiSpeed,", + " ashp clg coil, !- Name", + " , !- Availability Schedule Name", + " ashp unitary system Fan - Cooling Coil Node, !- Air Inlet Node Name", + " ashp unitary system Cooling Coil - Heating Coil Node, !- Air Outlet Node Name", + " , !- Condenser Air Inlet Node Name", + " AirCooled, !- Condenser Type", + " , !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", + " , !- Supply Water Storage Tank Name", + " , !- Condensate Collection Water Storage Tank Name", + " No, !- Apply Part Load Fraction to Speeds Greater than 1", + " No, !- Apply Latent Degradation to Speeds Greater than 1", + " 0, !- Crankcase Heater Capacity {W}", + " 10, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C}", + " 0, !- Basin Heater Capacity {W/K}", + " 2, !- Basin Heater Setpoint Temperature {C}", + " , !- Basin Heater Operating Schedule Name", + " Electricity, !- Fuel Type", + " 2, !- Number of Speeds", + " 10128.5361851424, !- Speed Gross Rated Total Cooling Capacity 1 {W}", + " 0.714668466400895, !- Speed Gross Rated Sensible Heat Ratio 1", + " 4.77462180051141, !- Speed Gross Rated Cooling COP 1 {W/W}", + " 0.558646076305085, !- Speed Rated Air Flow Rate 1 {m3/s}", + " 773.3, !- Speed Rated Evaporator Fan Power Per Volume Flow Rate 1 {W/(m3/s)}", + " Cool-Cap-fT1, !- Speed Total Cooling Capacity Function of Temperature Curve Name 1", + " Cool-Cap-fFF1, !- Speed Total Cooling Capacity Function of Flow Fraction Curve Name 1", + " Cool-EIR-fT1, !- Speed Energy Input Ratio Function of Temperature Curve Name 1", + " Cool-EIR-fFF1, !- Speed Energy Input Ratio Function of Flow Fraction Curve Name 1", + " Cool-PLF-fPLR1, !- Speed Part Load Fraction Correlation Curve Name 1", + " 1000, !- Speed Nominal Time for Condensate Removal to Begin 1 {s}", + " 1.5, !- Speed Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity 1 " + "{dimensionless}", + " 3, !- Speed Maximum Cycling Rate 1 {cycles/hr}", + " 45, !- Speed Latent Capacity Time Constant 1 {s}", + " 0.2, !- Speed Rated Waste Heat Fraction of Power Input 1 {dimensionless}", + " ConstantBiquadratic 1, !- Speed Waste Heat Function of Temperature Curve Name 1", + " 0.9, !- Speed Evaporative Condenser Effectiveness 1 {dimensionless}", + " AutoSize, !- Speed Evaporative Condenser Air Flow Rate 1 {m3/s}", + " AutoSize, !- Speed Rated Evaporative Condenser Pump Power Consumption 1 {W}", + " 14067.4113682534, !- Speed Gross Rated Total Cooling Capacity 2 {W}", + " 0.727729571918817, !- Speed Gross Rated Sensible Heat Ratio 2", + " 4.41853147094111, !- Speed Gross Rated Cooling COP 2 {W/W}", + " 0.649588460819866, !- Speed Rated Air Flow Rate 2 {m3/s}", + " 773.3, !- Speed Rated Evaporator Fan Power Per Volume Flow Rate 2 {W/(m3/s)}", + " Cool-Cap-fT2, !- Speed Total Cooling Capacity Function of Temperature Curve Name 2", + " Cool-Cap-fFF2, !- Speed Total Cooling Capacity Function of Flow Fraction Curve Name 2", + " Cool-EIR-fT2, !- Speed Energy Input Ratio Function of Temperature Curve Name 2", + " Cool-EIR-fFF2, !- Speed Energy Input Ratio Function of Flow Fraction Curve Name 2", + " Cool-PLF-fPLR2, !- Speed Part Load Fraction Correlation Curve Name 2", + " 1000, !- Speed Nominal Time for Condensate Removal to Begin 2 {s}", + " 1.5, !- Speed Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity 2 " + "{dimensionless}", + " 3, !- Speed Maximum Cycling Rate 2 {cycles/hr}", + " 45, !- Speed Latent Capacity Time Constant 2 {s}", + " 0.2, !- Speed Rated Waste Heat Fraction of Power Input 2 {dimensionless}", + " ConstantBiquadratic 1, !- Speed Waste Heat Function of Temperature Curve Name 2", + " 0.9, !- Speed Evaporative Condenser Effectiveness 2 {dimensionless}", + " AutoSize, !- Speed Evaporative Condenser Air Flow Rate 2 {m3/s}", + " AutoSize; !- Speed Rated Evaporative Condenser Pump Power Consumption 2 {W}", + + " Curve:Biquadratic,", + " Cool-Cap-fT1, !- Name", + " 1.658788451, !- Coefficient1 Constant", + " -0.0834530076, !- Coefficient2 x", + " 0.00342409032, !- Coefficient3 x**2", + " 0.0024332436, !- Coefficient4 y", + " -4.5036e-005, !- Coefficient5 y**2", + " -0.00053367984, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-Cap-fFF1, !- Name", + " 0.655239515, !- Coefficient1 Constant", + " 0.511655216, !- Coefficient2 x", + " -0.166894731, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " Cool-EIR-fT1, !- Name", + " -0.582915701, !- Coefficient1 Constant", + " 0.1581006726, !- Coefficient2 x", + " -0.00439794684, !- Coefficient3 x**2", + " -0.020335122, !- Coefficient4 y", + " 0.00107983368, !- Coefficient5 y**2", + " -0.0006395922, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-EIR-fFF1, !- Name", + " 1.639108268, !- Coefficient1 Constant", + " -0.998953996, !- Coefficient2 x", + " 0.359845728, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-PLF-fPLR1, !- Name", + " 0.89, !- Coefficient1 Constant", + " 0.11, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 1, !- Maximum Value of x {BasedOnField A2}", + " 0.7, !- Minimum Curve Output {BasedOnField A3}", + " 1; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " ConstantBiquadratic 1, !- Name", + " 1, !- Coefficient1 Constant", + " 0, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Coefficient4 y", + " 0, !- Coefficient5 y**2", + " 0, !- Coefficient6 x*y", + " -100, !- Minimum Value of x {BasedOnField A2}", + " 100, !- Maximum Value of x {BasedOnField A2}", + " -100, !- Minimum Value of y {BasedOnField A3}", + " 100; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Biquadratic,", + " Cool-Cap-fT2, !- Name", + " 1.472738138, !- Coefficient1 Constant", + " -0.0672218352, !- Coefficient2 x", + " 0.0029199042, !- Coefficient3 x**2", + " 5.16005999999982e-005, !- Coefficient4 y", + " -2.97756e-005, !- Coefficient5 y**2", + " -0.00035908596, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-Cap-fFF2, !- Name", + " 0.618281092, !- Coefficient1 Constant", + " 0.569060264, !- Coefficient2 x", + " -0.187341356, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Biquadratic,", + " Cool-EIR-fT2, !- Name", + " -0.488195597, !- Coefficient1 Constant", + " 0.0991621818, !- Coefficient2 x", + " -0.00236967444, !- Coefficient3 x**2", + " 0.019503441, !- Coefficient4 y", + " 0.0004297698, !- Coefficient5 y**2", + " -0.00109743984, !- Coefficient6 x*y", + " 13.88, !- Minimum Value of x {BasedOnField A2}", + " 23.88, !- Maximum Value of x {BasedOnField A2}", + " 18.33, !- Minimum Value of y {BasedOnField A3}", + " 51.66; !- Maximum Value of y {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-EIR-fFF2, !- Name", + " 1.570774717, !- Coefficient1 Constant", + " -0.914152018, !- Coefficient2 x", + " 0.343377302, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 2, !- Maximum Value of x {BasedOnField A2}", + " 0, !- Minimum Curve Output {BasedOnField A3}", + " 2; !- Maximum Curve Output {BasedOnField A3}", + + " Curve:Quadratic,", + " Cool-PLF-fPLR2, !- Name", + " 0.89, !- Coefficient1 Constant", + " 0.11, !- Coefficient2 x", + " 0, !- Coefficient3 x**2", + " 0, !- Minimum Value of x {BasedOnField A2}", + " 1, !- Maximum Value of x {BasedOnField A2}", + " 0.7, !- Minimum Curve Output {BasedOnField A3}", + " 1; !- Maximum Curve Output {BasedOnField A3}", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + // get input + GetDXCoils(); + // Setup the predefined tables + EnergyPlus::OutputReportPredefined::SetPredefinedTables(); + // check multi-speed DX cooling coil + EXPECT_EQ("ASHP CLG COIL", DXCoil(1).Name); + EXPECT_EQ("Coil:Cooling:DX:MultiSpeed", DXCoil(1).DXCoilType); + // coils are in an airloop + DataSizing::CurSysNum = 1; + UnitarySysEqSizing.allocate(CurSysNum); + UnitarySysEqSizing(CurSysNum).CoolingCapacity = false; + UnitarySysEqSizing(CurSysNum).HeatingCapacity = false; + // coil sizing + SizeDXCoil(1); + EXPECT_EQ(14067.4113682534, DXCoil(1).MSRatedTotCap(2)); + EXPECT_EQ(10128.5361851424, DXCoil(1).MSRatedTotCap(1)); + EXPECT_EQ(0.649588460819866, DXCoil(1).MSRatedAirVolFlowRate(2)); + EXPECT_EQ(0.558646076305085, DXCoil(1).MSRatedAirVolFlowRate(1)); + // check multi-speed DX cooling coil rated capacity + EXPECT_EQ(14067.4113682534, DXCoil(1).RatedTotCap(1)); + EXPECT_EQ(0.727729571918817, DXCoil(1).RatedSHR(1)); + Real64 RatedSensCapacity = DXCoil(1).RatedTotCap(1) * DXCoil(1).RatedSHR(1); + EXPECT_EQ(10237.271253024948, RatedSensCapacity); + // check tabular outputs + PreDefTableEntry(pdch2CoilFinalTotalCap, "Coil Final Gross Total Capacity [W]", DXCoil(1).RatedTotCap(1), 3); + PreDefTableEntry(pdch2CoilFinalSensCap, "Coil Final Gross Sensible Capacity [W]", DXCoil(1).RatedTotCap(1) * DXCoil(1).RatedSHR(1), 3); + EXPECT_EQ("14067.411", RetrievePreDefTableEntry(pdch2CoilFinalTotalCap, "Coil Final Gross Total Capacity [W]")); + EXPECT_EQ("10237.271", RetrievePreDefTableEntry(pdch2CoilFinalSensCap, "Coil Final Gross Sensible Capacity [W]")); +} } // namespace EnergyPlus