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 EvaporativeCoolers_hh_INCLUDED
49 : #define EvaporativeCoolers_hh_INCLUDED
50 :
51 : // ObjexxFCL Headers
52 : #include <ObjexxFCL/Array1D.hh>
53 :
54 : // EnergyPlus Headers
55 : #include <EnergyPlus/Data/BaseData.hh>
56 : #include <EnergyPlus/DataGlobals.hh>
57 : #include <EnergyPlus/DataZoneEquipment.hh>
58 : #include <EnergyPlus/EnergyPlus.hh>
59 :
60 : namespace EnergyPlus {
61 :
62 : // Forward declarations
63 : struct EnergyPlusData;
64 :
65 : namespace EvaporativeCoolers {
66 :
67 : // MODULE PARAMETER DEFINITIONS
68 : enum class WaterSupply
69 : {
70 : Invalid = -1,
71 : FromMains,
72 : FromTank,
73 : Num
74 : };
75 :
76 : enum class FanPlacement
77 : {
78 : Invalid = -1,
79 : BlowThruFan,
80 : DrawThruFan,
81 : Num
82 : };
83 :
84 : enum class ControlType
85 : {
86 : Invalid = -1,
87 : ZoneTemperatureDeadBandOnOffCycling,
88 : ZoneCoolingLoadOnOffCycling,
89 : ZoneCoolingLoadVariableSpeedFan,
90 : Num
91 : };
92 :
93 : enum class OperatingMode
94 : {
95 : Invalid = -1,
96 : None, // the indirect evaporative cooler Research Special is scheduled off or turned off
97 : DryModulated, // the evaporative cooler Research Special is modulated in Dry Mode
98 : DryFull, // the evaporative cooler Research Special is run in full capacity in Dry Mode
99 : DryWetModulated, // the evaporative cooler Research Special is modulated in Dry Mode or wet Mode
100 : WetModulated, // the evaporative cooler Research Special is modulated in wet Mode
101 : WetFull, // the evaporative cooler Research Special is run in full capacity in Wet Mode
102 : Num
103 : };
104 :
105 : enum class EvapCoolerType
106 : {
107 : Invalid = -1,
108 : DirectCELDEKPAD,
109 : IndirectCELDEKPAD,
110 : IndirectWETCOIL,
111 : IndirectRDDSpecial,
112 : DirectResearchSpecial,
113 : Num
114 : };
115 :
116 196 : struct EvapConditions
117 : {
118 : std::string Name; // Name of the EvapCooler
119 : int EquipIndex;
120 : EvapCoolerType evapCoolerType; // Type of the EvapCooler
121 : std::string EvapControlType; // Type of Control for the EvapCooler
122 : std::string Schedule; // HeatingCoil Operation Schedule
123 : int SchedPtr; // Pointer to the correct schedule
124 : Real64 VolFlowRate; // Volume Flow Rate in Evap Cooler needed for calculating SatEff
125 : Real64 DesVolFlowRate; // Design volume flow rate (autosize or user input) - this is only used to compute design pump power
126 : Real64 OutletTemp;
127 : Real64 OuletWetBulbTemp;
128 : Real64 OutletHumRat;
129 : Real64 OutletEnthalpy;
130 : Real64 OutletPressure;
131 : Real64 OutletMassFlowRate; // MassFlow through the EvapCooler being Simulated [kg/Sec]
132 : Real64 OutletMassFlowRateMaxAvail; // [kg/Sec]
133 : Real64 OutletMassFlowRateMinAvail; // [kg/Sec]
134 : bool InitFlag;
135 : int InletNode;
136 : int OutletNode;
137 : int SecondaryInletNode; // This is usually OA node feeding into the purge/secondary side
138 : int SecondaryOutletNode; // This outlet node of the secondary side and ilet to the secondary fan
139 : int TertiaryInletNode; // This node is used to run building exhaust into purge side.
140 : Real64 InletMassFlowRate; // Inlet is primary process air node at inlet to cooler
141 : Real64 InletMassFlowRateMaxAvail;
142 : Real64 InletMassFlowRateMinAvail;
143 : Real64 InletTemp;
144 : Real64 InletWetBulbTemp;
145 : Real64 InletHumRat;
146 : Real64 InletEnthalpy;
147 : Real64 InletPressure;
148 : Real64 SecInletMassFlowRate; // Secondary inlet is for indirect coolers
149 : Real64 SecInletMassFlowRateMaxAvail;
150 : Real64 SecInletMassFlowRateMinAvail;
151 : Real64 SecInletTemp;
152 : Real64 SecInletWetBulbTemp;
153 : Real64 SecInletHumRat;
154 : Real64 SecInletEnthalpy;
155 : Real64 SecInletPressure;
156 : Real64 SecOutletTemp; // secondary air outlet node drybulb temperature
157 : Real64 SecOuletWetBulbTemp; // secondarr air outlet node wetbulb temperature
158 : Real64 SecOutletHumRat; // secondarr air outlet node humidity ratio
159 : Real64 SecOutletEnthalpy; // secondarr air outlet node enthalpy
160 : Real64 SecOutletMassFlowRate; // Mass Flow through the secondary air side [kg/Sec]
161 : Real64 PadDepth;
162 : Real64 PadArea;
163 : Real64 RecircPumpPower;
164 : Real64 IndirectRecircPumpPower;
165 : Real64 IndirectPadDepth;
166 : Real64 IndirectPadArea;
167 : Real64 IndirectVolFlowRate;
168 : Real64 IndirectFanEff;
169 : Real64 IndirectFanDeltaPress;
170 : Real64 IndirectHXEffectiveness;
171 : Real64 DirectEffectiveness; // input saturation effectiveness for constant effectiveness model
172 : Real64 WetCoilMaxEfficiency;
173 : Real64 WetCoilFlowRatio;
174 : Real64 EvapCoolerEnergy;
175 : Real64 EvapCoolerPower;
176 : WaterSupply EvapWaterSupplyMode; // where does water come from
177 : std::string EvapWaterSupplyName; // name of water source e.g. water storage tank
178 : int EvapWaterSupTankID;
179 : int EvapWaterTankDemandARRID;
180 : Real64 DriftFraction; // excess water from drift as fraction of Evap Water Consumption rate
181 : Real64 BlowDownRatio; // excess water use for blowdown as solids ratio to be maintained
182 : Real64 EvapWaterConsumpRate; // Evap Water Consumption rate in m3/sec
183 : Real64 EvapWaterConsump; // Evap Water Consumption in m3
184 : Real64 EvapWaterStarvMakupRate; // Evap water consumed but not really available from tank m3/s
185 : Real64 EvapWaterStarvMakup; // Evap water consumed but not really available from tank m3
186 : Real64 SatEff; // Reporting for Direct Stage and Ind Dry Saturation Efficiency
187 : Real64 StageEff; // Reporting for Indirect Total Stage Efficiency
188 : Real64 DPBoundFactor; // in RDDSpecial efficency w.r.t. dewpoint
189 : int EvapControlNodeNum; // need to control to avoid over cooling
190 : Real64 DesiredOutletTemp; // setpoint manager should set this
191 : Real64 PartLoadFract; // reduces cooling performance and associated fan power
192 : int DewPointBoundFlag; // report when indirect research special cooler is bound by dewpoint
193 : Real64 MinOATDBEvapCooler; // Minimum outdoor air operating dry-bulb temperature for evaporative cooler
194 : Real64 MaxOATDBEvapCooler; // Maximum outdoor air operating dry-bulb temperature for evaporative cooler
195 : bool EvapCoolerOperationControlFlag; // turns the evap cooler on/off depending on the outdoor air temperature min and max limits
196 : Real64 MaxOATWBEvapCooler; // Evaporative Operation Maximum Limit Outdoor Wetbulb Temperature
197 : Real64 DryCoilMaxEfficiency; // Cooler Drybulb Design Effectiveness
198 : Real64 IndirectFanPower; // Secondary Fan Design Power
199 : Real64 FanSizingSpecificPower; // secondary fan sizing specific power in W/(m3/s)
200 : Real64 RecircPumpSizingFactor; // water pump power sizing factor W/(m3/s) air
201 : Real64 IndirectVolFlowScalingFactor; // secondary air flow sizing Factor
202 : int WetbulbEffecCurveIndex; // wetbulb effectiveness modifier curve name as a function of flow fraction
203 : int DrybulbEffecCurveIndex; // drybulb effectiveness modifier curve name as a function of flow fraction
204 : int FanPowerModifierCurveIndex; // secondary fan power modifier curve name as a function of flow fraction
205 : int PumpPowerModifierCurveIndex; // recirculating pump power modifier curve name as a function of flow fraction
206 : int IECOperatingStatus; // operating mode status of indirect evaporative cooler research special (0: Off, 1: Dry, 2: Wet)
207 : int IterationLimit; // used for Used for RegulaFalsi recurring error message error -1
208 : int IterationFailed; // Used for RegulaFalsi recurring error message error -2
209 : // rather than wetbulb-depression approach
210 : OperatingMode EvapCoolerRDDOperatingMode; // the indirect evaporative cooler Research Special operating mode variable
211 : // Operational fault parameters
212 : bool FaultyEvapCoolerFoulingFlag; // True if the evaporative cooler has fouling fault
213 : int FaultyEvapCoolerFoulingIndex; // Index of the fault object corresponding to the evaporative cooler
214 : Real64 FaultyEvapCoolerFoulingFactor; // Evaporative cooler fouling factor
215 : bool MySizeFlag;
216 :
217 : // Default Constructor
218 16 : EvapConditions()
219 16 : : EquipIndex(0), evapCoolerType(EvapCoolerType::Invalid), SchedPtr(0), VolFlowRate(0.0), DesVolFlowRate(0.0), OutletTemp(0.0),
220 : OuletWetBulbTemp(0.0), OutletHumRat(0.0), OutletEnthalpy(0.0), OutletPressure(0.0), OutletMassFlowRate(0.0),
221 : OutletMassFlowRateMaxAvail(0.0), OutletMassFlowRateMinAvail(0.0), InitFlag(false), InletNode(0), OutletNode(0), SecondaryInletNode(0),
222 : SecondaryOutletNode(0), TertiaryInletNode(0), InletMassFlowRate(0.0), InletMassFlowRateMaxAvail(0.0), InletMassFlowRateMinAvail(0.0),
223 : InletTemp(0.0), InletWetBulbTemp(0.0), InletHumRat(0.0), InletEnthalpy(0.0), InletPressure(0.0), SecInletMassFlowRate(0.0),
224 : SecInletMassFlowRateMaxAvail(0.0), SecInletMassFlowRateMinAvail(0.0), SecInletTemp(0.0), SecInletWetBulbTemp(0.0), SecInletHumRat(0.0),
225 : SecInletEnthalpy(0.0), SecInletPressure(0.0), SecOutletTemp(0.0), SecOuletWetBulbTemp(0.0), SecOutletHumRat(0.0),
226 : SecOutletEnthalpy(0.0), SecOutletMassFlowRate(0.0), PadDepth(0.0), PadArea(0.0), RecircPumpPower(0.0), IndirectRecircPumpPower(0.0),
227 : IndirectPadDepth(0.0), IndirectPadArea(0.0), IndirectVolFlowRate(0.0), IndirectFanEff(0.0), IndirectFanDeltaPress(0.0),
228 : IndirectHXEffectiveness(0.0), DirectEffectiveness(0.0), WetCoilMaxEfficiency(0.0), WetCoilFlowRatio(0.0), EvapCoolerEnergy(0.0),
229 : EvapCoolerPower(0.0), EvapWaterSupplyMode(WaterSupply::Invalid), EvapWaterSupTankID(0), EvapWaterTankDemandARRID(0), DriftFraction(0.0),
230 : BlowDownRatio(0.0), EvapWaterConsumpRate(0.0), EvapWaterConsump(0.0), EvapWaterStarvMakupRate(0.0), EvapWaterStarvMakup(0.0),
231 : SatEff(0.0), StageEff(0.0), DPBoundFactor(0.0), EvapControlNodeNum(0), DesiredOutletTemp(0.0), PartLoadFract(0.0), DewPointBoundFlag(0),
232 : MinOATDBEvapCooler(0.0), MaxOATDBEvapCooler(0.0), EvapCoolerOperationControlFlag(false), MaxOATWBEvapCooler(0.0),
233 : DryCoilMaxEfficiency(0.0), IndirectFanPower(0.0), FanSizingSpecificPower(0.0), RecircPumpSizingFactor(0.0),
234 : IndirectVolFlowScalingFactor(0.0), WetbulbEffecCurveIndex(0), DrybulbEffecCurveIndex(0), FanPowerModifierCurveIndex(0),
235 : PumpPowerModifierCurveIndex(0), IECOperatingStatus(0), IterationLimit(0), IterationFailed(0),
236 : EvapCoolerRDDOperatingMode(OperatingMode::Invalid), FaultyEvapCoolerFoulingFlag(false), FaultyEvapCoolerFoulingIndex(0),
237 16 : FaultyEvapCoolerFoulingFactor(1.0), MySizeFlag(true)
238 : {
239 16 : }
240 : };
241 :
242 63 : struct ZoneEvapCoolerUnitStruct
243 : {
244 : std::string Name; // user identifier
245 : int ZoneNodeNum;
246 : int AvailSchedIndex; // pointer to local availability schedule
247 : std::string AvailManagerListName; // Name of an availability manager list object
248 : bool UnitIsAvailable;
249 : int FanAvailStatus;
250 : int OAInletNodeNum; // outdoor air inlet node index
251 : int UnitOutletNodeNum; // Unit air outlet (to zone) node index
252 : int UnitReliefNodeNum; // Unit relief air (from zone) node index (optional)
253 : std::string FanObjectClassName;
254 : int FanType_Num;
255 : std::string FanName;
256 : int FanIndex;
257 : Real64 ActualFanVolFlowRate;
258 : int FanAvailSchedPtr;
259 : int FanInletNodeNum;
260 : int FanOutletNodeNum;
261 : int OpMode; // mode of operation; 1=cycling fan, 2=continuous fan
262 : Real64 DesignAirVolumeFlowRate;
263 : Real64 DesignAirMassFlowRate;
264 : Real64 DesignFanSpeedRatio;
265 : Real64 FanSpeedRatio;
266 : FanPlacement FanLocation;
267 : ControlType ControlSchemeType;
268 : Real64 TimeElapsed;
269 : Real64 ThrottlingRange; // temperature range for hystersis type tstat contorl [Delta C]
270 : bool IsOnThisTimestep;
271 : bool WasOnLastTimestep;
272 : Real64 ThresholdCoolingLoad;
273 : std::string EvapCooler_1_ObjectClassName;
274 : std::string EvapCooler_1_Name;
275 : EvapCoolerType EvapCooler_1_Type_Num;
276 : int EvapCooler_1_Index;
277 : bool EvapCooler_1_AvailStatus;
278 : std::string EvapCooler_2_ObjectClassName;
279 : std::string EvapCooler_2_Name;
280 : EvapCoolerType EvapCooler_2_Type_Num;
281 : int EvapCooler_2_Index;
282 : bool EvapCooler_2_AvailStatus;
283 : Real64 OAInletRho; // fills internal variable, current inlet air density [kg/m3]
284 : Real64 OAInletCp; // fills internal variable, current inlet air specific heat [J/kg-c]
285 : Real64 OAInletTemp; // fills internal variable, current inlet air temperature [C]
286 : Real64 OAInletHumRat; // fills internal variable, current inlet air humidity ratio [kg/kg]
287 : Real64 OAInletMassFlowRate; // fills internal variable, current inlet air mass flow rate [kg/s]
288 : Real64 UnitOutletTemp; // filled by actuator, component outlet temperature [C]
289 : Real64 UnitOutletHumRat; // filled by actuator, component outlet humidity ratio [kg/kg]
290 : Real64 UnitOutletMassFlowRate; // filled by actuator, component outlet mass flow rate [kg/s]
291 : Real64 UnitReliefTemp; // filled by actuator, component outlet temperature [C]
292 : Real64 UnitReliefHumRat; // filled by actuator, component outlet humidity ratio [kg/kg]
293 : Real64 UnitReliefMassFlowRate; // filled by actuator, component outlet mass flow rate [kg/s]
294 : Real64 UnitTotalCoolingRate; // unit output to zone, total cooling rate [W]
295 : Real64 UnitTotalCoolingEnergy; // unit output to zone, total cooling energy [J]
296 : Real64 UnitSensibleCoolingRate; // unit output to zone, sensible cooling rate [W]
297 : Real64 UnitSensibleCoolingEnergy; // unit output to zone, sensible cooling energy [J]
298 : Real64 UnitLatentHeatingRate; // unit output to zone, latent heating rate [W]
299 : Real64 UnitLatentHeatingEnergy; // unit output to zone, latent heating energy [J]
300 : Real64 UnitLatentCoolingRate; // unit output to zone, latent cooling rate [W]
301 : Real64 UnitLatentCoolingEnergy; // unit output to zone, latent cooling energy [J]
302 : Real64 UnitFanSpeedRatio; // unit fan speed ratio, dimensionless [ ]
303 : Real64 UnitPartLoadRatio; // unit part load ratio, dimensionless [ ]
304 : int UnitVSControlMaxIterErrorIndex; // regula falsi errors, fan speed iteration limits
305 : int UnitVSControlLimitsErrorIndex; // regula falsi errors, limits exceeded.
306 : int UnitLoadControlMaxIterErrorIndex; // root solver errors, part load ratio iteration limits exceeded
307 : int UnitLoadControlLimitsErrorIndex; // root solver errors, art load ratio limits exceeded.
308 : int ZonePtr; // pointer to a zone served by an evaportive cooler unit
309 : int HVACSizingIndex; // index of a HVACSizing object for an evaportive cooler unit
310 : bool MySize; // sizing logic flag
311 : bool MyEnvrn; // sim environmental logic flag
312 : bool MyFan; // fan sizing logic flag
313 : bool MyZoneEq; // logic flag used to set up zone equipment availability managers
314 :
315 : // Default Constructor
316 3 : ZoneEvapCoolerUnitStruct()
317 3 : : ZoneNodeNum(0), AvailSchedIndex(0), UnitIsAvailable(false), FanAvailStatus(0), OAInletNodeNum(0), UnitOutletNodeNum(0),
318 : UnitReliefNodeNum(0), FanType_Num(0), FanIndex(0), ActualFanVolFlowRate(0.0), FanAvailSchedPtr(0), FanInletNodeNum(0),
319 : FanOutletNodeNum(0), OpMode(0), DesignAirVolumeFlowRate(0.0), DesignAirMassFlowRate(0.0), DesignFanSpeedRatio(0.0), FanSpeedRatio(0.0),
320 : FanLocation(FanPlacement::Invalid), ControlSchemeType(ControlType::Invalid), TimeElapsed(0.0), ThrottlingRange(0.0),
321 : IsOnThisTimestep(false), WasOnLastTimestep(false), ThresholdCoolingLoad(0.0), EvapCooler_1_Type_Num(EvapCoolerType::Invalid),
322 : EvapCooler_1_Index(0), EvapCooler_1_AvailStatus(false), EvapCooler_2_Type_Num(EvapCoolerType::Invalid), EvapCooler_2_Index(0),
323 : EvapCooler_2_AvailStatus(false), OAInletRho(0.0), OAInletCp(0.0), OAInletTemp(0.0), OAInletHumRat(0.0), OAInletMassFlowRate(0.0),
324 : UnitOutletTemp(0.0), UnitOutletHumRat(0.0), UnitOutletMassFlowRate(0.0), UnitReliefTemp(0.0), UnitReliefHumRat(0.0),
325 : UnitReliefMassFlowRate(0.0), UnitTotalCoolingRate(0.0), UnitTotalCoolingEnergy(0.0), UnitSensibleCoolingRate(0.0),
326 : UnitSensibleCoolingEnergy(0.0), UnitLatentHeatingRate(0.0), UnitLatentHeatingEnergy(0.0), UnitLatentCoolingRate(0.0),
327 : UnitLatentCoolingEnergy(0.0), UnitFanSpeedRatio(0.0), UnitPartLoadRatio(0.0), UnitVSControlMaxIterErrorIndex(0),
328 : UnitVSControlLimitsErrorIndex(0), UnitLoadControlMaxIterErrorIndex(0), UnitLoadControlLimitsErrorIndex(0), ZonePtr(0),
329 3 : HVACSizingIndex(0), MySize(true), MyEnvrn(true), MyFan(true), MyZoneEq(true)
330 : {
331 3 : }
332 : };
333 :
334 : void SimEvapCooler(EnergyPlusData &state, std::string_view CompName, int &CompIndex, Real64 PartLoadRatio = 1.0);
335 :
336 : void GetEvapInput(EnergyPlusData &state);
337 :
338 : void InitEvapCooler(EnergyPlusData &state, int EvapCoolNum);
339 :
340 : void SizeEvapCooler(EnergyPlusData &state, int EvapCoolNum);
341 :
342 : void CalcDirectEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 PartLoadRatio);
343 :
344 : void CalcDryIndirectEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 PartLoadRatio);
345 :
346 : void CalcWetIndirectEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 PartLoadRatio);
347 :
348 : void CalcResearchSpecialPartLoad(EnergyPlusData &state, int EvapCoolNum);
349 :
350 : void CalcIndirectResearchSpecialEvapCoolerAdvanced(EnergyPlusData &state,
351 : int EvapCoolNum,
352 : Real64 InletDryBulbTempSec,
353 : Real64 InletWetBulbTempSec,
354 : Real64 InletDewPointTempSec,
355 : Real64 InletHumRatioSec);
356 :
357 : OperatingMode IndirectResearchSpecialEvapCoolerOperatingMode(EnergyPlusData &state,
358 : int EvapCoolNum,
359 : Real64 InletDryBulbTempSec,
360 : Real64 InletWetBulbTempSec,
361 : Real64 TdbOutSysWetMin,
362 : Real64 TdbOutSysDryMin);
363 :
364 : void CalcSecondaryAirOutletCondition(EnergyPlusData &state,
365 : int EvapCoolNum,
366 : OperatingMode OperatingMode,
367 : Real64 AirMassFlowSec,
368 : Real64 EDBTSec,
369 : Real64 EWBTSec,
370 : Real64 EHumRatSec,
371 : Real64 QHXTotal,
372 : Real64 &QHXLatent);
373 :
374 : void CalcIndirectRDDEvapCoolerOutletTemp(EnergyPlusData &state,
375 : int EvapCoolNum,
376 : OperatingMode DryOrWetOperatingMode,
377 : Real64 AirMassFlowSec,
378 : Real64 EDBTSec,
379 : Real64 EWBTSec,
380 : Real64 EHumRatSec);
381 :
382 : Real64 IndEvapCoolerPower(EnergyPlusData &state,
383 : int EvapCoolIndex, // Unit index
384 : OperatingMode DryWetMode, // dry or wet operating mode of evaporator cooler
385 : Real64 FlowRatio // secondary air flow fraction
386 : );
387 :
388 : void CalcIndirectResearchSpecialEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 FanPLR = 1.0);
389 :
390 : void CalcDirectResearchSpecialEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 FanPLR = 1.0);
391 :
392 : void UpdateEvapCooler(EnergyPlusData &state, int EvapCoolNum);
393 :
394 : void ReportEvapCooler(EnergyPlusData &state, int EvapCoolNum);
395 :
396 : void SimZoneEvaporativeCoolerUnit(EnergyPlusData &state,
397 : std::string_view CompName, // name of the packaged terminal heat pump
398 : int ZoneNum, // number of zone being served
399 : Real64 &SensibleOutputProvided, // sensible capacity delivered to zone
400 : Real64 &LatentOutputProvided, // Latent add/removal (kg/s), dehumid = negative
401 : int &CompIndex // index to zone hvac unit
402 : );
403 :
404 : void GetInputZoneEvaporativeCoolerUnit(EnergyPlusData &state);
405 :
406 : void InitZoneEvaporativeCoolerUnit(EnergyPlusData &state,
407 : int UnitNum, // unit number
408 : int ZoneNum // number of zone being served
409 : );
410 :
411 : void SizeZoneEvaporativeCoolerUnit(EnergyPlusData &state, int UnitNum); // unit number
412 :
413 : void CalcZoneEvaporativeCoolerUnit(EnergyPlusData &state,
414 : int UnitNum, // unit number
415 : int ZoneNum, // number of zone being served
416 : Real64 &SensibleOutputProvided, // sensible capacity delivered to zone
417 : Real64 &LatentOutputProvided // Latent add/removal (kg/s), dehumid = negative
418 : );
419 :
420 : void CalcZoneEvapUnitOutput(EnergyPlusData &state,
421 : int UnitNum, // unit number
422 : Real64 PartLoadRatio, // zone evap unit part load ratiod
423 : Real64 &SensibleOutputProvided, // sensible capacity delivered to zone
424 : Real64 &LatentOutputProvided // Latent add/removal (kg/s), dehumid = negative
425 : );
426 :
427 : void ControlZoneEvapUnitOutput(EnergyPlusData &state,
428 : int UnitNum, // unit number
429 : Real64 ZoneCoolingLoad // target cooling load
430 : );
431 :
432 : void ControlVSEvapUnitToMeetLoad(EnergyPlusData &state,
433 : int UnitNum, // unit number
434 : Real64 ZoneCoolingLoad // target cooling load
435 : );
436 :
437 : void ReportZoneEvaporativeCoolerUnit(EnergyPlusData &state, int UnitNum); // unit number
438 :
439 : int GetInletNodeNum(EnergyPlusData &state, std::string const &EvapCondName, bool &ErrorsFound);
440 :
441 : int GetOutletNodeNum(EnergyPlusData &state, std::string const &EvapCondName, bool &ErrorsFound);
442 :
443 : } // namespace EvaporativeCoolers
444 :
445 1542 : struct EvaporativeCoolersData : BaseGlobalStruct
446 : {
447 :
448 : bool GetInputEvapComponentsFlag = true; // Flag set to make sure you get input once
449 : int NumEvapCool = 0; // The Number of Evap Coolers found in the Input
450 : Array1D_bool CheckEquipName;
451 : int NumZoneEvapUnits = 0;
452 : Array1D_bool CheckZoneEvapUnitName;
453 : bool GetInputZoneEvapUnit = true;
454 : Array1D<EvaporativeCoolers::EvapConditions> EvapCond;
455 : Array1D<EvaporativeCoolers::ZoneEvapCoolerUnitStruct> ZoneEvapUnit;
456 : std::unordered_map<std::string, std::string> UniqueEvapCondNames;
457 : bool MySetPointCheckFlag = true;
458 : bool ZoneEquipmentListChecked = false;
459 :
460 0 : void clear_state() override
461 : {
462 0 : *this = EvaporativeCoolersData();
463 0 : }
464 : };
465 :
466 : } // namespace EnergyPlus
467 :
468 : #endif
|