Line data Source code
1 : // EnergyPlus, Copyright (c) 1996-2025, 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 : // ObjexxFCL Headers
49 : #include <ObjexxFCL/Array.functions.hh>
50 : #include <ObjexxFCL/Fmath.hh>
51 :
52 : // EnergyPlus Headers
53 : #include <EnergyPlus/Autosizing/Base.hh>
54 : #include <EnergyPlus/BranchNodeConnections.hh>
55 : #include <EnergyPlus/Data/EnergyPlusData.hh>
56 : #include <EnergyPlus/DataEnvironment.hh>
57 : #include <EnergyPlus/DataHVACGlobals.hh>
58 : #include <EnergyPlus/DataLoopNode.hh>
59 : #include <EnergyPlus/DataSizing.hh>
60 : #include <EnergyPlus/DataZoneEnergyDemands.hh>
61 : #include <EnergyPlus/HybridEvapCoolingModel.hh>
62 : #include <EnergyPlus/HybridUnitaryAirConditioners.hh>
63 : #include <EnergyPlus/InputProcessing/InputProcessor.hh>
64 : #include <EnergyPlus/NodeInputManager.hh>
65 : #include <EnergyPlus/OutputProcessor.hh>
66 : #include <EnergyPlus/Psychrometrics.hh>
67 : #include <EnergyPlus/ScheduleManager.hh>
68 : #include <EnergyPlus/UtilityRoutines.hh>
69 :
70 : #define TEMP_CURVE 0
71 : #define W_CURVE 1
72 : #define POWER_CURVE 2
73 :
74 : namespace EnergyPlus::HybridUnitaryAirConditioners {
75 :
76 : // Begin routines for zone HVAC Hybrid Evaporative cooler unit
77 13275 : void SimZoneHybridUnitaryAirConditioners(EnergyPlusData &state,
78 : std::string_view CompName, // name of the packaged terminal heat pump
79 : int const ZoneNum, // number of zone being served
80 : Real64 &SensibleOutputProvided, // sensible capacity delivered to zone cooling is negative
81 : Real64 &LatentOutputProvided, // Latent add/removal (kg/s), dehumid = negative
82 : int &CompIndex // index to zone hvac unit
83 : )
84 : {
85 : // SUBROUTINE INFORMATION:
86 : // AUTHOR Spencer Maxwell Dutton
87 : // DATE WRITTEN October 2017
88 : // MODIFIED
89 : // RE-ENGINEERED na
90 :
91 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
92 : int CompNum;
93 13275 : if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) {
94 1 : bool errorsfound = false;
95 1 : GetInputZoneHybridUnitaryAirConditioners(state, errorsfound);
96 1 : state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false;
97 : }
98 :
99 13275 : if (CompIndex == 0) {
100 1 : CompNum = Util::FindItemInList(CompName, state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner);
101 1 : if (CompNum == 0) {
102 0 : ShowFatalError(state, "SimZoneHybridUnitaryAirConditioners: ZoneHVAC:HybridUnitaryHVAC not found.");
103 : }
104 1 : CompIndex = CompNum;
105 : } else {
106 13274 : CompNum = CompIndex;
107 13274 : if (CompNum < 1 || CompNum > state.dataHybridUnitaryAC->NumZoneHybridEvap) {
108 0 : ShowFatalError(state,
109 0 : format("SimZoneHybridUnitaryAirConditioners: Invalid CompIndex passed={}, Number of units ={}, Entered Unit name = {}",
110 : CompNum,
111 0 : state.dataHybridUnitaryAC->NumZoneHybridEvap,
112 : CompName));
113 : }
114 13274 : if (state.dataHybridUnitaryAC->CheckZoneHybridEvapName(CompNum)) {
115 1 : if (CompName != state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).Name) {
116 0 : ShowFatalError(
117 : state,
118 0 : format("SimZoneHybridUnitaryAirConditioners: Invalid CompIndex passed={}, Unit name={}, stored unit name for that index={}",
119 : CompNum,
120 : CompName,
121 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).Name));
122 : }
123 1 : state.dataHybridUnitaryAC->CheckZoneHybridEvapName(CompNum) = false;
124 : }
125 : }
126 : try {
127 13275 : InitZoneHybridUnitaryAirConditioners(state, CompNum, ZoneNum);
128 0 : } catch (int e) {
129 0 : ShowFatalError(state,
130 0 : format("An exception occurred in InitZoneHybridUnitaryAirConditioners{}, Unit name={}, stored unit name for that "
131 : "index={}. Please check idf.",
132 : CompNum,
133 : CompName,
134 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).Name));
135 0 : return;
136 0 : }
137 : try {
138 13275 : CalcZoneHybridUnitaryAirConditioners(state, CompNum, ZoneNum, SensibleOutputProvided, LatentOutputProvided);
139 0 : } catch (int e) {
140 0 : ShowFatalError(state,
141 0 : format("An exception occurred in CalcZoneHybridUnitaryAirConditioners{}, Unit name={}, stored unit name for that "
142 : "index={}. Please check idf.",
143 : CompNum,
144 : CompName,
145 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).Name));
146 0 : return;
147 0 : }
148 : try {
149 13275 : ReportZoneHybridUnitaryAirConditioners(state, CompNum);
150 0 : } catch (int e) {
151 0 : ShowFatalError(state,
152 0 : format("An exception occurred in ReportZoneHybridUnitaryAirConditioners{}, Unit name={}, stored unit name for that "
153 : "index={}. Please check idf.",
154 : CompNum,
155 : CompName,
156 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).Name));
157 0 : return;
158 0 : }
159 : }
160 :
161 13275 : void InitZoneHybridUnitaryAirConditioners(EnergyPlusData &state,
162 : int const UnitNum, // unit number
163 : int const ZoneNum // number of zone being served
164 : )
165 : {
166 : // SUBROUTINE INFORMATION:
167 : // AUTHOR Spencer Maxwell Dutton
168 : // DATE WRITTEN October 2017
169 : // MODIFIED
170 : // RE-ENGINEERED na
171 :
172 : // PURPOSE OF THIS SUBROUTINE:
173 : //
174 :
175 : // METHODOLOGY EMPLOYED:
176 : //
177 :
178 : // REFERENCES:
179 : // na
180 :
181 : // Using/Aliasing
182 : using namespace DataLoopNode;
183 : using namespace Psychrometrics;
184 : using DataZoneEquipment::CheckZoneEquipmentList;
185 :
186 : // Locals
187 : int InletNode;
188 :
189 13275 : if (state.dataHybridUnitaryAC->HybridCoolOneTimeFlag) {
190 : // These three look like they are not used anywhere
191 1 : state.dataHybridUnitaryAC->MySizeFlag.dimension(state.dataHybridUnitaryAC->NumZoneHybridEvap, true);
192 1 : state.dataHybridUnitaryAC->MyEnvrnFlag.dimension(state.dataHybridUnitaryAC->NumZoneHybridEvap, true);
193 1 : state.dataHybridUnitaryAC->MyFanFlag.dimension(state.dataHybridUnitaryAC->NumZoneHybridEvap, true);
194 :
195 1 : state.dataHybridUnitaryAC->MyZoneEqFlag.dimension(state.dataHybridUnitaryAC->NumZoneHybridEvap, true);
196 1 : state.dataHybridUnitaryAC->HybridCoolOneTimeFlag = false;
197 : }
198 13275 : if (!state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).Initialized) {
199 1 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).Initialize(ZoneNum);
200 : }
201 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedLoadToHeatingSetpoint = 0;
202 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedLoadToCoolingSetpoint = 0;
203 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedHumidificationMass = 0;
204 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedHumidificationLoad = 0;
205 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedHumidificationEnergy = 0;
206 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedDeHumidificationMass = 0;
207 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedDeHumidificationLoad = 0;
208 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).RequestedDeHumidificationEnergy = 0;
209 :
210 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).UnitTotalCoolingRate = 0.0;
211 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).UnitTotalCoolingEnergy = 0.0;
212 :
213 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).UnitSensibleCoolingRate = 0.0;
214 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).UnitSensibleCoolingEnergy = 0.0;
215 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).UnitLatentCoolingRate = 0.0;
216 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).UnitLatentCoolingEnergy = 0.0;
217 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).availStatus = Avail::Status::NoAction;
218 :
219 : // set the availability status based on the availability manager list name
220 13275 : if (allocated(state.dataAvail->ZoneComp)) {
221 13275 : auto &availMgr = state.dataAvail->ZoneComp(DataZoneEquipment::ZoneEquipType::HybridEvaporativeCooler).ZoneCompAvailMgrs(UnitNum);
222 13275 : if (state.dataHybridUnitaryAC->MyZoneEqFlag(UnitNum)) { // initialize the name of each availability manager list and zone number
223 1 : availMgr.AvailManagerListName = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).AvailManagerListName;
224 1 : availMgr.ZoneNum = ZoneNum;
225 1 : state.dataHybridUnitaryAC->MyZoneEqFlag(UnitNum) = false;
226 : }
227 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).availStatus = availMgr.availStatus;
228 : }
229 :
230 : // need to check all zone outdoor air control units to see if they are on Zone Equipment List or issue warning
231 13275 : if (!state.dataHybridUnitaryAC->ZoneEquipmentListChecked && state.dataZoneEquip->ZoneEquipInputsFilled) {
232 1 : state.dataHybridUnitaryAC->ZoneEquipmentListChecked = true;
233 2 : for (int Loop = 1; Loop <= state.dataHybridUnitaryAC->NumZoneHybridEvap; ++Loop) {
234 1 : if (CheckZoneEquipmentList(state, "ZoneHVAC:HybridUnitaryHVAC", state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(Loop).Name)) {
235 1 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(Loop).ZoneNodeNum = state.dataZoneEquip->ZoneEquipConfig(ZoneNum).ZoneNode;
236 : } else {
237 0 : ShowSevereError(state,
238 0 : format("InitZoneHybridUnitaryAirConditioners: ZoneHVAC:HybridUnitaryHVAC = {}, is not on any ZoneHVAC:EquipmentList. "
239 : " It will not be simulated.",
240 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(Loop).Name));
241 : }
242 : }
243 : }
244 :
245 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InitializeModelParams();
246 : // Do the following initializations (every time step): This should be the info from
247 : // the previous components outlets or the node data in this section.
248 :
249 : // Transfer the node data to EvapCond data structure
250 13275 : InletNode = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletNode;
251 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletMassFlowRate = state.dataLoopNodes->Node(InletNode).MassFlowRate;
252 :
253 : // Set the inlet volumetric flow rate from the mass flow rate
254 13275 : if (state.dataEnvrn->StdRhoAir > 1) {
255 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletVolumetricFlowRate =
256 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletMassFlowRate / state.dataEnvrn->StdRhoAir;
257 : } else {
258 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletVolumetricFlowRate =
259 0 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletMassFlowRate / 1.225;
260 : }
261 :
262 : // Set all of the inlet state variables from the inlet nodes
263 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletTemp = state.dataLoopNodes->Node(InletNode).Temp;
264 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletHumRat = state.dataLoopNodes->Node(InletNode).HumRat;
265 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletEnthalpy = state.dataLoopNodes->Node(InletNode).Enthalpy;
266 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletPressure = state.dataLoopNodes->Node(InletNode).Press;
267 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletRH =
268 26550 : PsyRhFnTdbWPb(state,
269 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletTemp,
270 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletHumRat,
271 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletPressure,
272 : "InitZoneHybridUnitaryAirConditioners");
273 :
274 : // Set default outlet state to inlet states, just to be safe
275 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletTemp =
276 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletTemp;
277 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletHumRat =
278 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletHumRat;
279 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletEnthalpy =
280 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletEnthalpy;
281 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletPressure =
282 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletPressure;
283 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletRH =
284 26550 : PsyRhFnTdbWPb(state,
285 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletTemp,
286 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletHumRat,
287 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletPressure,
288 : "InitZoneHybridUnitaryAirConditioners");
289 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletMassFlowRate =
290 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletMassFlowRate;
291 :
292 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletTemp =
293 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Temp;
294 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletHumRat =
295 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).HumRat;
296 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletEnthalpy =
297 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Enthalpy;
298 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletPressure =
299 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Press;
300 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletRH =
301 26550 : PsyRhFnTdbWPb(state,
302 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletTemp,
303 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletHumRat,
304 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletPressure,
305 : "InitZoneHybridUnitaryAirConditioners");
306 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletMassFlowRate =
307 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SupplyVentilationAir;
308 :
309 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletTemp =
310 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Temp;
311 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletHumRat =
312 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).HumRat;
313 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletEnthalpy =
314 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Enthalpy;
315 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletPressure =
316 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Press;
317 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletRH =
318 26550 : PsyRhFnTdbWPb(state,
319 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletTemp,
320 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletHumRat,
321 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletPressure,
322 : "InitZoneHybridUnitaryAirConditioners");
323 13275 : }
324 :
325 13275 : void CalcZoneHybridUnitaryAirConditioners(EnergyPlusData &state,
326 : int const UnitNum, // unit number
327 : int const ZoneNum, // number of zone being served
328 : Real64 &SensibleOutputProvided, // sensible capacity delivered to zone cooling negative
329 : Real64 &LatentOutputProvided // Latent add/removal (kg/s), dehumid = negative
330 : )
331 : {
332 : // SUBROUTINE INFORMATION:
333 : // AUTHOR Spencer Maxwell Dutton
334 : // DATE WRITTEN October 2017
335 : // MODIFIED
336 : // RE-ENGINEERED na
337 :
338 : using namespace DataLoopNode;
339 : using namespace Psychrometrics;
340 :
341 : Real64 EnvDryBulbT, AirTempRoom, EnvRelHumm, RoomRelHum, DesignMinVR;
342 :
343 13275 : Real64 ZoneCoolingLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum)
344 13275 : .RemainingOutputReqToCoolSP; // Remaining load required to meet cooling setpoint (<0 is a cooling load)
345 13275 : Real64 ZoneHeatingLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum)
346 13275 : .RemainingOutputReqToHeatSP; // Remaining load required to meet heating setpoint (>0 is a heating load)
347 : Real64 OutputRequiredToHumidify =
348 13275 : state.dataZoneEnergyDemand->ZoneSysMoistureDemand(ZoneNum)
349 13275 : .OutputRequiredToHumidifyingSP; // Load required to meet humidifying setpoint (>0 = a humidify load) [kgWater/s]
350 :
351 : Real64 OutputRequiredToDehumidify =
352 13275 : state.dataZoneEnergyDemand->ZoneSysMoistureDemand(ZoneNum)
353 13275 : .OutputRequiredToDehumidifyingSP; // Load required to meet dehumidifying setpoint (<0 = a dehumidify load) [kgWater/s]
354 :
355 13275 : SensibleOutputProvided = 0;
356 13275 : LatentOutputProvided = 0;
357 : // taking class members out of the object and then using them in the calculation is odd but its for clarity with unit testing.
358 13275 : EnvDryBulbT = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletTemp; // degrees C
359 13275 : AirTempRoom = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletTemp; // degrees C
360 13275 : EnvRelHumm = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletRH; // RH
361 13275 : RoomRelHum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletRH; // RH
362 :
363 13275 : bool UseOccSchFlag = true;
364 13275 : bool UseMinOASchFlag = true;
365 :
366 39825 : DesignMinVR = DataSizing::calcDesignSpecificationOutdoorAir(state,
367 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OARequirementsPtr,
368 : ZoneNum,
369 : UseOccSchFlag,
370 : UseMinOASchFlag); //[m3/s]
371 13275 : Real64 DesignMinVRMassFlow = 0;
372 13275 : if (state.dataEnvrn->StdRhoAir > 1) {
373 13275 : DesignMinVRMassFlow = DesignMinVR * state.dataEnvrn->StdRhoAir;
374 : } else {
375 0 : DesignMinVRMassFlow = DesignMinVR * 1.225;
376 : }
377 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).doStep(
378 : state, ZoneCoolingLoad, ZoneHeatingLoad, OutputRequiredToHumidify, OutputRequiredToDehumidify, DesignMinVRMassFlow);
379 13275 : SensibleOutputProvided = -state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).QSensZoneOut; // cooling negative
380 :
381 13275 : LatentOutputProvided = -state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).QLatentZoneOutMass; // dehumidification negative kg/s
382 13275 : }
383 :
384 13275 : void ReportZoneHybridUnitaryAirConditioners(EnergyPlusData &state, int const UnitNum)
385 : {
386 : // SUBROUTINE INFORMATION:
387 : // AUTHOR Spencer Maxwell Dutton
388 : // DATE WRITTEN October 2017
389 : // MODIFIED
390 : // RE-ENGINEERED na
391 :
392 : // Using/Aliasing
393 : using namespace DataLoopNode;
394 : using namespace Psychrometrics;
395 :
396 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).PrimaryMode =
397 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).PrimaryMode;
398 :
399 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletNode).Temp =
400 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletTemp;
401 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletNode).HumRat =
402 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletHumRat;
403 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletNode).MassFlowRate =
404 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletMassFlowRate;
405 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletNode).Enthalpy =
406 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).InletEnthalpy;
407 :
408 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletNode).Temp =
409 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletTemp;
410 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletNode).HumRat =
411 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletHumRat;
412 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletNode).MassFlowRate =
413 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletMassFlowRate;
414 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletNode).Enthalpy =
415 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).OutletEnthalpy;
416 :
417 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Temp =
418 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletTemp;
419 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).HumRat =
420 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletHumRat;
421 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).Enthalpy =
422 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletEnthalpy;
423 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryInletNode).MassFlowRate =
424 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecInletMassFlowRate;
425 :
426 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryOutletNode).Temp =
427 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletTemp;
428 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryOutletNode).HumRat =
429 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletHumRat;
430 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryOutletNode).Enthalpy =
431 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletEnthalpy;
432 13275 : state.dataLoopNodes->Node(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecondaryOutletNode).MassFlowRate =
433 13275 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitNum).SecOutletMassFlowRate;
434 13275 : }
435 :
436 1 : void GetInputZoneHybridUnitaryAirConditioners(EnergyPlusData &state, bool &Errors)
437 : {
438 : // SUBROUTINE INFORMATION:
439 : // AUTHOR Spencer Maxwell Dutton
440 : // DATE WRITTEN October 2017
441 : // MODIFIED
442 : // RE-ENGINEERED na
443 :
444 : // Using/Aliasing
445 : using BranchNodeConnections::SetUpCompSets;
446 : using BranchNodeConnections::TestCompSet;
447 : using NodeInputManager::GetOnlySingleNode;
448 : using namespace DataLoopNode;
449 1 : std::string cCurrentModuleObject; // Object type for getting and error messages
450 1 : Array1D_string Alphas; // Alpha items for object
451 1 : Array1D<Real64> Numbers; // Numeric items for object
452 1 : Array1D_string cAlphaFields; // Alpha field names
453 1 : Array1D_string cNumericFields; // Numeric field names
454 1 : Array1D_bool lAlphaBlanks; // Logical array, alpha field input BLANK = .TRUE.
455 1 : Array1D_bool lNumericBlanks; // Logical array, numeric field input BLANK = .TRUE.
456 : int NumAlphas; // Number of Alphas for each GetObjectItem call
457 : int NumNumbers; // Number of Numbers for each GetObjectItem call
458 : int NumFields; // Total number of fields in object
459 1 : bool ErrorsFound(false); // Set to true if errors in input, fatal at end of routine
460 : int UnitLoop;
461 :
462 : // SUBROUTINE PARAMETER DEFINITIONS:
463 : static constexpr std::string_view routineName = "GetInputZoneHybridUnitaryAirConditioners";
464 :
465 1 : cCurrentModuleObject = "ZoneHVAC:HybridUnitaryHVAC";
466 1 : state.dataHybridUnitaryAC->NumZoneHybridEvap = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, cCurrentModuleObject);
467 1 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, cCurrentModuleObject, NumFields, NumAlphas, NumNumbers);
468 1 : int MaxNumbers = max(0, NumNumbers); // Maximum number of numeric fields in all objects
469 1 : int MaxAlphas = max(0, NumAlphas); // Maximum number of alpha fields in all objects
470 1 : Alphas.allocate(MaxAlphas);
471 1 : Numbers.dimension(MaxNumbers, 0.0);
472 1 : cAlphaFields.allocate(MaxAlphas);
473 1 : cNumericFields.allocate(MaxNumbers);
474 1 : lAlphaBlanks.dimension(MaxAlphas, true);
475 1 : lNumericBlanks.dimension(MaxNumbers, true);
476 :
477 1 : if (state.dataHybridUnitaryAC->NumZoneHybridEvap > 0) {
478 1 : state.dataHybridUnitaryAC->CheckZoneHybridEvapName.dimension(state.dataHybridUnitaryAC->NumZoneHybridEvap, true);
479 1 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner.allocate(state.dataHybridUnitaryAC->NumZoneHybridEvap);
480 1 : int IOStatus = 0;
481 :
482 2 : for (UnitLoop = 1; UnitLoop <= state.dataHybridUnitaryAC->NumZoneHybridEvap; ++UnitLoop) {
483 1 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
484 : cCurrentModuleObject,
485 : UnitLoop,
486 : Alphas,
487 : NumAlphas,
488 : Numbers,
489 : NumNumbers,
490 : IOStatus,
491 : lNumericBlanks,
492 : lAlphaBlanks,
493 : cAlphaFields,
494 : cNumericFields);
495 :
496 1 : bool IsNotOK = false;
497 1 : bool IsBlank = false;
498 2 : Util::VerifyName(state,
499 1 : Alphas(1),
500 1 : state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner,
501 : UnitLoop - 1,
502 : IsNotOK,
503 : IsBlank,
504 2 : cCurrentModuleObject + " Name");
505 :
506 1 : ErrorObjectHeader eoh{routineName, cCurrentModuleObject, Alphas(1)};
507 1 : auto &hybridUnitaryAC = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitLoop);
508 :
509 : // A1, \field Name
510 1 : hybridUnitaryAC.Name = Alphas(1);
511 : // A2, \field Availability Schedule Name
512 1 : if (lAlphaBlanks(2)) {
513 0 : hybridUnitaryAC.availSched = Sched::GetScheduleAlwaysOn(state);
514 1 : } else if ((hybridUnitaryAC.availSched = Sched::GetSchedule(state, Alphas(2))) == nullptr) {
515 0 : ShowSevereItemNotFound(state, eoh, cAlphaFields(2), Alphas(2));
516 0 : ErrorsFound = true;
517 : }
518 : // A3, \field Availability Manager List Name
519 1 : if (!lAlphaBlanks(3)) {
520 0 : hybridUnitaryAC.AvailManagerListName = Alphas(3);
521 : }
522 :
523 : // A4, \field Minimum Supply Air Temperature Schedule Named
524 1 : if (lAlphaBlanks(4)) {
525 1 : } else if ((hybridUnitaryAC.TsaMinSched = Sched::GetSchedule(state, Alphas(4))) == nullptr) {
526 0 : ShowSevereItemNotFound(state, eoh, cAlphaFields(4), Alphas(4));
527 0 : ErrorsFound = true;
528 : }
529 :
530 : // A5, \field Maximum Supply Air Temperature Schedule Name
531 1 : if (lAlphaBlanks(5)) {
532 1 : } else if ((hybridUnitaryAC.TsaMaxSched = Sched::GetSchedule(state, Alphas(5))) == nullptr) {
533 0 : ShowSevereItemNotFound(state, eoh, cAlphaFields(5), Alphas(5));
534 0 : ErrorsFound = true;
535 : }
536 :
537 : // A6, \field Minimum Supply Air Humidity Ratio Schedule Name
538 1 : if (lAlphaBlanks(6)) {
539 1 : } else if ((hybridUnitaryAC.RHsaMinSched = Sched::GetSchedule(state, Alphas(6))) == nullptr) {
540 0 : ShowSevereItemNotFound(state, eoh, cAlphaFields(6), Alphas(6));
541 0 : ErrorsFound = true;
542 : }
543 :
544 : // A7, \field Maximum Supply Air Humidity Ratio Schedule Name
545 1 : if (lAlphaBlanks(7)) {
546 1 : } else if ((hybridUnitaryAC.RHsaMaxSched = Sched::GetSchedule(state, Alphas(7))) == nullptr) {
547 0 : ShowSevereItemNotFound(state, eoh, cAlphaFields(7), Alphas(7));
548 0 : ErrorsFound = true;
549 : }
550 :
551 : // A8, \field Method to Choose Value of Controlled Inputs
552 :
553 : // A9, \field Return Air Node Name
554 : // A10, \field Outdoor Air Node Name
555 : // A11, \field Supply Air Node Name
556 : // A12, \field Relief Node Name
557 1 : hybridUnitaryAC.InletNode = GetOnlySingleNode(state,
558 1 : Alphas(9),
559 : ErrorsFound,
560 : DataLoopNode::ConnectionObjectType::ZoneHVACHybridUnitaryHVAC,
561 1 : Alphas(1),
562 : DataLoopNode::NodeFluidType::Air,
563 : DataLoopNode::ConnectionType::Inlet,
564 : NodeInputManager::CompFluidStream::Primary,
565 : ObjectIsNotParent);
566 1 : hybridUnitaryAC.SecondaryInletNode = GetOnlySingleNode(state,
567 1 : Alphas(10),
568 : ErrorsFound,
569 : DataLoopNode::ConnectionObjectType::ZoneHVACHybridUnitaryHVAC,
570 1 : Alphas(1),
571 : DataLoopNode::NodeFluidType::Air,
572 : DataLoopNode::ConnectionType::OutsideAir,
573 : NodeInputManager::CompFluidStream::Primary,
574 : ObjectIsNotParent);
575 1 : hybridUnitaryAC.OutletNode = GetOnlySingleNode(state,
576 1 : Alphas(11),
577 : ErrorsFound,
578 : DataLoopNode::ConnectionObjectType::ZoneHVACHybridUnitaryHVAC,
579 1 : Alphas(1),
580 : DataLoopNode::NodeFluidType::Air,
581 : DataLoopNode::ConnectionType::Outlet,
582 : NodeInputManager::CompFluidStream::Primary,
583 : ObjectIsNotParent);
584 2 : hybridUnitaryAC.SecondaryOutletNode = GetOnlySingleNode(state,
585 1 : Alphas(12),
586 : ErrorsFound,
587 : DataLoopNode::ConnectionObjectType::ZoneHVACHybridUnitaryHVAC,
588 1 : Alphas(1),
589 : DataLoopNode::NodeFluidType::Air,
590 : DataLoopNode::ConnectionType::ReliefAir,
591 : NodeInputManager::CompFluidStream::Primary,
592 : ObjectIsNotParent);
593 2 : TestCompSet(state, cCurrentModuleObject, Alphas(1), Alphas(9), Alphas(11), "Hybrid Evap Air Zone Nodes");
594 1 : TestCompSet(state, cCurrentModuleObject, Alphas(1), Alphas(10), Alphas(12), "Hybrid Evap Air Zone Secondary Nodes");
595 :
596 : // N1, \field System Maximum Supply AirFlow Rate
597 1 : hybridUnitaryAC.SystemMaximumSupplyAirFlowRate = Numbers(1);
598 :
599 : // N2, \field External Static Pressure at System Maximum Supply Air Flow Rate
600 :
601 : // In each time step, the result for system power, fan power, gas use, water user, or supply airflow rate will be determined as :
602 : // TableValue * SysMaxSupply * ScalingFactor
603 : // A13, \field Fan Heat Included in Lookup Tables
604 1 : hybridUnitaryAC.FanHeatGain = false;
605 1 : if (!lAlphaBlanks(13)) {
606 1 : if (Util::SameString(Alphas(13), "Yes")) {
607 1 : hybridUnitaryAC.FanHeatGain = false;
608 0 : } else if (Util::SameString(Alphas(13), "No")) {
609 0 : hybridUnitaryAC.FanHeatGain = true;
610 : } else {
611 0 : ShowSevereError(state, format("{} = {}", cCurrentModuleObject, hybridUnitaryAC.Name));
612 0 : ShowContinueError(state, format("Illegal {} = {}", cAlphaFields(13), Alphas(13)));
613 0 : ErrorsFound = true;
614 : }
615 : }
616 : // A14, \field Fan Heat Gain Location
617 1 : if (!lAlphaBlanks(14)) {
618 0 : hybridUnitaryAC.FanHeatGainLocation = Alphas(14);
619 : }
620 : // N3, \field Fan Heat in Air Stream Fraction
621 1 : hybridUnitaryAC.FanHeatInAirFrac = Numbers(3);
622 : // N4, \field Scaling Factor
623 1 : hybridUnitaryAC.ScalingFactor = Numbers(4);
624 : // the two numbers above are used to generate a overall scaling factor
625 1 : hybridUnitaryAC.ScaledSystemMaximumSupplyAirVolumeFlowRate = Numbers(1) * Numbers(4);
626 1 : if (state.dataEnvrn->StdRhoAir > 1) {
627 : // SystemMaximumSupplyAirFlowRate*ScalingFactor*AirDensity;
628 1 : hybridUnitaryAC.ScaledSystemMaximumSupplyAirMassFlowRate =
629 1 : hybridUnitaryAC.ScaledSystemMaximumSupplyAirVolumeFlowRate * state.dataEnvrn->StdRhoAir;
630 : } else {
631 0 : hybridUnitaryAC.ScaledSystemMaximumSupplyAirMassFlowRate = hybridUnitaryAC.ScaledSystemMaximumSupplyAirVolumeFlowRate * 1.225;
632 : }
633 :
634 : // N5, \field Minimum Time Between Mode Change
635 : // A15, \field First fuel type
636 1 : if (lAlphaBlanks(15)) {
637 : // The original code never checks if this field is empty, but adding this check leads to a unit test failure.
638 : // ShowSevereEmptyField(state, eoh, cAlphaFields(15));
639 : // ErrorsFound = true;
640 2 : } else if ((hybridUnitaryAC.firstFuel = static_cast<Constant::eFuel>(
641 1 : getEnumValue(Constant::eFuelNamesUC, Util::makeUPPER(Alphas(15))))) == Constant::eFuel::Invalid) {
642 0 : ShowSevereInvalidKey(state, eoh, cAlphaFields(15), Alphas(15));
643 0 : ErrorsFound = true;
644 : }
645 :
646 : // A16, \field Second fuel type
647 2 : if (!lAlphaBlanks(16) && Alphas(16) != "NONE" &&
648 2 : (hybridUnitaryAC.secondFuel = static_cast<Constant::eFuel>(getEnumValue(Constant::eFuelNamesUC, Util::makeUPPER(Alphas(16))))) ==
649 : Constant::eFuel::Invalid) {
650 0 : ShowSevereInvalidKey(state, eoh, cAlphaFields(16), Alphas(16));
651 0 : ErrorsFound = true;
652 : }
653 :
654 : // A17, \field Third fuel type
655 2 : if (!lAlphaBlanks(17) && Alphas(17) != "NONE" &&
656 2 : (hybridUnitaryAC.thirdFuel = static_cast<Constant::eFuel>(getEnumValue(Constant::eFuelNamesUC, Util::makeUPPER(Alphas(17))))) ==
657 : Constant::eFuel::Invalid) {
658 0 : ShowSevereInvalidKey(state, eoh, cAlphaFields(17), Alphas(17));
659 0 : ErrorsFound = true;
660 : }
661 :
662 : // A18, \field Objective Function Minimizes
663 :
664 : // A19, \ OA requirement pointer
665 1 : if (!lAlphaBlanks(19)) {
666 1 : hybridUnitaryAC.OARequirementsPtr = Util::FindItemInList(Alphas(19), state.dataSize->OARequirements);
667 1 : if (hybridUnitaryAC.OARequirementsPtr == 0) {
668 0 : ShowSevereError(state, format("{}: {} = {} invalid data", routineName, cCurrentModuleObject, Alphas(1)));
669 0 : ShowContinueError(state, format("Invalid-not found {}=\"{}\".", cAlphaFields(19), Alphas(19)));
670 0 : ErrorsFound = true;
671 : } else {
672 1 : hybridUnitaryAC.OutdoorAir = true;
673 : }
674 : }
675 :
676 1 : int FirstModeAlphaNumber = 20;
677 1 : int NumberOfAlphasPerMode = 9;
678 1 : int Numberofoperatingmodes = 0;
679 7 : for (int i = FirstModeAlphaNumber; i <= NumAlphas; i = i + NumberOfAlphasPerMode) {
680 6 : if (!lAlphaBlanks(i)) {
681 6 : ++Numberofoperatingmodes;
682 : } else {
683 0 : break;
684 : }
685 : }
686 :
687 7 : for (int modeIter = 0; modeIter <= Numberofoperatingmodes - 1; ++modeIter) {
688 6 : ErrorsFound = hybridUnitaryAC.ParseMode(state, Alphas, cAlphaFields, Numbers, cNumericFields, lAlphaBlanks, cCurrentModuleObject);
689 6 : if (ErrorsFound) {
690 0 : ShowFatalError(state, format("{}: Errors found parsing modes", routineName));
691 0 : ShowContinueError(state, "... Preceding condition causes termination.");
692 0 : break;
693 : }
694 : }
695 : // add the ZoneHVAC:HybridUnitaryHVAC Scaled Maximum Supply Air Volume Flow Rate to the Component Sizing Report Summary
696 1 : BaseSizer::reportSizerOutput(state,
697 : cCurrentModuleObject,
698 : hybridUnitaryAC.Name,
699 : "Scaled Maximum Supply Air Volume Flow Rate [m3/s]",
700 : hybridUnitaryAC.ScaledSystemMaximumSupplyAirVolumeFlowRate);
701 : }
702 : }
703 :
704 : // setup output variables
705 2 : for (UnitLoop = 1; UnitLoop <= state.dataHybridUnitaryAC->NumZoneHybridEvap; ++UnitLoop) {
706 :
707 1 : auto &hybridUnitaryAC = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitLoop);
708 :
709 2 : SetUpCompSets(state,
710 : cCurrentModuleObject,
711 : hybridUnitaryAC.Name,
712 : cCurrentModuleObject,
713 : hybridUnitaryAC.Name,
714 1 : state.dataLoopNodes->NodeID(hybridUnitaryAC.InletNode),
715 1 : state.dataLoopNodes->NodeID(hybridUnitaryAC.OutletNode));
716 :
717 2 : SetUpCompSets(state,
718 : cCurrentModuleObject,
719 : hybridUnitaryAC.Name,
720 : cCurrentModuleObject,
721 : hybridUnitaryAC.Name,
722 1 : state.dataLoopNodes->NodeID(hybridUnitaryAC.SecondaryInletNode),
723 1 : state.dataLoopNodes->NodeID(hybridUnitaryAC.SecondaryOutletNode));
724 :
725 2 : SetupOutputVariable(state,
726 : "Zone Hybrid Unitary HVAC System Total Cooling Rate",
727 : Constant::Units::W,
728 1 : hybridUnitaryAC.SystemTotalCoolingRate,
729 : OutputProcessor::TimeStepType::System,
730 : OutputProcessor::StoreType::Average,
731 1 : hybridUnitaryAC.Name);
732 2 : SetupOutputVariable(state,
733 : "Zone Hybrid Unitary HVAC System Total Cooling Energy",
734 : Constant::Units::J,
735 1 : hybridUnitaryAC.SystemTotalCoolingEnergy,
736 : OutputProcessor::TimeStepType::System,
737 : OutputProcessor::StoreType::Sum,
738 1 : hybridUnitaryAC.Name,
739 : Constant::eResource::EnergyTransfer,
740 : OutputProcessor::Group::HVAC,
741 : OutputProcessor::EndUseCat::CoolingCoils);
742 2 : SetupOutputVariable(state,
743 : "Zone Hybrid Unitary HVAC System Sensible Cooling Rate",
744 : Constant::Units::W,
745 1 : hybridUnitaryAC.SystemSensibleCoolingRate,
746 : OutputProcessor::TimeStepType::System,
747 : OutputProcessor::StoreType::Average,
748 1 : hybridUnitaryAC.Name);
749 2 : SetupOutputVariable(state,
750 : "Zone Hybrid Unitary HVAC System Sensible Cooling Energy",
751 : Constant::Units::J,
752 1 : hybridUnitaryAC.SystemSensibleCoolingEnergy,
753 : OutputProcessor::TimeStepType::System,
754 : OutputProcessor::StoreType::Sum,
755 1 : hybridUnitaryAC.Name);
756 2 : SetupOutputVariable(state,
757 : "Zone Hybrid Unitary HVAC System Latent Cooling Rate",
758 : Constant::Units::W,
759 1 : hybridUnitaryAC.SystemLatentCoolingRate,
760 : OutputProcessor::TimeStepType::System,
761 : OutputProcessor::StoreType::Average,
762 1 : hybridUnitaryAC.Name);
763 2 : SetupOutputVariable(state,
764 : "Zone Hybrid Unitary HVAC System Latent Cooling Energy",
765 : Constant::Units::J,
766 1 : hybridUnitaryAC.SystemLatentCoolingEnergy,
767 : OutputProcessor::TimeStepType::System,
768 : OutputProcessor::StoreType::Sum,
769 1 : hybridUnitaryAC.Name);
770 :
771 2 : SetupOutputVariable(state,
772 : "Zone Hybrid Unitary HVAC Zone Total Cooling Rate",
773 : Constant::Units::W,
774 1 : hybridUnitaryAC.UnitTotalCoolingRate,
775 : OutputProcessor::TimeStepType::System,
776 : OutputProcessor::StoreType::Average,
777 1 : hybridUnitaryAC.Name);
778 2 : SetupOutputVariable(state,
779 : "Zone Hybrid Unitary HVAC Zone Total Cooling Energy",
780 : Constant::Units::J,
781 1 : hybridUnitaryAC.UnitTotalCoolingEnergy,
782 : OutputProcessor::TimeStepType::System,
783 : OutputProcessor::StoreType::Sum,
784 1 : hybridUnitaryAC.Name);
785 2 : SetupOutputVariable(state,
786 : "Zone Hybrid Unitary HVAC Zone Sensible Cooling Rate",
787 : Constant::Units::W,
788 1 : hybridUnitaryAC.UnitSensibleCoolingRate,
789 : OutputProcessor::TimeStepType::System,
790 : OutputProcessor::StoreType::Average,
791 1 : hybridUnitaryAC.Name);
792 2 : SetupOutputVariable(state,
793 : "Zone Hybrid Unitary HVAC Zone Sensible Cooling Energy",
794 : Constant::Units::J,
795 1 : hybridUnitaryAC.UnitSensibleCoolingEnergy,
796 : OutputProcessor::TimeStepType::System,
797 : OutputProcessor::StoreType::Sum,
798 1 : hybridUnitaryAC.Name);
799 2 : SetupOutputVariable(state,
800 : "Zone Hybrid Unitary HVAC Zone Latent Cooling Rate",
801 : Constant::Units::W,
802 1 : hybridUnitaryAC.UnitLatentCoolingRate,
803 : OutputProcessor::TimeStepType::System,
804 : OutputProcessor::StoreType::Average,
805 1 : hybridUnitaryAC.Name);
806 2 : SetupOutputVariable(state,
807 : "Zone Hybrid Unitary HVAC Zone Latent Cooling Energy",
808 : Constant::Units::J,
809 1 : hybridUnitaryAC.UnitLatentCoolingEnergy,
810 : OutputProcessor::TimeStepType::System,
811 : OutputProcessor::StoreType::Sum,
812 1 : hybridUnitaryAC.Name);
813 :
814 2 : SetupOutputVariable(state,
815 : "Zone Hybrid Unitary HVAC System Total Heating Rate",
816 : Constant::Units::W,
817 1 : hybridUnitaryAC.SystemTotalHeatingRate,
818 : OutputProcessor::TimeStepType::System,
819 : OutputProcessor::StoreType::Average,
820 1 : hybridUnitaryAC.Name);
821 2 : SetupOutputVariable(state,
822 : "Zone Hybrid Unitary HVAC System Total Heating Energy",
823 : Constant::Units::J,
824 1 : hybridUnitaryAC.SystemTotalHeatingEnergy,
825 : OutputProcessor::TimeStepType::System,
826 : OutputProcessor::StoreType::Sum,
827 1 : hybridUnitaryAC.Name,
828 : Constant::eResource::EnergyTransfer,
829 : OutputProcessor::Group::HVAC,
830 : OutputProcessor::EndUseCat::HeatingCoils);
831 2 : SetupOutputVariable(state,
832 : "Zone Hybrid Unitary HVAC System Sensible Heating Rate",
833 : Constant::Units::W,
834 1 : hybridUnitaryAC.SystemSensibleHeatingRate,
835 : OutputProcessor::TimeStepType::System,
836 : OutputProcessor::StoreType::Average,
837 1 : hybridUnitaryAC.Name);
838 2 : SetupOutputVariable(state,
839 : "Zone Hybrid Unitary HVAC System Sensible Heating Energy",
840 : Constant::Units::J,
841 1 : hybridUnitaryAC.SystemSensibleHeatingEnergy,
842 : OutputProcessor::TimeStepType::System,
843 : OutputProcessor::StoreType::Sum,
844 1 : hybridUnitaryAC.Name);
845 2 : SetupOutputVariable(state,
846 : "Zone Hybrid Unitary HVAC System Latent Heating Rate",
847 : Constant::Units::W,
848 1 : hybridUnitaryAC.SystemLatentHeatingRate,
849 : OutputProcessor::TimeStepType::System,
850 : OutputProcessor::StoreType::Average,
851 1 : hybridUnitaryAC.Name);
852 2 : SetupOutputVariable(state,
853 : "Zone Hybrid Unitary HVAC System Latent Heating Energy",
854 : Constant::Units::J,
855 1 : hybridUnitaryAC.SystemLatentHeatingEnergy,
856 : OutputProcessor::TimeStepType::System,
857 : OutputProcessor::StoreType::Sum,
858 1 : hybridUnitaryAC.Name);
859 :
860 2 : SetupOutputVariable(state,
861 : "Zone Hybrid Unitary HVAC Zone Total Heating Rate",
862 : Constant::Units::W,
863 1 : hybridUnitaryAC.UnitTotalHeatingRate,
864 : OutputProcessor::TimeStepType::System,
865 : OutputProcessor::StoreType::Average,
866 1 : hybridUnitaryAC.Name);
867 2 : SetupOutputVariable(state,
868 : "Zone Hybrid Unitary HVAC Zone Total Heating Energy",
869 : Constant::Units::J,
870 1 : hybridUnitaryAC.UnitTotalHeatingEnergy,
871 : OutputProcessor::TimeStepType::System,
872 : OutputProcessor::StoreType::Sum,
873 1 : hybridUnitaryAC.Name);
874 2 : SetupOutputVariable(state,
875 : "Zone Hybrid Unitary HVAC Zone Sensible Heating Rate",
876 : Constant::Units::W,
877 1 : hybridUnitaryAC.UnitSensibleHeatingRate,
878 : OutputProcessor::TimeStepType::System,
879 : OutputProcessor::StoreType::Average,
880 1 : hybridUnitaryAC.Name);
881 2 : SetupOutputVariable(state,
882 : "Zone Hybrid Unitary HVAC Zone Sensible Heating Energy",
883 : Constant::Units::J,
884 1 : hybridUnitaryAC.UnitSensibleHeatingEnergy,
885 : OutputProcessor::TimeStepType::System,
886 : OutputProcessor::StoreType::Sum,
887 1 : hybridUnitaryAC.Name);
888 2 : SetupOutputVariable(state,
889 : "Zone Hybrid Unitary HVAC Zone Latent Heating Rate",
890 : Constant::Units::W,
891 1 : hybridUnitaryAC.UnitLatentHeatingRate,
892 : OutputProcessor::TimeStepType::System,
893 : OutputProcessor::StoreType::Average,
894 1 : hybridUnitaryAC.Name);
895 2 : SetupOutputVariable(state,
896 : "Zone Hybrid Unitary HVAC Zone Latent Heating Energy",
897 : Constant::Units::J,
898 1 : hybridUnitaryAC.UnitLatentHeatingEnergy,
899 : OutputProcessor::TimeStepType::System,
900 : OutputProcessor::StoreType::Sum,
901 1 : hybridUnitaryAC.Name);
902 :
903 2 : SetupOutputVariable(state,
904 : "Zone Hybrid Unitary HVAC Predicted Sensible Load to Setpoint Heat Transfer Rate",
905 : Constant::Units::W,
906 1 : hybridUnitaryAC.RequestedLoadToCoolingSetpoint,
907 : OutputProcessor::TimeStepType::System,
908 : OutputProcessor::StoreType::Average,
909 1 : hybridUnitaryAC.Name);
910 1 : SetupOutputVariable(state,
911 : "Zone Hybrid Unitary HVAC Error Code",
912 : Constant::Units::None,
913 1 : hybridUnitaryAC.ErrorCode,
914 : OutputProcessor::TimeStepType::System,
915 : OutputProcessor::StoreType::Average,
916 1 : hybridUnitaryAC.Name);
917 :
918 2 : SetupOutputVariable(state,
919 : "Zone Hybrid Unitary HVAC Supply Air Temperature",
920 : Constant::Units::C,
921 1 : hybridUnitaryAC.OutletTemp,
922 : OutputProcessor::TimeStepType::System,
923 : OutputProcessor::StoreType::Average,
924 1 : hybridUnitaryAC.Name);
925 2 : SetupOutputVariable(state,
926 : "Zone Hybrid Unitary HVAC Return Air Temperature",
927 : Constant::Units::C,
928 1 : hybridUnitaryAC.InletTemp,
929 : OutputProcessor::TimeStepType::System,
930 : OutputProcessor::StoreType::Average,
931 1 : hybridUnitaryAC.Name);
932 2 : SetupOutputVariable(state,
933 : "Zone Hybrid Unitary HVAC Outdoor Air Temperature",
934 : Constant::Units::C,
935 1 : hybridUnitaryAC.SecInletTemp,
936 : OutputProcessor::TimeStepType::System,
937 : OutputProcessor::StoreType::Average,
938 1 : hybridUnitaryAC.Name);
939 2 : SetupOutputVariable(state,
940 : "Zone Hybrid Unitary HVAC Relief Air Temperature",
941 : Constant::Units::C,
942 1 : hybridUnitaryAC.SecOutletTemp,
943 : OutputProcessor::TimeStepType::System,
944 : OutputProcessor::StoreType::Average,
945 1 : hybridUnitaryAC.Name);
946 :
947 2 : SetupOutputVariable(state,
948 : "Zone Hybrid Unitary HVAC Supply Air Humidity Ratio",
949 : Constant::Units::kgWater_kgDryAir,
950 1 : hybridUnitaryAC.OutletHumRat,
951 : OutputProcessor::TimeStepType::System,
952 : OutputProcessor::StoreType::Average,
953 1 : hybridUnitaryAC.Name);
954 2 : SetupOutputVariable(state,
955 : "Zone Hybrid Unitary HVAC Return Air Humidity Ratio",
956 : Constant::Units::kgWater_kgDryAir,
957 1 : hybridUnitaryAC.InletHumRat,
958 : OutputProcessor::TimeStepType::System,
959 : OutputProcessor::StoreType::Average,
960 1 : hybridUnitaryAC.Name);
961 2 : SetupOutputVariable(state,
962 : "Zone Hybrid Unitary HVAC Outdoor Air Humidity Ratio",
963 : Constant::Units::kgWater_kgDryAir,
964 1 : hybridUnitaryAC.SecInletHumRat,
965 : OutputProcessor::TimeStepType::System,
966 : OutputProcessor::StoreType::Average,
967 1 : hybridUnitaryAC.Name);
968 2 : SetupOutputVariable(state,
969 : "Zone Hybrid Unitary HVAC Relief Air Humidity Ratio",
970 : Constant::Units::kgWater_kgDryAir,
971 1 : hybridUnitaryAC.SecOutletHumRat,
972 : OutputProcessor::TimeStepType::System,
973 : OutputProcessor::StoreType::Average,
974 1 : hybridUnitaryAC.Name);
975 :
976 2 : SetupOutputVariable(state,
977 : "Zone Hybrid Unitary HVAC Supply Air Relative Humidity",
978 : Constant::Units::Perc,
979 1 : hybridUnitaryAC.OutletRH,
980 : OutputProcessor::TimeStepType::System,
981 : OutputProcessor::StoreType::Average,
982 1 : hybridUnitaryAC.Name);
983 2 : SetupOutputVariable(state,
984 : "Zone Hybrid Unitary HVAC Return Air Relative Humidity",
985 : Constant::Units::Perc,
986 1 : hybridUnitaryAC.InletRH,
987 : OutputProcessor::TimeStepType::System,
988 : OutputProcessor::StoreType::Average,
989 1 : hybridUnitaryAC.Name);
990 2 : SetupOutputVariable(state,
991 : "Zone Hybrid Unitary HVAC Outdoor Air Relative Humidity",
992 : Constant::Units::Perc,
993 1 : hybridUnitaryAC.SecInletRH,
994 : OutputProcessor::TimeStepType::System,
995 : OutputProcessor::StoreType::Average,
996 1 : hybridUnitaryAC.Name);
997 2 : SetupOutputVariable(state,
998 : "Zone Hybrid Unitary HVAC Relief Air Relative Humidity",
999 : Constant::Units::Perc,
1000 1 : hybridUnitaryAC.SecOutletRH,
1001 : OutputProcessor::TimeStepType::System,
1002 : OutputProcessor::StoreType::Average,
1003 1 : hybridUnitaryAC.Name);
1004 :
1005 2 : SetupOutputVariable(state,
1006 : "Zone Hybrid Unitary HVAC Supply Air Mass Flow Rate",
1007 : Constant::Units::kg_s,
1008 1 : hybridUnitaryAC.OutletMassFlowRate,
1009 : OutputProcessor::TimeStepType::System,
1010 : OutputProcessor::StoreType::Average,
1011 1 : hybridUnitaryAC.Name);
1012 2 : SetupOutputVariable(state,
1013 : "Zone Hybrid Unitary HVAC Supply Air Standard Density Volume Flow Rate",
1014 : Constant::Units::m3_s,
1015 1 : hybridUnitaryAC.OutletVolumetricFlowRate,
1016 : OutputProcessor::TimeStepType::System,
1017 : OutputProcessor::StoreType::Average,
1018 1 : hybridUnitaryAC.Name);
1019 2 : SetupOutputVariable(state,
1020 : "Zone Hybrid Unitary HVAC Return Air Mass Flow Rate",
1021 : Constant::Units::kg_s,
1022 1 : hybridUnitaryAC.InletMassFlowRate,
1023 : OutputProcessor::TimeStepType::System,
1024 : OutputProcessor::StoreType::Average,
1025 1 : hybridUnitaryAC.Name);
1026 2 : SetupOutputVariable(state,
1027 : "Zone Hybrid Unitary HVAC Return Air Standard Density Volume Flow Rate",
1028 : Constant::Units::m3_s,
1029 1 : hybridUnitaryAC.InletVolumetricFlowRate,
1030 : OutputProcessor::TimeStepType::System,
1031 : OutputProcessor::StoreType::Average,
1032 1 : hybridUnitaryAC.Name);
1033 2 : SetupOutputVariable(state,
1034 : "Zone Hybrid Unitary HVAC Relief Air Mass Flow Rate",
1035 : Constant::Units::kg_s,
1036 1 : hybridUnitaryAC.SecOutletMassFlowRate,
1037 : OutputProcessor::TimeStepType::System,
1038 : OutputProcessor::StoreType::Average,
1039 1 : hybridUnitaryAC.Name);
1040 2 : SetupOutputVariable(state,
1041 : "Zone Hybrid Unitary HVAC Relief Air Standard Density Volume Flow Rate",
1042 : Constant::Units::m3_s,
1043 1 : hybridUnitaryAC.SecOutletVolumetricFlowRate,
1044 : OutputProcessor::TimeStepType::System,
1045 : OutputProcessor::StoreType::Average,
1046 1 : hybridUnitaryAC.Name);
1047 2 : SetupOutputVariable(state,
1048 : "Zone Hybrid Unitary HVAC Ventilation Air Standard Density Volume Flow Rate",
1049 : Constant::Units::m3_s,
1050 1 : hybridUnitaryAC.SupplyVentilationVolume,
1051 : OutputProcessor::TimeStepType::System,
1052 : OutputProcessor::StoreType::Average,
1053 1 : hybridUnitaryAC.Name);
1054 2 : SetupOutputVariable(state,
1055 : "Zone Hybrid Unitary HVAC Electricity Rate",
1056 : Constant::Units::W,
1057 1 : hybridUnitaryAC.FinalElectricalPower,
1058 : OutputProcessor::TimeStepType::System,
1059 : OutputProcessor::StoreType::Average,
1060 1 : hybridUnitaryAC.Name);
1061 2 : SetupOutputVariable(state,
1062 : "Zone Hybrid Unitary HVAC Electricity Energy",
1063 : Constant::Units::J,
1064 1 : hybridUnitaryAC.FinalElectricalEnergy,
1065 : OutputProcessor::TimeStepType::System,
1066 : OutputProcessor::StoreType::Sum,
1067 1 : hybridUnitaryAC.Name,
1068 : Constant::eResource::Electricity,
1069 : OutputProcessor::Group::HVAC,
1070 : OutputProcessor::EndUseCat::Cooling,
1071 : "Hybrid HVAC Cooling");
1072 :
1073 2 : SetupOutputVariable(state,
1074 : "Zone Hybrid Unitary HVAC Requested Outdoor Air Ventilation Mass Flow Rate",
1075 : Constant::Units::kg_s,
1076 1 : hybridUnitaryAC.MinOA_Msa,
1077 : OutputProcessor::TimeStepType::System,
1078 : OutputProcessor::StoreType::Average,
1079 1 : hybridUnitaryAC.Name);
1080 2 : SetupOutputVariable(state,
1081 : "Zone Hybrid Unitary HVAC Ventilation Air Mass Flow Rate",
1082 : Constant::Units::kg_s,
1083 1 : hybridUnitaryAC.SupplyVentilationAir,
1084 : OutputProcessor::TimeStepType::System,
1085 : OutputProcessor::StoreType::Average,
1086 1 : hybridUnitaryAC.Name);
1087 1 : SetupOutputVariable(state,
1088 : "Zone Hybrid Unitary HVAC Availability Status",
1089 : Constant::Units::None,
1090 1 : hybridUnitaryAC.UnitOn,
1091 : OutputProcessor::TimeStepType::System,
1092 : OutputProcessor::StoreType::Average,
1093 1 : hybridUnitaryAC.Name);
1094 2 : SetupOutputVariable(state,
1095 : "Zone Hybrid Unitary HVAC Outdoor Air Fraction",
1096 : Constant::Units::None,
1097 1 : hybridUnitaryAC.averageOSAF,
1098 : OutputProcessor::TimeStepType::System,
1099 : OutputProcessor::StoreType::Average,
1100 1 : hybridUnitaryAC.Name);
1101 :
1102 2 : SetupOutputVariable(state,
1103 : "Zone Hybrid Unitary HVAC Dehumidification Load to Humidistat Setpoint Moisture Transfer Rate",
1104 : Constant::Units::kg_s,
1105 1 : hybridUnitaryAC.RequestedDeHumidificationMass,
1106 : OutputProcessor::TimeStepType::System,
1107 : OutputProcessor::StoreType::Average,
1108 1 : hybridUnitaryAC.Name);
1109 2 : SetupOutputVariable(state,
1110 : "Zone Hybrid Unitary HVAC Dehumidification Load to Humidistat Setpoint Heat Transfer Rate",
1111 : Constant::Units::W,
1112 1 : hybridUnitaryAC.RequestedDeHumidificationLoad,
1113 : OutputProcessor::TimeStepType::System,
1114 : OutputProcessor::StoreType::Average,
1115 1 : hybridUnitaryAC.Name);
1116 2 : SetupOutputVariable(state,
1117 : "Zone Hybrid Unitary HVAC Dehumidification Load to Humidistat Setpoint Heat Transfer Energy",
1118 : Constant::Units::J,
1119 1 : hybridUnitaryAC.RequestedDeHumidificationEnergy,
1120 : OutputProcessor::TimeStepType::System,
1121 : OutputProcessor::StoreType::Average,
1122 1 : hybridUnitaryAC.Name);
1123 :
1124 2 : SetupOutputVariable(state,
1125 : "Zone Hybrid Unitary HVAC Humidification Load to Humidistat Setpoint Moisture Transfer Rate",
1126 : Constant::Units::kg_s,
1127 1 : hybridUnitaryAC.RequestedHumidificationMass,
1128 : OutputProcessor::TimeStepType::System,
1129 : OutputProcessor::StoreType::Average,
1130 1 : hybridUnitaryAC.Name);
1131 2 : SetupOutputVariable(state,
1132 : "Zone Hybrid Unitary HVAC Humidification Load to Humidistat Setpoint Heat Transfer Rate",
1133 : Constant::Units::W,
1134 1 : hybridUnitaryAC.RequestedHumidificationLoad,
1135 : OutputProcessor::TimeStepType::System,
1136 : OutputProcessor::StoreType::Average,
1137 1 : hybridUnitaryAC.Name);
1138 2 : SetupOutputVariable(state,
1139 : "Zone Hybrid Unitary HVAC Humidification Load to Humidistat Setpoint Heat Transfer Energy",
1140 : Constant::Units::J,
1141 1 : hybridUnitaryAC.RequestedHumidificationEnergy,
1142 : OutputProcessor::TimeStepType::System,
1143 : OutputProcessor::StoreType::Average,
1144 1 : hybridUnitaryAC.Name);
1145 :
1146 2 : SetupOutputVariable(state,
1147 : "Zone Hybrid Unitary HVAC Supply Fan Electricity Rate",
1148 : Constant::Units::W,
1149 1 : hybridUnitaryAC.SupplyFanElectricPower,
1150 : OutputProcessor::TimeStepType::System,
1151 : OutputProcessor::StoreType::Average,
1152 1 : hybridUnitaryAC.Name);
1153 2 : SetupOutputVariable(state,
1154 : "Zone Hybrid Unitary HVAC Supply Fan Electricity Energy",
1155 : Constant::Units::J,
1156 1 : hybridUnitaryAC.SupplyFanElectricEnergy,
1157 : OutputProcessor::TimeStepType::System,
1158 : OutputProcessor::StoreType::Sum,
1159 1 : hybridUnitaryAC.Name,
1160 : Constant::eResource::Electricity,
1161 : OutputProcessor::Group::HVAC,
1162 : OutputProcessor::EndUseCat::Fans,
1163 : "Hybrid HVAC Fans");
1164 1 : if (hybridUnitaryAC.secondFuel != Constant::eFuel::Invalid) {
1165 2 : SetupOutputVariable(state,
1166 : "Zone Hybrid Unitary HVAC Secondary Fuel Consumption Rate",
1167 : Constant::Units::W,
1168 1 : hybridUnitaryAC.SecondaryFuelConsumptionRate,
1169 : OutputProcessor::TimeStepType::System,
1170 : OutputProcessor::StoreType::Average,
1171 1 : hybridUnitaryAC.Name);
1172 2 : SetupOutputVariable(state,
1173 : "Zone Hybrid Unitary HVAC Secondary Fuel Consumption",
1174 : Constant::Units::J,
1175 1 : hybridUnitaryAC.SecondaryFuelConsumption,
1176 : OutputProcessor::TimeStepType::System,
1177 : OutputProcessor::StoreType::Sum,
1178 1 : hybridUnitaryAC.Name,
1179 1 : Constant::eFuel2eResource[(int)hybridUnitaryAC.secondFuel],
1180 : OutputProcessor::Group::HVAC,
1181 : OutputProcessor::EndUseCat::Cooling,
1182 : "Hybrid HVAC Cooling");
1183 : }
1184 1 : if (hybridUnitaryAC.thirdFuel != Constant::eFuel::Invalid) {
1185 2 : SetupOutputVariable(state,
1186 : "Zone Hybrid Unitary HVAC Third Fuel Consumption Rate",
1187 : Constant::Units::W,
1188 1 : hybridUnitaryAC.ThirdFuelConsumptionRate,
1189 : OutputProcessor::TimeStepType::System,
1190 : OutputProcessor::StoreType::Average,
1191 1 : hybridUnitaryAC.Name);
1192 2 : SetupOutputVariable(state,
1193 : "Zone Hybrid Unitary HVAC Third Fuel Consumption",
1194 : Constant::Units::J,
1195 1 : hybridUnitaryAC.ThirdFuelConsumption,
1196 : OutputProcessor::TimeStepType::System,
1197 : OutputProcessor::StoreType::Sum,
1198 1 : hybridUnitaryAC.Name,
1199 1 : Constant::eFuel2eResource[(int)hybridUnitaryAC.thirdFuel],
1200 : OutputProcessor::Group::HVAC,
1201 : OutputProcessor::EndUseCat::Cooling,
1202 : "Hybrid HVAC Cooling");
1203 : }
1204 2 : SetupOutputVariable(state,
1205 : "Zone Hybrid Unitary HVAC Water Consumption Rate",
1206 : Constant::Units::kgWater_s,
1207 1 : hybridUnitaryAC.WaterConsumptionRate,
1208 : OutputProcessor::TimeStepType::System,
1209 : OutputProcessor::StoreType::Average,
1210 1 : hybridUnitaryAC.Name);
1211 2 : SetupOutputVariable(state,
1212 : "Zone Hybrid Unitary HVAC Water Consumption",
1213 : Constant::Units::m3,
1214 1 : hybridUnitaryAC.WaterConsumption,
1215 : OutputProcessor::TimeStepType::System,
1216 : OutputProcessor::StoreType::Sum,
1217 1 : hybridUnitaryAC.Name,
1218 : Constant::eResource::Water,
1219 : OutputProcessor::Group::HVAC,
1220 : OutputProcessor::EndUseCat::Cooling,
1221 : "Hybrid HVAC Cooling");
1222 2 : SetupOutputVariable(state,
1223 : "Zone Hybrid Unitary HVAC External Static Pressure",
1224 : Constant::Units::Pa,
1225 1 : hybridUnitaryAC.ExternalStaticPressure,
1226 : OutputProcessor::TimeStepType::System,
1227 : OutputProcessor::StoreType::Average,
1228 1 : hybridUnitaryAC.Name);
1229 :
1230 1 : if (hybridUnitaryAC.FanHeatGain) {
1231 0 : SetupOutputVariable(state,
1232 : "Zone Hybrid Unitary HVAC Fan Rise in Air Temperature",
1233 : Constant::Units::deltaC,
1234 0 : hybridUnitaryAC.FanHeatTemp,
1235 : OutputProcessor::TimeStepType::System,
1236 : OutputProcessor::StoreType::Average,
1237 0 : hybridUnitaryAC.Name);
1238 0 : SetupOutputVariable(state,
1239 : "Zone Hybrid Unitary HVAC Fan Heat Gain to Air",
1240 : Constant::Units::W,
1241 0 : hybridUnitaryAC.PowerLossToAir,
1242 : OutputProcessor::TimeStepType::System,
1243 : OutputProcessor::StoreType::Average,
1244 0 : hybridUnitaryAC.Name);
1245 : }
1246 :
1247 1 : int index = 0;
1248 :
1249 6 : for (auto &thisSetting : hybridUnitaryAC.CurrentOperatingSettings) {
1250 15 : SetupOutputVariable(state,
1251 10 : format("Zone Hybrid Unitary HVAC Runtime Fraction in Setting {}", index),
1252 : Constant::Units::None,
1253 5 : thisSetting.Runtime_Fraction,
1254 : OutputProcessor::TimeStepType::Zone,
1255 : OutputProcessor::StoreType::Average,
1256 5 : hybridUnitaryAC.Name);
1257 15 : SetupOutputVariable(state,
1258 10 : format("Zone Hybrid Unitary HVAC Mode in Setting {}", index),
1259 : Constant::Units::None,
1260 5 : thisSetting.Mode,
1261 : OutputProcessor::TimeStepType::Zone,
1262 : OutputProcessor::StoreType::Average,
1263 5 : hybridUnitaryAC.Name);
1264 15 : SetupOutputVariable(state,
1265 10 : format("Zone Hybrid Unitary HVAC Outdoor Air Fraction in Setting {}", index),
1266 : Constant::Units::kg_s,
1267 5 : thisSetting.Outdoor_Air_Fraction,
1268 : OutputProcessor::TimeStepType::Zone,
1269 : OutputProcessor::StoreType::Average,
1270 5 : hybridUnitaryAC.Name);
1271 15 : SetupOutputVariable(state,
1272 10 : format("Zone Hybrid Unitary HVAC Supply Air Mass Flow Rate in Setting {}", index),
1273 : Constant::Units::kg_s,
1274 5 : thisSetting.Unscaled_Supply_Air_Mass_Flow_Rate,
1275 : OutputProcessor::TimeStepType::Zone,
1276 : OutputProcessor::StoreType::Average,
1277 5 : hybridUnitaryAC.Name);
1278 15 : SetupOutputVariable(state,
1279 10 : format("Zone Hybrid Unitary HVAC Supply Air Mass Flow Rate Ratio in Setting {}", index),
1280 : Constant::Units::None,
1281 5 : thisSetting.Supply_Air_Mass_Flow_Rate_Ratio,
1282 : OutputProcessor::TimeStepType::Zone,
1283 : OutputProcessor::StoreType::Average,
1284 5 : hybridUnitaryAC.Name);
1285 5 : index++;
1286 1 : }
1287 : }
1288 1 : Errors = ErrorsFound;
1289 1 : if (ErrorsFound) {
1290 0 : ShowFatalError(state, format("{}: Errors found in getting input.", routineName));
1291 0 : ShowContinueError(state, "... Preceding condition causes termination.");
1292 : }
1293 1 : }
1294 771 : int GetHybridUnitaryACOutAirNode(EnergyPlusData &state, int const CompNum)
1295 : {
1296 771 : if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) {
1297 0 : bool errorsfound = false;
1298 0 : GetInputZoneHybridUnitaryAirConditioners(state, errorsfound);
1299 0 : state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false;
1300 : }
1301 :
1302 : int GetHybridUnitaryACOutAirNode;
1303 771 : GetHybridUnitaryACOutAirNode = 0;
1304 771 : if (CompNum > 0 && CompNum <= state.dataHybridUnitaryAC->NumZoneHybridEvap) {
1305 771 : GetHybridUnitaryACOutAirNode = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).SecondaryInletNode;
1306 : }
1307 :
1308 771 : return GetHybridUnitaryACOutAirNode;
1309 : }
1310 :
1311 771 : int GetHybridUnitaryACZoneInletNode(EnergyPlusData &state, int const CompNum)
1312 : {
1313 771 : if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) {
1314 0 : bool errorsfound = false;
1315 0 : GetInputZoneHybridUnitaryAirConditioners(state, errorsfound);
1316 0 : state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false;
1317 : }
1318 :
1319 : int GetHybridUnitaryACZoneInletNode;
1320 771 : GetHybridUnitaryACZoneInletNode = 0;
1321 771 : if (CompNum > 0 && CompNum <= state.dataHybridUnitaryAC->NumZoneHybridEvap) {
1322 771 : GetHybridUnitaryACZoneInletNode = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).OutletNode;
1323 : }
1324 :
1325 771 : return GetHybridUnitaryACZoneInletNode;
1326 : }
1327 :
1328 771 : int GetHybridUnitaryACReturnAirNode(EnergyPlusData &state, int const CompNum)
1329 : {
1330 771 : if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) {
1331 0 : bool errorsfound = false;
1332 0 : GetInputZoneHybridUnitaryAirConditioners(state, errorsfound);
1333 0 : state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false;
1334 : }
1335 :
1336 : int GetHybridUnitaryACReturnAirNode;
1337 771 : GetHybridUnitaryACReturnAirNode = 0;
1338 771 : if (CompNum > 0 && CompNum <= state.dataHybridUnitaryAC->NumZoneHybridEvap) {
1339 771 : GetHybridUnitaryACReturnAirNode = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(CompNum).InletNode;
1340 : }
1341 :
1342 771 : return GetHybridUnitaryACReturnAirNode;
1343 : }
1344 :
1345 0 : int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName)
1346 : {
1347 0 : if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) {
1348 0 : bool errFlag = false;
1349 0 : GetInputZoneHybridUnitaryAirConditioners(state, errFlag);
1350 0 : state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false;
1351 : }
1352 :
1353 0 : for (int UnitLoop = 1; UnitLoop <= state.dataHybridUnitaryAC->NumZoneHybridEvap; ++UnitLoop) {
1354 0 : if (Util::SameString(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitLoop).Name, CompName)) {
1355 0 : return UnitLoop;
1356 : }
1357 : }
1358 :
1359 0 : return 0;
1360 : }
1361 :
1362 : //*****************************************************************************************
1363 :
1364 : } // namespace EnergyPlus::HybridUnitaryAirConditioners
|