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 ThermalComfort_hh_INCLUDED
49 : #define ThermalComfort_hh_INCLUDED
50 :
51 : // ObjexxFCL Headers
52 : #include <ObjexxFCL/Optional.hh>
53 :
54 : // EnergyPlus Headers
55 : #include <EnergyPlus/Data/BaseData.hh>
56 : #include <EnergyPlus/DataGlobals.hh>
57 : #include <EnergyPlus/EnergyPlus.hh>
58 :
59 : namespace EnergyPlus {
60 :
61 : // Forward declarations
62 : struct EnergyPlusData;
63 :
64 : namespace ThermalComfort {
65 :
66 : Real64 constexpr TAbsConv = DataGlobalConstants::KelvinConv; // Converter for absolute temperature
67 : Real64 constexpr ActLevelConv = 58.2; // Converter for activity level (1Met = 58.2 W/m2)
68 : Real64 constexpr BodySurfArea = 1.8; // Dubois body surface area of the human body (m2)
69 : Real64 constexpr BodySurfAreaPierce = 1.8258; // Pierce two node body surface area of the human body (m2)
70 : Real64 constexpr RadSurfEff = 0.72; // Fraction of surface effective for radiation
71 : Real64 constexpr StefanBoltz = 5.6697e-8; // Stefan-Boltzmann constant (W/m2K4)
72 :
73 : struct ThermalComfortDataType
74 : {
75 : // Members
76 : Real64 FangerPMV;
77 : Real64 FangerPPD;
78 : Real64 CloSurfTemp; // clothing surface temp from iteration in FANGER calcs
79 : Real64 PiercePMVET;
80 : Real64 PiercePMVSET;
81 : Real64 PierceDISC;
82 : Real64 PierceTSENS;
83 : Real64 PierceSET;
84 : Real64 KsuTSV;
85 : Real64 ThermalComfortMRT;
86 : Real64 ThermalComfortOpTemp;
87 : Real64 ClothingValue;
88 : int ThermalComfortAdaptiveASH5590;
89 : int ThermalComfortAdaptiveASH5580;
90 : int ThermalComfortAdaptiveCEN15251CatI;
91 : int ThermalComfortAdaptiveCEN15251CatII;
92 : int ThermalComfortAdaptiveCEN15251CatIII;
93 : Real64 TComfASH55;
94 : Real64 TComfCEN15251;
95 : Real64 ASHRAE55RunningMeanOutdoorTemp;
96 : Real64 CEN15251RunningMeanOutdoorTemp;
97 : Real64 CoolingEffectASH55;
98 : Real64 CoolingEffectAdjustedPMVASH55;
99 : Real64 CoolingEffectAdjustedPPDASH55;
100 : Real64 AnkleDraftPPDASH55;
101 :
102 : // Default Constructor
103 4641 : ThermalComfortDataType()
104 4641 : : FangerPMV(0.0), FangerPPD(0.0), CloSurfTemp(0.0), PiercePMVET(0.0), PiercePMVSET(0.0), PierceDISC(0.0), PierceTSENS(0.0),
105 : PierceSET(0.0), KsuTSV(0.0), ThermalComfortMRT(0.0), ThermalComfortOpTemp(0.0), ClothingValue(0.0), ThermalComfortAdaptiveASH5590(0),
106 : ThermalComfortAdaptiveASH5580(0), ThermalComfortAdaptiveCEN15251CatI(0), ThermalComfortAdaptiveCEN15251CatII(0),
107 : ThermalComfortAdaptiveCEN15251CatIII(0), TComfASH55(0.0), TComfCEN15251(0.0), ASHRAE55RunningMeanOutdoorTemp(0.0),
108 : CEN15251RunningMeanOutdoorTemp(0.0), CoolingEffectASH55(0.0), CoolingEffectAdjustedPMVASH55(0.0), CoolingEffectAdjustedPPDASH55(0.0),
109 4641 : AnkleDraftPPDASH55(0.0)
110 : {
111 4641 : }
112 : };
113 :
114 : struct ThermalComfortInASH55Type
115 : {
116 : // Members
117 : // for debugging
118 : // REAL(r64) :: dCurAirTemp
119 : // REAL(r64) :: dCurMeanRadiantTemp
120 : // REAL(r64) :: dOperTemp
121 : // REAL(r64) :: dHumidRatio
122 : Real64 timeNotSummer; // time when not in summer comfort range based on ASHRAE 55 simplified
123 : Real64 timeNotWinter; // time when not in winter comfort range based on ASHRAE 55 simplified
124 : Real64 timeNotEither; // time when not in summer or winter comfort range based on ASHRAE 55 simplified
125 : Real64 totalTimeNotSummer; // sum for simulation for summer
126 : Real64 totalTimeNotWinter; // sum for simulation for winter
127 : Real64 totalTimeNotEither; // sum for simulation for either
128 : bool ZoneIsOccupied; // flag if zone has people
129 : int warningIndex; // variable to store pointer to the recurring warning
130 : int warningIndex2; // variable to store pointer to the recurring warning
131 : bool Enable55Warning; // flag if the warning should be able to be shown if appropriate
132 :
133 : // Default Constructor
134 5585 : ThermalComfortInASH55Type()
135 5585 : : timeNotSummer(0.0), timeNotWinter(0.0), timeNotEither(0.0), totalTimeNotSummer(0.0), totalTimeNotWinter(0.0), totalTimeNotEither(0.0),
136 5585 : ZoneIsOccupied(false), warningIndex(0), warningIndex2(0), Enable55Warning(false)
137 : {
138 5585 : }
139 : };
140 :
141 : struct ThermalComfortSetPointType
142 : {
143 : // Members
144 : Real64 notMetHeating;
145 : Real64 notMetCooling;
146 : Real64 notMetHeatingOccupied;
147 : Real64 notMetCoolingOccupied;
148 : Real64 totalNotMetHeating;
149 : Real64 totalNotMetCooling;
150 : Real64 totalNotMetHeatingOccupied;
151 : Real64 totalNotMetCoolingOccupied;
152 :
153 : // Default Constructor
154 5585 : ThermalComfortSetPointType()
155 5585 : : notMetHeating(0.0), notMetCooling(0.0), notMetHeatingOccupied(0.0), notMetCoolingOccupied(0.0), totalNotMetHeating(0.0),
156 5585 : totalNotMetCooling(0.0), totalNotMetHeatingOccupied(0.0), totalNotMetCoolingOccupied(0.0)
157 : {
158 5585 : }
159 : };
160 :
161 780 : struct AngleFactorData
162 : {
163 : // Members
164 : EPVector<Real64> AngleFactor; // Angle factor of each surface
165 : std::string Name; // Angle factor list name
166 : EPVector<std::string> SurfaceName; // Names of the Surfces
167 : EPVector<int> SurfacePtr; // Surface indexes
168 : int TotAngleFacSurfaces = 0; // Total number of surfaces
169 : int EnclosurePtr = 0; // Enclosure index for the first surface
170 : };
171 :
172 : void ManageThermalComfort(EnergyPlusData &state,
173 : bool const InitializeOnly); // when called from ZTPC and calculations aren't needed
174 :
175 : void InitThermalComfort(EnergyPlusData &state);
176 :
177 : void CalcThermalComfortFanger(EnergyPlusData &state,
178 : Optional_int_const PNum = _, // People number for thermal comfort control
179 : Optional<Real64 const> Tset = _, // Temperature setpoint for thermal comfort control
180 : Optional<Real64> PMVResult = _ // PMV value for thermal comfort control
181 : );
182 : Real64 CalcFangerPMV(
183 : EnergyPlusData &state, Real64 AirTemp, Real64 RadTemp, Real64 RelHum, Real64 AirVel, Real64 ActLevel, Real64 CloUnit, Real64 WorkEff);
184 :
185 : Real64 CalcFangerPPD(Real64 PMV);
186 :
187 : Real64 CalcRelativeAirVelocity(Real64 AirVel, Real64 ActMet);
188 :
189 : void GetThermalComfortInputsASHRAE(EnergyPlusData &state);
190 :
191 : Real64 CalcStandardEffectiveTemp(
192 : EnergyPlusData &state, Real64 AirTemp, Real64 RadTemp, Real64 RelHum, Real64 AirVel, Real64 ActMet, Real64 CloUnit, Real64 WorkEff);
193 :
194 : void CalcCoolingEffectAdjustedPMV(EnergyPlusData &state, Real64 &CoolingEffect, Real64 &CoolingEffectAdjustedPMV);
195 :
196 : void CalcThermalComfortPierceASHRAE(EnergyPlusData &state);
197 :
198 : void CalcThermalComfortCoolingEffectASH(EnergyPlusData &state);
199 :
200 : void CalcThermalComfortAnkleDraftASH(EnergyPlusData &state);
201 :
202 : void CalcThermalComfortKSU(EnergyPlusData &state);
203 :
204 : void DERIV(EnergyPlusData &state,
205 : int &TempIndiceNum, // Number of temperature indices unused1208
206 : Array1D<Real64> &Temp, // Temperature unused1208
207 : Array1D<Real64> &TempChange // Change of temperature
208 : );
209 :
210 : void RKG(EnergyPlusData &state, int &NEQ, Real64 &H, Real64 &X, Array1D<Real64> &Y, Array1D<Real64> &DY, Array1D<Real64> &C);
211 :
212 : void GetAngleFactorList(EnergyPlusData &state);
213 :
214 : Real64 CalcAngleFactorMRT(EnergyPlusData &state, int const AngleFacNum);
215 :
216 : Real64 CalcSurfaceWeightedMRT(EnergyPlusData &state, int const SurfNum, bool AveragewithSurface = true);
217 :
218 : Real64 CalcSatVapPressFromTemp(Real64 const Temp);
219 :
220 : Real64 CalcSatVapPressFromTempTorr(Real64 const Temp);
221 :
222 : Real64 CalcRadTemp(EnergyPlusData &state, int const PeopleListNum); // Type of MRT calculation (zone averaged or surface weighted)
223 :
224 : void CalcThermalComfortSimpleASH55(EnergyPlusData &state);
225 :
226 : void ResetThermalComfortSimpleASH55(EnergyPlusData &state);
227 :
228 : void CalcIfSetPointMet(EnergyPlusData &state);
229 :
230 : void ResetSetPointMet(EnergyPlusData &state);
231 :
232 : void CalcThermalComfortAdaptiveASH55(
233 : EnergyPlusData &state,
234 : bool const initiate, // true if supposed to initiate
235 : Optional_bool_const wthrsim = _, // true if this is a weather simulation
236 : Optional<Real64 const> avgdrybulb = _ // approximate avg drybulb for design day. will be used as previous period in design day
237 : );
238 :
239 : void CalcThermalComfortAdaptiveCEN15251(
240 : EnergyPlusData &state,
241 : bool const initiate, // true if supposed to initiate
242 : Optional_bool_const wthrsim = _, // true if this is a weather simulation
243 : Optional<Real64 const> avgdrybulb = _ // approximate avg drybulb for design day. will be used as previous period in design day
244 : );
245 :
246 : void DynamicClothingModel(EnergyPlusData &state);
247 :
248 : } // namespace ThermalComfort
249 :
250 771 : struct ThermalComfortsData : BaseGlobalStruct
251 : {
252 :
253 : bool FirstTimeFlag = true; // Flag set to make sure you get input once
254 : bool FirstTimeSurfaceWeightedFlag = true; // Flag set to make sure certain calcs related to surface weighted option are only done once
255 : int CoolingEffectWarningInd = 0; // Counter for ankle draft invalid air velocity warnings.
256 : int AnkleDraftAirVelWarningInd = 0; // Counter for ankle draft invalid air velocity warnings.
257 : int AnkleDraftCloUnitWarningInd = 0; // Counter for ankle draft invalid clothing unit warnings.
258 : int AnkleDraftActMetWarningInd = 0; // Counter for ankle draft invalid activity level warnings.
259 :
260 : // MODULE VARIABLE DECLARATIONS:
261 : Real64 AbsAirTemp = 0.0; // Absolute air temperature; K
262 : Real64 AbsCloSurfTemp = 0.0; // Absolute clothing surface temperature; K
263 : Real64 AbsRadTemp = 0.0; // Absolute radiant temperature; K
264 : Real64 AcclPattern = 0.0; // The pattern of acclimation
265 : Real64 ActLevel = 0.0; // Metabolic rate; w/m2
266 : Real64 ActMet = 0.0; // Metabolic rate; []
267 : Real64 AirVel = 0.0; // Air velocity; m/s
268 : Real64 AirTemp = 0.0; // Air temperature; C
269 : Real64 CloBodyRat = 0.0; // Ratio of clothed body
270 : Real64 CloInsul = 0.0; // Clothing insulation
271 : Real64 CloPermeatEff = 0.0; // Clothing permeation efficiency
272 : Real64 CloSurfTemp = 0.0; // Clothing surface temperature; K
273 : Real64 CloThermEff = 0.0; // The Burton thermal efficiency factor for clothing
274 : Real64 CloUnit = 0.0; // Clothing unit; CLO
275 : Real64 ConvHeatLoss = 0.0; // Convective heat loss
276 : Real64 CoreTempChange = 0.0; // Temperature change of core in 1 minute
277 : Real64 CoreTemp = 0.0; // Body core temperature
278 : Real64 CoreTempNeut = 0.0; // Body core temperature of neutral state
279 : Real64 CoreThermCap = 0.0; // Thermal capacity of core
280 : Real64 DryHeatLoss = 0.0; // Heat loss from clothing surface due to both convection and radiation
281 : Real64 DryHeatLossET = 0.0; // Effective heat loss from clothing surface due to both convection and radiation
282 : Real64 DryHeatLossSET = 0.0; // Standard effective heat loss from clothing surface due to both convection and radiation
283 : Real64 DryRespHeatLoss = 0.0; // Dry respiration heat loss
284 : Real64 EvapHeatLoss = 0.0; // Evaporative heat loss from skin
285 : Real64 EvapHeatLossDiff = 0.0; // Evaporative heat loss due to moisture diffusion through skin
286 : Real64 EvapHeatLossMax = 0.0; // Maximum evaporative heat loss
287 : Real64 EvapHeatLossRegComf = 0.0; // Evaporative heat loss due to regulatory sweating at the state of comfort
288 : Real64 EvapHeatLossRegSweat = 0.0; // Evaporative heat loss from regulatory sweating
289 : Real64 EvapHeatLossSweat = 0.0; // Evaporative heat loss from the sweat secreted
290 : Real64 EvapHeatLossSweatPrev = 0.0; // Old value of evaporative heat loss from the sweat secreted (KSU)
291 : Real64 H = 0.0; // Combined heat transfer coefficient
292 : Real64 Hc = 0.0; // Convective heat transfer coeffiency
293 : Real64 HcFor = 0.0; // Convective heat transfer coeffiency - Forced
294 : Real64 HcNat = 0.0; // Convective heat transfer coeffiency - Natural
295 : Real64 HeatFlow = 0.0; // Heat flow from core to skin
296 : Real64 Hr = 0.0; // Radiant heat transfer coeffiency
297 : Real64 IntHeatProd = 0.0; // Internal heat production
298 : int IterNum = 0; // Number of iteration
299 : Real64 LatRespHeatLoss = 0.0; // Latent respiration heat loss
300 : int MaxZoneNum = 0; // Number of zones
301 : int MRTCalcType = 0; // The type of MRT calculation (ZoneAveraged or SurfaceWeighted)
302 : Real64 OpTemp = 0.0; // Operative temperature
303 : Real64 EffTemp = 0.0; // Effective temperature
304 : int PeopleNum = 0; // People number
305 : Real64 RadHeatLoss = 0.0; // Radiant heat loss
306 : Real64 RadTemp = 0.0; // Radiant temperature; C
307 : Real64 RelHum = 0.0; // Relative humidity; Fraction
308 : Real64 RespHeatLoss = 0.0; // The rate of respiratory heat loss
309 : Real64 SatSkinVapPress = 0.0; // Saturated vapor pressure at skin temperature
310 : Real64 ShivResponse = 0.0; // Metalbolic heat production due to shivering
311 : Real64 SkinComfTemp = 0.0; // Skin temperature required to achieve thermal comfort; C
312 : Real64 SkinComfVPress = 0.0; // Saturated water vapor pressure at required skin temperature; Torr
313 : Real64 SkinTemp = 0.0; // Skin temperature
314 : Real64 SkinTempChange = 0.0; // Temperature change of skin in 1 minute
315 : Real64 SkinTempNeut = 0.0; // Skin temperature at neutral state
316 : Real64 SkinThermCap = 0.0; // Thermal capacity of Skin
317 : Real64 SkinWetDiff = 0.0; // Skin wettedness for nonsweating portion of skin
318 : Real64 SkinWetSweat = 0.0; // Skin wettedness required to evaporate regulatory sweat
319 : Real64 SkinWetTot = 0.0; // Total skin wettedness
320 : Real64 SkinVapPress = 0.0; // Vapor pressure at skin
321 : Real64 SurfaceTemp = 0.0; // Surface temperature when MRTType is 'SurfaceWeighted'
322 : Real64 AvgBodyTemp = 0.0; // Weighted average body temperature considering core and skin temperature
323 : Real64 ThermCndct = 0.0; // Thermal conductance of skin
324 : Real64 ThermSensTransCoef = 0.0; // Theraml sensation coefficient for PMV
325 : Real64 Time = 0.0; // Time, hr
326 : Real64 TimeChange = 0.0; // Change of time, hr
327 : Real64 VapPress = 0.0; // Vapor pressure; Torr ?? BG Oct 2005 humm, this should be kPa
328 : Real64 VasoconstrictFac = 0.0; // Constriction factor of blood vessel
329 : Real64 VasodilationFac = 0.0; // Dilation factor of blood vessel
330 : Real64 WorkEff = 0.0; // Energy cosumption by external work; w/m2
331 : int ZoneNum = 0; // Zone number
332 : Real64 TemporarySixAMTemperature = 0.0; // Temperature at 6am
333 :
334 : // time that any zone is not comfortable based on simple ASHRAE 55 using summer clothes
335 : Real64 AnyZoneTimeNotSimpleASH55Summer = 0.0;
336 : // time that any zone is not comfortable based on simple ASHRAE 55 using winter clothes
337 : Real64 AnyZoneTimeNotSimpleASH55Winter = 0.0;
338 : // time that any zone is not comfortable based on simple ASHRAE 55 using summer or winter clothes
339 : Real64 AnyZoneTimeNotSimpleASH55Either = 0.0;
340 :
341 : // time that any zone has unmet met loads
342 : Real64 AnyZoneNotMetHeating = 0.0;
343 : Real64 AnyZoneNotMetCooling = 0.0;
344 : Real64 AnyZoneNotMetHeatingOccupied = 0.0;
345 : Real64 AnyZoneNotMetCoolingOccupied = 0.0;
346 : Real64 AnyZoneNotMetOccupied = 0.0;
347 : // total time from beginning of simulation AnyZoneTimeNotSimpleASH55
348 : Real64 TotalAnyZoneTimeNotSimpleASH55Summer = 0.0;
349 : Real64 TotalAnyZoneTimeNotSimpleASH55Winter = 0.0;
350 : Real64 TotalAnyZoneTimeNotSimpleASH55Either = 0.0;
351 : // total time from beginning of simulation any zone not met
352 : Real64 TotalAnyZoneNotMetHeating = 0.0;
353 : Real64 TotalAnyZoneNotMetCooling = 0.0;
354 : Real64 TotalAnyZoneNotMetHeatingOccupied = 0.0;
355 : Real64 TotalAnyZoneNotMetCoolingOccupied = 0.0;
356 : Real64 TotalAnyZoneNotMetOccupied = 0.0;
357 : Array1D<Real64> ZoneOccHrs;
358 : bool useEpwData = false;
359 : Array1D<Real64> DailyAveOutTemp;
360 :
361 : EPVector<ThermalComfort::ThermalComfortInASH55Type> ThermalComfortInASH55;
362 : EPVector<ThermalComfort::ThermalComfortSetPointType> ThermalComfortSetPoint;
363 : EPVector<ThermalComfort::ThermalComfortDataType> ThermalComfortData;
364 : EPVector<ThermalComfort::AngleFactorData> AngleFactorList; // Angle Factor List data for each Angle Factor List
365 :
366 : Real64 runningAverageASH = 0.0;
367 :
368 : Array1D<Real64> Coeff = Array1D<Real64>(2); // Coefficients used in Range-Kutta's Method
369 : Array1D<Real64> Temp = Array1D<Real64>(2); // Temperature
370 : Array1D<Real64> TempChange = Array1D<Real64>(2); // Change of temperature
371 : bool FirstTimeError = true; // Only report the error message one time
372 : Real64 avgDryBulbASH = 0.0;
373 : Array1D<Real64> monthlyTemp = Array1D<Real64>(12, 0.0);
374 : bool useStatData = false;
375 : Real64 avgDryBulbCEN = 0.0;
376 : Real64 runningAverageCEN = 0.0;
377 : bool useEpwDataCEN = false;
378 : bool firstDaySet = false; // first day is set with initiate -- so do not update
379 :
380 0 : void clear_state() override
381 : {
382 0 : new (this) ThermalComfortsData();
383 0 : }
384 :
385 : // Default Constructor
386 771 : ThermalComfortsData() : DailyAveOutTemp(30, 0.0)
387 : {
388 771 : }
389 : };
390 : } // namespace EnergyPlus
391 :
392 : #endif
|