Line data Source code
1 : // EnergyPlus, Copyright (c) 1996-2023, 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 SetPointManager_hh_INCLUDED
49 : #define SetPointManager_hh_INCLUDED
50 :
51 : #include <map>
52 :
53 : // ObjexxFCL Headers
54 : #include <ObjexxFCL/Array1D.hh>
55 : #include <ObjexxFCL/Optional.hh>
56 :
57 : // EnergyPlus Headers
58 : #include <EnergyPlus/DataGlobals.hh>
59 : #include <EnergyPlus/DataLoopNode.hh>
60 : #include <EnergyPlus/EnergyPlus.hh>
61 : #include <EnergyPlus/Plant/Enums.hh>
62 :
63 : namespace EnergyPlus {
64 :
65 : // Forward declarations
66 : struct EnergyPlusData;
67 :
68 : namespace SetPointManager {
69 :
70 : enum class CtrlNodeType
71 : {
72 : Invalid = -1,
73 : Control,
74 : Reference,
75 : Num
76 : };
77 :
78 : enum class SupplyFlowTempStrategy
79 : {
80 : Invalid = -1,
81 : MaxTemp,
82 : MinTemp,
83 : Num
84 : };
85 : enum class ControlStrategy
86 : {
87 : Invalid = -1,
88 : TempFirst,
89 : FlowFirst,
90 : Num
91 : };
92 : enum class ReferenceTempType
93 : {
94 : Invalid = -1,
95 : WetBulb,
96 : DryBulb,
97 : Num
98 : };
99 : enum class ReferenceGroundTempObjectType
100 : {
101 : Invalid = -1,
102 : BuildingSurface,
103 : Shallow,
104 : Deep,
105 : FCFactorMethod,
106 : Num
107 : };
108 :
109 : enum class CtrlVarType
110 : {
111 : Invalid = -1,
112 : Temp,
113 : MaxTemp,
114 : MinTemp,
115 : HumRat,
116 : MaxHumRat,
117 : MinHumRat,
118 : MassFlow,
119 : MaxMassFlow,
120 : MinMassFlow,
121 : Num
122 : };
123 :
124 : enum class SetPointManagerType
125 : {
126 : Invalid = -1,
127 : Scheduled,
128 : ScheduledDual,
129 : OutsideAir,
130 : SZReheat,
131 : SZHeating,
132 : SZCooling,
133 : SZMinHum,
134 : SZMaxHum,
135 : MixedAir,
136 : OutsideAirPretreat,
137 : Warmest,
138 : Coldest,
139 : WarmestTempFlow,
140 : RAB,
141 : MZCoolingAverage,
142 : MZHeatingAverage,
143 : MZMinHumAverage,
144 : MZMaxHumAverage,
145 : MZMinHum,
146 : MZMaxHum,
147 : FollowOATemp,
148 : FollowSysNodeTemp,
149 : GroundTemp,
150 : CondEntReset,
151 : IdealCondEntReset,
152 : SZOneStageCooling,
153 : SZOneStageHeating,
154 : ReturnWaterResetChW,
155 : ReturnWaterResetHW,
156 : TESScheduled,
157 : SystemNodeResetTemp,
158 : SystemNodeResetHum,
159 : Num
160 : };
161 :
162 20037 : struct SPBase
163 : {
164 : std::string Name;
165 : CtrlVarType CtrlTypeMode; // set to CtrlVarType::*
166 : std::string ctrlVarType;
167 1825 : SPBase() : CtrlTypeMode(CtrlVarType::Invalid)
168 : {
169 1825 : }
170 :
171 : Real64 calcSetPointLinInt(Real64 LowVal, Real64 HighVal, Real64 RefVal, Real64 SetptAtLowVal, Real64 SetptAtHighVal);
172 : };
173 :
174 9659 : struct DataSetPointManager : SPBase // Derived type for all Setpoint Managers
175 : {
176 : // Members
177 : SetPointManagerType SPMType; // integer representing type of setpoint manager
178 : int SPMIndex; // index to specific set point manager
179 : int NumCtrlNodes; // number of control nodes
180 : Array1D_int CtrlNodes; // index to control node
181 : int AirLoopNum; // index to air loop
182 : std::string AirLoopName; // name of air loop
183 : int RefNode; // index to reference node
184 :
185 : // Default Constructor
186 541 : DataSetPointManager() : SPMType(SetPointManagerType::Invalid), SPMIndex(0), NumCtrlNodes(0), AirLoopNum(0), RefNode(0)
187 : {
188 541 : }
189 : };
190 :
191 4174 : struct DefineScheduledSetPointManager : SPBase // Derived type for Scheduled Setpoint Manager data
192 : {
193 : // Members
194 : std::string Sched;
195 : int SchedPtr;
196 : int NumCtrlNodes;
197 : std::string CtrlNodeListName;
198 : Array1D_int CtrlNodes;
199 : Real64 SetPt;
200 :
201 : // Default Constructor
202 450 : DefineScheduledSetPointManager() : SchedPtr(0), NumCtrlNodes(0), SetPt(0.0)
203 : {
204 450 : }
205 :
206 : void calculate(EnergyPlusData &state);
207 : };
208 :
209 59 : struct DefineSchedDualSetPointManager : SPBase // Derived type for Scheduled Dual Setpoint Manager
210 : {
211 : // Members
212 : std::string SchedHi;
213 : std::string SchedLo;
214 : int SchedPtrHi;
215 : int SchedPtrLo;
216 : int NumCtrlNodes;
217 : std::string CtrlNodeListName;
218 : Array1D_int CtrlNodes;
219 : Real64 SetPtHi;
220 : Real64 SetPtLo;
221 :
222 : // Default Constructor
223 15 : DefineSchedDualSetPointManager() : SchedPtrHi(0), SchedPtrLo(0), NumCtrlNodes(0), SetPtHi(0.0), SetPtLo(0.0)
224 : {
225 15 : }
226 :
227 : void calculate(EnergyPlusData &state);
228 : };
229 :
230 296 : struct DefineOutsideAirSetPointManager : SPBase // Derived type for Outside Air Setpoint Manager Data
231 : {
232 : // Members
233 : Real64 OutLowSetPt1 = 0.0; // 1st setpoint at outside low
234 : Real64 OutLow1 = 0.0; // 1st Outside low
235 : Real64 OutHighSetPt1 = 0.0; // 1st setpoint at outside high
236 : Real64 OutHigh1 = 0.0; // 1st Outside high
237 : int SchedPtr = 0; // Schedule index
238 : int invalidSchedValErrorIndex = 0; // index for recurring error when schedule is not 1 or 2
239 : int setPtErrorCount = 0; // countfor recurring error when schedule is not 1 or 2
240 : Real64 OutLowSetPt2 = 0.0; // 2nd setpoint at outside low (optional)
241 : Real64 OutLow2 = 0.0; // 2nd Outside low (optional)
242 : Real64 OutHighSetPt2 = 0.0; // 2nd setpoint at outside high (optional)
243 : Real64 OutHigh2 = 0.0; // 2nd Outside high (optional)
244 : int NumCtrlNodes = 0;
245 : std::string CtrlNodeListName;
246 : Array1D_int CtrlNodes;
247 : Real64 SetPt = 0.0; // current setpoint value
248 :
249 : void calculate(EnergyPlusData &state);
250 : };
251 :
252 644 : struct DefineSZReheatSetPointManager : SPBase // Derived type for the Single Zone Reheat Setpoint Manager data
253 : {
254 : // Members
255 : std::string ControlZoneName; // name of the control zone (zone with main thermostat)
256 : int ControlZoneNum; // number (index into Zone array) of control zone
257 : int ZoneNodeNum; // zone node number
258 : int ZoneInletNodeNum; // inlet node number for the SZRH air
259 : Real64 MinSetTemp; // minimum supply air setpoint temperature
260 : Real64 MaxSetTemp; // maximum supply air setpoint temperature
261 : int MixedAirNode; // mixed air node number
262 : int FanNodeIn; // fan inlet node number
263 : int FanNodeOut; // fan outlet node number
264 : int AirLoopNum; // air loop index of air loop associated with this setpoint manager
265 : int OAInNode; // outside airstream inlet node to the OA mixer
266 : int RetNode; // return node inlet to OA mixer
267 : int LoopInNode; // Primary Air System inlet node
268 : int NumCtrlNodes;
269 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
270 : Real64 SetPt; // the setpoint
271 :
272 : // Default Constructor
273 72 : DefineSZReheatSetPointManager()
274 72 : : ControlZoneNum(0), ZoneNodeNum(0), ZoneInletNodeNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), MixedAirNode(0), FanNodeIn(0), FanNodeOut(0),
275 72 : AirLoopNum(0), OAInNode(0), RetNode(0), LoopInNode(0), NumCtrlNodes(0), SetPt(0.0)
276 : {
277 72 : }
278 :
279 : void calculate(EnergyPlusData &state);
280 : };
281 :
282 194 : struct DefineSZHeatingSetPointManager : SPBase // Derived type for the Single Zone Heating Setpoint Manager data
283 : {
284 : // Members
285 : std::string ControlZoneName; // name of the control zone (zone with main thermostat)
286 : int ControlZoneNum; // number (index into Zone array) of control zone
287 : int ZoneNodeNum; // zone node number
288 : int ZoneInletNodeNum; // inlet node number for the supply air
289 : Real64 MinSetTemp; // minimum supply air setpoint temperature
290 : Real64 MaxSetTemp; // maximum supply air setpoint temperature
291 : int NumCtrlNodes;
292 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
293 : Real64 SetPt; // the setpoint
294 :
295 : // Default Constructor
296 20 : DefineSZHeatingSetPointManager()
297 20 : : ControlZoneNum(0), ZoneNodeNum(0), ZoneInletNodeNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
298 : {
299 20 : }
300 :
301 : void calculate(EnergyPlusData &state);
302 : };
303 :
304 458 : struct DefineSZCoolingSetPointManager : SPBase // Derived type for the Single Zone Cooling Setpoint Manager data
305 : {
306 : // Members
307 : std::string ControlZoneName; // name of the control zone (zone with main thermostat)
308 : int ControlZoneNum; // number (index into Zone array) of control zone
309 : int ZoneNodeNum; // zone node number
310 : int ZoneInletNodeNum; // inlet node number for the supply air
311 : Real64 MinSetTemp; // minimum supply air setpoint temperature
312 : Real64 MaxSetTemp; // maximum supply air setpoint temperature
313 : int NumCtrlNodes;
314 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
315 : Real64 SetPt; // the setpoint
316 :
317 : // Default Constructor
318 50 : DefineSZCoolingSetPointManager()
319 50 : : ControlZoneNum(0), ZoneNodeNum(0), ZoneInletNodeNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
320 : {
321 50 : }
322 :
323 : void calculate(EnergyPlusData &state);
324 : };
325 :
326 69 : struct DefineSZMinHumSetPointManager : SPBase // Derived Type for Single Zone Minimum Humidity Setpoint Manager data
327 : {
328 : // Members
329 : int NumZones; // number of zones whose humidity is being controlled
330 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
331 : Array1D_int ZoneNodes; // zone node numbers of zones being controlled
332 : Array1D_int CtrlZoneNum; // index into ZoneEquipConfig
333 : Array1D_int CtrlNodes; // nodes where humidity ratio is being set
334 : Real64 SetPt; // the setpoint
335 :
336 : // Default Constructor
337 17 : DefineSZMinHumSetPointManager() : NumZones(0), NumCtrlNodes(0), SetPt(0.0)
338 : {
339 17 : }
340 :
341 : void calculate(EnergyPlusData &state);
342 : };
343 :
344 111 : struct DefineSZMaxHumSetPointManager : SPBase // Derived Type for Single Zone Maximum Humidity Setpoint Manager data
345 : {
346 : // Members
347 : int NumZones; // number of zones whose humidity is being controlled
348 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
349 : Array1D_int ZoneNodes; // zone node numbers of zones being controlled
350 : Array1D_int CtrlZoneNum; // index into ZoneEquipConfig
351 : Array1D_int CtrlNodes; // nodes where humidity ratio is being set
352 : Real64 SetPt; // the setpoint
353 :
354 : // Default Constructor
355 23 : DefineSZMaxHumSetPointManager() : NumZones(0), NumCtrlNodes(0), SetPt(0.0)
356 : {
357 23 : }
358 :
359 : void calculate(EnergyPlusData &state);
360 : };
361 :
362 3512 : struct DefineMixedAirSetPointManager : SPBase
363 : {
364 : // Members
365 : int RefNode; // reference node number
366 : int FanInNode; // supply fan inlet node number
367 : int FanOutNode; // Supplt fan outlet node number
368 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
369 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
370 : Real64 SetPt; // the setpoint
371 : bool MySetPointCheckFlag; // used for mixed air SPM test for missing SP
372 : bool FreezeCheckEnable; // Enable freezing check
373 : int CoolCoilInNode; // Cooling coil inlet node number
374 : int CoolCoilOutNode; // Cooling coil outlet node number
375 : Real64 MinCoolCoilOutTemp; // The minimum temperature at cooling coil outlet node
376 :
377 : // Default Constructor
378 298 : DefineMixedAirSetPointManager()
379 298 : : RefNode(0), FanInNode(0), FanOutNode(0), NumCtrlNodes(0), SetPt(0.0), MySetPointCheckFlag(true), FreezeCheckEnable(false),
380 298 : CoolCoilInNode(0), CoolCoilOutNode(0), MinCoolCoilOutTemp(7.2)
381 :
382 : {
383 298 : }
384 :
385 : void calculate(EnergyPlusData &state);
386 : };
387 :
388 24 : struct DefineOAPretreatSetPointManager : SPBase
389 : {
390 : // Members
391 : int RefNode; // reference node number
392 : int MixedOutNode; // mixed air outlet node number
393 : int OAInNode; // outside air inlet node number
394 : int ReturnInNode; // return air inlet node number
395 : Real64 MinSetTemp; // minimum supply air setpoint temperature [C]
396 : Real64 MaxSetTemp; // maximum supply air setpoint temperature [C]
397 : Real64 MinSetHumRat; // minimum supply air setpoint humidity ratio [kg/kg]
398 : Real64 MaxSetHumRat; // maximum supply air setpoint humidity ratio [kg/kg]
399 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
400 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
401 : Real64 SetPt; // the setpoint
402 : bool MySetPointCheckFlag; // used for DOAS SPM test for missing SP
403 :
404 : // Default Constructor
405 6 : DefineOAPretreatSetPointManager()
406 6 : : RefNode(0), MixedOutNode(0), OAInNode(0), ReturnInNode(0), MinSetTemp(0.0), MaxSetTemp(0.0), MinSetHumRat(0.0), MaxSetHumRat(0.0),
407 6 : NumCtrlNodes(0), SetPt(0.0), MySetPointCheckFlag(true)
408 : {
409 6 : }
410 :
411 : void calculate(EnergyPlusData &state);
412 : };
413 :
414 67 : struct DefineWarmestSetPointManager : SPBase
415 : {
416 : // Members
417 : std::string AirLoopName; // name of air loop that will use "warmest zone" strategy
418 : int AirLoopNum; // index of named air loop
419 : Real64 MinSetTemp; // minimum supply air setpoint temperature
420 : Real64 MaxSetTemp; // maximum supply air setpoint temperature
421 : SupplyFlowTempStrategy Strategy; // supply flow and temperature set strategy
422 : // 1 = MaxTemp
423 : int NumCtrlNodes; // number of nodes whose temperature is being set
424 : Array1D_int CtrlNodes; // nodes where temperature is being set
425 : Real64 SetPt; // the setpoint
426 :
427 : // Default Constructor
428 23 : DefineWarmestSetPointManager()
429 23 : : AirLoopNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), Strategy(SupplyFlowTempStrategy::Invalid), NumCtrlNodes(0), SetPt(0.0)
430 : {
431 23 : }
432 :
433 : void calculate(EnergyPlusData &state);
434 : };
435 :
436 3 : struct DefineColdestSetPointManager : SPBase
437 : {
438 : // Members
439 : std::string AirLoopName; // name of air loop that will use "coldest zone" strategy
440 : int AirLoopNum; // index of named air loop
441 : Real64 MinSetTemp; // minimum supply air setpoint temperature
442 : Real64 MaxSetTemp; // maximum supply air setpoint temperature
443 : SupplyFlowTempStrategy Strategy; // supply flow and temperature set strategy
444 : // 2 = MinTemp
445 : int NumCtrlNodes; // number of nodes whose temperature is being set
446 : Array1D_int CtrlNodes; // nodes where temperature is being set
447 : Real64 SetPt; // the setpoint
448 :
449 : // Default Constructor
450 1 : DefineColdestSetPointManager()
451 1 : : AirLoopNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), Strategy(SupplyFlowTempStrategy::Invalid), NumCtrlNodes(0), SetPt(0.0)
452 : {
453 1 : }
454 :
455 : void calculate(EnergyPlusData &state);
456 : };
457 :
458 12 : struct DefWarmestSetPtManagerTempFlow : SPBase
459 : {
460 : // Members
461 : std::string AirLoopName; // name of air loop that will use "warmest zone" strategy
462 : int AirLoopNum; // index of named air loop
463 : Real64 MinSetTemp; // minimum supply air setpoint temperature
464 : Real64 MaxSetTemp; // maximum supply air setpoint temperature
465 : ControlStrategy Strategy; // supply flow and temperature set strategy
466 : // 1 = TempFirst, 2 = FlowFirst
467 : int NumCtrlNodes; // number of nodes whose temperature is being set
468 : Array1D_int CtrlNodes; // nodes where temperature is being set
469 : Real64 SetPt; // the setpoint
470 : Real64 MinTurndown; // minimum fractional flow rate
471 : Real64 Turndown; // fractional flow rate
472 : int CritZoneNum;
473 : bool SimReady;
474 :
475 : // Default Constructor
476 4 : DefWarmestSetPtManagerTempFlow()
477 4 : : AirLoopNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), Strategy(ControlStrategy::Invalid), NumCtrlNodes(0), SetPt(0.0), MinTurndown(0.0),
478 4 : Turndown(0.0), CritZoneNum(0), SimReady(false)
479 : {
480 4 : }
481 :
482 : void calculate(EnergyPlusData &state);
483 : };
484 :
485 3 : struct DefRABFlowSetPointManager : SPBase
486 : {
487 : // Members
488 : int NumCtrlNodes; // number of nodes whose temperature is being set
489 : Array1D_int CtrlNodes; // nodes where temperature is being set
490 : std::string AirLoopName; // name of air loop that will use "warmest zone" strategy
491 : int AirLoopNum; // index of named air loop
492 : std::string Sched; // name of a schedule of supply air setpoint temperatures
493 : int SchedPtr; // index of the above schedule
494 : Real64 FlowSetPt; // mass flow rate setpoint (kg/s)
495 : int RABMixInNode;
496 : int SupMixInNode;
497 : int MixOutNode;
498 : int RABSplitOutNode;
499 : int SysOutNode;
500 : int AllSetPtMgrIndex; // index of RAB SP manager in AllSetPtMgr structure
501 :
502 : // Default Constructor
503 1 : DefRABFlowSetPointManager()
504 1 : : NumCtrlNodes(0), AirLoopNum(0), SchedPtr(0), FlowSetPt(0.0), RABMixInNode(0), SupMixInNode(0), MixOutNode(0), RABSplitOutNode(0),
505 1 : SysOutNode(0), AllSetPtMgrIndex(0)
506 : {
507 1 : }
508 :
509 : void calculate(EnergyPlusData &state);
510 : };
511 :
512 3 : struct DefMultiZoneAverageCoolingSetPointManager : SPBase // derived type for SetpointManager:Multizone:Cooling:Average data
513 : {
514 : // Members
515 : std::string AirLoopName; // name of air loop that will use "MultiZone:Cooling:Average" strategy
516 : int AirLoopNum; // index of named air loop
517 : Real64 MinSetTemp; // minimum supply air setpoint temperature [C]
518 : Real64 MaxSetTemp; // maximum supply air setpoint temperature [C]
519 : int NumCtrlNodes; // number of nodes whose temperature is being set
520 : Array1D_int CtrlNodes; // nodes where temperature is being set
521 : Real64 SetPt; // the temperature setpoint [C]
522 :
523 : // Default Constructor
524 1 : DefMultiZoneAverageCoolingSetPointManager() : AirLoopNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
525 : {
526 1 : }
527 :
528 : void calculate(EnergyPlusData &state);
529 : };
530 :
531 3 : struct DefMultiZoneAverageHeatingSetPointManager : SPBase // derived type for SetpointManager:Multizone:Heating:Average data
532 : {
533 : // Members
534 : std::string AirLoopName; // name of air loop that will use "MultiZone:Heating:Average" strategy
535 : int AirLoopNum; // index of named air loop
536 : Real64 MinSetTemp; // minimum supply air setpoint temperature [C]
537 : Real64 MaxSetTemp; // maximum supply air setpoint temperature [C]
538 : int NumCtrlNodes; // number of nodes whose temperature is being set
539 : Array1D_int CtrlNodes; // nodes where temperature is being set
540 : Real64 SetPt; // the temperature setpoint [C]
541 :
542 : // Default Constructor
543 1 : DefMultiZoneAverageHeatingSetPointManager() : AirLoopNum(0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
544 : {
545 1 : }
546 :
547 : void calculate(EnergyPlusData &state);
548 : };
549 :
550 3 : struct DefMultiZoneAverageMinHumSetPointManager : SPBase // derived type for SetpointManager:MultiZone:MinimumHumidity:Average data
551 : {
552 : // Members
553 : std::string AirLoopName; // name of air loop using MultiZone:MinimumHumidity:Average strategy
554 : int AirLoopNum; // index of named air loop
555 : Real64 MinSetHum; // minimum supply air humidity ratio [kg/kg]
556 : Real64 MaxSetHum; // maximum supply air humidity ratio [kg/kg]
557 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
558 : Array1D_int CtrlNodes; // nodes where humidity ratio is being set
559 : Real64 SetPt; // the humidity ratio setpoint [kg/kg]
560 :
561 : // Default Constructor
562 1 : DefMultiZoneAverageMinHumSetPointManager() : AirLoopNum(0), MinSetHum(0.0), MaxSetHum(0.0), NumCtrlNodes(0), SetPt(0.0)
563 : {
564 1 : }
565 :
566 : void calculate(EnergyPlusData &state);
567 : };
568 :
569 3 : struct DefMultiZoneAverageMaxHumSetPointManager : SPBase // derived type for SetpointManager:MultiZone:MaximumHumidity:Average data
570 : {
571 : // Members
572 : std::string AirLoopName; // name of air loop using MultiZone:MaximumHumidity:Average strategy
573 : int AirLoopNum; // index of named air loop
574 : Real64 MinSetHum; // minimum supply air humidity ratio [kg/kg]
575 : Real64 MaxSetHum; // maximum supply air humidity ratio [kg/kg]
576 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
577 : Array1D_int CtrlNodes; // nodes where humidity ratio is being set
578 : Real64 SetPt; // the humidity ratio setpoint [kg/kg]
579 :
580 : // Default Constructor
581 1 : DefMultiZoneAverageMaxHumSetPointManager() : AirLoopNum(0), MinSetHum(0.0), MaxSetHum(0.0), NumCtrlNodes(0), SetPt(0.0)
582 : {
583 1 : }
584 :
585 : void calculate(EnergyPlusData &state);
586 : };
587 :
588 20 : struct DefMultiZoneMinHumSetPointManager : SPBase // derived type for SetpointManager:MultiZone:Humidity:Minimum data
589 : {
590 : // Members
591 : std::string AirLoopName; // name of air loop using SetpointManager:MultiZone:Humidity:Minimum
592 : int AirLoopNum; // index of named air loop
593 : Real64 MinSetHum; // minimum supply air humidity ratio [kg/kg]
594 : Real64 MaxSetHum; // maximum supply air humidity ratio [kg/kg]
595 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
596 : Array1D_int CtrlNodes; // nodes where humidity ratio is being set
597 : Real64 SetPt; // the humidity ratio setpoint [kg/kg]
598 :
599 : // Default Constructor
600 4 : DefMultiZoneMinHumSetPointManager() : AirLoopNum(0), MinSetHum(0.0), MaxSetHum(0.0), NumCtrlNodes(0), SetPt(0.0)
601 : {
602 4 : }
603 :
604 : void calculate(EnergyPlusData &state);
605 : };
606 :
607 38 : struct DefMultiZoneMaxHumSetPointManager : SPBase // derived type for SetpointManager:MultiZone:Humidity:Maximum data
608 : {
609 : // Members
610 : std::string AirLoopName; // name of air loop using SetpointManager:MultiZone:Humidity:Maximum
611 : int AirLoopNum; // index of named air loop
612 : Real64 MinSetHum; // minimum supply air humidity ratio [kg/kg]
613 : Real64 MaxSetHum; // maximum supply air humidity ratio [kg/kg]
614 : int NumCtrlNodes; // number of nodes whose humidity ratio is being set
615 : Array1D_int CtrlNodes; // nodes where humidity ratio is being set
616 : Real64 SetPt; // the humidity ratio setpoint [kg/kg]
617 :
618 : // Default Constructor
619 10 : DefMultiZoneMaxHumSetPointManager() : AirLoopNum(0), MinSetHum(0.0), MaxSetHum(0.0), NumCtrlNodes(0), SetPt(0.0)
620 : {
621 10 : }
622 :
623 : void calculate(EnergyPlusData &state);
624 : };
625 :
626 609 : struct DefineFollowOATempSetPointManager : SPBase
627 : {
628 : // Members
629 : std::string RefTempType; // Reference Temperature type (choice OutdoorAirWetBulb/OutdoorAirDryBulb)
630 : ReferenceTempType RefTypeMode; // set to iRefTempType_WetBulb or iRefTempType_DryBulb
631 : Real64 Offset; // Offset temperature difference
632 : Real64 MinSetTemp; // Minimum supply air setpoint temperature
633 : Real64 MaxSetTemp; // Maximum supply air setpoint temperature
634 : int NumCtrlNodes; // number of nodes whose temperature is being set
635 : Array1D_int CtrlNodes; // nodes where temperature is being set
636 : Real64 SetPt; // the setpoint
637 :
638 : // Default Constructor
639 203 : DefineFollowOATempSetPointManager()
640 203 : : RefTypeMode(ReferenceTempType::Invalid), Offset(0.0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
641 : {
642 203 : }
643 :
644 : void calculate(EnergyPlusData &state);
645 : };
646 :
647 3 : struct DefineFollowSysNodeTempSetPointManager : SPBase
648 : {
649 : // Members
650 : int RefNodeNum; // reference node number
651 : std::string RefTempType; // Reference Temperature type (choice OutdoorAirWetBulb/OutdoorAirDryBulb)
652 : ReferenceTempType RefTypeMode; // set to iRefTempType_WetBulb or iRefTempType_DryBulb
653 : Real64 Offset; // Offset temperature difference
654 : Real64 MinSetTemp; // Minimum supply air setpoint temperature
655 : Real64 MaxSetTemp; // Maximum supply air setpoint temperature
656 : int NumCtrlNodes; // number of nodes whose temperature is being set
657 : Array1D_int CtrlNodes; // nodes where temperature is being set
658 : Real64 SetPt; // the setpoint
659 :
660 : // Default Constructor
661 1 : DefineFollowSysNodeTempSetPointManager()
662 1 : : RefNodeNum(0), RefTypeMode(ReferenceTempType::Invalid), Offset(0.0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
663 : {
664 1 : }
665 :
666 : void calculate(EnergyPlusData &state);
667 : };
668 :
669 57 : struct DefineGroundTempSetPointManager : SPBase
670 : {
671 : // Members
672 : std::string RefGroundTempObjType; // Reference Temperature type (Available choices are listed below)
673 : // Site:GroundTemperature:BuildingSurface
674 : // Site:GroundTemperature:Shallow
675 : // Site:GroundTemperature:Deep
676 : // Site:GroundTemperature:FCfactorMethod
677 : ReferenceGroundTempObjectType RefTypeMode; // set to iRefGroundTempObjType_xxxx based on RefGroundTempObjType
678 : Real64 Offset; // Offset temperature difference
679 : Real64 MinSetTemp; // Minimum supply air setpoint temperature
680 : Real64 MaxSetTemp; // Maximum supply air setpoint temperature
681 : int NumCtrlNodes; // number of nodes whose temperature is being set
682 : Array1D_int CtrlNodes; // nodes where temperature is being set
683 : Real64 SetPt; // the setpoint
684 :
685 : // Default Constructor
686 19 : DefineGroundTempSetPointManager()
687 19 : : RefTypeMode(ReferenceGroundTempObjectType::Invalid), Offset(0.0), MinSetTemp(0.0), MaxSetTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
688 : {
689 19 : }
690 :
691 : void calculate(EnergyPlusData &state);
692 : };
693 :
694 9 : struct DefineCondEntSetPointManager : SPBase // derived type for SetpointManager:CondenserEnteringReset data
695 : {
696 : // Members
697 : std::string CondEntTempSched; // Optional schedule
698 : int CondEntTempSchedPtr; // default condenser entering water temperature schedule Index
699 : Real64 TowerDsnInletAirWetBulb; // cooling tower design inlet air wetbulb temperature
700 : int MinTwrWbCurve; // minimum design wetbulb temperature curve name
701 : int MinOaWbCurve; // minimum outside air wetbulb temperature curve name
702 : int OptCondEntCurve; // optimized condenser entering water temperature curve name
703 : Real64 MinimumLiftTD; // minimum lift
704 : Real64 MaxCondEntTemp; // maximum condenser entering water temp
705 : int NumCtrlNodes; // number of nodes whose temperature is being set
706 : std::string CtrlNodeListName;
707 : Array1D_int CtrlNodes; // nodes where temperature is being set
708 : Real64 SetPt; // the temperature set point [C]
709 : int ChillerIndexPlantSide; // plant side chiller index
710 : int ChillerIndexDemandSide; // demand side chiller index
711 : int BranchIndexPlantSide; // plant side branch index
712 : int BranchIndexDemandSide; // demand side branch index
713 : int LoopIndexPlantSide; // plant side loop index
714 : int LoopIndexDemandSide; // deand side loop index
715 : DataPlant::PlantEquipmentType Type; // chiller type number
716 :
717 : // Default Constructor
718 3 : DefineCondEntSetPointManager()
719 3 : : CondEntTempSchedPtr(0), TowerDsnInletAirWetBulb(0.0), MinTwrWbCurve(0), MinOaWbCurve(0), OptCondEntCurve(0), MinimumLiftTD(0.0),
720 : MaxCondEntTemp(0.0), NumCtrlNodes(0), SetPt(0.0), ChillerIndexPlantSide(0), ChillerIndexDemandSide(0), BranchIndexPlantSide(0),
721 3 : BranchIndexDemandSide(0), LoopIndexPlantSide(0), LoopIndexDemandSide(0), Type(DataPlant::PlantEquipmentType::Invalid)
722 : {
723 3 : }
724 :
725 : void calculate(EnergyPlusData &state);
726 : };
727 :
728 6 : struct DefineIdealCondEntSetPointManager : SPBase // derived type for SetpointManager:CondenserEnteringReset:Ideal data
729 : {
730 : // Members
731 : // type of variable to be set
732 : Real64 MinimumLiftTD; // minimum lift
733 : Real64 MaxCondEntTemp; // maximum condenser entering water temp
734 : int NumCtrlNodes; // number of nodes whose temperature is being set
735 : std::string CtrlNodeListName;
736 : Array1D_int CtrlNodes; // nodes where temperature is being set
737 : Real64 SetPt; // the temperature set point [C]
738 : int ChillerIndexPlantSide; // plant side chiller index
739 : int BranchIndexPlantSide; // plant side branch index
740 : int LoopIndexPlantSide; // plant side loop index
741 : OutputProcessor::VariableType ChllrVarType; // report variable type
742 : int ChllrVarIndex; // report variable index
743 : OutputProcessor::VariableType ChlPumpVarType; // report variable type
744 : int ChlPumpVarIndex; // report variable index
745 : Array1D<OutputProcessor::VariableType> ClTowerVarType; // report variable type
746 : Array1D_int ClTowerVarIndex; // report variable index
747 : OutputProcessor::VariableType CndPumpVarType; // report variable type
748 : int CndPumpVarIndex; // report variable index
749 : DataPlant::PlantEquipmentType Type; // chiller type number
750 : Array1D_int TowerNum; // cooling tower number
751 : int CondLoopNum; // condenser loop number
752 : Array1D_int CondTowerBranchNum; // condenser branch number
753 : int numTowers; // number of towers to query
754 : int CondPumpNum; // condenser pump number
755 : int CondPumpBranchNum; // condenser branch number for pump
756 : int ChilledPumpNum; // chilled water pump number
757 : int ChilledPumpBranchNum; // chilled water branch number for pump
758 : bool SetupIdealCondEntSetPtVars; // flag for initialization of meters and such
759 :
760 : // Default Constructor
761 2 : DefineIdealCondEntSetPointManager()
762 2 : : MinimumLiftTD(0.0), MaxCondEntTemp(0.0), NumCtrlNodes(0), SetPt(0.0), ChillerIndexPlantSide(0), BranchIndexPlantSide(0),
763 : LoopIndexPlantSide(0), ChllrVarType(OutputProcessor::VariableType::NotFound), ChllrVarIndex(0),
764 : ChlPumpVarType(OutputProcessor::VariableType::NotFound), ChlPumpVarIndex(0), CndPumpVarType(OutputProcessor::VariableType::NotFound),
765 : CndPumpVarIndex(0), Type(DataPlant::PlantEquipmentType::Invalid), CondLoopNum(0), numTowers(0), CondPumpNum(0), CondPumpBranchNum(0),
766 2 : ChilledPumpNum(0), ChilledPumpBranchNum(0), SetupIdealCondEntSetPtVars(true)
767 : {
768 2 : }
769 :
770 : void calculate(EnergyPlusData &state);
771 :
772 : void SetupMeteredVarsForSetPt(EnergyPlusData &state);
773 :
774 : Real64 calculateCurrentEnergyUsage(EnergyPlusData &state);
775 :
776 : void setupSetPointAndFlags(Real64 &TotEnergy,
777 : Real64 &TotEnergyPre,
778 : Real64 &CondWaterSetPoint,
779 : Real64 &CondTempLimit,
780 : bool &RunOptCondEntTemp,
781 : bool &RunSubOptCondEntTemp,
782 : bool &RunFinalOptCondEntTemp) const;
783 : };
784 :
785 9 : struct DefineSZOneStageCoolinggSetPointManager : SPBase // Derived type for the Single Zone One Stage Cooling Setpoint Manager data
786 : {
787 : // Members
788 : std::string ControlZoneName; // name of the control zone (zone with main thermostat)
789 : int ControlZoneNum; // number (index into Zone array) of control zone
790 : int ZoneNodeNum; // zone node number
791 : Real64 CoolingOnTemp; // minimum supply air setpoint temperature
792 : Real64 CoolingOffTemp; // maximum supply air setpoint temperature
793 : int NumCtrlNodes;
794 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
795 : Real64 SetPt; // the setpoint
796 :
797 : // Default Constructor
798 1 : DefineSZOneStageCoolinggSetPointManager()
799 1 : : ControlZoneNum(0), ZoneNodeNum(0), CoolingOnTemp(0.0), CoolingOffTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
800 : {
801 1 : }
802 :
803 : void calculate(EnergyPlusData &state);
804 : };
805 :
806 9 : struct DefineSZOneStageHeatingSetPointManager : SPBase // Derived type for the Single Zone One Stage Heating Setpoint Manager data
807 : {
808 : // Members
809 : std::string ControlZoneName; // name of the control zone (zone with main thermostat)
810 : int ControlZoneNum; // number (index into Zone array) of control zone
811 : int ZoneNodeNum; // zone node number
812 : Real64 HeatingOnTemp; // minimum supply air setpoint temperature
813 : Real64 HeatingOffTemp; // maximum supply air setpoint temperature
814 : int NumCtrlNodes;
815 : Array1D_int CtrlNodes; // node numbers of nodes where setpoint is to be set
816 : Real64 SetPt; // the setpoint
817 :
818 : // Default Constructor
819 1 : DefineSZOneStageHeatingSetPointManager()
820 1 : : ControlZoneNum(0), ZoneNodeNum(0), HeatingOnTemp(0.0), HeatingOffTemp(0.0), NumCtrlNodes(0), SetPt(0.0)
821 : {
822 1 : }
823 :
824 : void calculate(EnergyPlusData &state);
825 : };
826 :
827 9 : struct DefineReturnWaterChWSetPointManager : SPBase // derived type for SetpointManager:SupplyResetForReturnTemperature:ChilledWater data
828 : {
829 : // Members
830 : int returnNodeIndex; // node ID for the plant supply-side return node
831 : int supplyNodeIndex; // node ID for the plant supply-side supply node
832 : Real64 minimumChilledWaterSetpoint; // the minimum reset temperature for the chilled water setpoint
833 : Real64 maximumChilledWaterSetpoint; // the maximum reset temperature for the chilled water setpoint
834 : int returnTemperatureScheduleIndex; // the index in Schedules array for the scheduled return temperature; zero if not used
835 : Real64 returnTemperatureConstantTarget; // the constant value used as the return temperature target; used if schedule index is zero
836 : Real64 currentSupplySetPt; // the current supply setpoint temperature
837 : int plantLoopIndex; // the index for the plant loop for this manager, zero if not initialized
838 : int plantSetpointNodeIndex; // the index for the node where the plant setpoint is set, need to look up after Plant is established
839 : bool useReturnTempSetpoint; // only true if the target return temperature should be looked up as the Node(returnNode).TempSetPoint
840 :
841 : // Default Constructor
842 3 : DefineReturnWaterChWSetPointManager()
843 3 : : returnNodeIndex(0), supplyNodeIndex(0), minimumChilledWaterSetpoint(0.0), maximumChilledWaterSetpoint(0.0),
844 : returnTemperatureScheduleIndex(0), returnTemperatureConstantTarget(0.0), currentSupplySetPt(0.0), plantLoopIndex(0),
845 3 : plantSetpointNodeIndex(0), useReturnTempSetpoint(false)
846 : {
847 3 : }
848 :
849 : // Calculation method
850 : void calculate(EnergyPlusData &state, DataLoopNode::NodeData &returnNode, DataLoopNode::NodeData &supplyNode);
851 : };
852 :
853 3 : struct DefineReturnWaterHWSetPointManager : SPBase // derived type for SetpointManager:SupplyResetForReturnTemperature:HotWater data
854 : {
855 : // Members
856 : int returnNodeIndex; // node ID for the plant supply-side return node
857 : int supplyNodeIndex; // node ID for the plant supply-side supply node
858 : Real64 maximumHotWaterSetpoint; // the maximum reset temperature for the hot water setpoint
859 : Real64 minimumHotWaterSetpoint; // the minimum reset temperature for the hot water setpoint
860 : int returnTemperatureScheduleIndex; // the index in Schedules array for the scheduled return temperature; zero if not used
861 : Real64 returnTemperatureConstantTarget; // the constant value used as the return temperature target; used if schedule index is zero
862 : Real64 currentSupplySetPt; // the current supply setpoint temperature
863 : int plantLoopIndex; // the index for the plant loop for this manager, zero if not initialized
864 : int plantSetpointNodeIndex; // the index for the node where the plant setpoint is set, need to look up after Plant is established
865 : bool useReturnTempSetpoint; // only true if the target return temperature should be looked up as the Node(returnNode).TempSetPoint
866 :
867 : // Default Constructor
868 1 : DefineReturnWaterHWSetPointManager()
869 1 : : returnNodeIndex(0), supplyNodeIndex(0), maximumHotWaterSetpoint(0.0), minimumHotWaterSetpoint(0.0), returnTemperatureScheduleIndex(0),
870 : returnTemperatureConstantTarget(0.0), currentSupplySetPt(0.0), plantLoopIndex(0), plantSetpointNodeIndex(0),
871 1 : useReturnTempSetpoint(false)
872 : {
873 1 : }
874 :
875 : // Calculation method
876 : void calculate(EnergyPlusData &state, DataLoopNode::NodeData &returnNode, DataLoopNode::NodeData &supplyNode);
877 : };
878 :
879 8 : struct DefineScheduledTESSetPointManager : SPBase // Derived type for Scheduled TES Setpoint Manager data
880 : {
881 : // Members
882 : int SchedPtr;
883 : int SchedPtrCharge;
884 : int CtrlNodeNum;
885 : Real64 NonChargeCHWTemp;
886 : Real64 ChargeCHWTemp;
887 : DataPlant::CtrlType CompOpType;
888 : Real64 SetPt;
889 :
890 : // Default Constructor
891 2 : DefineScheduledTESSetPointManager()
892 2 : : SchedPtr(0), SchedPtrCharge(0), CtrlNodeNum(0), NonChargeCHWTemp(0.0), ChargeCHWTemp(0.0), CompOpType(DataPlant::CtrlType::Invalid),
893 2 : SetPt(0.0)
894 : {
895 2 : }
896 :
897 : // Calculation method
898 : void calculate(EnergyPlusData &state);
899 : };
900 :
901 10 : struct DefineSysNodeResetSetPointManager : SPBase // Derived type for System Node Reset Setpoint Manager Data
902 : {
903 : // Members
904 : Real64 SpAtLowRef = 0.0; // Setpoint at Low Reference Temperature or Humidity Ratio (i.e., Maximum Temperature/Humidity Ratio Setpoint)
905 : Real64 SpAtHighRef = 0.0; // Setpoint at High Reference Temperature or Humidity Ratio (i.e., Maximum Temperature/Humidity Ratio Setpoint)
906 : Real64 LowRef = 0.0; // Low Reference Temperature or Humidity Ratio
907 : Real64 HighRef = 0.0; // High Reference Temperature or Humidity Ratio
908 : int RefNodeNum = 0; // Reference Node Number
909 : int NumCtrlNodes = 0;
910 : std::string CtrlNodeListName;
911 : Array1D_int CtrlNodes;
912 : Real64 SetPt = 0.0; // current setpoint value
913 :
914 : void calculate(EnergyPlusData &state);
915 : };
916 :
917 : void ManageSetPoints(EnergyPlusData &state);
918 :
919 : void GetSetPointManagerInputs(EnergyPlusData &state); // wrapper for GetInput to accomodate unit testing
920 :
921 : void GetSetPointManagerInputData(EnergyPlusData &state, bool &ErrorsFound);
922 :
923 : void VerifySetPointManagers(EnergyPlusData &state, bool &ErrorsFound); // flag to denote node conflicts in input. !unused1208
924 :
925 : void InitSetPointManagers(EnergyPlusData &state);
926 :
927 : void SimSetPointManagers(EnergyPlusData &state);
928 :
929 : void UpdateSetPointManagers(EnergyPlusData &state);
930 :
931 : void UpdateMixedAirSetPoints(EnergyPlusData &state);
932 :
933 : void UpdateOAPretreatSetPoints(EnergyPlusData &state);
934 :
935 : int getSPMBasedOnNode(EnergyPlusData &state, int NodeNum, CtrlVarType SetPtType, SetPointManagerType SMPType, CtrlNodeType ctrlOrRefNode);
936 :
937 : bool IsNodeOnSetPtManager(EnergyPlusData &state, int NodeNum, CtrlVarType SetPtType);
938 :
939 : bool NodeHasSPMCtrlVarType(EnergyPlusData &state, int NodeNum, CtrlVarType CtrlVarType);
940 :
941 : void ResetHumidityRatioCtrlVarType(EnergyPlusData &state, int NodeNum);
942 :
943 : void CheckIfAnyIdealCondEntSetPoint(EnergyPlusData &state);
944 :
945 : CtrlVarType GetHumidityRatioVariableType(EnergyPlusData &state, int CntrlNodeNum);
946 :
947 : void SetUpNewScheduledTESSetPtMgr(EnergyPlusData &state,
948 : int SchedPtr,
949 : int SchedPtrCharge,
950 : Real64 NonChargeCHWTemp,
951 : Real64 ChargeCHWTemp,
952 : DataPlant::CtrlType CompOpType,
953 : int ControlNodeNum);
954 :
955 : bool GetCoilFreezingCheckFlag(EnergyPlusData &state, int MixedAirSPMNum);
956 :
957 : int GetMixedAirNumWithCoilFreezingCheck(EnergyPlusData &state, int MixedAirNode);
958 :
959 : } // namespace SetPointManager
960 :
961 1542 : struct SetPointManagerData : BaseGlobalStruct
962 : {
963 : // MODULE VARIABLE DECLARATIONS:
964 : int NumAllSetPtMgrs = 0; // Number of all Setpoint Managers found in input
965 : int NumSchSetPtMgrs = 0; // Number of Scheduled Setpoint Managers found in input
966 : int NumDualSchSetPtMgrs = 0; // Number of Scheduled Dual Setpoint Managers found in input
967 : int NumOutAirSetPtMgrs = 0; // Number of Outside Air Setpoint Managers found in input
968 : int NumSZRhSetPtMgrs = 0; // number of single zone reheat setpoint managers
969 : int NumSZHtSetPtMgrs = 0; // number of single zone heating setpoint managers
970 : int NumSZClSetPtMgrs = 0; // number of single zone cooling setpoint managers
971 : int NumSZMinHumSetPtMgrs = 0; // number of Single Zone Minimum Humidity Setpoint Managers
972 : int NumSZMaxHumSetPtMgrs = 0; // number of Single Zone Maximum Humidity Setpoint Managers
973 : int NumMixedAirSetPtMgrs = 0; // number of mixed air setpoint managers
974 : int NumOAPretreatSetPtMgrs = 0; // number of outside air pretreat setpoint managers
975 : int NumWarmestSetPtMgrs = 0; // number of Warmest setpoint managers
976 : int NumColdestSetPtMgrs = 0; // number of Coldest setpoint managers
977 : int NumWarmestSetPtMgrsTempFlow = 0; // number of Warmest Temp Flow setpoint managers
978 : int NumRABFlowSetPtMgrs = 0; // number of return air bypass temperature-based flow setpoint manager
979 : int NumMZClgAverageSetPtMgrs = 0; // number of Multizone:Cooling:Average setpoint managers
980 : int NumMZHtgAverageSetPtMgrs = 0; // number of Multizone:Heating:Average setpoint managers
981 : int NumMZAverageMinHumSetPtMgrs = 0; // number of MultiZone:MinimumHumidity:Average setpoint managers
982 : int NumMZAverageMaxHumSetPtMgrs = 0; // number of MultiZone:MaximumHumidity:Average setpoint managers
983 : int NumMZMinHumSetPtMgrs = 0; // number of MultiZone:Humidity:Minimum setpoint managers
984 : int NumMZMaxHumSetPtMgrs = 0; // number of MultiZone:Humidity:Maximum setpoint managers
985 : int NumFollowOATempSetPtMgrs = 0; // number of SetpointManager:FollowOutdoorAirTemperature setpoint managers
986 : int NumFollowSysNodeTempSetPtMgrs = 0; // number of SetpointManager:FollowSystemNodeTemperature setpoint managers
987 : int NumGroundTempSetPtMgrs = 0; // number of SetpointManager:FollowGroundTemperature setpoint managers
988 : int NumCondEntSetPtMgrs = 0; // number of Condenser Entering Reset setpoint managers
989 : int NumIdealCondEntSetPtMgrs = 0; // number of Ideal Condenser Entering Temperature setpoint managers
990 : int NumSZOneStageCoolingSetPtMgrs = 0; // number of single zone one stage cooling setpoint managers
991 : int NumSZOneStageHeatingSetPtMgrs = 0; // number of singel zone one stage heating setpoint managers
992 : int NumReturnWaterResetChWSetPtMgrs = 0; // number of return water reset setpoint managers
993 : int NumReturnWaterResetHWSetPtMgrs = 0; // number of hot-water return water reset setpoint managers
994 : int NumSchTESSetPtMgrs = 0; // number of TES scheduled setpoint managers (created internally, not by user input)
995 : int NumSystemNodeResetTempSetPtMgrs = 0; // Number of SystemNodeReset:Temperature setpoint managers
996 : int NumSystemNodeResetHumSetPtMgrs = 0; // Number of SystemNodeReset:Humidity setpoint managers
997 :
998 : Real64 TSupNoHC = 0.0; // supply temperature with no heating or cooling
999 : Real64 ExtrRateNoHC = 0.0; // the heating (>0) or cooling (<0) that can be done by supply air at TSupNoHC [W]
1000 :
1001 : int GetSetPointManagerInputMaxNumAlphas = 0; // argument for call to GetObjectDefMaxArgs
1002 : int GetSetPointManagerInputMaxNumNumbers = 0; // argument for call to GetObjectDefMaxArgs
1003 : DataPlant::PlantEquipmentType ChillerType = DataPlant::PlantEquipmentType::Invalid;
1004 : int InitSetPointManagerNumChiller = 0;
1005 : DataPlant::PlantEquipmentType InitType = DataPlant::PlantEquipmentType::Invalid;
1006 :
1007 : bool ManagerOn = false;
1008 : bool GetInputFlag = true; // First time, input is "gotten"
1009 :
1010 : bool InitSetPointManagersOneTimeFlag = true;
1011 : bool InitSetPointManagersOneTimeFlag2 = true;
1012 : Real64 DCESPMDsn_EntCondTemp = 0.0;
1013 : Real64 DCESPMDsn_MinCondSetpt = 0.0;
1014 : Real64 DCESPMCur_MinLiftTD = 0.0;
1015 : Real64 DCESPMDesign_Load_Sum = 0.0;
1016 : Real64 DCESPMActual_Load_Sum = 0.0;
1017 : Real64 DCESPMWeighted_Actual_Load_Sum = 0.0;
1018 : Real64 DCESPMWeighted_Design_Load_Sum = 0.0;
1019 : Real64 DCESPMWeighted_Ratio = 0.0;
1020 : Real64 DCESPMMin_DesignWB = 0.0;
1021 : Real64 DCESPMMin_ActualWb = 0.0;
1022 : Real64 DCESPMOpt_CondEntTemp = 0.0;
1023 : Real64 DCESPMDesignClgCapacity_Watts = 0.0;
1024 : Real64 DCESPMCurrentLoad_Watts = 0.0;
1025 : Real64 DCESPMCondInletTemp = 0.0;
1026 : Real64 DCESPMEvapOutletTemp = 0.0;
1027 : bool NoSurfaceGroundTempObjWarning = true; // This will cause a warning to be issued if no "surface" ground
1028 : // temperature object was input.
1029 : bool NoShallowGroundTempObjWarning = true; // This will cause a warning to be issued if no "shallow" ground
1030 : // temperature object was input.
1031 : bool NoDeepGroundTempObjWarning = true; // This will cause a warning to be issued if no "deep" ground
1032 : // temperature object was input.
1033 : bool NoFCGroundTempObjWarning = true; // This will cause a warning to be issued if no ground
1034 : // temperature object was input for FC Factor method
1035 : bool InitSetPointManagersMyEnvrnFlag = true; // flag for init once at start of environment
1036 : bool RunSubOptCondEntTemp = false;
1037 : bool RunFinalOptCondEntTemp = false;
1038 :
1039 : // Object Data
1040 : Array1D<SetPointManager::DataSetPointManager> AllSetPtMgr; // Array for all Setpoint Manager data(warnings)
1041 : Array1D<SetPointManager::DefineScheduledSetPointManager> SchSetPtMgr; // Array for Scheduled Setpoint Manager data
1042 : Array1D<SetPointManager::DefineSchedDualSetPointManager> DualSchSetPtMgr; // Dual Scheduled Setpoint Manager data
1043 : Array1D<SetPointManager::DefineOutsideAirSetPointManager> OutAirSetPtMgr; // Array for Outside Air Setpoint Manager data
1044 : Array1D<SetPointManager::DefineSZReheatSetPointManager> SingZoneRhSetPtMgr; // Array for SZRH Set Pt Mgr
1045 : Array1D<SetPointManager::DefineSZHeatingSetPointManager> SingZoneHtSetPtMgr; // Array for SZ Heating Set Pt Mgr
1046 : Array1D<SetPointManager::DefineSZCoolingSetPointManager> SingZoneClSetPtMgr; // Array for SZ Cooling Set Pt Mgr
1047 : Array1D<SetPointManager::DefineSZMinHumSetPointManager> SZMinHumSetPtMgr; // Array for SZ Min Hum Set Pt Mgr
1048 : Array1D<SetPointManager::DefineSZMaxHumSetPointManager> SZMaxHumSetPtMgr; // Array for SZ Max Hum Set Pt Mgr
1049 : Array1D<SetPointManager::DefineMixedAirSetPointManager> MixedAirSetPtMgr; // Array for Mixed Air Set Pt Mgr
1050 : Array1D<SetPointManager::DefineOAPretreatSetPointManager> OAPretreatSetPtMgr; // Array for OA Pretreat Set Pt Mgr
1051 : Array1D<SetPointManager::DefineWarmestSetPointManager> WarmestSetPtMgr; // Array for Warmest Set Pt Mgr
1052 : Array1D<SetPointManager::DefineColdestSetPointManager> ColdestSetPtMgr; // Array for Coldest Set Pt Mgr
1053 : Array1D<SetPointManager::DefWarmestSetPtManagerTempFlow> WarmestSetPtMgrTempFlow; // Array for Warmest Set Pt Mgr
1054 : Array1D<SetPointManager::DefRABFlowSetPointManager> RABFlowSetPtMgr; // Array for return air bypass
1055 : Array1D<SetPointManager::DefMultiZoneAverageCoolingSetPointManager> MZAverageCoolingSetPtMgr; // Array for MultiZone
1056 : Array1D<SetPointManager::DefMultiZoneAverageHeatingSetPointManager> MZAverageHeatingSetPtMgr; // Array for MultiZone
1057 : Array1D<SetPointManager::DefMultiZoneAverageMinHumSetPointManager> MZAverageMinHumSetPtMgr; // Array for MultiZone
1058 : Array1D<SetPointManager::DefMultiZoneAverageMaxHumSetPointManager> MZAverageMaxHumSetPtMgr; // Array for MultiZone
1059 : Array1D<SetPointManager::DefMultiZoneMinHumSetPointManager> MZMinHumSetPtMgr; // Multizone min humidity rat Set Pt Mgr
1060 : Array1D<SetPointManager::DefMultiZoneMaxHumSetPointManager> MZMaxHumSetPtMgr; // Multizone max humidity rat Set Pt Mgr
1061 : Array1D<SetPointManager::DefineFollowOATempSetPointManager> FollowOATempSetPtMgr; // Array for Follow Outdoor Air
1062 : Array1D<SetPointManager::DefineFollowSysNodeTempSetPointManager> FollowSysNodeTempSetPtMgr; // Array for Follow System
1063 : Array1D<SetPointManager::DefineGroundTempSetPointManager> GroundTempSetPtMgr; // Array for Ground Temp Setpoint
1064 : Array1D<SetPointManager::DefineCondEntSetPointManager> CondEntSetPtMgr; // Condenser Entering Water Set Pt Mgr
1065 : Array1D<SetPointManager::DefineIdealCondEntSetPointManager> IdealCondEntSetPtMgr; // Ideal Condenser Entering Set Pt Mgr
1066 : Array1D<SetPointManager::DefineSZOneStageCoolinggSetPointManager> SZOneStageCoolingSetPtMgr; // single zone 1 stage cool
1067 : Array1D<SetPointManager::DefineSZOneStageHeatingSetPointManager> SZOneStageHeatingSetPtMgr; // single zone 1 stage heat
1068 : Array1D<SetPointManager::DefineReturnWaterChWSetPointManager> ReturnWaterResetChWSetPtMgr; // return water reset
1069 : Array1D<SetPointManager::DefineReturnWaterHWSetPointManager> ReturnWaterResetHWSetPtMgr; // hot-water return water reset
1070 : Array1D<SetPointManager::DefineScheduledTESSetPointManager> SchTESSetPtMgr; // Array for TES Scheduled Setpoint Manager data
1071 : Array1D<SetPointManager::DefineSysNodeResetSetPointManager> SystemNodeResetSetPtMgr; // Array for System Node Reset Setpoint Manager data
1072 :
1073 : Real64 CondWaterSetPoint = 0; // Condenser entering water temperature setpoint this timestep, C
1074 : Real64 EvapOutletTemp = 0; // Evaporator water outlet temperature (C)
1075 : Real64 CondTempLimit = 0; // Condenser entering water temperature setpoint lower limit
1076 : Real64 CurLoad = 0; // Current cooling load, W
1077 : Real64 TotEnergy = 0; // Total energy consumptions at this time step
1078 : Real64 TotEnergyPre = 0; // Total energy consumptions at the previous time step
1079 :
1080 0 : void clear_state() override
1081 : {
1082 :
1083 0 : NumAllSetPtMgrs = 0; // Number of all Setpoint Managers found in input
1084 0 : NumSchSetPtMgrs = 0; // Number of Scheduled Setpoint Managers found in input
1085 0 : NumDualSchSetPtMgrs = 0; // Number of Scheduled Dual Setpoint Managers found in input
1086 0 : NumOutAirSetPtMgrs = 0; // Number of Outside Air Setpoint Managers found in input
1087 0 : NumSZRhSetPtMgrs = 0; // number of single zone reheat setpoint managers
1088 0 : NumSZHtSetPtMgrs = 0; // number of single zone heating setpoint managers
1089 0 : NumSZClSetPtMgrs = 0; // number of single zone cooling setpoint managers
1090 0 : NumSZMinHumSetPtMgrs = 0; // number of Single Zone Minimum Humidity Setpoint Managers
1091 0 : NumSZMaxHumSetPtMgrs = 0; // number of Single Zone Maximum Humidity Setpoint Managers
1092 0 : NumMixedAirSetPtMgrs = 0; // number of mixed air setpoint managers
1093 0 : NumOAPretreatSetPtMgrs = 0; // number of outside air pretreat setpoint managers
1094 0 : NumWarmestSetPtMgrs = 0; // number of Warmest setpoint managers
1095 0 : NumColdestSetPtMgrs = 0; // number of Coldest setpoint managers
1096 0 : NumWarmestSetPtMgrsTempFlow = 0; // number of Warmest Temp Flow setpoint managers
1097 0 : NumRABFlowSetPtMgrs = 0; // number of return air bypass temperature-based flow setpoint manager
1098 0 : NumMZClgAverageSetPtMgrs = 0; // number of Multizone:Cooling:Average setpoint managers
1099 0 : NumMZHtgAverageSetPtMgrs = 0; // number of Multizone:Heating:Average setpoint managers
1100 0 : NumMZAverageMinHumSetPtMgrs = 0; // number of MultiZone:MinimumHumidity:Average setpoint managers
1101 0 : NumMZAverageMaxHumSetPtMgrs = 0; // number of MultiZone:MaximumHumidity:Average setpoint managers
1102 0 : NumMZMinHumSetPtMgrs = 0; // number of MultiZone:Humidity:Minimum setpoint managers
1103 0 : NumMZMaxHumSetPtMgrs = 0; // number of MultiZone:Humidity:Maximum setpoint managers
1104 0 : NumFollowOATempSetPtMgrs = 0; // number of SetpointManager:FollowOutdoorAirTemperature setpoint managers
1105 0 : NumFollowSysNodeTempSetPtMgrs = 0; // number of SetpointManager:FollowSystemNodeTemperature setpoint managers
1106 0 : NumGroundTempSetPtMgrs = 0; // number of SetpointManager:FollowGroundTemperature setpoint managers
1107 0 : NumCondEntSetPtMgrs = 0; // number of Condenser Entering Reset setpoint managers
1108 0 : NumIdealCondEntSetPtMgrs = 0; // number of Ideal Condenser Entering Temperature setpoint managers
1109 0 : NumSZOneStageCoolingSetPtMgrs = 0; // number of single zone one stage cooling setpoint managers
1110 0 : NumSZOneStageHeatingSetPtMgrs = 0; // number of singel zone one stage heating setpoint managers
1111 0 : NumReturnWaterResetChWSetPtMgrs = 0; // number of return water reset setpoint managers
1112 0 : NumReturnWaterResetHWSetPtMgrs = 0; // number of hot-water return water reset setpoint managers
1113 0 : NumSchTESSetPtMgrs = 0; // number of TES Scheduled setpoint Managers
1114 0 : NumSystemNodeResetTempSetPtMgrs = 0; // Number of SystemNodeReset:Temperature setpoint managers
1115 0 : NumSystemNodeResetHumSetPtMgrs = 0; // Number of SystemNodeReset:Humidity setpoint managers
1116 :
1117 0 : DCESPMDsn_EntCondTemp = 0.0;
1118 0 : DCESPMDsn_MinCondSetpt = 0.0;
1119 0 : DCESPMCur_MinLiftTD = 0.0;
1120 0 : DCESPMDesign_Load_Sum = 0.0;
1121 0 : DCESPMActual_Load_Sum = 0.0;
1122 0 : DCESPMWeighted_Actual_Load_Sum = 0.0;
1123 0 : DCESPMWeighted_Design_Load_Sum = 0.0;
1124 0 : DCESPMWeighted_Ratio = 0.0;
1125 0 : DCESPMMin_DesignWB = 0.0;
1126 0 : DCESPMMin_ActualWb = 0.0;
1127 0 : DCESPMOpt_CondEntTemp = 0.0;
1128 0 : DCESPMDesignClgCapacity_Watts = 0.0;
1129 0 : DCESPMCurrentLoad_Watts = 0.0;
1130 0 : DCESPMCondInletTemp = 0.0;
1131 0 : DCESPMEvapOutletTemp = 0.0;
1132 :
1133 0 : TSupNoHC = 0.0; // supply temperature with no heating or cooling
1134 0 : ExtrRateNoHC = 0.0; // the heating (>0) or cooling (<0) that can be done by supply air at TSupNoHC [W]
1135 :
1136 0 : GetSetPointManagerInputMaxNumAlphas = 0; // argument for call to GetObjectDefMaxArgs
1137 0 : GetSetPointManagerInputMaxNumNumbers = 0; // argument for call to GetObjectDefMaxArgs
1138 0 : ChillerType = DataPlant::PlantEquipmentType::Invalid;
1139 0 : InitSetPointManagerNumChiller = 0;
1140 0 : InitType = DataPlant::PlantEquipmentType::Invalid;
1141 :
1142 0 : ManagerOn = false;
1143 0 : GetInputFlag = true; // First time, input is "gotten"
1144 : // Object Data
1145 0 : InitSetPointManagersOneTimeFlag = true;
1146 0 : InitSetPointManagersOneTimeFlag2 = true;
1147 0 : AllSetPtMgr.deallocate(); // Array for all Setpoint Manager data(warnings)
1148 0 : SchSetPtMgr.deallocate(); // Array for Scheduled Setpoint Manager data
1149 0 : DualSchSetPtMgr.deallocate(); // Dual Scheduled Setpoint Manager data
1150 0 : OutAirSetPtMgr.deallocate(); // Array for Outside Air Setpoint Manager data
1151 0 : SingZoneRhSetPtMgr.deallocate(); // Array for SZRH Set Pt Mgr
1152 0 : SingZoneHtSetPtMgr.deallocate(); // Array for SZ Heating Set Pt Mgr
1153 0 : SingZoneClSetPtMgr.deallocate(); // Array for SZ Cooling Set Pt Mgr
1154 0 : SZMinHumSetPtMgr.deallocate(); // Array for SZ Min Hum Set Pt Mgr
1155 0 : SZMaxHumSetPtMgr.deallocate(); // Array for SZ Max Hum Set Pt Mgr
1156 0 : MixedAirSetPtMgr.deallocate(); // Array for Mixed Air Set Pt Mgr
1157 0 : OAPretreatSetPtMgr.deallocate(); // Array for OA Pretreat Set Pt Mgr
1158 0 : WarmestSetPtMgr.deallocate(); // Array for Warmest Set Pt Mgr
1159 0 : ColdestSetPtMgr.deallocate(); // Array for Coldest Set Pt Mgr
1160 0 : WarmestSetPtMgrTempFlow.deallocate(); // Array for Warmest Set Pt Mgr
1161 0 : RABFlowSetPtMgr.deallocate(); // Array for return air bypass
1162 0 : MZAverageCoolingSetPtMgr.deallocate(); // Array for MultiZone
1163 0 : MZAverageHeatingSetPtMgr.deallocate(); // Array for MultiZone
1164 0 : MZAverageMinHumSetPtMgr.deallocate(); // Array for MultiZone
1165 0 : MZAverageMaxHumSetPtMgr.deallocate(); // Array for MultiZone
1166 0 : MZMinHumSetPtMgr.deallocate(); // Multizone min humidity rat Set Pt Mgr
1167 0 : MZMaxHumSetPtMgr.deallocate(); // Multizone max humidity rat Set Pt Mgr
1168 0 : FollowOATempSetPtMgr.deallocate(); // Array for Follow Outdoor Air
1169 0 : FollowSysNodeTempSetPtMgr.deallocate(); // Array for Follow System
1170 0 : GroundTempSetPtMgr.deallocate(); // Array for Ground Temp Setpoint
1171 0 : CondEntSetPtMgr.deallocate(); // Condenser Entering Water Set Pt Mgr
1172 0 : IdealCondEntSetPtMgr.deallocate(); // Ideal Condenser Entering Set Pt Mgr
1173 0 : SZOneStageCoolingSetPtMgr.deallocate(); // single zone 1 stage cool
1174 0 : SZOneStageHeatingSetPtMgr.deallocate(); // single zone 1 stage heat
1175 0 : ReturnWaterResetChWSetPtMgr.deallocate(); // return water reset
1176 0 : ReturnWaterResetHWSetPtMgr.deallocate(); // hot-water return water reset
1177 0 : SchTESSetPtMgr.deallocate(); // TES Scheduled setpoint Managers
1178 0 : SystemNodeResetSetPtMgr.deallocate(); // Array for System Node Reset Temperature and Humidity Ratio setpoint manager
1179 :
1180 0 : NoSurfaceGroundTempObjWarning = true;
1181 0 : NoShallowGroundTempObjWarning = true;
1182 0 : NoDeepGroundTempObjWarning = true;
1183 0 : NoFCGroundTempObjWarning = true;
1184 0 : InitSetPointManagersMyEnvrnFlag = true;
1185 0 : RunSubOptCondEntTemp = false;
1186 0 : RunFinalOptCondEntTemp = false;
1187 0 : CondWaterSetPoint = 0;
1188 0 : EvapOutletTemp = 0;
1189 0 : CondTempLimit = 0;
1190 0 : CurLoad = 0;
1191 0 : TotEnergy = 0;
1192 0 : TotEnergyPre = 0;
1193 0 : }
1194 : };
1195 :
1196 : } // namespace EnergyPlus
1197 :
1198 : #endif
|