diff --git a/src/EnergyPlus/DataSizing.hh b/src/EnergyPlus/DataSizing.hh index 55dde43ce69..310333b75b6 100644 --- a/src/EnergyPlus/DataSizing.hh +++ b/src/EnergyPlus/DataSizing.hh @@ -655,6 +655,16 @@ namespace DataSizing { Real64 applyTermUnitSizingHeatFlow(Real64 heatFlowWithOA, // Heating flow rate with MinOA limit applied Real64 heatFlowNoOA // Heating flow rate without MinOA limit applied ); + + Real64 applyTermUnitSizingCoolLoad(Real64 coolLoad) const + { + return coolLoad * this->SpecDesSensCoolingFrac; // Apply DesignSpecification:AirTerminal:Sizing to cooling load + } + + Real64 applyTermUnitSizingHeatLoad(Real64 heatLoad) const + { + return heatLoad * this->SpecDesSensHeatingFrac; // Apply DesignSpecification:AirTerminal:Sizing to heating load + } }; struct ZoneEqSizingData // data saved from zone eq component sizing and passed to subcomponents diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index d1cc99afe4d..1891f11545a 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -5246,21 +5246,18 @@ void UpdateSysSizing(EnergyPlusData &state, Constant::CallIndicator const CallIn // sum up the system mass flow rate for this time step Real64 adjCoolFlowSeq = termUnitSizing.applyTermUnitSizingCoolFlow(zoneSizing.CoolFlowSeq(TimeStepInDay), zoneSizing.CoolFlowSeqNoOA(TimeStepInDay)); - state.dataSize->SysSizing(state.dataSize->CurOverallSimDay, AirLoopNum).CoolFlowSeq(TimeStepInDay) += - adjCoolFlowSeq / (1.0 + termUnitSizing.InducRat); + Real64 adjustedFlow = adjCoolFlowSeq / (1.0 + termUnitSizing.InducRat); + state.dataSize->SysSizing(state.dataSize->CurOverallSimDay, AirLoopNum).CoolFlowSeq(TimeStepInDay) += adjustedFlow; // sum up the zone cooling load to be met by this system for this time step state.dataSize->SysSizing(state.dataSize->CurOverallSimDay, AirLoopNum).SumZoneCoolLoadSeq(TimeStepInDay) += - zoneSizing.CoolLoadSeq(TimeStepInDay); + termUnitSizing.applyTermUnitSizingCoolLoad(zoneSizing.CoolLoadSeq(TimeStepInDay)); // calculate the return air temperature for this time step - SysCoolRetTemp += - zoneSizing.CoolZoneRetTempSeq(TimeStepInDay) * zoneSizing.CoolFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysCoolRetHumRat += - zoneSizing.CoolZoneHumRatSeq(TimeStepInDay) * zoneSizing.CoolFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysCoolZoneAvgTemp += - zoneSizing.CoolZoneTempSeq(TimeStepInDay) * zoneSizing.CoolFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysDOASHeatAdd += zoneSizing.DOASHeatAddSeq(TimeStepInDay) * zoneSizing.CoolFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysDOASLatAdd += zoneSizing.DOASLatAddSeq(TimeStepInDay) * zoneSizing.CoolFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysLatCoolHumRat += zoneSizing.CoolDesHumRat * zoneSizing.CoolFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); + SysCoolRetTemp += zoneSizing.CoolZoneRetTempSeq(TimeStepInDay) * adjustedFlow; + SysCoolRetHumRat += zoneSizing.CoolZoneHumRatSeq(TimeStepInDay) * adjustedFlow; + SysCoolZoneAvgTemp += zoneSizing.CoolZoneTempSeq(TimeStepInDay) * adjustedFlow; + SysDOASHeatAdd += zoneSizing.DOASHeatAddSeq(TimeStepInDay) * adjustedFlow; + SysDOASLatAdd += zoneSizing.DOASLatAddSeq(TimeStepInDay) * adjustedFlow; + SysLatCoolHumRat += zoneSizing.CoolDesHumRat * adjustedFlow; } // end of loop over zones cooled by central system // Get peak system cooling load with coincident auto &sysSizing = state.dataSize->SysSizing(state.dataSize->CurOverallSimDay, AirLoopNum); @@ -5380,16 +5377,15 @@ void UpdateSysSizing(EnergyPlusData &state, Constant::CallIndicator const CallIn // sum up the heating mass flow rate for this time step Real64 adjHeatFlowSeq = termUnitSizing.applyTermUnitSizingHeatFlow(zoneSizing.HeatFlowSeq(TimeStepInDay), zoneSizing.HeatFlowSeqNoOA(TimeStepInDay)); - sysSizing.HeatFlowSeq(TimeStepInDay) += adjHeatFlowSeq / (1.0 + termUnitSizing.InducRat); + Real64 adjustedFlow = adjHeatFlowSeq / (1.0 + termUnitSizing.InducRat); + sysSizing.HeatFlowSeq(TimeStepInDay) += adjustedFlow; // sum up the zone heating load to be met by this system for this time step - sysSizing.SumZoneHeatLoadSeq(TimeStepInDay) += zoneSizing.HeatLoadSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); + sysSizing.SumZoneHeatLoadSeq(TimeStepInDay) += + termUnitSizing.applyTermUnitSizingHeatLoad(zoneSizing.HeatLoadSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat)); // calculate the return air temperature for this time step - SysHeatRetTemp += - zoneSizing.HeatZoneRetTempSeq(TimeStepInDay) * zoneSizing.HeatFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysHeatRetHumRat += - zoneSizing.HeatZoneHumRatSeq(TimeStepInDay) * zoneSizing.HeatFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysHeatZoneAvgTemp += - zoneSizing.HeatZoneTempSeq(TimeStepInDay) * zoneSizing.HeatFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); + SysHeatRetTemp += zoneSizing.HeatZoneRetTempSeq(TimeStepInDay) * adjustedFlow; + SysHeatRetHumRat += zoneSizing.HeatZoneHumRatSeq(TimeStepInDay) * adjustedFlow; + SysHeatZoneAvgTemp += zoneSizing.HeatZoneTempSeq(TimeStepInDay) * adjustedFlow; } // end heated zones loop // Get peak system heating load with coincident if (abs(sysSizing.SysDesHeatLoad) > abs(sysSizing.SumZoneHeatLoadSeq(TimeStepInDay))) { @@ -5466,16 +5462,15 @@ void UpdateSysSizing(EnergyPlusData &state, Constant::CallIndicator const CallIn // sum up the heating mass flow rate for this time step Real64 adjHeatFlowSeq = termUnitSizing.applyTermUnitSizingHeatFlow(zoneSizing.HeatFlowSeq(TimeStepInDay), zoneSizing.HeatFlowSeqNoOA(TimeStepInDay)); - sysSizing.HeatFlowSeq(TimeStepInDay) += adjHeatFlowSeq / (1.0 + termUnitSizing.InducRat); + Real64 adjustedFlow = adjHeatFlowSeq / (1.0 + termUnitSizing.InducRat); + sysSizing.HeatFlowSeq(TimeStepInDay) += adjustedFlow; // sum up the zone heating load to be met by this system for this time step - sysSizing.SumZoneHeatLoadSeq(TimeStepInDay) += zoneSizing.HeatLoadSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); + sysSizing.SumZoneHeatLoadSeq(TimeStepInDay) += + termUnitSizing.applyTermUnitSizingHeatLoad(zoneSizing.HeatLoadSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat)); // calculate the return air temperature for this time step - SysHeatRetTemp += - zoneSizing.HeatZoneRetTempSeq(TimeStepInDay) * zoneSizing.HeatFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysHeatRetHumRat += - zoneSizing.HeatZoneHumRatSeq(TimeStepInDay) * zoneSizing.HeatFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); - SysHeatZoneAvgTemp += - zoneSizing.HeatZoneTempSeq(TimeStepInDay) * zoneSizing.HeatFlowSeq(TimeStepInDay) / (1.0 + termUnitSizing.InducRat); + SysHeatRetTemp += zoneSizing.HeatZoneRetTempSeq(TimeStepInDay) * adjustedFlow; + SysHeatRetHumRat += zoneSizing.HeatZoneHumRatSeq(TimeStepInDay) * adjustedFlow; + SysHeatZoneAvgTemp += zoneSizing.HeatZoneTempSeq(TimeStepInDay) * adjustedFlow; } // end of cooled zones loop // Get peak system heating load with coincident if (fabs(sysSizing.SysDesHeatLoad) < fabs(sysSizing.SumZoneHeatLoadSeq(TimeStepInDay))) { diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index e2e8a92ce11..8c94c2f4f20 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -2265,6 +2265,14 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zoneSizing.DesCoolVolFlowNoOA = zoneSizing.DesCoolVolFlow; zoneSizing.DesCoolMassFlowNoOA = zoneSizing.DesCoolMassFlow; } + } else { + for (int DDNum = 1; DDNum <= state.dataEnvrn->TotDesDays + state.dataEnvrn->TotRunDesPersDays; ++DDNum) { + // initialize HeatFlowSeqNoOA before any adjustments to HeatFlowSeq + auto &zoneSizing = zsSizing(DDNum, zoneOrSpaceNum); + zoneSizing.CoolFlowSeqNoOA = zoneSizing.CoolFlowSeq; + zoneSizing.DesCoolVolFlowNoOA = zoneSizing.DesCoolVolFlow; + zoneSizing.DesCoolMassFlowNoOA = zoneSizing.DesCoolMassFlow; + } } // Save a set of design cooling air flow rates greater than or equal to the specified minimums without MinOA { @@ -2297,7 +2305,6 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zoneSizing.DesCoolMassFlowNoOA = MaxOfMinCoolMassFlowNoOA; } for (int TimeStepIndex = 1; TimeStepIndex <= state.dataZoneEquipmentManager->NumOfTimeStepInDay; ++TimeStepIndex) { - zoneSizing.CoolFlowSeqNoOA(TimeStepIndex) = zoneSizing.CoolFlowSeq(TimeStepIndex); if (MaxOfMinCoolMassFlowNoOA > zoneSizing.CoolFlowSeq(TimeStepIndex)) { zoneSizing.CoolFlowSeqNoOA(TimeStepIndex) = MaxOfMinCoolMassFlowNoOA; } @@ -2446,6 +2453,14 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zoneSizingDD.DesHeatVolFlowNoOA = zoneSizingDD.DesHeatVolFlow; zoneSizingDD.DesHeatMassFlowNoOA = zoneSizingDD.DesHeatMassFlow; } + } else { + for (int DDNum = 1; DDNum <= state.dataEnvrn->TotDesDays + state.dataEnvrn->TotRunDesPersDays; ++DDNum) { + // initialize HeatFlowSeqNoOA before any adjustments to HeatFlowSeq + auto &zoneSizing = zsSizing(DDNum, zoneOrSpaceNum); + zoneSizing.HeatFlowSeqNoOA = zoneSizing.HeatFlowSeq; + zoneSizing.DesHeatVolFlowNoOA = zoneSizing.DesHeatVolFlow; + zoneSizing.DesHeatMassFlowNoOA = zoneSizing.DesHeatMassFlow; + } } // Save a set of design heating air flow rates before the MinOA adjustment