From 6ed366eec769b98b05614248a9fbb02e8018a4c8 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 19 Jul 2023 14:31:48 -0500 Subject: [PATCH] Prune TermUnitFinalZoneSizing --- src/EnergyPlus/Autosizing/Base.hh | 2 +- src/EnergyPlus/DataSizing.cc | 120 +++++++++++++++-- src/EnergyPlus/DataSizing.hh | 127 ++++++++++++++---- src/EnergyPlus/SizingManager.cc | 6 +- src/EnergyPlus/ZoneEquipmentManager.cc | 3 + .../unit/PoweredInductionUnits.unit.cc | 3 +- .../unit/SizeWaterHeatingCoil.unit.cc | 12 +- tst/EnergyPlus/unit/WaterCoils.unit.cc | 6 +- 8 files changed, 229 insertions(+), 50 deletions(-) diff --git a/src/EnergyPlus/Autosizing/Base.hh b/src/EnergyPlus/Autosizing/Base.hh index ea2c61e5f71..8c51b9e1b61 100644 --- a/src/EnergyPlus/Autosizing/Base.hh +++ b/src/EnergyPlus/Autosizing/Base.hh @@ -255,7 +255,7 @@ struct BaseSizer EPVector zoneEqSizing; EPVector outsideAirSys; EPVector termUnitSizing; - EPVector termUnitFinalZoneSizing; + EPVector termUnitFinalZoneSizing; EPVector finalZoneSizing; EPVector finalSysSizing; EPVector plantSizData; diff --git a/src/EnergyPlus/DataSizing.cc b/src/EnergyPlus/DataSizing.cc index 6e821d4b801..94a9ee8b918 100644 --- a/src/EnergyPlus/DataSizing.cc +++ b/src/EnergyPlus/DataSizing.cc @@ -105,26 +105,26 @@ Real64 TermUnitSizingData::applyTermUnitSizingHeatFlow(Real64 const heatFlowWith return adjustedFlow; } -void ZoneSizingData::scaleZoneCooling(Real64 const ratio // Scaling ratio -) +void TermUnitZoneSizingData::scaleZoneCooling(Real64 const ratio) { // Apply scaling ratio to TermUnitFinalZoneSizing cooling flow and load - this->DesCoolVolFlow = this->DesCoolVolFlow * ratio; - this->DesCoolMassFlow = this->DesCoolMassFlow * ratio; - this->DesCoolLoad = this->DesCoolLoad * ratio; - this->CoolFlowSeq = this->CoolFlowSeq * ratio; - this->CoolLoadSeq = this->CoolLoadSeq * ratio; + this->DesCoolVolFlow *= ratio; + this->DesCoolMassFlow *= ratio; + this->DesCoolLoad *= ratio; + for (auto &cfs : this->CoolFlowSeq) { + cfs *= ratio; + } } -void ZoneSizingData::scaleZoneHeating(Real64 const ratio // Scaling ratio -) +void TermUnitZoneSizingData::scaleZoneHeating(Real64 const ratio) { // Apply scaling ratio to TermUnitFinalZoneSizing heating flow and load - this->DesHeatVolFlow = this->DesHeatVolFlow * ratio; - this->DesHeatMassFlow = this->DesHeatMassFlow * ratio; - this->DesHeatLoad = this->DesHeatLoad * ratio; - this->HeatFlowSeq = this->HeatFlowSeq * ratio; - this->HeatLoadSeq = this->HeatLoadSeq * ratio; + this->DesHeatVolFlow *= ratio; + this->DesHeatMassFlow *= ratio; + this->DesHeatLoad *= ratio; + for (auto &cfs : this->HeatFlowSeq) { + cfs *= ratio; + } } void ZoneSizingData::zeroMemberData() @@ -314,6 +314,98 @@ void ZoneSizingData::allocateMemberArrays(int const numOfTimeStepInDay) this->LatentHeatFlowSeq.dimension(numOfTimeStepInDay, 0.0); } +void TermUnitZoneSizingData::allocateMemberArrays(int const numOfTimeStepInDay) +{ + this->HeatFlowSeq.dimension(numOfTimeStepInDay, 0.0); + this->CoolFlowSeq.dimension(numOfTimeStepInDay, 0.0); + this->HeatFlowSeqNoOA.dimension(numOfTimeStepInDay, 0.0); + this->CoolFlowSeqNoOA.dimension(numOfTimeStepInDay, 0.0); + this->HeatZoneTempSeq.dimension(numOfTimeStepInDay, 0.0); + this->HeatZoneRetTempSeq.dimension(numOfTimeStepInDay, 0.0); + this->CoolZoneTempSeq.dimension(numOfTimeStepInDay, 0.0); + this->CoolZoneRetTempSeq.dimension(numOfTimeStepInDay, 0.0); +} + +void TermUnitZoneSizingData::copyFromZoneSizing(ZoneSizingData const &sourceData) +{ + this->ZoneName = sourceData.ZoneName; + this->ADUName = sourceData.ADUName; + this->CoolDesTemp = sourceData.CoolDesTemp; + this->HeatDesTemp = sourceData.HeatDesTemp; + this->CoolDesHumRat = sourceData.CoolDesHumRat; + this->HeatDesHumRat = sourceData.HeatDesHumRat; + this->DesOAFlowPPer = sourceData.DesOAFlowPPer; + this->DesOAFlowPerArea = sourceData.DesOAFlowPerArea; + this->DesCoolMinAirFlow = sourceData.DesCoolMinAirFlow; + this->DesCoolMinAirFlowFrac = sourceData.DesCoolMinAirFlowFrac; + this->DesHeatMaxAirFlow = sourceData.DesHeatMaxAirFlow; + this->DesHeatMaxAirFlowFrac = sourceData.DesHeatMaxAirFlowFrac; + this->ZoneNum = sourceData.ZoneNum; + this->DesHeatMassFlow = sourceData.DesHeatMassFlow; + this->DesHeatMassFlowNoOA = sourceData.DesHeatMassFlowNoOA; + this->DesHeatOAFlowFrac = sourceData.DesHeatOAFlowFrac; + this->DesCoolMassFlow = sourceData.DesCoolMassFlow; + this->DesCoolMassFlowNoOA = sourceData.DesCoolMassFlowNoOA; + this->DesCoolOAFlowFrac = sourceData.DesCoolOAFlowFrac; + this->DesHeatLoad = sourceData.DesHeatLoad; + this->NonAirSysDesHeatLoad = sourceData.NonAirSysDesHeatLoad; + this->DesCoolLoad = sourceData.DesCoolLoad; + this->NonAirSysDesCoolLoad = sourceData.NonAirSysDesCoolLoad; + this->DesHeatVolFlow = sourceData.DesHeatVolFlow; + this->DesHeatVolFlowNoOA = sourceData.DesHeatVolFlowNoOA; + this->NonAirSysDesHeatVolFlow = sourceData.NonAirSysDesHeatVolFlow; + this->DesCoolVolFlow = sourceData.DesCoolVolFlow; + this->DesCoolVolFlowNoOA = sourceData.DesCoolVolFlowNoOA; + this->NonAirSysDesCoolVolFlow = sourceData.NonAirSysDesCoolVolFlow; + this->DesHeatVolFlowMax = sourceData.DesHeatVolFlowMax; + this->DesCoolVolFlowMin = sourceData.DesCoolVolFlowMin; + this->DesHeatCoilInTempTU = sourceData.DesHeatCoilInTempTU; + this->DesCoolCoilInTempTU = sourceData.DesCoolCoilInTempTU; + this->DesHeatCoilInHumRatTU = sourceData.DesHeatCoilInHumRatTU; + this->DesCoolCoilInHumRatTU = sourceData.DesCoolCoilInHumRatTU; + this->ZoneTempAtHeatPeak = sourceData.ZoneTempAtHeatPeak; + this->ZoneRetTempAtHeatPeak = sourceData.ZoneRetTempAtHeatPeak; + this->ZoneTempAtCoolPeak = sourceData.ZoneTempAtCoolPeak; + this->ZoneRetTempAtCoolPeak = sourceData.ZoneRetTempAtCoolPeak; + this->ZoneHumRatAtHeatPeak = sourceData.ZoneHumRatAtHeatPeak; + this->ZoneHumRatAtCoolPeak = sourceData.ZoneHumRatAtCoolPeak; + this->TimeStepNumAtHeatMax = sourceData.TimeStepNumAtHeatMax; + this->TimeStepNumAtCoolMax = sourceData.TimeStepNumAtCoolMax; + this->HeatDDNum = sourceData.HeatDDNum; + this->CoolDDNum = sourceData.CoolDDNum; + this->MinOA = sourceData.MinOA; + this->DesCoolMinAirFlow2 = sourceData.DesCoolMinAirFlow2; + this->DesHeatMaxAirFlow2 = sourceData.DesHeatMaxAirFlow2; + for (int t = 1; t <= this->HeatFlowSeq.size(); ++t) { + this->HeatFlowSeq(t) = sourceData.HeatFlowSeq(t); + this->HeatFlowSeqNoOA(t) = sourceData.HeatFlowSeqNoOA(t); + this->CoolFlowSeq(t) = sourceData.CoolFlowSeq(t); + this->CoolFlowSeqNoOA(t) = sourceData.CoolFlowSeqNoOA(t); + this->HeatZoneTempSeq(t) = sourceData.HeatZoneTempSeq(t); + this->HeatZoneRetTempSeq(t) = sourceData.HeatZoneRetTempSeq(t); + this->CoolZoneTempSeq(t) = sourceData.CoolZoneTempSeq(t); + this->CoolZoneRetTempSeq(t) = sourceData.CoolZoneRetTempSeq(t); + } + this->ZoneADEffCooling = sourceData.ZoneADEffCooling; + this->ZoneADEffHeating = sourceData.ZoneADEffHeating; + this->ZoneSecondaryRecirculation = sourceData.ZoneSecondaryRecirculation; + this->ZoneVentilationEff = sourceData.ZoneVentilationEff; + this->ZonePrimaryAirFraction = sourceData.ZonePrimaryAirFraction; + this->ZonePrimaryAirFractionHtg = sourceData.ZonePrimaryAirFractionHtg; + this->ZoneOAFracCooling = sourceData.ZoneOAFracCooling; + this->ZoneOAFracHeating = sourceData.ZoneOAFracHeating; + this->TotalOAFromPeople = sourceData.TotalOAFromPeople; + this->TotalOAFromArea = sourceData.TotalOAFromArea; + this->TotPeopleInZone = sourceData.TotPeopleInZone; + this->TotalZoneFloorArea = sourceData.TotalZoneFloorArea; + this->SupplyAirAdjustFactor = sourceData.SupplyAirAdjustFactor; + this->ZpzClgByZone = sourceData.ZpzClgByZone; + this->ZpzHtgByZone = sourceData.ZpzHtgByZone; + this->VozClgByZone = sourceData.VozClgByZone; + this->VozHtgByZone = sourceData.VozHtgByZone; + this->VpzMinByZoneSPSized = sourceData.VpzMinByZoneSPSized; +} + void resetHVACSizingGlobals(EnergyPlusData &state, int const curZoneEqNum, int const curSysNum, diff --git a/src/EnergyPlus/DataSizing.hh b/src/EnergyPlus/DataSizing.hh index 3ce8f2eb47f..3731ad923d8 100644 --- a/src/EnergyPlus/DataSizing.hh +++ b/src/EnergyPlus/DataSizing.hh @@ -595,14 +595,95 @@ namespace DataSizing { std::string CoolSizingType; // string reported to eio, Cooling or Latent Cooling std::string HeatSizingType; // string reported to eio, Heating or Latent Heating - void scaleZoneCooling(Real64 ratio // Scaling ratio - ); - void scaleZoneHeating(Real64 ratio // Scaling ratio - ); void zeroMemberData(); void allocateMemberArrays(int numOfTimeStepInDay); }; + // based on ZoneSizingData but only member variables that are actually used by terminal unit sizing + struct TermUnitZoneSizingData + { + std::string ZoneName; // name of a zone + std::string ADUName; // Terminal Unit Name (air distribution unit or direct air unit) - only assigned for TermUnitFinalZoneSizing + Real64 CoolDesTemp = 0.0; // zone design cooling supply air temperature [C] + Real64 HeatDesTemp = 0.0; // zone design heating supply air temperature [C] + Real64 CoolDesHumRat = 0.0; // zone design cooling supply air humidity ratio [kgWater/kgDryAir] + Real64 HeatDesHumRat = 0.0; // zone design heating supply air humidity ratio [kgWater/kgDryAir] + Real64 DesOAFlowPPer = 0.0; // design outside air flow per person in zone [m3/s] (average for zone across spaces) + Real64 DesOAFlowPerArea = 0.0; // design outside air flow per zone area [m3/s / m2] (average for zone across spaces) + Real64 DesCoolMinAirFlow = 0.0; // design cooling minimum air flow rate [m3/s] + Real64 DesCoolMinAirFlowFrac = 0.0; // design cooling minimum air flow rate fraction (of the cooling design air flow rate) + Real64 DesHeatMaxAirFlow = 0.0; // design heating maximum air flow rate [m3/s] + Real64 DesHeatMaxAirFlowFrac = 0.0; // design heating maximum air flow rate fraction (of the cooling design air flow rate) + int ZoneNum = 0; // index into the Zone data array (in DataHeatBalance) + Real64 DesHeatMassFlow = 0.0; // zone design heating air mass flow rate [kg/s] + Real64 DesHeatMassFlowNoOA = 0.0; // zone design heating air mass flow rate without applying MinOA as a limit [kg/s] + Real64 DesHeatOAFlowFrac = 0.0; // zone design heating OA air volume fraction [-] + Real64 DesCoolMassFlow = 0.0; // zone design cooling air mass flow rate [kg/s] + Real64 DesCoolMassFlowNoOA = 0.0; // zone design cooling air mass flow rate without applying MinOA as a limit [kg/s] + Real64 DesCoolOAFlowFrac = 0.0; // zone design cooling OA air volume fraction [-] + Real64 DesHeatLoad = 0.0; // zone design heating load including sizing factor and scaled to match airflow sizing [W] + Real64 NonAirSysDesHeatLoad = 0.0; // base zone design heating load including sizing factor [W] + Real64 DesCoolLoad = 0.0; // zone design cooling load including sizing factor and scaled to match airflow sizing [W] + Real64 NonAirSysDesCoolLoad = 0.0; // base zone design cooling load including sizing factor [W] + Real64 DesHeatVolFlow = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing [m3/s] + Real64 DesHeatVolFlowNoOA = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing + // without MinOA limit [m3/s] + Real64 NonAirSysDesHeatVolFlow = 0.0; // base zone design heating air volume flow rate including sizing factor [m3/s] + Real64 DesCoolVolFlow = 0.0; // zone design cooling air volume flow rate [m3/s] + Real64 DesCoolVolFlowNoOA = 0.0; // zone design cooling air volume flow rate without applying MinOA as a limit [m3/s] + Real64 NonAirSysDesCoolVolFlow = 0.0; // base zone design cooling air volume flow rate including sizing factor [m3/s] + Real64 DesHeatVolFlowMax = 0.0; // zone design heating maximum air volume flow rate [m3/s] + Real64 DesCoolVolFlowMin = 0.0; // zone design cooling minimum air volume flow rate [m3/s] + Real64 DesHeatCoilInTempTU = 0.0; // zone heating coil design air inlet temperature (supply air)([C] + Real64 DesCoolCoilInTempTU = 0.0; // zone cooling coil design air inlet temperature (supply air)[C] + Real64 DesHeatCoilInHumRatTU = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg] + Real64 DesCoolCoilInHumRatTU = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg] + Real64 ZoneTempAtHeatPeak = 0.0; // zone temp at max heating [C] + Real64 ZoneRetTempAtHeatPeak = 0.0; // zone return temp at max heating [C] + Real64 ZoneTempAtCoolPeak = 0.0; // zone temp at max cooling [C] + Real64 ZoneRetTempAtCoolPeak = 0.0; // zone return temp at max cooling [C] + Real64 ZoneHumRatAtHeatPeak = 0.0; // zone humidity ratio at max heating [kg/kg] + Real64 ZoneHumRatAtCoolPeak = 0.0; // zone humidity ratio at max cooling [kg/kg] + int TimeStepNumAtHeatMax = 0; // time step number (in day) at Heating peak + int TimeStepNumAtCoolMax = 0; // time step number (in day) at cooling peak + int HeatDDNum = 0; // design day index of design day causing heating peak + int CoolDDNum = 0; // design day index of design day causing cooling peak + Real64 MinOA = 0.0; // design minimum outside air in m3/s + Real64 DesCoolMinAirFlow2 = 0.0; // design cooling minimum air flow rate [m3/s] derived from DesCoolMinAirFlowPerArea + Real64 DesHeatMaxAirFlow2 = 0.0; // design heating maximum air flow rate [m3/s] derived from DesHeatMaxAirFlowPerArea + EPVector HeatFlowSeq; // daily sequence of zone heating air mass flow rate (zone time step) [kg/s] + EPVector HeatFlowSeqNoOA; // daily sequence of zone heating air mass flow rate (zone time step) without MinOA limit [kg/s] + EPVector CoolFlowSeq; // daily sequence of zone cooling air mass flow rate (zone time step) [kg/s] + EPVector CoolFlowSeqNoOA; // daily sequence of zone cooling air mass flow rate (zone time step) without MinOA limit [kg/s] + EPVector HeatZoneTempSeq; // daily sequence of zone temperatures (heating, zone time step) + EPVector HeatZoneRetTempSeq; // daily sequence of zone return temperatures (heating, zone time step) + EPVector CoolZoneTempSeq; // daily sequence of zone temperatures (cooling, zone time step) + EPVector CoolZoneRetTempSeq; // daily sequence of zone return temperatures (cooling, zone time step) + Real64 ZoneADEffCooling = 1.0; // the zone air distribution effectiveness in cooling mode + Real64 ZoneADEffHeating = 1.0; // the zone air distribution effectiveness in heating mode + Real64 ZoneSecondaryRecirculation = 0.0; // the zone secondary air recirculation fraction + Real64 ZoneVentilationEff = 0.0; // zone ventilation efficiency + Real64 ZonePrimaryAirFraction = 0.0; // the zone primary air fraction for cooling based calculations + Real64 ZonePrimaryAirFractionHtg = 0.0; // the zone primary air fraction for heating based calculations + Real64 ZoneOAFracCooling = 0.0; // OA fraction in cooling mode + Real64 ZoneOAFracHeating = 0.0; // OA fraction in heating mode + Real64 TotalOAFromPeople = 0.0; // Zone OA required due to people + Real64 TotalOAFromArea = 0.0; // Zone OA required based on floor area + Real64 TotPeopleInZone = 0.0; // total number of people in the zone + Real64 TotalZoneFloorArea = 0.0; // total zone floor area + Real64 SupplyAirAdjustFactor = 1.0; // supply air adjustment factor for next time step if OA is capped + Real64 ZpzClgByZone = 0.0; // OA Std 62.1 required fraction in cooling mode ? should this be ZdzClgByZone + Real64 ZpzHtgByZone = 0.0; // OA Std 62.1 required fraction in heating mode ? should this be ZdzHtgByZone + Real64 VozClgByZone = 0.0; // value of required cooling vent to zone, used in 62.1 tabular report, already includes people diversity term + Real64 VozHtgByZone = 0.0; // value of required heating vent to zone, used in 62.1 tabular report, already includes people diversity term + bool VpzMinByZoneSPSized = false; // is Vpz_min sized using the 62.1 Standard Simplified Procedure + + void scaleZoneCooling(Real64 ratio); + void scaleZoneHeating(Real64 ratio); + void copyFromZoneSizing(ZoneSizingData const &sourceData); + void allocateMemberArrays(int numOfTimeStepInDay); + }; + struct TermUnitSizingData { // Members @@ -1254,25 +1335,25 @@ struct SizingData : BaseGlobalStruct int DataCoolCoilIndex = -1; EPVector OARequirements; EPVector ZoneAirDistribution; - EPVector ZoneSizingInput; // Input data for zone sizing - Array2D ZoneSizing; // Data for zone sizing (all data, all design) - EPVector FinalZoneSizing; // Final data for zone sizing including effects - Array2D CalcZoneSizing; // Data for zone sizing (all data) - EPVector CalcFinalZoneSizing; // Final data for zone sizing (calculated only) - EPVector TermUnitFinalZoneSizing; // Final data for sizing terminal units (indexed per terminal unit) - EPVector SysSizInput; // Input data array for system sizing object - Array2D SysSizing; // Data array for system sizing (all data) - EPVector FinalSysSizing; // Data array for system sizing (max heat/cool) - EPVector CalcSysSizing; // Data array for system sizing (max heat/cool) - EPVector SysSizPeakDDNum; // data array for peak des day indices - EPVector TermUnitSizing; // Data added in sizing routines (indexed per terminal unit) - EPVector ZoneEqSizing; // Data added in zone eq component sizing routines - EPVector UnitarySysEqSizing; // Data added in unitary system sizing routines - EPVector OASysEqSizing; // Data added in unitary system sizing routines - EPVector PlantSizData; // Input data array for plant sizing - EPVector DesDayWeath; // design day weather saved at major time step - EPVector CompDesWaterFlow; // array to store components' design water flow - EPVector ZoneHVACSizing; // Input data for zone HVAC sizing + EPVector ZoneSizingInput; // Input data for zone sizing + Array2D ZoneSizing; // Data for zone sizing (all data, all design) + EPVector FinalZoneSizing; // Final data for zone sizing including effects + Array2D CalcZoneSizing; // Data for zone sizing (all data) + EPVector CalcFinalZoneSizing; // Final data for zone sizing (calculated only) + EPVector TermUnitFinalZoneSizing; // Final data for sizing terminal units (indexed per terminal unit) + EPVector SysSizInput; // Input data array for system sizing object + Array2D SysSizing; // Data array for system sizing (all data) + EPVector FinalSysSizing; // Data array for system sizing (max heat/cool) + EPVector CalcSysSizing; // Data array for system sizing (max heat/cool) + EPVector SysSizPeakDDNum; // data array for peak des day indices + EPVector TermUnitSizing; // Data added in sizing routines (indexed per terminal unit) + EPVector ZoneEqSizing; // Data added in zone eq component sizing routines + EPVector UnitarySysEqSizing; // Data added in unitary system sizing routines + EPVector OASysEqSizing; // Data added in unitary system sizing routines + EPVector PlantSizData; // Input data array for plant sizing + EPVector DesDayWeath; // design day weather saved at major time step + EPVector CompDesWaterFlow; // array to store components' design water flow + EPVector ZoneHVACSizing; // Input data for zone HVAC sizing EPVector AirTerminalSizingSpec; // Input data for zone HVAC sizing used only for Facility Load Component Summary EPVector CalcFacilitySizing; // Data for zone sizing diff --git a/src/EnergyPlus/SizingManager.cc b/src/EnergyPlus/SizingManager.cc index 98229dcc453..e7063828724 100644 --- a/src/EnergyPlus/SizingManager.cc +++ b/src/EnergyPlus/SizingManager.cc @@ -5346,7 +5346,7 @@ void UpdateTermUnitFinalZoneSizing(EnergyPlusData &state) auto const &thisFZSizing = state.dataSize->FinalZoneSizing(ctrlZoneNum); // Copy everything from FinalZoneSizing to TermUnitFinalZoneSizing - thisTUFZSizing = thisFZSizing; + thisTUFZSizing.copyFromZoneSizing(thisFZSizing); thisTUFZSizing.ADUName = thisTUSizing.ADUName; if (state.dataSize->NumAirTerminalSizingSpec > 0) { @@ -5367,8 +5367,6 @@ void UpdateTermUnitFinalZoneSizing(EnergyPlusData &state) } Real64 coolLoadRatio = thisTUSizing.SpecDesSensCoolingFrac; thisTUFZSizing.DesCoolLoad = thisFZSizing.DesCoolLoad * coolLoadRatio; - thisTUFZSizing.CoolMassFlow = thisFZSizing.CoolMassFlow * coolFlowRatio; // this field in TUFSizing doesn't appear to be used - thisTUFZSizing.CoolLoadSeq = thisFZSizing.CoolLoadSeq * coolLoadRatio; // this field in TUFSizing doesn't appear to be used thisTUFZSizing.NonAirSysDesCoolLoad = thisFZSizing.NonAirSysDesCoolLoad * coolLoadRatio; thisTUFZSizing.NonAirSysDesCoolVolFlow = thisFZSizing.NonAirSysDesCoolVolFlow * coolFlowRatio; // Adjust DesCoolVolFlow, DesCoolMassFlow, and CoolFlowSeq with cooling frac, SAT ratio, and minOA frac adjustments @@ -5402,8 +5400,6 @@ void UpdateTermUnitFinalZoneSizing(EnergyPlusData &state) } Real64 heatLoadRatio = thisTUSizing.SpecDesSensHeatingFrac; thisTUFZSizing.DesHeatLoad = thisFZSizing.DesHeatLoad * heatLoadRatio; - thisTUFZSizing.HeatMassFlow = thisFZSizing.HeatMassFlow * heatFlowRatio; // this field in TUFSizing doesn't appear to be used - thisTUFZSizing.HeatLoadSeq = thisFZSizing.HeatLoadSeq * heatLoadRatio; // this field in TUFSizing doesn't appear to be used thisTUFZSizing.NonAirSysDesHeatLoad = thisFZSizing.NonAirSysDesHeatLoad * heatLoadRatio; thisTUFZSizing.NonAirSysDesHeatVolFlow = thisFZSizing.NonAirSysDesHeatVolFlow * heatFlowRatio; // Adjust DesHeatVolFlow, DesHeatMassFlow, and HeatFlowSeq with Heating frac, SAT ratio, and minOA frac adjustments diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 5418957db74..2cbe183a898 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -853,6 +853,9 @@ void SetUpZoneSizingArrays(EnergyPlusData &state) state.dataSize->CalcZoneSizing.allocate(state.dataEnvrn->TotDesDays + state.dataEnvrn->TotRunDesPersDays, state.dataGlobal->NumOfZones); state.dataSize->CalcFinalZoneSizing.allocate(state.dataGlobal->NumOfZones); state.dataSize->TermUnitFinalZoneSizing.allocate(state.dataSize->NumAirTerminalUnits); + for (auto &tufzs : state.dataSize->TermUnitFinalZoneSizing) { + tufzs.allocateMemberArrays(state.dataZoneEquipmentManager->NumOfTimeStepInDay); + } state.dataSize->DesDayWeath.allocate(state.dataEnvrn->TotDesDays + state.dataEnvrn->TotRunDesPersDays); int NumOfTimeStepInDay = state.dataGlobal->NumOfTimeStepInHour * 24; state.dataZoneEquipmentManager->AvgData.allocate(NumOfTimeStepInDay); diff --git a/tst/EnergyPlus/unit/PoweredInductionUnits.unit.cc b/tst/EnergyPlus/unit/PoweredInductionUnits.unit.cc index dabaa531a75..628ff315988 100644 --- a/tst/EnergyPlus/unit/PoweredInductionUnits.unit.cc +++ b/tst/EnergyPlus/unit/PoweredInductionUnits.unit.cc @@ -587,7 +587,8 @@ TEST_F(EnergyPlusFixture, PIUArrayOutOfBounds) state->dataSize->TermUnitSizing(state->dataSize->CurTermUnitSizingNum).AirVolFlow = 1.0; state->dataSize->TermUnitSizing(state->dataSize->CurTermUnitSizingNum).MinFlowFrac = 0.5; state->dataSize->TermUnitSingDuct = true; - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); // Call the sizing routine now PoweredInductionUnits::SizePIU(*state, PIUNum); diff --git a/tst/EnergyPlus/unit/SizeWaterHeatingCoil.unit.cc b/tst/EnergyPlus/unit/SizeWaterHeatingCoil.unit.cc index be67b1b4d53..b24d5048c43 100644 --- a/tst/EnergyPlus/unit/SizeWaterHeatingCoil.unit.cc +++ b/tst/EnergyPlus/unit/SizeWaterHeatingCoil.unit.cc @@ -323,7 +323,8 @@ TEST_F(EnergyPlusFixture, TestSizingRoutineForHotWaterCoils1) max(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesCoolVolFlow, state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatVolFlow) * state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatMaxAirFlowFrac); - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); state->dataSingleDuct->sd_airterminal(1).ZoneFloorArea = state->dataHeatBal->Zone(1).FloorArea; OutputReportPredefined::SetPredefinedTables(*state); state->dataSingleDuct->sd_airterminal(1).SizeSys(*state); @@ -574,7 +575,8 @@ TEST_F(EnergyPlusFixture, TestSizingRoutineForHotWaterCoils2) max(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesCoolVolFlow, state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatVolFlow) * state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatMaxAirFlowFrac); - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); state->dataSingleDuct->sd_airterminal(1).ZoneFloorArea = state->dataHeatBal->Zone(1).FloorArea; state->dataSingleDuct->sd_airterminal(1).ZoneFloorArea = state->dataHeatBal->Zone(1).FloorArea; state->dataSingleDuct->sd_airterminal(1).SizeSys(*state); @@ -825,7 +827,8 @@ TEST_F(EnergyPlusFixture, TestSizingRoutineForHotWaterCoils3) max(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesCoolVolFlow, state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatVolFlow) * state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatMaxAirFlowFrac); - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); state->dataSingleDuct->sd_airterminal(1).ZoneFloorArea = state->dataHeatBal->Zone(1).FloorArea; state->dataSingleDuct->sd_airterminal(1).SizeSys(*state); SizeWaterCoil(*state, 1); @@ -1076,7 +1079,8 @@ TEST_F(EnergyPlusFixture, TestSizingRoutineForHotWaterCoils4) max(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesCoolVolFlow, state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatVolFlow) * state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatMaxAirFlowFrac); - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); state->dataSingleDuct->sd_airterminal(1).ZoneFloorArea = state->dataHeatBal->Zone(1).FloorArea; state->dataSingleDuct->sd_airterminal(1).SizeSys(*state); SizeWaterCoil(*state, 1); diff --git a/tst/EnergyPlus/unit/WaterCoils.unit.cc b/tst/EnergyPlus/unit/WaterCoils.unit.cc index e9ee999db99..ce6a19b6aab 100644 --- a/tst/EnergyPlus/unit/WaterCoils.unit.cc +++ b/tst/EnergyPlus/unit/WaterCoils.unit.cc @@ -546,7 +546,8 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizing) state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).ZoneTempAtHeatPeak = 21.0; state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatCoilInHumRatTU = 0.006; state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).ZoneHumRatAtHeatPeak = 0.008; - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); state->dataWaterCoils->MySizeFlag(1) = true; // run water coil sizing @@ -702,7 +703,8 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterLowAirFlowUASizing) state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).ZoneTempAtHeatPeak = 21.0; state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).DesHeatCoilInHumRatTU = 0.006; state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).ZoneHumRatAtHeatPeak = 0.008; - state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum); + state->dataSize->TermUnitFinalZoneSizing(state->dataSize->CurTermUnitSizingNum) + .copyFromZoneSizing(state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum)); state->dataWaterCoils->MySizeFlag(1) = true; // run water coil sizing