Line data Source code
1 : // EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University of Illinois,
2 : // The Regents of the University of California, through Lawrence Berkeley National Laboratory
3 : // (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
4 : // National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
5 : // contributors. All rights reserved.
6 : //
7 : // NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
8 : // U.S. Government consequently retains certain rights. As such, the U.S. Government has been
9 : // granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
10 : // worldwide license in the Software to reproduce, distribute copies to the public, prepare
11 : // derivative works, and perform publicly and display publicly, and to permit others to do so.
12 : //
13 : // Redistribution and use in source and binary forms, with or without modification, are permitted
14 : // provided that the following conditions are met:
15 : //
16 : // (1) Redistributions of source code must retain the above copyright notice, this list of
17 : // conditions and the following disclaimer.
18 : //
19 : // (2) Redistributions in binary form must reproduce the above copyright notice, this list of
20 : // conditions and the following disclaimer in the documentation and/or other materials
21 : // provided with the distribution.
22 : //
23 : // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
24 : // the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
25 : // used to endorse or promote products derived from this software without specific prior
26 : // written permission.
27 : //
28 : // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
29 : // without changes from the version obtained under this License, or (ii) Licensee makes a
30 : // reference solely to the software portion of its product, Licensee must refer to the
31 : // software as "EnergyPlus version X" software, where "X" is the version number Licensee
32 : // obtained under this License and may not use a different name for the software. Except as
33 : // specifically required in this Section (4), Licensee shall not use in a company name, a
34 : // product name, in advertising, publicity, or other promotional activities any name, trade
35 : // name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
36 : // similar designation, without the U.S. Department of Energy's prior written consent.
37 : //
38 : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
39 : // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
40 : // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
41 : // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
42 : // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
43 : // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
44 : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
45 : // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
46 : // POSSIBILITY OF SUCH DAMAGE.
47 :
48 : #ifndef DataSizing_hh_INCLUDED
49 : #define DataSizing_hh_INCLUDED
50 :
51 : // ObjexxFCL Headers
52 : #include <ObjexxFCL/Array1D.hh>
53 : #include <ObjexxFCL/Array2D.hh>
54 :
55 : // EnergyPlus Headers
56 : #include <EnergyPlus/Data/BaseData.hh>
57 : #include <EnergyPlus/DataGlobals.hh>
58 : #include <EnergyPlus/DataHVACGlobals.hh>
59 : #include <EnergyPlus/DataStringGlobals.hh>
60 : #include <EnergyPlus/EPVector.hh>
61 : #include <EnergyPlus/EnergyPlus.hh>
62 : #include <EnergyPlus/ScheduleManager.hh>
63 :
64 : namespace EnergyPlus {
65 :
66 : // Forward declarations
67 : struct EnergyPlusData;
68 :
69 : namespace DataSizing {
70 :
71 : enum class OAFlowCalcMethod
72 : // parameters for outside air flow method
73 : {
74 : Invalid = -1,
75 : PerPerson, // set the outdoor air flow rate based on number of people in the zone
76 : PerZone, // sum the outdoor air flow rate per zone based on user input
77 : PerArea, // sum the outdoor air flow rate based on zone area
78 : ACH, // sum the outdoor air flow rate based on number of air changes for the zone
79 : Sum, // sum the outdoor air flow rate of the people component and the space floor area component
80 : Max, // use the maximum of the outdoor air flow rate of the people component and the space floor area component
81 : IAQProcedure, // Use ASHRAE Standard 62.1-2007 IAQP to calculate the zone level outdoor air flow rates
82 : PCOccSch, // ProportionalControlBasedOnOccupancySchedule, Use ASHRAE Standard 62.1-2004 or Trane Engineer's newsletter (volume 34-5) to
83 : // calculate the zone level outdoor air flow rates based on scheduled occupancy
84 : PCDesOcc, // ProportionalControlBasedOnDesignOccupancy, Use ASHRAE Standard 62.1-2004 or Trane Engineer's newsletter (volume 34-5) to
85 : // calculate the zone level outdoor air flow rates based on design occupancy
86 : Num
87 : };
88 :
89 : constexpr std::array<std::string_view, static_cast<int>(OAFlowCalcMethod::Num)> OAFlowCalcMethodNames{
90 : "Flow/Person",
91 : "Flow/Zone",
92 : "Flow/Area",
93 : "AirChanges/Hour",
94 : "Sum",
95 : "Maximum",
96 : "IndoorAirQualityProcedure",
97 : "ProportionalControlBasedOnOccupancySchedule",
98 : "ProportionalControlBasedOnDesignOccupancy"};
99 :
100 : // parameters for outside air
101 : enum class OAControl
102 : {
103 : Invalid = -1,
104 : AllOA,
105 : MinOA,
106 : Num
107 : };
108 :
109 : // parameters for loop fluid type
110 : enum class TypeOfPlantLoop
111 : {
112 : Invalid = -1,
113 : Heating,
114 : Cooling,
115 : Condenser,
116 : Steam,
117 : Num
118 : };
119 :
120 : // parameters for sizing (keep this for now to avoid plant sizing output changes)
121 : constexpr int NonCoincident(1);
122 : constexpr int Coincident(2);
123 :
124 : // parameters for zone and system sizing concurrence method
125 : enum class SizingConcurrence
126 : {
127 : Invalid = -1,
128 : NonCoincident,
129 : Coincident,
130 : Num
131 : };
132 :
133 : constexpr std::array<std::string_view, static_cast<int>(SizingConcurrence::Num)> SizingConcurrenceNamesUC{"NONCOINCIDENT", "COINCIDENT"};
134 :
135 : // parameters for coil sizing concurrence method
136 : enum class CoilSizingConcurrence
137 : {
138 : Invalid = -1,
139 : NonCoincident,
140 : Coincident,
141 : Combination,
142 : NA,
143 : Num
144 : };
145 :
146 : constexpr std::array<std::string_view, static_cast<int>(CoilSizingConcurrence::Num)> CoilSizingConcurrenceNames{
147 : "Non-Coincident", "Coincident", "Combination", "N/A"};
148 :
149 : // parameters for Cooling Peak Load Type
150 : enum class PeakLoad
151 : {
152 : Invalid = -1,
153 : SensibleCooling,
154 : TotalCooling,
155 : Num
156 : };
157 :
158 : // parameters for Central Cooling Capacity Control Method
159 : enum class CapacityControl
160 : {
161 : Invalid = -1,
162 : VAV,
163 : Bypass,
164 : VT,
165 : OnOff,
166 : Num
167 : };
168 :
169 : // parameters for supply air flow rate method
170 : constexpr int SupplyAirTemperature(1);
171 : constexpr int TemperatureDifference(2);
172 : constexpr int SupplyAirHumidityRatio(3);
173 : constexpr int HumidityRatioDifference(4);
174 :
175 : // parameters for sizing
176 : enum class AirflowSizingMethod
177 : {
178 : Invalid = -1,
179 : FromDDCalc,
180 : InpDesAirFlow,
181 : DesAirFlowWithLim,
182 : Num
183 : };
184 :
185 : enum class DOASControl
186 : {
187 : Invalid = -1,
188 : NeutralSup,
189 : NeutralDehumSup,
190 : CoolSup,
191 : Num
192 : };
193 :
194 : // parameters for Type of Load to Size On
195 : enum class LoadSizing
196 : {
197 : Invalid = -1,
198 : Sensible,
199 : Latent,
200 : Total,
201 : Ventilation,
202 : Num
203 : };
204 :
205 : // parameter for autosize
206 : constexpr Real64 AutoSize(-99999.0);
207 :
208 : // parameter for (time-of-peak) sizing format
209 : static constexpr std::string_view PeakHrMinFmt("{:02}:{:02}:00");
210 :
211 : // Zone Outdoor Air Method
212 : constexpr int ZOAM_ProportionalControlDesOcc(9); // Use ASHRAE Standard 62.1-2004 or Trane Engineer's newsletter (volume 34-5)
213 : // to calculate the zone level outdoor air flow rates based on design occupancy
214 :
215 : enum class SysOAMethod
216 : {
217 : Invalid = -1,
218 : ZoneSum, // Sum the outdoor air flow rates of all zones
219 : VRP, // Use ASHRAE Standard 62.1-2007 to calculate the system level outdoor air flow rates
220 : IAQP, // Use ASHRAE Standard 62.1-2007 IAQP to calculate the system level outdoor air flow rates based on the CO2 setpoint
221 : ProportionalControlSchOcc, // Use ASHRAE Standard 62.1-2004 or Trane Engineer's newsletter (volume 34-5) to calculate the system level outdoor
222 : // air flow rates based on scheduled occupancy
223 : IAQPGC, // Use ASHRAE Standard 62.1-2004 IAQP to calculate the system level outdoor air flow rates based on the generic contaminant setpoint
224 : IAQPCOM, // Take the maximum outdoor air rate from both CO2 and generic contaminant controls based on the generic contaminant setpoint
225 : ProportionalControlDesOcc, // Use ASHRAE Standard 62.1-2004 or Trane Engineer's newsletter (volume 34-5) to calculate the system level outdoor
226 : // air flow rates based on design occupancy
227 : ProportionalControlDesOARate, // Calculate the system level outdoor air flow rates based on design OA rate
228 : SP, // Use the ASHRAE Standard 62.1 Simplified Procedure to calculate the system level outdoor air flow rates considering the zone air
229 : // distribution effectiveness and the system ventilation efficiency
230 : VRPL, // Use ASHRAE Standard 62.1-2007 to calculate the system level outdoor air flow rates
231 : Num
232 : };
233 :
234 : constexpr std::array<std::string_view, static_cast<int>(SysOAMethod::Num)> SysOAMethodNames{"Zone Sum",
235 : "Ventilation Rate Procedure",
236 : "IAQ Proc",
237 : "Proportional - Sch Occupancy",
238 : "IAQ Proc - Generic Contaminant",
239 : "IAQ Proc - Max Gen Cont or CO2.",
240 : "Proportional - Des Occupancy",
241 : "Proportional - Des OA Rate",
242 : "Simplified Procure",
243 : "Ventilation Rate Procedure Level"};
244 :
245 : // Zone HVAC Equipment Sizing Option
246 : enum class DesignSizingType
247 : {
248 : Invalid = -1,
249 : Dummy1BasedOffset,
250 : None, // until all models use this enum this numeric must match with constexpr int None(1) below
251 : SupplyAirFlowRate,
252 : FlowPerFloorArea,
253 : FractionOfAutosizedCoolingAirflow,
254 : FractionOfAutosizedHeatingAirflow,
255 : FlowPerCoolingCapacity,
256 : FlowPerHeatingCapacity,
257 : CoolingDesignCapacity,
258 : HeatingDesignCapacity,
259 : CapacityPerFloorArea,
260 : FractionOfAutosizedCoolingCapacity,
261 : FractionOfAutosizedHeatingCapacity,
262 : Num
263 :
264 : };
265 : constexpr std::array<std::string_view, static_cast<int>(DesignSizingType::Num)> DesignSizingTypeNamesUC{"DUMMY1BASEDOFFSET",
266 : "NONE",
267 : "SUPPLYAIRFLOWRATE",
268 : "FLOWPERFLOORAREA",
269 : "FRACTIONOFAUTOSIZEDCOOLINGAIRFLOW",
270 : "FRACTIONOFAUTOSIZEDHEATINGAIRFLOW",
271 : "FLOWPERCOOLINGCAPACITY",
272 : "FLOWPERHEATINGCAPACITY",
273 : "COOLINGDESIGNCAPACITY",
274 : "HEATINGDESIGNCAPACITY",
275 : "CAPACITYPERFLOORAREA",
276 : "FRACTIONOFAUTOSIZEDCOOLINGCAPACITY",
277 : "FRACTIONOFAUTOSIZEDHEATINGCAPACITY"};
278 :
279 : constexpr int None(1);
280 : constexpr int SupplyAirFlowRate(2);
281 : constexpr int FlowPerFloorArea(3);
282 : constexpr int FractionOfAutosizedCoolingAirflow(4);
283 : constexpr int FractionOfAutosizedHeatingAirflow(5);
284 : constexpr int FlowPerCoolingCapacity(6);
285 : constexpr int FlowPerHeatingCapacity(7);
286 :
287 : constexpr int CoolingDesignCapacity(8);
288 : constexpr int HeatingDesignCapacity(9);
289 : constexpr int CapacityPerFloorArea(10);
290 : constexpr int FractionOfAutosizedCoolingCapacity(11);
291 : constexpr int FractionOfAutosizedHeatingCapacity(12);
292 :
293 : constexpr int NoSizingFactorMode(101);
294 : constexpr int GlobalHeatingSizingFactorMode(102);
295 : constexpr int GlobalCoolingSizingFactorMode(103);
296 : constexpr int LoopComponentSizingFactorMode(104);
297 :
298 : enum class ZoneSizing
299 : {
300 : Invalid = -1,
301 : Sensible,
302 : Latent,
303 : SensibleAndLatent,
304 : SensibleOnly,
305 : Num
306 : };
307 : constexpr std::array<std::string_view, static_cast<int>(ZoneSizing::Num)> ZoneSizingMethodNamesUC{
308 : "SENSIBLE LOAD", "LATENT LOAD", "SENSIBLE AND LATENT LOAD", "SENSIBLE LOAD ONLY NO LATENT LOAD"};
309 :
310 : // Types
311 :
312 : struct ZoneSizingInputData
313 : {
314 : // Members
315 : std::string ZoneName; // name of a zone
316 : int ZoneNum = 0; // index of the zone
317 : int ZnCoolDgnSAMethod = 0; // choice of how to get zone cooling design air temperature;
318 : // 1 = specify supply air temperature, 2 = calculate from the temperature difference
319 : int ZnHeatDgnSAMethod = 0; // choice of how to get zone heating design air temperature;
320 : // 1 = specify supply air temperature, 2 = calculate from the temperature difference
321 : Real64 CoolDesTemp = 0.0; // zone design cooling supply air temperature [C]
322 : Real64 HeatDesTemp = 0.0; // zone design heating supply air temperature [C]
323 : Real64 CoolDesTempDiff = 0.0; // zone design cooling supply air temperature difference [deltaC]
324 : Real64 HeatDesTempDiff = 0.0; // zone design heating supply air temperature difference [deltaC]
325 : Real64 CoolDesHumRat = 0.0; // zone design cooling supply air humidity ratio [kgWater/kgDryAir]
326 : Real64 HeatDesHumRat = 0.0; // zone design heating supply air humidity ratio [kgWater/kgDryAir]
327 : std::string DesignSpecOAObjName; // name of the DesignSpecification:OutdoorAir or DesignSpecification:OutdoorAir:SpaceList object
328 : AirflowSizingMethod CoolAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone cooling design air flow rates;
329 : // 0 = calc from des day simulation; 1 = m3/s per zone, user input' 2 = apply limits to air flow rate from DD calc
330 : Real64 DesCoolAirFlow = 0.0; // design zone supply air flow rate [m3/s]
331 : Real64 DesCoolMinAirFlowPerArea = 0.0; // design cooling minimum air flow rate per zone area [m3/s / m2]
332 : Real64 DesCoolMinAirFlow = 0.0; // design cooling minimum air flow rate [m3/s]
333 : Real64 DesCoolMinAirFlowFrac = 0.0; // design cooling minimum air flow rate fraction
334 : // (of the cooling design air flow rate)
335 : AirflowSizingMethod HeatAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone heating design air flow rates;
336 : // 0 = calc from des day simulation; 1 = m3/s per zone, user input; 2 = apply limits to air flow rate from DD calc
337 : Real64 DesHeatAirFlow = 0.0; // design zone heating supply air flow rate [m3/s]
338 : Real64 DesHeatMaxAirFlowPerArea = 0.0; // design heating maximum air flow rate per zone area [m3/s / m2]
339 : Real64 DesHeatMaxAirFlow = 0.0; // design heating maximum air flow rate [m3/s]
340 : Real64 DesHeatMaxAirFlowFrac = 0.0; // design heating maximum air flow rate fraction (of the cooling design air flow rate)
341 : Real64 HeatSizingFactor = 0.0; // the zone heating sizing ratio
342 : Real64 CoolSizingFactor = 0.0; // the zone cooling sizing ratio
343 : Real64 ZoneADEffCooling = 0.0;
344 : Real64 ZoneADEffHeating = 0.0;
345 : std::string ZoneAirDistEffObjName; // name of the zone air distribution effectiveness object name
346 : int ZoneAirDistributionIndex = 0; // index to the zone air distribution object
347 : int ZoneDesignSpecOAIndex = 0; // index to the zone design spec OA object
348 : Real64 ZoneSecondaryRecirculation = 0.0; // the zone secondary air recirculation fraction
349 : Real64 ZoneVentilationEff = 0.0; // zone ventilation efficiency
350 : bool AccountForDOAS = false; // False: do nothing; True: calculate the effect of a DOA system on the zone sizing arrays
351 : DOASControl DOASControlStrategy = DOASControl::Invalid; // 0=neutral ventilation air; 1=neutral dehumidified ventilation air, 2 = cooled air;
352 : Real64 DOASLowSetpoint = 0.0; // Dedicated Outside Air Low Setpoint for Design [C]
353 : Real64 DOASHighSetpoint = 0.0; // Dedicated Outside Air High Setpoint for Design [C]
354 : DataSizing::SizingConcurrence spaceConcurrence = DataSizing::SizingConcurrence::Coincident; // coincident or noncoincident space loads
355 :
356 : // zone latent sizing inputs
357 : bool zoneLatentSizing = false;
358 : Real64 zoneRHDehumidifySetPoint = 50.0;
359 : Real64 zoneRHHumidifySetPoint = 50.0;
360 : Real64 LatentCoolDesHumRat = 0.0; // zone design dehumidification supply air humidity ratio [kgw/kga]
361 : Real64 CoolDesHumRatDiff = 0.005; // zone design cooling supply air humidity ratio difference [deltakgw/kga]
362 : Real64 LatentHeatDesHumRat = 0.0; // zone design humidification supply air humidity ratio [kgw/kga]
363 : Real64 HeatDesHumRatDiff = 0.005; // zone design heating supply air humidity ratio temperature difference [deltakgw/kga]
364 : int ZnLatCoolDgnSAMethod = 0; // choice of how to get zone latent cooling design air humidity ratio;
365 : int ZnLatHeatDgnSAMethod = 0; // choice of how to get zone latent heating design air humidity ratio;
366 : int zoneRHDehumidifySchIndex = 0; // index to zone RH dehumidifying schedule used for zone sizing
367 : int zoneRHHumidifySchIndex = 0; // index to zone RH humidifying schedule used for zone sizing
368 : ZoneSizing zoneSizingMethod = ZoneSizing::Invalid; // load to sizing on: sensible, latent, sensibleandlatent, sensibleonlynolatent
369 : };
370 :
371 : // based on ZoneSizingData but only member variables that are actually used by terminal unit sizing
372 : struct TermUnitZoneSizingCommonData
373 : {
374 : std::string ZoneName; // name of a zone
375 : std::string ADUName; // Terminal Unit Name (air distribution unit or direct air unit) - only assigned for TermUnitFinalZoneSizing
376 : Real64 CoolDesTemp = 0.0; // zone design cooling supply air temperature [C]
377 : Real64 HeatDesTemp = 0.0; // zone design heating supply air temperature [C]
378 : Real64 CoolDesHumRat = 0.0; // zone design cooling supply air humidity ratio [kgWater/kgDryAir]
379 : Real64 HeatDesHumRat = 0.0; // zone design heating supply air humidity ratio [kgWater/kgDryAir]
380 : Real64 DesOAFlowPPer = 0.0; // design outside air flow per person in zone [m3/s] (average for zone across spaces)
381 : Real64 DesOAFlowPerArea = 0.0; // design outside air flow per zone area [m3/s / m2] (average for zone across spaces)
382 : Real64 DesCoolMinAirFlow = 0.0; // design cooling minimum air flow rate [m3/s]
383 : Real64 DesCoolMinAirFlowFrac = 0.0; // design cooling minimum air flow rate fraction (of the cooling design air flow rate)
384 : Real64 DesHeatMaxAirFlow = 0.0; // design heating maximum air flow rate [m3/s]
385 : Real64 DesHeatMaxAirFlowFrac = 0.0; // design heating maximum air flow rate fraction (of the cooling design air flow rate)
386 : int ZoneNum = 0; // index into the Zone data array (in DataHeatBalance)
387 : Real64 DesHeatMassFlow = 0.0; // zone design heating air mass flow rate [kg/s]
388 : Real64 DesHeatMassFlowNoOA = 0.0; // zone design heating air mass flow rate without applying MinOA as a limit [kg/s]
389 : Real64 DesHeatOAFlowFrac = 0.0; // zone design heating OA air volume fraction [-]
390 : Real64 DesCoolMassFlow = 0.0; // zone design cooling air mass flow rate [kg/s]
391 : Real64 DesCoolMassFlowNoOA = 0.0; // zone design cooling air mass flow rate without applying MinOA as a limit [kg/s]
392 : Real64 DesCoolOAFlowFrac = 0.0; // zone design cooling OA air volume fraction [-]
393 : Real64 DesHeatLoad = 0.0; // zone design heating load including sizing factor and scaled to match airflow sizing [W]
394 : Real64 NonAirSysDesHeatLoad = 0.0; // base zone design heating load including sizing factor [W]
395 : Real64 DesCoolLoad = 0.0; // zone design cooling load including sizing factor and scaled to match airflow sizing [W]
396 : Real64 NonAirSysDesCoolLoad = 0.0; // base zone design cooling load including sizing factor [W]
397 : Real64 DesHeatVolFlow = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing [m3/s]
398 : Real64 DesHeatVolFlowNoOA = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing
399 : // without MinOA limit [m3/s]
400 : Real64 NonAirSysDesHeatVolFlow = 0.0; // base zone design heating air volume flow rate including sizing factor [m3/s]
401 : Real64 DesCoolVolFlow = 0.0; // zone design cooling air volume flow rate [m3/s]
402 : Real64 DesCoolVolFlowNoOA = 0.0; // zone design cooling air volume flow rate without applying MinOA as a limit [m3/s]
403 : Real64 NonAirSysDesCoolVolFlow = 0.0; // base zone design cooling air volume flow rate including sizing factor [m3/s]
404 : Real64 DesHeatVolFlowMax = 0.0; // zone design heating maximum air volume flow rate [m3/s]
405 : Real64 DesCoolVolFlowMin = 0.0; // zone design cooling minimum air volume flow rate [m3/s]
406 : Real64 DesHeatCoilInTempTU = 0.0; // zone heating coil design air inlet temperature (supply air)([C]
407 : Real64 DesCoolCoilInTempTU = 0.0; // zone cooling coil design air inlet temperature (supply air)[C]
408 : Real64 DesHeatCoilInHumRatTU = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg]
409 : Real64 DesCoolCoilInHumRatTU = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg]
410 : Real64 ZoneTempAtHeatPeak = 0.0; // zone temp at max heating [C]
411 : Real64 ZoneRetTempAtHeatPeak = 0.0; // zone return temp at max heating [C]
412 : Real64 ZoneTempAtCoolPeak = 0.0; // zone temp at max cooling [C]
413 : Real64 ZoneRetTempAtCoolPeak = 0.0; // zone return temp at max cooling [C]
414 : Real64 ZoneHumRatAtHeatPeak = 0.0; // zone humidity ratio at max heating [kg/kg]
415 : Real64 ZoneHumRatAtCoolPeak = 0.0; // zone humidity ratio at max cooling [kg/kg]
416 : int TimeStepNumAtHeatMax = 0; // time step number (in day) at Heating peak
417 : int TimeStepNumAtCoolMax = 0; // time step number (in day) at cooling peak
418 : int HeatDDNum = 0; // design day index of design day causing heating peak
419 : int CoolDDNum = 0; // design day index of design day causing cooling peak
420 : Real64 MinOA = 0.0; // design minimum outside air in m3/s
421 : Real64 DesCoolMinAirFlow2 = 0.0; // design cooling minimum air flow rate [m3/s] derived from DesCoolMinAirFlowPerArea
422 : Real64 DesHeatMaxAirFlow2 = 0.0; // design heating maximum air flow rate [m3/s] derived from DesHeatMaxAirFlowPerArea
423 : Array1D<Real64> HeatFlowSeq; // daily sequence of zone heating air mass flow rate (zone time step) [kg/s]
424 : Array1D<Real64> HeatFlowSeqNoOA; // daily sequence of zone heating air mass flow rate (zone time step) without MinOA limit [kg/s]
425 : Array1D<Real64> CoolFlowSeq; // daily sequence of zone cooling air mass flow rate (zone time step) [kg/s]
426 : Array1D<Real64> CoolFlowSeqNoOA; // daily sequence of zone cooling air mass flow rate (zone time step) without MinOA limit [kg/s]
427 : EPVector<Real64> HeatZoneTempSeq; // daily sequence of zone temperatures (heating, zone time step)
428 : Array1D<Real64> HeatZoneRetTempSeq; // daily sequence of zone return temperatures (heating, zone time step)
429 : EPVector<Real64> CoolZoneTempSeq; // daily sequence of zone temperatures (cooling, zone time step)
430 : Array1D<Real64> CoolZoneRetTempSeq; // daily sequence of zone return temperatures (cooling, zone time step)
431 : Real64 ZoneADEffCooling = 1.0; // the zone air distribution effectiveness in cooling mode
432 : Real64 ZoneADEffHeating = 1.0; // the zone air distribution effectiveness in heating mode
433 : Real64 ZoneSecondaryRecirculation = 0.0; // the zone secondary air recirculation fraction
434 : Real64 ZoneVentilationEff = 0.0; // zone ventilation efficiency
435 : Real64 ZonePrimaryAirFraction = 0.0; // the zone primary air fraction for cooling based calculations
436 : Real64 ZonePrimaryAirFractionHtg = 0.0; // the zone primary air fraction for heating based calculations
437 : Real64 ZoneOAFracCooling = 0.0; // OA fraction in cooling mode
438 : Real64 ZoneOAFracHeating = 0.0; // OA fraction in heating mode
439 : Real64 TotalOAFromPeople = 0.0; // Zone OA required due to people
440 : Real64 TotalOAFromArea = 0.0; // Zone OA required based on floor area
441 : Real64 TotPeopleInZone = 0.0; // total number of people in the zone
442 : Real64 TotalZoneFloorArea = 0.0; // total zone floor area
443 : Real64 SupplyAirAdjustFactor = 1.0; // supply air adjustment factor for next time step if OA is capped
444 : Real64 ZpzClgByZone = 0.0; // OA Std 62.1 required fraction in cooling mode ? should this be ZdzClgByZone
445 : Real64 ZpzHtgByZone = 0.0; // OA Std 62.1 required fraction in heating mode ? should this be ZdzHtgByZone
446 : Real64 VozClgByZone = 0.0; // value of required cooling vent to zone, used in 62.1 tabular report, already includes people diversity term
447 : Real64 VozHtgByZone = 0.0; // value of required heating vent to zone, used in 62.1 tabular report, already includes people diversity term
448 : bool VpzMinByZoneSPSized = false; // is Vpz_min sized using the 62.1 Standard Simplified Procedure
449 : Real64 ZoneSizThermSetPtHi = 0.0; // highest zone thermostat setpoint during zone sizing calcs
450 : Real64 ZoneSizThermSetPtLo = 1000.0; // lowest zone thermostat setpoint during zone sizing calcs
451 : };
452 :
453 : struct ZoneSizingData : TermUnitZoneSizingCommonData
454 : {
455 : // Members
456 : std::string CoolDesDay; // name of a cooling design day
457 : std::string HeatDesDay; // name of a heating design day
458 : int ZnCoolDgnSAMethod = 0; // choice of how to get zone cooling design air temperature;
459 : // 1 = specify supply air temperature, 2 = calculate from the temperature difference
460 : int ZnHeatDgnSAMethod = 0; // choice of how to get zone heating design air temperature;
461 : // 1 = specify supply air temperature, 2 = calculate from the temperature difference
462 : Real64 CoolDesTempDiff = 0.0; // zone design cooling supply air temperature difference [deltaC]
463 : Real64 HeatDesTempDiff = 0.0; // zone design heating supply air temperature difference [deltaC]
464 : int ZoneAirDistributionIndex = 0; // index to DesignSpecification:ZoneAirDistribution object
465 : int ZoneDesignSpecOAIndex = 0; // index to DesignSpecification:OutdoorAir object
466 : AirflowSizingMethod CoolAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone cooling design air flow rates;
467 : // 0 = calc from des day simulation; 1 = m3/s per zone, user input; 2 = apply limits to air flow rate from DD calc
468 : Real64 InpDesCoolAirFlow = 0.0; // design zone supply air flow rate [m3/s]
469 : Real64 DesCoolMinAirFlowPerArea = 0.0; // design cooling minimum air flow rate per zone area [m3/s / m2]
470 : AirflowSizingMethod HeatAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone heating design air flow rates;
471 : // 1 = calc from des day simulation; 2 = m3/s per zone, user input
472 : // 3 = apply limits to air flow rate from DD calc
473 : Real64 InpDesHeatAirFlow = 0.0; // design zone heating supply air flow rate [m3/s]
474 : Real64 DesHeatMaxAirFlowPerArea = 0.0; // design heating maximum air flow rate per zone area [m3/s / m2]
475 : Real64 HeatSizingFactor = 0.0; // the zone heating sizing ratio
476 : Real64 CoolSizingFactor = 0.0; // the zone cooling sizing ratio
477 : bool AccountForDOAS = false; // False: do nothing; True: calculate the effect of a DOA system on the zone sizing arrays
478 : DOASControl DOASControlStrategy = DOASControl::Invalid; // 0=neutral ventilation air; 1=neutral dehumidified ventilation air, 2 = cooled air;
479 : // 3=supply cold ventilation air
480 : Real64 DOASLowSetpoint = 0.0; // Dedicated Outside Air Low Setpoint for Design [C]
481 : Real64 DOASHighSetpoint = 0.0; // Dedicated Outside Air High Setpoint for Design [C]
482 : DataSizing::SizingConcurrence spaceConcurrence = DataSizing::SizingConcurrence::Coincident; // coincident or noncoincident space loads
483 : bool EMSOverrideDesHeatMassOn = false; // true if EMS is acting on this structure
484 : Real64 EMSValueDesHeatMassFlow = 0.0; // Value EMS directing to use for Design Heating air mass flow [kg/s]
485 : bool EMSOverrideDesCoolMassOn = false; // true if EMS is acting on this structure
486 : Real64 EMSValueDesCoolMassFlow = 0.0; // Value EMS directing to use for Design Cooling air mass flow [kg/s]
487 : bool EMSOverrideDesHeatLoadOn = false; // true if EMS is acting on this structure
488 : Real64 EMSValueDesHeatLoad = 0.0; // Value EMS directing to use for zone design heating load [W]
489 : bool EMSOverrideDesCoolLoadOn = false; // true if EMS is acting on this structure
490 : Real64 EMSValueDesCoolLoad = 0.0; // Value EMS directing to use for zone design cooling load [W]
491 : Real64 DesHeatDens = 0.0; // zone design heating air density [kg/m3]
492 : Real64 DesCoolDens = 0.0; // zone design cooling air density [kg/m3]
493 : bool EMSOverrideDesHeatVolOn = false; // true if EMS is acting on this structure
494 : Real64 EMSValueDesHeatVolFlow = 0.0; // Value EMS directing to use for Design Heating air volume flow [m3/s]
495 : bool EMSOverrideDesCoolVolOn = false; // true if EMS is acting on this structure
496 : Real64 EMSValueDesCoolVolFlow = 0.0; // Value EMS directing to use for Design cooling air volume flow [m3/s]
497 : Real64 DesHeatCoilInTemp = 0.0; // zone heating coil design air inlet temperature [C]
498 : Real64 DesCoolCoilInTemp = 0.0; // zone cooling coil design air inlet temperature [C]
499 : Real64 DesHeatCoilInHumRat = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg]
500 : Real64 DesCoolCoilInHumRat = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg]
501 : Real64 HeatMassFlow = 0.0; // current zone heating air mass flow rate (HVAC time step)
502 : Real64 CoolMassFlow = 0.0; // current zone cooling air mass flow rate (HVAC time step)
503 : Real64 HeatLoad = 0.0; // current zone heating load (HVAC time step)
504 : Real64 CoolLoad = 0.0; // current zone heating load (HVAC time step)
505 : Real64 HeatZoneTemp = 0.0; // current zone temperature (heating, time step)
506 : Real64 HeatOutTemp = 0.0; // current outdoor temperature (heating, time step)
507 : Real64 HeatZoneRetTemp = 0.0; // current zone return temperature (heating, time step)
508 : Real64 HeatTstatTemp = 0.0; // current zone thermostat temperature (heating, time step)
509 : Real64 CoolZoneTemp = 0.0; // current zone temperature (cooling, time step)
510 : Real64 CoolOutTemp = 0.0; // current Outdoor temperature (cooling, time step)
511 : Real64 CoolZoneRetTemp = 0.0; // current zone return temperature (cooling, time step)
512 : Real64 CoolTstatTemp = 0.0; // current zone thermostat temperature (cooling, time step)
513 : Real64 HeatZoneHumRat = 0.0; // current zone humidity ratio (heating, time step)
514 : Real64 CoolZoneHumRat = 0.0; // current zone humidity ratio (cooling, time step)
515 : Real64 HeatOutHumRat = 0.0; // current outdoor humidity ratio (heating, time step)
516 : Real64 CoolOutHumRat = 0.0; // current outdoor humidity ratio (cooling, time step)
517 : Real64 OutTempAtHeatPeak = 0.0; // outdoor temperature at max heating [C]
518 : Real64 OutTempAtCoolPeak = 0.0; // outdoor temperature at max cooling [C]
519 : Real64 OutHumRatAtHeatPeak = 0.0; // outdoor humidity at max heating [kg/kg]
520 : Real64 OutHumRatAtCoolPeak = 0.0; // outdoor humidity at max cooling [kg/kg]
521 : std::string cHeatDDDate; // date of design day causing heating peak
522 : std::string cCoolDDDate; // date of design day causing cooling peak
523 : Array1D<Real64> HeatLoadSeq; // daily sequence of zone heating load (zone time step)
524 : Array1D<Real64> CoolLoadSeq; // daily sequence of zone cooling load (zone time step)
525 : Array1D<Real64> HeatOutTempSeq; // daily sequence of outdoor temperatures (heating, zone time step)
526 : Array1D<Real64> HeatTstatTempSeq; // daily sequence of zone thermostat temperatures (heating, zone time step)
527 : Array1D<Real64> DesHeatSetPtSeq; // daily sequence of indoor set point temperatures (zone time step)
528 : Array1D<Real64> CoolOutTempSeq; // daily sequence of outdoor temperatures (cooling, zone time step)
529 : Array1D<Real64> CoolTstatTempSeq; // daily sequence of zone thermostat temperatures (cooling, zone time step)
530 : Array1D<Real64> DesCoolSetPtSeq; // daily sequence of indoor set point temperatures (zone time step)
531 : Array1D<Real64> HeatZoneHumRatSeq; // daily sequence of zone humidity ratios (heating, zone time step)
532 : Array1D<Real64> CoolZoneHumRatSeq; // daily sequence of zone humidity ratios (cooling, zone time step)
533 : Array1D<Real64> HeatOutHumRatSeq; // daily sequence of outdoor humidity ratios (heating, zone time step)
534 : Array1D<Real64> CoolOutHumRatSeq; // daily sequence of outdoor humidity ratios (cooling, zone time step)
535 : Real64 ZonePeakOccupancy = 0.0; // zone peak occupancy based on max schedule value
536 : Real64 DOASHeatLoad = 0.0; // current heating load from DOAS supply air [W]
537 : Real64 DOASCoolLoad = 0.0; // current cooling load from DOAS supply air [W]
538 : Real64 DOASHeatAdd = 0.0; // current heat addition rate from DOAS supply air [W]
539 : Real64 DOASLatAdd = 0.0; // current latent heat addition rate from DOAS supply air [W]
540 : Real64 DOASSupMassFlow = 0.0; // current mass flow rate of DOAS supply air [kg/s]
541 : Real64 DOASSupTemp = 0.0; // current DOAS supply air temperature [C]
542 : Real64 DOASSupHumRat = 0.0; // current DOAS supply air humidity ratio [kgWater/kgDryAir]
543 : Real64 DOASTotCoolLoad = 0.0; // current total cooling load imposed by DOAS supply air [W]
544 : Array1D<Real64> DOASHeatLoadSeq; // daily sequence of zone DOAS heating load (zone time step) [W]
545 : Array1D<Real64> DOASCoolLoadSeq; // daily sequence of zone DOAS cooling load (zone time step) [W]
546 : Array1D<Real64> DOASHeatAddSeq; // daily sequence of zone DOAS heat addition rate (zone time step) [W]
547 : Array1D<Real64> DOASLatAddSeq; // daily sequence of zone DOAS latent heat addition rate (zone time step) [W]
548 : Array1D<Real64> DOASSupMassFlowSeq; // daily sequence of zone DOAS supply mass flow rate (zone time step) [Kg/s]
549 : Array1D<Real64> DOASSupTempSeq; // daily sequence of zone DOAS supply temperature (zone time step) [C]
550 : Array1D<Real64> DOASSupHumRatSeq; // daily sequence of zone DOAS supply humidity ratio (zone time step) [kgWater/kgDryAir]
551 : Array1D<Real64> DOASTotCoolLoadSeq; // daily sequence of zone DOAS total cooling load (zone time step) [W]
552 :
553 : // Latent heat variables
554 : Real64 HeatLoadNoDOAS = 0.0; // current zone heating load no DOAS (HVAC time step)
555 : Real64 CoolLoadNoDOAS = 0.0; // current zone heating load no DOAS (HVAC time step)
556 : Real64 DesHeatLoadNoDOAS = 0.0; // design zone heating load no DOAS (HVAC time step)
557 : Real64 DesCoolLoadNoDOAS = 0.0; // design zone heating load no DOAS (HVAC time step)
558 : Real64 HeatLatentLoad = 0.0; // current zone humidification load (HVAC time step)
559 : Real64 CoolLatentLoad = 0.0; // current zone dehumidification load (HVAC time step)
560 : Real64 HeatLatentLoadNoDOAS = 0.0; // current zone humidification load without DOAS (HVAC time step)
561 : Real64 CoolLatentLoadNoDOAS = 0.0; // current zone dehumidification load without DOAS (HVAC time step)
562 : Real64 ZoneHeatLatentMassFlow = 0.0; // current mass flow rate required to meet humidification load [kg/s]
563 : Real64 ZoneCoolLatentMassFlow = 0.0; // current mass flow rate required to meet dehumidification load [kg/s]
564 : Real64 ZoneHeatLatentVolFlow = 0.0; // current volume flow rate required to meet humidification load [m3/s]
565 : Real64 ZoneCoolLatentVolFlow = 0.0; // current volume flow rate required to meet dehumidification load [m3/s]
566 : Real64 DesLatentHeatLoad = 0.0; // design zone humidification load (HVAC time step)
567 : Real64 DesLatentCoolLoad = 0.0; // design zone dehumidification load (HVAC time step)
568 : Real64 DesLatentHeatLoadNoDOAS = 0.0; // design zone humidification load no DOAS (HVAC time step)
569 : Real64 DesLatentCoolLoadNoDOAS = 0.0; // design zone dehumidification load no DOAS (HVAC time step)
570 : Real64 DesLatentHeatMassFlow = 0.0; // design mass flow rate required to meet humidification load [kg/s]
571 : Real64 DesLatentCoolMassFlow = 0.0; // design mass flow rate required to meet dehumidification load [kg/s]
572 : Real64 DesLatentHeatVolFlow = 0.0; // design volume flow rate required to meet humidification load [kg/s]
573 : Real64 DesLatentCoolVolFlow = 0.0; // design volume flow rate required to meet dehumidification load [kg/s]
574 : Real64 ZoneTempAtLatentCoolPeak = 0.0; // zone temp at max latent cooling [C]
575 : Real64 OutTempAtLatentCoolPeak = 0.0; // outdoor temp at max latent cooling [C]
576 : Real64 ZoneHumRatAtLatentCoolPeak = 0.0; // zone humrat at max latent cooling [kg/kg]
577 : Real64 OutHumRatAtLatentCoolPeak = 0.0; // outdoor humrat at max latent cooling [kg/kg]
578 : Real64 ZoneTempAtLatentHeatPeak = 0.0; // zone temp at max latent heating [C]
579 : Real64 OutTempAtLatentHeatPeak = 0.0; // outdoor temp at max latent heating [C]
580 : Real64 ZoneHumRatAtLatentHeatPeak = 0.0; // zone humrat at max latent heating [kg/kg]
581 : Real64 OutHumRatAtLatentHeatPeak = 0.0; // outdoor humrat at max latent heating [kg/kg]
582 : Real64 DesLatentHeatCoilInTemp = 0.0; // zone latent heating coil design air inlet temperature [C]
583 : Real64 DesLatentCoolCoilInTemp = 0.0; // zone latent cooling coil design air inlet temperature [C]
584 : Real64 DesLatentHeatCoilInHumRat = 0.0; // zone latent heating coil design air inlet humidity ratio [kg/kg]
585 : Real64 DesLatentCoolCoilInHumRat = 0.0; // zone latent cooling coil design air inlet humidity ratio [kg/kg]
586 : int TimeStepNumAtLatentHeatMax = 0; // time step number (in day) at heating peak
587 : int TimeStepNumAtLatentCoolMax = 0; // time step number (in day) at cooling peak
588 : int TimeStepNumAtLatentHeatNoDOASMax = 0; // time step number (in day) at latent heating peak without DOAS
589 : int TimeStepNumAtLatentCoolNoDOASMax = 0; // time step number (in day) at Latent cooling peak without DOAS
590 : int LatentHeatDDNum = 0; // design day index of design day causing heating peak
591 : int LatentCoolDDNum = 0; // design day index of design day causing cooling peak
592 : int LatentHeatNoDOASDDNum = 0; // design day index of design day causing latent heating peak with no DOAS
593 : int LatentCoolNoDOASDDNum = 0; // design day index of design day causing latent cooling peak with no DOAS
594 : std::string cLatentHeatDDDate; // date of design day causing heating peak
595 : std::string cLatentCoolDDDate; // date of design day causing cooling peak
596 : int TimeStepNumAtHeatNoDOASMax = 0; // time step number (in day) at Heating peak without DOAS
597 : int TimeStepNumAtCoolNoDOASMax = 0; // time step number (in day) at cooling peak without DOAS
598 : int HeatNoDOASDDNum = 0; // design day index of design day causing heating peak without DOAS
599 : int CoolNoDOASDDNum = 0; // design day index of design day causing cooling peak without DOAS
600 : std::string cHeatNoDOASDDDate; // date of design day causing heating peak without DOAS
601 : std::string cCoolNoDOASDDDate; // date of design day causing cooling peak without DOAS
602 : Array1D<Real64> HeatLoadNoDOASSeq; // daily sequence of zone heating load No DOAS (zone time step)
603 : Array1D<Real64> CoolLoadNoDOASSeq; // daily sequence of zone cooling load No DOAS (zone time step)
604 : Array1D<Real64> LatentHeatLoadSeq; // daily sequence of zone latent heating load (zone time step) [W]
605 : Array1D<Real64> LatentCoolLoadSeq; // daily sequence of zone latent cooling load (zone time step) [W]
606 : Array1D<Real64> HeatLatentLoadNoDOASSeq; // daily sequence of zone latent heating load No DOAS (zone time step) [W]
607 : Array1D<Real64> CoolLatentLoadNoDOASSeq; // daily sequence of zone latent cooling load No DOAS (zone time step) [W]
608 : Array1D<Real64> LatentCoolFlowSeq; // daily sequence of zone latent cooling supply mass flow rate (zone time step) [Kg/s]
609 : Array1D<Real64> LatentHeatFlowSeq; // daily sequence of zone latent heating supply mass flow rate (zone time step) [Kg/s]
610 : bool zoneLatentSizing = false; // trigger to do RH control during zone sizing
611 : Real64 zoneRHDehumidifySetPoint = 50.0; // RH dehumidifying set point used during sizing, default to 50%
612 : int zoneRHDehumidifySchIndex = 0; // index to zone RH dehumidifying schedule used for zone sizing
613 : Real64 zoneRHHumidifySetPoint = 50.0; // RH humidifying set point used during sizing, default to 50%
614 : int zoneRHHumidifySchIndex = 0; // index to zone RH humidifying schedule used for zone sizing
615 : Real64 LatentCoolDesHumRat = 0.0; // zone design dehumidification supply air humidity ratio [kgw/kga]
616 : Real64 CoolDesHumRatDiff = 0.005; // zone design cooling supply air humidity ratio difference [deltakgw/kga]
617 : Real64 LatentHeatDesHumRat = 0.0; // zone design humidification supply air humidity ratio [kgw/kga]
618 : Real64 HeatDesHumRatDiff = 0.005; // zone design heating supply air humidity ratio temperature difference [deltakgw/kga]
619 : int ZnLatCoolDgnSAMethod = 0; // choice of how to get zone latent cooling design air humidity ratio;
620 : int ZnLatHeatDgnSAMethod = 0; // choice of how to get zone latent heating design air humidity ratio;
621 : Real64 ZoneRetTempAtLatentCoolPeak = 0.0; // zone return temp at latent cooling peak time step
622 : Real64 ZoneRetTempAtLatentHeatPeak = 0.0; // zone return temp at latent heating peak time step
623 : std::string CoolNoDOASDesDay; // name of a cooling design day without DOAS
624 : std::string HeatNoDOASDesDay; // name of a heating design day without DOAS
625 : std::string LatCoolDesDay; // name of a cooling design day
626 : std::string LatHeatDesDay; // name of a heating design day
627 : std::string LatCoolNoDOASDesDay; // name of a cooling design day without DOAS
628 : std::string LatHeatNoDOASDesDay; // name of a heating design day without DOAS
629 : ZoneSizing zoneSizingMethod = ZoneSizing::Invalid; // load to sizing on: sensible, latent, sensibleandlatent, sensibleonlynolatent
630 : std::string CoolSizingType; // string reported to eio, Cooling or Latent Cooling
631 : std::string HeatSizingType; // string reported to eio, Heating or Latent Heating
632 : std::string CoolPeakDateHrMin; // date:hr:min of cooling peak
633 : std::string HeatPeakDateHrMin; // date:hr:min of heating peak
634 : std::string LatCoolPeakDateHrMin; // date:hr:min of latent cooling peak
635 : std::string LatHeatPeakDateHrMin; // date:hr:min of latent heating peak
636 :
637 : void zeroMemberData();
638 : void allocateMemberArrays(int numOfTimeStepInDay);
639 : };
640 :
641 : struct TermUnitZoneSizingData : TermUnitZoneSizingCommonData
642 : {
643 : void scaleZoneCooling(Real64 ratio);
644 : void scaleZoneHeating(Real64 ratio);
645 : void copyFromZoneSizing(DataSizing::ZoneSizingData const &sourceData);
646 : void allocateMemberArrays(int numOfTimeStepInDay);
647 : };
648 :
649 : struct TermUnitSizingData
650 : {
651 : // Members
652 : int CtrlZoneNum; // Controlled zone number (index to FinalZoneSizing, etc.)
653 : std::string ADUName; // Terminal Unit Name (air distribution unit or direct air unit)
654 : Real64 AirVolFlow; // design air vol flow rate for single duct terminal unit [m3/s]
655 : Real64 MaxHWVolFlow; // design Hot Water vol flow for single duct terminal unit [m3/s]
656 : Real64 MaxSTVolFlow; // design Steam vol flow rate for single duct terminal unit [m3/s]
657 : Real64 MaxCWVolFlow; // design Cold Water vol flow for single duct terminal unit [m3/s]
658 : Real64 MinPriFlowFrac; // design minimum primary flow fraction for a terminal unit
659 : Real64 InducRat; // design induction ratio for a terminal unit
660 : bool InducesPlenumAir; // True if secondary air comes from the plenum
661 : Real64 ReheatAirFlowMult; // multiplier for air flow in reheat coil UA calculation
662 : Real64 ReheatLoadMult; // multiplier for load in reheat coil UA calculation
663 : Real64 DesCoolingLoad; // design cooling load used for zone equipment [W]
664 : Real64 DesHeatingLoad; // design heating load used for zone equipment [W]
665 : Real64 SpecDesSensCoolingFrac; // Fraction of Design Sensible Cooling Load from DesignSpecification:AirTerminal:Sizing
666 : Real64 SpecDesCoolSATRatio; // Cooling Design Supply Air Temperature Difference Ratio from DesignSpecification:AirTerminal:Sizing
667 : Real64 SpecDesSensHeatingFrac; // Fraction of Design Sensible Heating Load from DesignSpecification:AirTerminal:Sizing
668 : Real64 SpecDesHeatSATRatio; // Heating Design Supply Air Temperature Difference Ratio from DesignSpecification:AirTerminal:Sizing
669 : Real64 SpecMinOAFrac; // Fraction of Minimum Outdoor Air Flow from DesignSpecification:AirTerminal:Sizing
670 : int plenumIndex = 0; // plenum index for PIU inlet conditions
671 :
672 : // Default Constructor
673 5145 : TermUnitSizingData()
674 10290 : : CtrlZoneNum(0), AirVolFlow(0.0), MaxHWVolFlow(0.0), MaxSTVolFlow(0.0), MaxCWVolFlow(0.0), MinPriFlowFrac(0.0), InducRat(0.0),
675 5145 : InducesPlenumAir(false), ReheatAirFlowMult(1.0), ReheatLoadMult(1.0), DesCoolingLoad(0.0), DesHeatingLoad(0.0),
676 5145 : SpecDesSensCoolingFrac(1.0), SpecDesCoolSATRatio(1.0), SpecDesSensHeatingFrac(1.0), SpecDesHeatSATRatio(1.0), SpecMinOAFrac(1.0)
677 : {
678 5145 : }
679 :
680 : Real64 applyTermUnitSizingCoolFlow(Real64 coolFlowWithOA, // Cooling flow rate with MinOA limit applied
681 : Real64 coolFlowNoOA // Cooling flow rate without MinOA limit applied
682 : );
683 :
684 : Real64 applyTermUnitSizingHeatFlow(Real64 heatFlowWithOA, // Heating flow rate with MinOA limit applied
685 : Real64 heatFlowNoOA // Heating flow rate without MinOA limit applied
686 : );
687 :
688 815040 : Real64 applyTermUnitSizingCoolLoad(Real64 coolLoad) const
689 : {
690 815040 : return coolLoad * this->SpecDesSensCoolingFrac; // Apply DesignSpecification:AirTerminal:Sizing to cooling load
691 : }
692 :
693 815040 : Real64 applyTermUnitSizingHeatLoad(Real64 heatLoad) const
694 : {
695 815040 : return heatLoad * this->SpecDesSensHeatingFrac; // Apply DesignSpecification:AirTerminal:Sizing to heating load
696 : }
697 : };
698 :
699 : struct ZoneEqSizingData // data saved from zone eq component sizing and passed to subcomponents
700 : {
701 : // Members
702 : Real64 AirVolFlow; // design air vol flow rate for zone equipment unit [m3/s]
703 : Real64 MaxHWVolFlow; // design Hot Water vol flow for zone equipment unit [m3/s]
704 : Real64 MaxCWVolFlow; // design Cold Water vol flow for zone equipment unit [m3/s]
705 : Real64 OAVolFlow; // design outside air flow for zone equipment unit [m3/s]
706 : Real64 ATMixerVolFlow; // design ventilation air flow rate from air terminal mixer (central DOAS) [m3/s]
707 : Real64 ATMixerCoolPriDryBulb; // design ventilation drybulb temperature from air terminal mixer during cooling (central DOAS) [C]
708 : Real64 ATMixerCoolPriHumRat; // design ventilation humidity ratio from air terminal mixer during cooling (central DOAS) [kgWater/kgDryAir]
709 : Real64 ATMixerHeatPriDryBulb; // design ventilation drybulb temperature from air terminal mixer during heating (central DOAS) [C]
710 : Real64 ATMixerHeatPriHumRat; // design ventilation humidity ratio from air terminal mixer during heating (central DOAS) [kgWater/kgDryAir]
711 : Real64 DesCoolingLoad; // design cooling load used for zone equipment [W]
712 : Real64 DesHeatingLoad; // design heating load used for zone equipment [W]
713 : Real64 CoolingAirVolFlow; // design cooling air vol flow rate for equipment[m3/s]
714 : Real64 HeatingAirVolFlow; // design heating air vol flow rate for equipment[m3/s]
715 : Real64 SystemAirVolFlow; // design heating air vol flow rate for equipment[m3/s]
716 : bool AirFlow; // TRUE if AirloopHVAC system air flow rate is calculated
717 : bool CoolingAirFlow; // TRUE if AirloopHVAC system cooling air flow rate is calculated
718 : bool HeatingAirFlow; // TRUE if AirloopHVAC system heating air flow rate is calculated
719 : bool SystemAirFlow; // TRUE if AirloopHVAC system heating air flow rate is calculated
720 : bool Capacity; // TRUE if AirloopHVAC system capacity is calculated
721 : bool CoolingCapacity; // TRUE if AirloopHVAC system cooling capacity is calculated
722 : bool HeatingCapacity; // TRUE if AirloopHVAC system heating capacity is calculated
723 : bool SystemCapacity; // TRUE if AirloopHVAC system heating capacity is calculated
724 : bool DesignSizeFromParent; // TRUE if design size is set by parent object - normally false, set to true for special cases e.g. ERV
725 : int HVACSizingIndex; // index to DesignSpecification:ZoneHVAC:Sizing
726 : Array1D_int SizingMethod; // supply air flow rate sizing method (SupplyAirFlowRate, FlowPerFloorArea, FractionOfAutosizedCoolingAirflow and
727 : // FractionOfAutosizedHeatingAirflow)
728 : Array1D_int CapSizingMethod; // capacity sizing methods (HeatingDesignCapacity, CoolingDesignCapacity, CapacityPerFloorArea,
729 : // FractionOfAutosizedCoolingCapacity and FractionOfAutosizedHeatingCapacity )
730 :
731 : // Default Constructor
732 9717 : ZoneEqSizingData()
733 9717 : : AirVolFlow(0.0), MaxHWVolFlow(0.0), MaxCWVolFlow(0.0), OAVolFlow(0.0),
734 9717 : ATMixerVolFlow(0.0), // design ventilation air flow rate from air terminal mixer (central DOAS) [m3/s]
735 9717 : ATMixerCoolPriDryBulb(0.0), // design air terminal mixer cooling outlet temperature [C]
736 9717 : ATMixerCoolPriHumRat(0.0), // design air terminal mixer cooling outlet humidity ratio [kgWater/kgDryAir]
737 9717 : ATMixerHeatPriDryBulb(0.0), // design air terminal mixer heating outlet temperature [C]
738 9717 : ATMixerHeatPriHumRat(0.0), // design air terminal mixer heating outlet humidity ratio [kgWater/kgDryAir]
739 9717 : DesCoolingLoad(0.0), // design cooling load used for zone equipment [W]
740 9717 : DesHeatingLoad(0.0), // design heating load used for zone equipment [W]
741 9717 : CoolingAirVolFlow(0.0), // design cooling air vol flow rate for equipment[m3/s]
742 9717 : HeatingAirVolFlow(0.0), // design heating air vol flow rate for equipment[m3/s]
743 9717 : SystemAirVolFlow(0.0), // design heating air vol flow rate for equipment[m3/s]
744 9717 : AirFlow(false), // TRUE if AirloopHVAC system air flow rate is calculated
745 9717 : CoolingAirFlow(false), // TRUE if AirloopHVAC system cooling air flow rate is calculated
746 9717 : HeatingAirFlow(false), // TRUE if AirloopHVAC system heating air flow rate is calculated
747 9717 : SystemAirFlow(false), // TRUE if AirloopHVAC system heating air flow rate is calculated
748 9717 : Capacity(false), // TRUE if AirloopHVAC system capacity is calculated
749 9717 : CoolingCapacity(false), // TRUE if AirloopHVAC system cooling capacity is calculated
750 9717 : HeatingCapacity(false), // TRUE if AirloopHVAC system heating capacity is calculated
751 9717 : SystemCapacity(false), // TRUE if AirloopHVAC system heating capacity is calculated
752 9717 : DesignSizeFromParent(false), // TRUE if design size is set by parent object - normally false, set to true for special cases e.g. ERV
753 9717 : HVACSizingIndex(0) // index to DesignSpecification:ZoneHVAC:Sizing
754 : {
755 9717 : }
756 : };
757 :
758 : // Data Structure for Zone HVAC sizing, referenced by various ZoneHVAC Equipment
759 : struct ZoneHVACSizingData
760 : {
761 : // Members
762 : std::string Name;
763 : int CoolingSAFMethod; // - Method for cooling supply air flow rate sizing calculation (SupplyAirFlowRate,FlowPerFloorArea,
764 : // FractionOfAutoSizedCoolingValue, FlowPerCoolingCapacity)
765 : int HeatingSAFMethod; // - Method for heating supply air flow rate sizing calculation (SupplyAirFlowRate,FlowPerFloorArea,
766 : // FractionOfAutoSizedHeatingValue, FlowPerHeatingCapacity,
767 : int NoCoolHeatSAFMethod; // - Method for supply air flow sizing during no cooling and heating calculation (SupplyAirFlowRate,
768 : // FractionOfAutoSizedCoolingValue, FractionOfAutoSizedHeatingValue)
769 : int CoolingCapMethod; // - Method for cooling capacity scaledsizing calculation (CoolingDesignCapacity, CapacityPerFloorArea,
770 : // FractionOfAutosizedHeatingCapacity)
771 : int HeatingCapMethod; // - Method for heatiing capacity scaledsizing calculation (HeatingDesignCapacity, CapacityPerFloorArea,
772 : // FracOfAutosizedHeatingCapacity)
773 : Real64 MaxCoolAirVolFlow; // - maximum cooling supply air flow rate, m3/s
774 : Real64 MaxHeatAirVolFlow; // - maximum heating supply air flow rate, m3/s
775 : Real64 MaxNoCoolHeatAirVolFlow; // - maximum supply air flow rate when no cooling or heating, m3/s
776 : Real64 ScaledCoolingCapacity; // - scaled maximum cooling capacity of zone HVAC equipment, W
777 : Real64 ScaledHeatingCapacity; // - scaled maximum heating capacity of zone HVAC equipment, W
778 : bool RequestAutoSize; // - true if autosizing is requested
779 :
780 : // Default Constructor
781 4 : ZoneHVACSizingData()
782 8 : : CoolingSAFMethod(0), HeatingSAFMethod(0), NoCoolHeatSAFMethod(0), CoolingCapMethod(0), HeatingCapMethod(0), MaxCoolAirVolFlow(0.0),
783 4 : MaxHeatAirVolFlow(0.0), MaxNoCoolHeatAirVolFlow(0.0), ScaledCoolingCapacity(0.0), ScaledHeatingCapacity(0.0), RequestAutoSize(false)
784 : {
785 4 : }
786 : };
787 :
788 : // Data Structure for air terminal sizing, referenced by ZoneHVAC:AirDistributionUnit
789 : struct AirTerminalSizingSpecData
790 : {
791 : // Members
792 : std::string Name;
793 : Real64 DesSensCoolingFrac; // Fraction of Design Sensible Cooling Load
794 : Real64 DesCoolSATRatio; // Cooling Design Supply Air Temperature Difference Ratio
795 : Real64 DesSensHeatingFrac; // Fraction of Design Sensible Heating Load
796 : Real64 DesHeatSATRatio; // Heating Design Supply Air Temperature Difference Ratio
797 : Real64 MinOAFrac; // Fraction of Minimum Outdoor Air Flow
798 :
799 : // Default Constructor
800 24 : AirTerminalSizingSpecData() : DesSensCoolingFrac(1.0), DesCoolSATRatio(1.0), DesSensHeatingFrac(1.0), DesHeatSATRatio(1.0), MinOAFrac(1.0)
801 : {
802 24 : }
803 : };
804 :
805 : struct SystemSizingInputData
806 : {
807 : // Members
808 : std::string AirPriLoopName; // name of an AirLoopHVAC object
809 : int AirLoopNum = 0; // index number of air loop
810 : LoadSizing loadSizingType = LoadSizing::Invalid; // type of load to size on sensible, latent, total, ventilation
811 : DataSizing::SizingConcurrence SizingOption = DataSizing::SizingConcurrence::NonCoincident; // noncoincident, coincident
812 : OAControl CoolOAOption = OAControl::Invalid; // 1 = use 100% outside air; 2 = use min OA; for cooling sizing
813 : OAControl HeatOAOption = OAControl::Invalid; // 1 = use 100% outside air; 2 = use min OA; for heating sizing
814 : Real64 DesOutAirVolFlow = 0.0; // design (minimum) outside air flow rate [m3/s]
815 : Real64 SysAirMinFlowRat = 0.0; // minimum system air flow ratio for heating, Central Heating Maximum System Air Flow Ratio
816 : bool SysAirMinFlowRatWasAutoSized = false; // true if central heating maximum system air flow ratio was autosize on input
817 : Real64 PreheatTemp = 0.0; // preheat design set temperature [C]
818 : Real64 PrecoolTemp = 0.0; // precool design set temperature [C]
819 : Real64 PreheatHumRat = 0.0; // preheat design humidity ratio [kg water/kg dry air]
820 : Real64 PrecoolHumRat = 0.0; // precool design humidity ratio [kg water/kg dry air]
821 : Real64 CoolSupTemp = 0.0; // cooling design supply air temperature [C]
822 : Real64 HeatSupTemp = 0.0; // heating design supply air temperature [C]
823 : Real64 CoolSupHumRat = 0.0; // cooling design supply air humidity ratio [kg water/kg dry air]
824 : Real64 HeatSupHumRat = 0.0; // heating design supply air humidity ratio [kg water/kg dry air]
825 : AirflowSizingMethod CoolAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get system cooling design air flow rates;
826 : // 1 = calc from des day simulation; 2=m3/s per system, user input
827 : Real64 DesCoolAirFlow = 0.0; // design system supply air flow rate for cooling[m3/s]
828 : AirflowSizingMethod HeatAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get system heating design air flow rates;
829 : // 1 = calc from des day simulation; 2=m3/s per zone, user input
830 : Real64 DesHeatAirFlow = 0.0; // design system heating supply air flow rate [m3/s]
831 : int ScaleCoolSAFMethod = 0; // choice of how to get system cooling scalable air flow rates; // (FlowPerFloorArea,
832 : // FractionOfAutosizedCoolingAirflow, FlowPerCoolingCapacity)
833 : int ScaleHeatSAFMethod = 0; // choice of how to get system heating scalable air flow rates; // (FlowPerFloorArea,
834 : // FractionOfAutosizedCoolingAirflow, FractionOfAutosizedHeatingAirflow, FlowPerHeatingCapacity)
835 : SysOAMethod SystemOAMethod = SysOAMethod::Invalid; // System Outdoor Air Method; 1 = SOAM_ZoneSum, 2 = SOAM_VRP, 9 = SOAM_SP
836 : Real64 MaxZoneOAFraction = 0.0; // maximum value of min OA for zones served by system
837 : bool OAAutoSized = false; // Set to true if design OA vol flow is set to 'autosize' in Sizing:System
838 : int CoolingCapMethod = 0; // - Method for cooling capacity scaledsizing calculation (CoolingDesignCapacity, CapacityPerFloorArea,
839 : // FractionOfAutosizedCoolingCapacity)
840 : int HeatingCapMethod = 0; // - Method for heatiing capacity scaledsizing calculation (HeatingDesignCapacity, CapacityPerFloorArea,
841 : // FracOfAutosizedHeatingCapacity)
842 : Real64 ScaledCoolingCapacity = 0.0; // - scaled maximum cooling capacity of cooling coil in an air loop
843 : Real64 ScaledHeatingCapacity = 0.0; // - scaled maximum heating capacity of cooling coil in an air loop
844 : Real64 FloorAreaOnAirLoopCooled = 0.0; // total floor of cooled zones served by an airloop
845 : Real64 FloorAreaOnAirLoopHeated = 0.0; // total floor of heated zones served by an airloop
846 : Real64 FlowPerFloorAreaCooled = 0.0; // ratio of cooling supply air flow rate to total floor area of cooled zones served by an airloop
847 : Real64 FlowPerFloorAreaHeated = 0.0; // ratio of cooling supply air flow rate to total floor area of cooled zones served by an airloop
848 : Real64 FractionOfAutosizedCoolingAirflow = 1.0; // fraction of of cooling supply air flow rate an airloop
849 : Real64 FractionOfAutosizedHeatingAirflow = 1.0; // fraction of of heating supply air flow rate an airloop
850 : Real64 FlowPerCoolingCapacity = 0.0; // ratio of cooling supply air flow rate to cooling capacity of an airloop
851 : Real64 FlowPerHeatingCapacity = 0.0; // ratio of heating supply air flow rate to heating capacity of an airloop
852 : PeakLoad coolingPeakLoad = PeakLoad::Invalid; // Type of peak to size cooling coils on SensibleCooling or TotalCooling
853 : CapacityControl CoolCapControl = CapacityControl::Invalid; // type of control of cooling coil VAV, Bypass, VT, OnOff
854 : Real64 OccupantDiversity = 0.0; // occupant diversity
855 : };
856 :
857 : struct SystemSizingData // Contains data for system sizing
858 : {
859 : // Members
860 : std::string AirPriLoopName; // name of an AirLoopHVAC object
861 : std::string CoolDesDay; // name of a cooling design day
862 : std::string HeatDesDay; // name of a heating design day
863 : LoadSizing loadSizingType = LoadSizing::Invalid; // type of load to size on Sensible, Latent, Total, Ventilation
864 : DataSizing::SizingConcurrence SizingOption = DataSizing::SizingConcurrence::NonCoincident; // noncoincident, coincident.
865 : OAControl CoolOAOption = OAControl::Invalid; // 1 = use 100% outside air; 2 = use min OA; for cooling sizing
866 : OAControl HeatOAOption = OAControl::Invalid; // 1 = use 100% outside air; 2 = use min OA; for heating sizing
867 : Real64 DesOutAirVolFlow = 0.0; // design (minimum) outside air flow rate [m3/s]
868 : Real64 SysAirMinFlowRat = 0.0; // minimum system air flow ratio for heating, Central Heating Maximum System Air Flow Ratio
869 : bool SysAirMinFlowRatWasAutoSized = false; // true if central heating maximum system air flow ratio was autosize on input
870 : Real64 PreheatTemp = 0.0; // preheat design set temperature
871 : Real64 PrecoolTemp = 0.0; // precool design set temperature [C]
872 : Real64 PreheatHumRat = 0.0; // preheat design humidity ratio [kg water/kg dry air]
873 : Real64 PrecoolHumRat = 0.0; // precool design humidity ratio [kg water/kg dry air]
874 : Real64 CoolSupTemp = 0.0; // cooling design supply air temperature [C]
875 : Real64 HeatSupTemp = 0.0; // heating design supply air temperature[C]
876 : Real64 CoolSupHumRat = 0.0; // cooling design supply air humidity ratio [kg water/kg dry air]
877 : Real64 HeatSupHumRat = 0.0; // heating design supply air humidity ratio [kg water/kg dry air]
878 : AirflowSizingMethod CoolAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get system design cooling air flow rates;
879 : // 1 = calc from des day simulation; 2=m3/s per system, user input
880 : AirflowSizingMethod HeatAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get system design heating air flow rates;
881 : // 1 = calc from des day simulation; 2=m3/s per system, user input
882 : Real64 InpDesCoolAirFlow = 0.0; // input design system supply air flow rate [m3/s]
883 : Real64 InpDesHeatAirFlow = 0.0; // input design system heating supply air flow rate [m3/s]
884 : Real64 CoinCoolMassFlow = 0.0; // coincident peak cooling mass flow rate [kg/s]
885 : bool EMSOverrideCoinCoolMassFlowOn = false; // If true, EMS to change coincident peak cooling mass flow rate
886 : Real64 EMSValueCoinCoolMassFlow = 0.0; // Value EMS wants for coincident peak cooling mass flow rate [kg/s]
887 : Real64 CoinHeatMassFlow = 0.0; // coincident peak heating mass flow rate [kg/s]
888 : bool EMSOverrideCoinHeatMassFlowOn = false; // If true, EMS to set coincident peak heating mass flow rate
889 : Real64 EMSValueCoinHeatMassFlow = 0.0; // Value EMS wants for coincident peak heating mass flow rate [kg/s]
890 : Real64 NonCoinCoolMassFlow = 0.0; // noncoincident peak cooling mass flow rate [kg/s]
891 : bool EMSOverrideNonCoinCoolMassFlowOn = false; // true, EMS to set noncoincident peak cooling mass flow rate
892 : Real64 EMSValueNonCoinCoolMassFlow = 0.0; // Value EMS for noncoincident peak cooling mass flow rate [kg/s]
893 : Real64 NonCoinHeatMassFlow = 0.0; // noncoincident peak heating mass flow rate [kg/s]
894 : bool EMSOverrideNonCoinHeatMassFlowOn = false; // true, EMS to set noncoincident peak heating mass flow rate
895 : Real64 EMSValueNonCoinHeatMassFlow = 0.0; // Value EMS for noncoincident peak heating mass flow rate [kg/s]
896 : Real64 DesMainVolFlow = 0.0; // design main supply duct volume flow [m3/s]
897 : bool EMSOverrideDesMainVolFlowOn = false; // If true, EMS is acting to change DesMainVolFlow
898 : Real64 EMSValueDesMainVolFlow = 0.0; // Value EMS providing for design main supply duct volume flow [m3/s]
899 : Real64 DesHeatVolFlow = 0.0; // design heat supply duct volume flow [m3/s]
900 : bool EMSOverrideDesHeatVolFlowOn = false; // If true, EMS is acting to change DesCoolVolFlow
901 : Real64 EMSValueDesHeatVolFlow = 0.0; // Value EMS providing for design cool supply duct volume flow [m3/s]
902 : Real64 DesCoolVolFlow = 0.0; // design cool supply duct volume flow [m3/s]
903 : bool EMSOverrideDesCoolVolFlowOn = false; // If true, EMS is acting to change DesCoolVolFlow
904 : Real64 EMSValueDesCoolVolFlow = 0.0; // Value EMS providing for design cool supply duct volume flow [m3/s]
905 : Real64 SensCoolCap = 0.0; // design sensible cooling capacity [W]
906 : Real64 TotCoolCap = 0.0; // design total cooling capacity [W]
907 : Real64 HeatCap = 0.0; // design heating capacity [W]
908 : Real64 PreheatCap = 0.0; // design preheat capacity [W]
909 : Real64 MixTempAtCoolPeak = 0.0; // design mixed air temperature for cooling [C]
910 : Real64 MixHumRatAtCoolPeak = 0.0; // design mixed air hum ratio for cooling [kg water/kg dry air]
911 : Real64 RetTempAtCoolPeak = 0.0; // design return air temperature for cooling [C]
912 : Real64 RetHumRatAtCoolPeak = 0.0; // design return air hum ratio for cooling [kg water/kg dry air]
913 : Real64 OutTempAtCoolPeak = 0.0; // design outside air temperature for cooling [C]
914 : Real64 OutHumRatAtCoolPeak = 0.0; // design outside air hum ratio for cooling [kg water/kg dry air]
915 : Real64 MassFlowAtCoolPeak = 0.0; // air mass flow rate at the cooling peak [kg/s]
916 : Real64 HeatMixTemp = 0.0; // design mixed air temperature for heating [C]
917 : Real64 HeatMixHumRat = 0.0; // design mixed air hum ratio for heating [kg water/kg dry air]
918 : Real64 HeatRetTemp = 0.0; // design return air temperature for heating [C]
919 : Real64 HeatRetHumRat = 0.0; // design return air hum ratio for heating [kg water/kg dry air]
920 : Real64 HeatOutTemp = 0.0; // design outside air temperature for heating [C]
921 : Real64 HeatOutHumRat = 0.0; // design outside air hum ratio for Heating [kg water/kg dry air]
922 : Real64 DesCoolVolFlowMin = 0.0; // design minimum system cooling flow rate [m3/s]
923 : Array1D<Real64> HeatFlowSeq; // daily sequence of system heating air mass flow rate
924 : // (zone time step)
925 : Array1D<Real64> SumZoneHeatLoadSeq; // daily sequence of zones summed heating load [W]
926 : // (zone time step)
927 : Array1D<Real64> CoolFlowSeq; // daily sequence of system cooling air mass flow rate
928 : // (zone time step)
929 : Array1D<Real64> SumZoneCoolLoadSeq; // daily sequence of zones summed cooling load [W]
930 : // (zone time step)
931 : Array1D<Real64> CoolZoneAvgTempSeq; // daily sequence of zones flow weighted average temperature [C]
932 : // (zone time step)
933 : Array1D<Real64> HeatZoneAvgTempSeq; // daily sequence of zones flow weighted average temperature [C]
934 : // (zone time step)
935 : Array1D<Real64> SensCoolCapSeq; // daily sequence of system sensible cooling capacity
936 : // (zone time step)
937 : Array1D<Real64> TotCoolCapSeq; // daily sequence of system total cooling capacity
938 : // (zone time step)
939 : Array1D<Real64> HeatCapSeq; // daily sequence of system heating capacity [zone time step]
940 : Array1D<Real64> PreheatCapSeq; // daily sequence of system preheat capacity [zone time step]
941 : Array1D<Real64> SysCoolRetTempSeq; // daily sequence of system cooling return temperatures [C]
942 : // [zone time step]
943 : Array1D<Real64> SysCoolRetHumRatSeq; // daily sequence of system cooling return humidity ratios
944 : // [kg water/kg dry air] [zone time step]
945 : Array1D<Real64> SysHeatRetTempSeq; // daily sequence of system heating return temperatures [C]
946 : // [zone time step]
947 : Array1D<Real64> SysHeatRetHumRatSeq; // daily sequence of system heating return humidity ratios
948 : // [kg water/kg dry air] [zone time step]
949 : Array1D<Real64> SysCoolOutTempSeq; // daily sequence of system cooling outside temperatures [C]
950 : // [zone time step]
951 : Array1D<Real64> SysCoolOutHumRatSeq; // daily sequence of system cooling outside humidity ratios
952 : // [kg water/kg dry air] [zone time step]
953 : Array1D<Real64> SysHeatOutTempSeq; // daily sequence of system heating outside temperatures [C]
954 : // [zone time step]
955 : Array1D<Real64> SysHeatOutHumRatSeq; // daily sequence of system heating outside humidity ratios
956 : // [kg water/kg dry air] [zone time step]
957 : Array1D<Real64> SysDOASHeatAddSeq; // daily sequence of heat addition rate from DOAS supply air [W]
958 : Array1D<Real64> SysDOASLatAddSeq; // daily sequence of latent heat addition rate from DOAS supply air [W]
959 : SysOAMethod SystemOAMethod = SysOAMethod::Invalid; // System Outdoor Air Method; 1 = SOAM_ZoneSum, 2 = SOAM_VRP, 9 = SOAM_SP
960 : Real64 MaxZoneOAFraction = 0.0; // maximum value of min OA for zones served by system
961 : Real64 SysUncOA = 0.0; // uncorrected system outdoor air flow based on zone people and zone area
962 : bool OAAutoSized = false; // Set to true if design OA vol flow is set to 'autosize'
963 : int ScaleCoolSAFMethod = 0; // choice of how to get system cooling scalable air flow rates; (FlowPerFloorArea,
964 : // FractionOfAutosizedCoolingAirflow,
965 : // FlowPerCoolingCapacity)
966 : int ScaleHeatSAFMethod = 0; // choice of how to get system heating scalable air flow rates; (FlowPerFloorArea,
967 : // FractionOfAutosizedCoolingAirflow,
968 : // FractionOfAutosizedHeatingAirflow, FlowPerHeatingCapacity)
969 : int CoolingCapMethod = 0; // - Method for cooling capacity scaledsizing calculation (CoolingDesignCapacity, CapacityPerFloorArea,
970 : // FractionOfAutosizedCoolingCapacity)
971 : int HeatingCapMethod = 0; // - Method for heatiing capacity scaledsizing calculation (HeatingDesignCapacity, CapacityPerFloorArea,
972 : // FracOfAutosizedHeatingCapacity)
973 : Real64 ScaledCoolingCapacity = 0.0; // - scaled maximum cooling capacity of cooling coil in an air loop
974 : Real64 ScaledHeatingCapacity = 0.0; // - scaled maximum heating capacity of cooling coil in an air loop
975 : Real64 FloorAreaOnAirLoopCooled = 0.0; // total floor of cooled zones served by an airloop
976 : Real64 FloorAreaOnAirLoopHeated = 0.0; // total floor of heated zones served by an airloop
977 : Real64 FlowPerFloorAreaCooled = 0.0; // ratio of cooling supply air flow rate to total floor area of cooled zones served by an airloop
978 : Real64 FlowPerFloorAreaHeated = 0.0; // ratio of cooling supply air flow rate to total floor area of cooled zones served by an airloop
979 : Real64 FractionOfAutosizedCoolingAirflow = 0.0; // fraction of of cooling supply air flow rate an airloop
980 : Real64 FractionOfAutosizedHeatingAirflow = 0.0; // fraction of of heating supply air flow rate an airloop
981 : Real64 FlowPerCoolingCapacity = 0.0; // ratio of cooling supply air flow rate to cooling capacity of an airloop
982 : Real64 FlowPerHeatingCapacity = 0.0; // ratio of heating supply air flow rate to heating capacity of an airloop
983 : Real64 FractionOfAutosizedCoolingCapacity = 0.0; // fraction of of cooling total capacity
984 : Real64 FractionOfAutosizedHeatingCapacity = 0.0; // fraction of of heating total capacity
985 : Real64 CoolingTotalCapacity = 0.0; // system total cooling capacity
986 : Real64 HeatingTotalCapacity = 0.0; // system total heating capacity
987 : PeakLoad coolingPeakLoad = PeakLoad::Invalid; // Type of peak to size cooling coils on SensibleCooling or TotalCooling
988 : CapacityControl CoolCapControl = CapacityControl::Invalid; // type of control of cooling coil VAV, Bypass, VT, OnOff
989 : bool sysSizeHeatingDominant = false;
990 : bool sysSizeCoolingDominant = false;
991 :
992 : Real64 CoinCoolCoilMassFlow = 0.0; // coincident volume flow at time of cooling coil sensible+latent peak [m3/s]
993 : Real64 CoinHeatCoilMassFlow = 0.0; // coincident volume flow at time of heating coil sensible peak [m3/s]
994 : Real64 DesCoolCoilVolFlow = 0.0; // design cooling air volume flow rate at time of coil sens+latent peak [m3/s]
995 : Real64 DesHeatCoilVolFlow = 0.0; // design heating air volume flow rate at time of coil sens peak [m3/s]
996 : Real64 DesMainCoilVolFlow = 0.0; // design main supply duct volume flow at time of coil peak [m3/s]
997 : // These are for reporting purposes
998 :
999 : int SysHeatCoilTimeStepPk = 0; // timestep in day of heating coil peak
1000 : int SysHeatAirTimeStepPk = 0; // timestep in day of heating airflow peak
1001 : int HeatDDNum = 0; // index of design day for heating
1002 : int CoolDDNum = 0; // index of design day for cooling
1003 :
1004 : Real64 SysCoolCoinSpaceSens = 0.0; // sum of zone space sensible cooling loads at coincident peak
1005 : Real64 SysHeatCoinSpaceSens = 0.0; // sum of zone space sensible heating loads at coincident peak
1006 : Real64 SysDesCoolLoad = 0.0; // system peak load with coincident
1007 : int SysCoolLoadTimeStepPk = 0; // timestep in day of cooling load peak
1008 : Real64 SysDesHeatLoad = 0.0; // system peak load with coincident
1009 : int SysHeatLoadTimeStepPk = 0; // timestep in day of cooling load peak
1010 : };
1011 :
1012 : struct SysSizPeakDDNumData
1013 : {
1014 : // Members
1015 : int SensCoolPeakDD; // design day containing the sensible cooling peak
1016 : std::string cSensCoolPeakDDDate; // date string of design day causing sensible cooling peak
1017 : int TotCoolPeakDD; // design day containing total cooling peak
1018 : std::string cTotCoolPeakDDDate; // date string of design day causing total cooling peak
1019 : int CoolFlowPeakDD; // design day containing the cooling air flow peak
1020 : std::string cCoolFlowPeakDDDate; // date string of design day causing cooling air flow peak
1021 : int HeatPeakDD; // design day containing the heating peak
1022 : std::string cHeatPeakDDDate; // date string of design day causing heating peak
1023 : Array1D<int> TimeStepAtSensCoolPk; // time step of the sensible cooling peak
1024 : Array1D<int> TimeStepAtTotCoolPk; // time step of the total cooling peak
1025 : Array1D<int> TimeStepAtCoolFlowPk; // time step of the cooling air flow peak
1026 : Array1D<int> TimeStepAtHeatPk; // time step of the heating peak
1027 :
1028 : // Default Constructor
1029 1301 : SysSizPeakDDNumData() : SensCoolPeakDD(0), TotCoolPeakDD(0), CoolFlowPeakDD(0), HeatPeakDD(0)
1030 : {
1031 1301 : }
1032 : };
1033 :
1034 : struct PlantSizingData
1035 : {
1036 : // Members
1037 : std::string PlantLoopName; // name of PLANT LOOP or CONDENSER LOOP object
1038 : TypeOfPlantLoop LoopType = TypeOfPlantLoop::Invalid; // type of loop: 1=heating, 2=cooling, 3=condenser
1039 : Real64 ExitTemp = 0.0; // loop design exit (supply) temperature [C]
1040 : Real64 DeltaT = 0.0; // loop design temperature drop (or rise) [DelK]
1041 : int ConcurrenceOption = 0; // sizing option for coincident or noncoincident
1042 : int NumTimeStepsInAvg = 0; // number of zone timesteps in the averaging window for coincident plant flow
1043 : int SizingFactorOption = 0; // option for what sizing factor to apply
1044 : // Calculated
1045 : Real64 DesVolFlowRate = 0.0; // loop design flow rate in m3/s
1046 : bool VolFlowSizingDone = 0; // flag to indicate when this loop has finished sizing flow rate
1047 : Real64 PlantSizFac = 0.0; // hold the loop and pump sizing factor
1048 : Real64 DesCapacity = 0.0; // final capacity in W
1049 : };
1050 :
1051 : // based on ZoneSizingData but only have member variables that are related to the CheckSum/
1052 : struct FacilitySizingData
1053 : {
1054 : // Members
1055 : int CoolDDNum; // design day index of design day causing heating peak
1056 : int HeatDDNum; // design day index of design day causing heating peak
1057 : int TimeStepNumAtCoolMax; // time step number (in day) at cooling peak
1058 : Array1D<Real64> DOASHeatAddSeq; // daily sequence of zone DOAS heat addition rate (zone time step) [W]
1059 : Array1D<Real64> DOASLatAddSeq; // daily sequence of zone DOAS latent heat addition rate (zone time step) [W]
1060 : Array1D<Real64> CoolOutHumRatSeq; // daily sequence of outdoor humidity ratios (cooling, zone time step)
1061 : Array1D<Real64> CoolOutTempSeq; // daily sequence of outdoor temperatures (cooling, zone time step)
1062 : Array1D<Real64> CoolZoneTempSeq; // daily sequence of zone temperatures (cooling, zone time step)
1063 : Array1D<Real64> CoolLoadSeq; // daily sequence of cooling load (cooling, zone time step)
1064 : Real64 DesCoolLoad; // zone design cooling load [W]
1065 : int TimeStepNumAtHeatMax; // time step number (in day) at Heating peak
1066 : Array1D<Real64> HeatOutHumRatSeq; // daily sequence of outdoor humidity ratios (heating, zone time step)
1067 : Array1D<Real64> HeatOutTempSeq; // daily sequence of outdoor temperatures (heating, zone time step)
1068 : Array1D<Real64> HeatZoneTempSeq; // daily sequence of zone temperatures (heating, zone time step)
1069 : Array1D<Real64> HeatLoadSeq; // daily sequence of heating load (cooling, zone time step)
1070 : Real64 DesHeatLoad; // zone design heating load [W]
1071 :
1072 : // Default Constructor
1073 2124 : FacilitySizingData() : CoolDDNum(0), HeatDDNum(0), TimeStepNumAtCoolMax(0), DesCoolLoad(0.0), TimeStepNumAtHeatMax(0), DesHeatLoad(0.0)
1074 : {
1075 2124 : }
1076 : };
1077 :
1078 : struct DesDayWeathData
1079 : {
1080 : // Members
1081 : std::string DateString; // date of design day weather values
1082 : Array1D<Real64> Temp; // design day temperatures at the major time step
1083 : Array1D<Real64> HumRat; // design day humidity ratios at the major time step
1084 : Array1D<Real64> Press; // design day barometric pressure at the major time step
1085 : };
1086 :
1087 : struct CompDesWaterFlowData // design water flow rate for components that use water as an
1088 : {
1089 : // Members
1090 : // energy source or sink
1091 : int SupNode; // water inlet node number (condenser side for water / water)
1092 : Real64 DesVolFlowRate; // water design flow rate [m3/s]
1093 :
1094 : // Default Constructor
1095 920 : CompDesWaterFlowData() : SupNode(0), DesVolFlowRate(0.0)
1096 : {
1097 920 : }
1098 :
1099 : // Member Constructor
1100 6294 : CompDesWaterFlowData(int SupNode, // water inlet node number (condenser side for water / water)
1101 : Real64 DesVolFlowRate // water design flow rate [m3/s]
1102 : )
1103 6294 : : SupNode(SupNode), DesVolFlowRate(DesVolFlowRate)
1104 : {
1105 6294 : }
1106 : };
1107 :
1108 : struct OARequirementsData
1109 : {
1110 : // Holds complete data for a single DesignSpecification:OutdoorAir object or
1111 : // a list of indexes from a DesignSpecification:OutdoorAir:SpaceList object
1112 : std::string Name; // Name of DesignSpecification:OutdoorAir or DesignSpecification:OutdoorAir:SpaceList object
1113 : int numDSOA = 0; // Number of DesignSpecification:OutdoorAir objects for this instance (zero if not a list)
1114 : EPVector<int> dsoaIndexes; // Indexes to DesignSpecification:OutdoorAir objects (if this is a DSOA:SpaceList object)
1115 : EPVector<std::string> dsoaSpaceNames; // Names of spaces if this is a (if this is a DSOA:SpaceList object)
1116 : EPVector<int> dsoaSpaceIndexes; // Indexes to Spaces (if this is a DSOA:SpaceList object)
1117 : OAFlowCalcMethod OAFlowMethod =
1118 : OAFlowCalcMethod::PerPerson; // - Method for OA flow calculation (Flow/Person, Flow/Zone, Flow/Area, FlowACH, Sum, Maximum)
1119 : Real64 OAFlowPerPerson = 0.0; // - OA requirement per person
1120 : Real64 OAFlowPerArea = 0.0; // - OA requirement per zone area
1121 : Real64 OAFlowPerZone = 0.0; // - OA requirement per zone
1122 : Real64 OAFlowACH = 0.0; // - OA requirement per zone per hour
1123 : int OAFlowFracSchPtr = ScheduleManager::ScheduleAlwaysOn; // - Fraction schedule applied to total OA requirement
1124 : int OAPropCtlMinRateSchPtr =
1125 : ScheduleManager::ScheduleAlwaysOn; // - Fraction schedule applied to Proportional Control Minimum Outdoor Air Flow Rate
1126 : int CO2MaxMinLimitErrorCount = 0; // Counter when max CO2 concentration < min CO2 concentration for SOAM_ProportionalControlSchOcc
1127 : int CO2MaxMinLimitErrorIndex = 0; // Index for max CO2 concentration < min CO2 concentration recurring error message for
1128 : // SOAM_ProportionalControlSchOcc
1129 : int CO2GainErrorCount = 0; // Counter when CO2 generation from people is zero for SOAM_ProportionalControlSchOcc
1130 : int CO2GainErrorIndex = 0; // Index for recurring error message when CO2 generation from people is zero for SOAM_ProportionalControlSchOcc
1131 : bool myEnvrnFlag = true;
1132 :
1133 : Real64 desFlowPerZoneArea(EnergyPlusData &state,
1134 : int const actualZoneNum // Zone index
1135 : );
1136 :
1137 : Real64 desFlowPerZonePerson(EnergyPlusData &state,
1138 : int const actualZoneNum // Zone index
1139 : );
1140 :
1141 : Real64 calcOAFlowRate(EnergyPlusData &state,
1142 : int ActualZoneNum, // Zone index
1143 : bool UseOccSchFlag, // Zone occupancy schedule will be used instead of using total zone occupancy
1144 : bool UseMinOASchFlag, // Use min OA schedule in DesignSpecification:OutdoorAir object
1145 : bool const PerPersonNotSet, // when calculation should not include occupants (e.g., dual duct)
1146 : bool const MaxOAVolFlowFlag, // TRUE when calculation uses occupancy schedule (e.g., dual duct)
1147 : int const spaceNum = 0 // Space index (if applicable)
1148 : );
1149 : };
1150 :
1151 : struct ZoneAirDistributionData
1152 : {
1153 : // Members
1154 : std::string Name;
1155 : std::string ZoneADEffSchName; // - Zone air distribution effectiveness schedule name
1156 : Real64 ZoneADEffCooling; // - Zone air distribution effectiveness in cooling mode
1157 : Real64 ZoneADEffHeating; // - Zone air distribution effectiveness in heating mode
1158 : Real64 ZoneSecondaryRecirculation; // - Zone air secondary recirculation ratio
1159 : int ZoneADEffSchPtr; // - Zone air distribution effectiveness schedule index
1160 : Real64 ZoneVentilationEff; // Zone ventilation effectiveness
1161 :
1162 : // Default Constructor
1163 617 : ZoneAirDistributionData()
1164 617 : : ZoneADEffCooling(1.0), ZoneADEffHeating(1.0), ZoneSecondaryRecirculation(0.0), ZoneADEffSchPtr(0), ZoneVentilationEff(0.0)
1165 : {
1166 617 : }
1167 :
1168 : Real64 calculateEz(EnergyPlusData &state, int ZoneNum); // Zone index
1169 : };
1170 :
1171 : // Resets Data globals so that previously set variables are not used in other equipment models
1172 : void resetHVACSizingGlobals(EnergyPlusData &state,
1173 : int curZoneEqNum,
1174 : int curSysNum,
1175 : bool &firstPassFlag // Can be set to false during the routine
1176 : );
1177 :
1178 : void GetCoilDesFlowT(EnergyPlusData &state,
1179 : int SysNum, // central air system index
1180 : Real64 CpAir, // specific heat to be used in calculations [J/kgC]
1181 : Real64 &DesFlow, // returned design mass flow [kg/s]
1182 : Real64 &DesExitTemp, // returned design coil exit temperature [kg/s]
1183 : Real64 &DesExitHumRat // returned design coil exit humidity ratio [kg/kg]
1184 : );
1185 :
1186 : Real64 calcDesignSpecificationOutdoorAir(EnergyPlusData &state,
1187 : int const DSOAPtr, // Pointer to DesignSpecification:OutdoorAir object
1188 : int const ActualZoneNum, // Zone index
1189 : bool const UseOccSchFlag, // Zone occupancy schedule will be used instead of using total zone occupancy
1190 : bool const UseMinOASchFlag, // Use min OA schedule in DesignSpecification:OutdoorAir object
1191 : bool const PerPersonNotSet = false, // when calculation should not include occupants (e.g., dual duct)
1192 : bool const MaxOAVolFlowFlag = false // TRUE when calculation uses occupancy schedule (e.g., dual duct)
1193 : );
1194 :
1195 : } // namespace DataSizing
1196 :
1197 : struct SizingData : BaseGlobalStruct
1198 : {
1199 : int NumOARequirements = 0; // Number of OA Requirements objects
1200 : int NumZoneAirDistribution = 0; // Number of zone air distribution objects
1201 : int NumZoneSizingInput = 0; // Number of Zone Sizing objects
1202 : int NumSysSizInput = 0; // Number of System Sizing objects
1203 : int NumPltSizInput = 0; // Number of Plant Sizing objects
1204 : int CurSysNum = 0; // Current Air System index (0 if not in air loop)
1205 : int CurOASysNum = 0; // Current outside air system index (0 if not in OA Sys)
1206 : int CurZoneEqNum = 0; // Current Zone Equipment index (0 if not simulating ZoneEq)
1207 : int CurTermUnitSizingNum = 0; // Current terminal unit sizing index for TermUnitSizing and TermUnitFinalZoneSizing
1208 : int CurBranchNum = 0; // Index of branch being simulated (or 0 if not air loop)
1209 : HVAC::AirDuctType CurDuctType = HVAC::AirDuctType::Invalid; // Duct type of current branch
1210 : int CurLoopNum = 0; // the current plant loop index
1211 : int CurCondLoopNum = 0; // the current condenser loop number
1212 : int CurEnvirNumSimDay = 0; // current environment number for day simulated
1213 : int CurOverallSimDay = 0; // current day of simulation
1214 : int NumTimeStepsInAvg = 0; // number of time steps in the averaging window for the design flow and load sequences
1215 : int SaveNumPlantComps = 0; // Number of components using water as an energy source or sink (e.g. water coils)
1216 : int DataTotCapCurveIndex = 0; // index to total capacity as a function of temperature curve
1217 : Real64 DataTotCapCurveValue = 0; // value of total capacity as a function of temperature curve for CoilVRF_FluidTCtrl_*
1218 : int DataPltSizCoolNum = 0; // index to cooling plant sizing data
1219 : int DataPltSizHeatNum = 0; // index to heating plant sizing data
1220 : int DataWaterLoopNum = 0; // index to plant water loop
1221 : int DataCoilNum = 0; // index to coil object
1222 : HVAC::FanOp DataFanOp = HVAC::FanOp::Invalid; // fan operating mode (FanOp::Continuous or FanOp::Cycling)
1223 : bool DataCoilIsSuppHeater = false; // TRUE if heating coil used as supplemental heater
1224 : bool DataIsDXCoil = false; // TRUE if direct-expansion coil
1225 : bool DataAutosizable = true; // TRUE if component is autosizable
1226 : bool DataEMSOverrideON = false; // boolean determines if user relies on EMS to override autosizing
1227 : bool DataScalableSizingON = false; // boolean determines scalable flow sizing is specified
1228 : bool DataScalableCapSizingON = false; // boolean determines scalable capacity sizing is specified
1229 : bool DataSysScalableFlowSizingON = false; // boolean determines scalable system flow sizing is specified
1230 : bool DataSysScalableCapSizingON = false; // boolean determines scalable system capacity sizing is specified
1231 : bool SysSizingRunDone = false; // True if a system sizing run is successfully completed.
1232 : bool TermUnitSingDuct = false; // TRUE if a non-induction single duct terminal unit
1233 : bool TermUnitPIU = false; // TRUE if a powered induction terminal unit
1234 : bool TermUnitIU = false; // TRUE if an unpowered induction terminal unit
1235 : bool ZoneEqFanCoil = false; // TRUE if a 4 pipe fan coil unit is being simulated
1236 : bool ZoneEqOutdoorAirUnit = false; // TRUE if an OutdoorAirUnit is being simulated
1237 : bool ZoneEqUnitHeater = false; // TRUE if a unit heater is being simulated
1238 : bool ZoneEqUnitVent = false; // TRUE if a unit ventilator unit is being simulated
1239 : bool ZoneEqVentedSlab = false; // TRUE if a ventilated slab is being simulated
1240 : bool ZoneEqDXCoil = false; // TRUE if a ZoneHVAC DX coil is being simulated
1241 : bool ZoneEqUnitarySys = false; // TRUE if a zone UnitarySystem is being simulated
1242 : bool ZoneCoolingOnlyFan = false; // TRUE if a ZoneHVAC DX cooling coil is only coil in parent
1243 : bool ZoneHeatingOnlyFan = false; // TRUE if zone unit only does heating and contains a fam (such as Unit Heater)
1244 : bool ZoneSizingRunDone = false; // True if a zone sizing run has been successfully completed.
1245 : bool DataErrorsFound = false; // used for simulation termination when errors are found
1246 : bool DataDXCoolsLowSpeedsAutozize = false; // true allows reporting lower speed CoilCoolingCurveFits Autosize
1247 : Real64 AutoVsHardSizingThreshold = 0.1; // criteria threshold used to determine if user hard size and autosize disagree 10%
1248 : Real64 AutoVsHardSizingDeltaTempThreshold = 1.5; // temperature criteria threshold for autosize versus hard size [C]
1249 : Real64 DataCoilSizingAirInTemp = 0.0; // saves sizing data for use in coil object reporting
1250 : Real64 DataCoilSizingAirInHumRat = 0.0; // saves sizing data for use in coil object reporting
1251 : Real64 DataCoilSizingAirOutTemp = 0.0; // saves sizing data for use in coil object reporting
1252 : Real64 DataCoilSizingAirOutHumRat = 0.0; // saves sizing data for use in coil object reporting
1253 : Real64 DataCoilSizingFanCoolLoad = 0.0; // saves sizing data for use in coil object reporting
1254 : Real64 DataCoilSizingCapFT = 1.0; // saves sizing data for use in coil object reporting
1255 : bool DataDesAccountForFanHeat = true; // include fan heat when true
1256 : Real64 DataDesInletWaterTemp = 0.0; // coil inlet water temperature used for warning messages
1257 : Real64 DataDesInletAirHumRat = 0.0; // coil inlet air humidity ratio used for warning messages
1258 : Real64 DataDesInletAirTemp = 0.0; // coil inlet air temperature used for warning messages
1259 : Real64 DataDesOutletAirTemp = 0.0; // coil outlet air temperature used for sizing
1260 : Real64 DataDesOutletAirHumRat = 0.0; // coil air outlet humidity ratio used in sizing calculations [kg water / kg dry air]
1261 : Real64 DataCoolCoilCap = 0.0; // cooling coil capacity used for sizing with scalable inputs [W]
1262 : Real64 DataFlowUsedForSizing = 0.0; // air flow rate used for sizing with scalable inputs [m3/s]
1263 : Real64 DataAirFlowUsedForSizing = 0.0; // air flow rate used for sizing with scalable inputs [m3/s]
1264 : Real64 DataWaterFlowUsedForSizing = 0.0; // water flow rate used for sizing with scalable inputs [m3/s]
1265 : Real64 DataCapacityUsedForSizing = 0.0; // capacity used for sizing with scalable inputs [W]
1266 : Real64 DataDesignCoilCapacity = 0.0; // calculated capacity of coil at end of UA calculation
1267 : Real64 DataHeatSizeRatio = 1.0; // heating coil size as a ratio of cooling coil capacity
1268 : Real64 DataEMSOverride = 0.0; // value of EMS variable used to override autosizing
1269 : Real64 DataBypassFrac = 0.0; // value of bypass fraction for Coil:Cooling:DX:TwoStageWithHumidityControlMode coils
1270 : Real64 DataFracOfAutosizedCoolingAirflow = 1.0; // fraction of design cooling supply air flow rate
1271 : Real64 DataFracOfAutosizedHeatingAirflow = 1.0; // fraction of design heating supply air flow rate
1272 : Real64 DataFlowPerCoolingCapacity = 0.0; // cooling supply air flow per unit cooling capacity
1273 : Real64 DataFlowPerHeatingCapacity = 0.0; // heating supply air flow per unit heating capacity
1274 : Real64 DataFracOfAutosizedCoolingCapacity = 1.0; // fraction of autosized cooling capacity
1275 : Real64 DataFracOfAutosizedHeatingCapacity = 1.0; // fraction of autosized heating capacit
1276 : Real64 DataAutosizedCoolingCapacity = 0.0; // Autosized cooling capacity used for multiplying flow per capacity to get flow rate
1277 : Real64 DataAutosizedHeatingCapacity = 0.0; // Autosized heating capacit used for multiplying flow per capacity to get flow rate
1278 : Real64 DataConstantUsedForSizing = 0.0; // base value used for sizing inputs that are ratios of other inputs
1279 : Real64 DataFractionUsedForSizing = 0.0; // fractional value of base value used for sizing inputs that are ratios of other inputs
1280 : Real64 DataNonZoneNonAirloopValue = 0.0; // used when equipment is not located in a zone or airloop
1281 : Real64 DataSizingFraction = 1.0; // used when ratios of sizing is required
1282 : int DataZoneUsedForSizing = 0; // pointer to control zone for air loop equipment
1283 : int DataZoneNumber = 0; // a pointer to a served by zoneHVAC equipment
1284 : int NumZoneHVACSizing = 0; // Number of design specification zone HVAC sizing objects
1285 : int NumAirTerminalSizingSpec = 0; // Number of design specfication air terminal sizing objects
1286 : int NumAirTerminalUnits = 0; // Number of air terminal units (same as total number of zone inlet nodes)
1287 : Real64 DXCoolCap = 0.0; // The rated cooling capacity of a DX unit.
1288 : Real64 GlobalHeatSizingFactor = 0.0; // the global heating sizing ratio
1289 : Real64 GlobalCoolSizingFactor = 0.0; // the global cooling sizing ratio
1290 : Real64 SuppHeatCap = 0.0; // the heating capacity of the supplemental heater in a unitary system
1291 : Real64 UnitaryHeatCap = 0.0; // the heating capacity of a unitary system
1292 : char SizingFileColSep = DataStringGlobals::CharComma; // Character to separate columns in sizing outputs
1293 : int DataDesicDehumNum = 0; // index to desiccant dehumidifier
1294 : bool DataDesicRegCoil = false; // TRUE if heating coil desiccant regeneration coil
1295 : bool HRFlowSizingFlag = false; // True, if it is a heat recovery heat exchanger flow sizing
1296 : Real64 DataWaterCoilSizCoolDeltaT = 0.0; // used for sizing cooling coil water design flow rate
1297 : Real64 DataWaterCoilSizHeatDeltaT = 0.0; // used for sizing heating coil water design flow rate
1298 : bool DataNomCapInpMeth = false; // True if heating coil is sized by CoilPerfInpMeth == NomCa
1299 : HVAC::FanType DataFanType = HVAC::FanType::Invalid; // Fan type used during sizing
1300 : int DataFanIndex = -1; // Fan index used during sizing
1301 : HVAC::FanPlace DataFanPlacement = HVAC::FanPlace::Invalid; // identifies location of fan wrt coil
1302 : int DataDXSpeedNum = 0;
1303 : int DataCoolCoilType = -1;
1304 : int DataCoolCoilIndex = -1;
1305 : EPVector<DataSizing::OARequirementsData> OARequirements;
1306 : EPVector<DataSizing::ZoneAirDistributionData> ZoneAirDistribution;
1307 : EPVector<DataSizing::ZoneSizingInputData> ZoneSizingInput; // Input data for zone sizing
1308 : Array2D<DataSizing::ZoneSizingData> ZoneSizing; // Data for zone sizing (all data, all design)
1309 : EPVector<DataSizing::ZoneSizingData> FinalZoneSizing; // Final data for zone sizing including effects
1310 : Array2D<DataSizing::ZoneSizingData> CalcZoneSizing; // Data for zone sizing (all data)
1311 : EPVector<DataSizing::ZoneSizingData> CalcFinalZoneSizing; // Final data for zone sizing (calculated only)
1312 : Array2D<DataSizing::ZoneSizingData> SpaceSizing; // Data for space sizing (all data, all design)
1313 : EPVector<DataSizing::ZoneSizingData> FinalSpaceSizing; // Final data for space sizing including effects
1314 : Array2D<DataSizing::ZoneSizingData> CalcSpaceSizing; // Data for space sizing (all data)
1315 : EPVector<DataSizing::ZoneSizingData> CalcFinalSpaceSizing; // Final data for space sizing (calculated only)
1316 : EPVector<DataSizing::TermUnitZoneSizingData> TermUnitFinalZoneSizing; // Final data for sizing terminal units (indexed per terminal unit)
1317 : EPVector<DataSizing::SystemSizingInputData> SysSizInput; // Input data array for system sizing object
1318 : Array2D<DataSizing::SystemSizingData> SysSizing; // Data array for system sizing (all data)
1319 : EPVector<DataSizing::SystemSizingData> FinalSysSizing; // Data array for system sizing (max heat/cool)
1320 : EPVector<DataSizing::SystemSizingData> CalcSysSizing; // Data array for system sizing (max heat/cool)
1321 : EPVector<DataSizing::SysSizPeakDDNumData> SysSizPeakDDNum; // data array for peak des day indices
1322 : EPVector<DataSizing::TermUnitSizingData> TermUnitSizing; // Data added in sizing routines (indexed per terminal unit)
1323 : EPVector<DataSizing::ZoneEqSizingData> ZoneEqSizing; // Data added in zone eq component sizing routines
1324 : EPVector<DataSizing::ZoneEqSizingData> UnitarySysEqSizing; // Data added in unitary system sizing routines
1325 : EPVector<DataSizing::ZoneEqSizingData> OASysEqSizing; // Data added in unitary system sizing routines
1326 : EPVector<DataSizing::PlantSizingData> PlantSizData; // Input data array for plant sizing
1327 : EPVector<DataSizing::DesDayWeathData> DesDayWeath; // design day weather saved at major time step
1328 : EPVector<DataSizing::CompDesWaterFlowData> CompDesWaterFlow; // array to store components' design water flow
1329 : EPVector<DataSizing::ZoneHVACSizingData> ZoneHVACSizing; // Input data for zone HVAC sizing
1330 : EPVector<DataSizing::AirTerminalSizingSpecData>
1331 : AirTerminalSizingSpec; // Input data for zone HVAC sizing used only for Facility Load Component Summary
1332 : EPVector<DataSizing::FacilitySizingData> CalcFacilitySizing; // Data for zone sizing
1333 : DataSizing::FacilitySizingData CalcFinalFacilitySizing; // Final data for zone sizing
1334 : Array1D<Real64> VbzByZone; // saved value of ZoneOAUnc which is Vbz used in 62.1 tabular report
1335 : Array1D<Real64> VdzClgByZone; // saved value of cooling based ZoneSA which is Vdz used in 62.1 tabular report (also used for zone level Vps)
1336 : Array1D<Real64> VdzMinClgByZone; // minimum discharge flow for cooling, Vdz includes secondary and primary flows for dual path
1337 : Array1D<Real64> VdzHtgByZone; // saved value of heating based ZoneSA which is Vdz used in 62.1 tabular report (also used for zone level Vps)
1338 : Array1D<Real64> VdzMinHtgByZone; // minimum discharge flow for heating, Vdz includes secondary and primary flows for dual path
1339 : Array1D<Real64> ZdzClgByZone; // minimum discharge outdoor-air fraction for cooling
1340 : Array1D<Real64> ZdzHtgByZone; // minimum discharge outdoor-air fraction for heating
1341 : Array1D<Real64> VpzClgByZone; // saved value of cooling based ZonePA which is Vpz used in 62.1 tabular report
1342 : Array1D<Real64> VpzMinClgByZone; // saved value of minimum cooling based ZonePA which is VpzClg-min used in 62.1 tabular report
1343 : Array1D<Real64> VpzHtgByZone; // saved value of heating based ZonePA which is Vpz used in 62.1 tabular report
1344 : Array1D<Real64> VpzMinHtgByZone; // saved value of minimum heating based ZonePA which is VpzHtg-min used in 62.1 tabular report
1345 : Array1D<Real64> VpzClgSumBySys; // sum of saved value of cooling based ZonePA which is Vpz-sum used in 62.1 tabular report
1346 : Array1D<Real64> VpzHtgSumBySys; // sum of saved value of heating based ZonePA which is Vpz-sum used in 62.1 tabular report
1347 : Array1D<Real64> PzSumBySys; // sum of design people for system, Pz_sum
1348 : Array1D<Real64> PsBySys; // sum of peak concurrent people by system, Ps
1349 : Array1D<Real64> DBySys; // Population Diversity by system
1350 : Array1D<Real64> SumRpxPzBySys; // Sum of per person OA times number of people by system, No D yet
1351 : Array1D<Real64> SumRaxAzBySys; // sum of per area OA time zone area by system, does not get altered by D
1352 : Array1D<std::string> PeakPsOccurrenceDateTimeStringBySys; // string describing when Ps peak occurs
1353 : Array1D<std::string> PeakPsOccurrenceEnvironmentStringBySys; // string describing Environment when Ps peak occurs
1354 : Array1D<Real64> VouBySys; // uncorrected system outdoor air requirement, for std 62.1 VRP
1355 : Array1D<Real64> VpsClgBySys; // System primary airflow Vps, for cooling for std 62.1 VRP
1356 : Array1D<Real64> VpsHtgBySys; // system primary airflow Vps, for heating for std 62.1 VRP
1357 : Array1D<Real64> FaByZoneHeat; // saved value of Fa used in 62.1 tabular report
1358 : Array1D<Real64> FbByZoneCool; // saved value of Fb used in 62.1 tabular report
1359 : Array1D<Real64> FbByZoneHeat; // saved value of Fb used in 62.1 tabular report
1360 : Array1D<Real64> FcByZoneCool; // saved value of Fc used in 62.1 tabular report
1361 : Array1D<Real64> FcByZoneHeat; // saved value of Fc used in 62.1 tabular report
1362 : Array1D<Real64> XsBySysCool; // saved value of Xs used in 62.1 tabular report
1363 : Array1D<Real64> XsBySysHeat; // saved value of Xs used in 62.1 tabular report
1364 : Array1D<Real64> EvzByZoneCool; // saved value of Evz (zone vent effy) used in 62.1 tabular report
1365 : Array1D<Real64> EvzByZoneHeat; // saved value of Evz (zone vent effy) used in 62.1 tabular report
1366 : Array1D<Real64> EvzByZoneCoolPrev; // saved value of Evz (zone vent effy) used in 62.1 tabular report
1367 : Array1D<Real64> EvzByZoneHeatPrev; // saved value of Evz (zone vent effy) used in 62.1 tabular report
1368 : Array1D<Real64> VotClgBySys; // saved value of cooling ventilation required at primary AHU, used in 62.1 tabular report
1369 : Array1D<Real64> VotHtgBySys; // saved value of heating ventilation required at primary AHU, used in 62.1 tabular report
1370 : Array1D<Real64> VozSumClgBySys; // saved value of cooling ventilation required at clg zones
1371 : Array1D<Real64> VozSumHtgBySys; // saved value of cooling ventilation required at htg zones
1372 : Array1D<Real64> TotCoolCapTemp; // scratch variable used for calculating peak load [W]
1373 : Array1D<Real64> EvzMinBySysHeat; // saved value of EvzMin used in 62.1 tabular report
1374 : Array1D<Real64> EvzMinBySysCool; // saved value of EvzMin used in 62.1 tabular report
1375 : Array1D<Real64> FaByZoneCool; // triggers allocation in UpdateSysSizing
1376 : Array1D<Real64> SensCoolCapTemp; // triggers allocation in UpdateSysSizing
1377 :
1378 796 : void init_state([[maybe_unused]] EnergyPlusData &state) override
1379 : {
1380 796 : }
1381 :
1382 0 : void clear_state() override
1383 : {
1384 0 : new (this) SizingData();
1385 0 : }
1386 : };
1387 :
1388 : } // namespace EnergyPlus
1389 :
1390 : #endif
|