openstudio-standards 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/openstudio-standards/exterior_lighting/create.rb +2 -2
- data/lib/openstudio-standards/exterior_lighting/data/convert_entryway_data.rb +94 -0
- data/lib/openstudio-standards/exterior_lighting/data/convert_parking_data.rb +82 -0
- data/lib/openstudio-standards/exterior_lighting/data/entryways.json +565 -0
- data/lib/openstudio-standards/exterior_lighting/data/parking.json +428 -0
- data/lib/openstudio-standards/exterior_lighting/information.rb +14 -14
- data/lib/openstudio-standards/hvac/components/create.rb +4 -4
- data/lib/openstudio-standards/hvac/components/modify.rb +2 -2
- data/lib/openstudio-standards/hvac/exhaust/create_exhaust_fan.rb +2 -2
- data/lib/openstudio-standards/hvac/exhaust/data/convert_typical_exhaust_data.rb +67 -0
- data/lib/openstudio-standards/infiltration/data/NISTInfiltrationCorrelations.json +3172 -0
- data/lib/openstudio-standards/infiltration/data/convert_infiltration_data.rb +87 -0
- data/lib/openstudio-standards/infiltration/infiltration.rb +3 -3
- data/lib/openstudio-standards/infiltration/nist_infiltration.rb +42 -42
- data/lib/openstudio-standards/refrigeration/create_case.rb +2 -2
- data/lib/openstudio-standards/refrigeration/create_typical_refrigeration.rb +22 -21
- data/lib/openstudio-standards/service_water_heating/create_typical.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.Space.rb +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +10 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +131 -107
- data/lib/openstudio-standards/standards/deer/data/deer.schedules.json +24 -24
- data/lib/openstudio-standards/utilities/ruleset_check.rb +1 -2
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/stat_file.rb +13 -4
- metadata +9 -3
- data/lib/openstudio-standards/hvac/exhaust/data/convert_data.rb +0 -86
@@ -0,0 +1,428 @@
|
|
1
|
+
{
|
2
|
+
"parking": [
|
3
|
+
{
|
4
|
+
"building_type": "SmallOffice",
|
5
|
+
"building_area_per_spot": 250.0,
|
6
|
+
"units_per_spot": null,
|
7
|
+
"students_per_spot": null,
|
8
|
+
"beds_per_spot": null,
|
9
|
+
"parking_area_per_spot": 405.0
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"building_type": "MediumOffice",
|
13
|
+
"building_area_per_spot": 250.0,
|
14
|
+
"units_per_spot": null,
|
15
|
+
"students_per_spot": null,
|
16
|
+
"beds_per_spot": null,
|
17
|
+
"parking_area_per_spot": 405.0
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"building_type": "LargeOffice",
|
21
|
+
"building_area_per_spot": 620.0,
|
22
|
+
"units_per_spot": null,
|
23
|
+
"students_per_spot": null,
|
24
|
+
"beds_per_spot": null,
|
25
|
+
"parking_area_per_spot": 405.0
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"building_type": "Retail",
|
29
|
+
"building_area_per_spot": 285.7,
|
30
|
+
"units_per_spot": null,
|
31
|
+
"students_per_spot": null,
|
32
|
+
"beds_per_spot": null,
|
33
|
+
"parking_area_per_spot": 405.0
|
34
|
+
},
|
35
|
+
{
|
36
|
+
"building_type": "StripMall",
|
37
|
+
"building_area_per_spot": 215.0,
|
38
|
+
"units_per_spot": null,
|
39
|
+
"students_per_spot": null,
|
40
|
+
"beds_per_spot": null,
|
41
|
+
"parking_area_per_spot": 405.0
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"building_type": "PrimarySchool",
|
45
|
+
"building_area_per_spot": null,
|
46
|
+
"units_per_spot": null,
|
47
|
+
"students_per_spot": 17.0,
|
48
|
+
"beds_per_spot": null,
|
49
|
+
"parking_area_per_spot": 405.0
|
50
|
+
},
|
51
|
+
{
|
52
|
+
"building_type": "SecondarySchool",
|
53
|
+
"building_area_per_spot": null,
|
54
|
+
"units_per_spot": null,
|
55
|
+
"students_per_spot": 8.0,
|
56
|
+
"beds_per_spot": null,
|
57
|
+
"parking_area_per_spot": 405.0
|
58
|
+
},
|
59
|
+
{
|
60
|
+
"building_type": "Outpatient",
|
61
|
+
"building_area_per_spot": 200.0,
|
62
|
+
"units_per_spot": null,
|
63
|
+
"students_per_spot": null,
|
64
|
+
"beds_per_spot": null,
|
65
|
+
"parking_area_per_spot": 405.0
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"building_type": "Hospital",
|
69
|
+
"building_area_per_spot": null,
|
70
|
+
"units_per_spot": null,
|
71
|
+
"students_per_spot": null,
|
72
|
+
"beds_per_spot": 0.83,
|
73
|
+
"parking_area_per_spot": 405.0
|
74
|
+
},
|
75
|
+
{
|
76
|
+
"building_type": "SmallHotel",
|
77
|
+
"building_area_per_spot": null,
|
78
|
+
"units_per_spot": 1.0,
|
79
|
+
"students_per_spot": null,
|
80
|
+
"beds_per_spot": null,
|
81
|
+
"parking_area_per_spot": 405.0
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"building_type": "LargeHotel",
|
85
|
+
"building_area_per_spot": null,
|
86
|
+
"units_per_spot": 1.0,
|
87
|
+
"students_per_spot": null,
|
88
|
+
"beds_per_spot": null,
|
89
|
+
"parking_area_per_spot": 405.0
|
90
|
+
},
|
91
|
+
{
|
92
|
+
"building_type": "Warehouse",
|
93
|
+
"building_area_per_spot": 1000.0,
|
94
|
+
"units_per_spot": null,
|
95
|
+
"students_per_spot": null,
|
96
|
+
"beds_per_spot": null,
|
97
|
+
"parking_area_per_spot": 405.0
|
98
|
+
},
|
99
|
+
{
|
100
|
+
"building_type": "QuickServiceRestaurant",
|
101
|
+
"building_area_per_spot": 100.0,
|
102
|
+
"units_per_spot": null,
|
103
|
+
"students_per_spot": null,
|
104
|
+
"beds_per_spot": null,
|
105
|
+
"parking_area_per_spot": 405.0
|
106
|
+
},
|
107
|
+
{
|
108
|
+
"building_type": "FullServiceRestaurant",
|
109
|
+
"building_area_per_spot": 100.0,
|
110
|
+
"units_per_spot": null,
|
111
|
+
"students_per_spot": null,
|
112
|
+
"beds_per_spot": null,
|
113
|
+
"parking_area_per_spot": 405.0
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"building_type": "MidriseApartment",
|
117
|
+
"building_area_per_spot": null,
|
118
|
+
"units_per_spot": 0.45,
|
119
|
+
"students_per_spot": null,
|
120
|
+
"beds_per_spot": null,
|
121
|
+
"parking_area_per_spot": 405.0
|
122
|
+
},
|
123
|
+
{
|
124
|
+
"building_type": "HighriseApartment",
|
125
|
+
"building_area_per_spot": null,
|
126
|
+
"units_per_spot": 0.45,
|
127
|
+
"students_per_spot": null,
|
128
|
+
"beds_per_spot": null,
|
129
|
+
"parking_area_per_spot": 405.0
|
130
|
+
},
|
131
|
+
{
|
132
|
+
"building_type": "SuperMarket",
|
133
|
+
"building_area_per_spot": 285.7,
|
134
|
+
"units_per_spot": null,
|
135
|
+
"students_per_spot": null,
|
136
|
+
"beds_per_spot": null,
|
137
|
+
"parking_area_per_spot": 405.0
|
138
|
+
},
|
139
|
+
{
|
140
|
+
"building_type": "Parking surface",
|
141
|
+
"building_area_per_spot": null,
|
142
|
+
"units_per_spot": null,
|
143
|
+
"students_per_spot": null,
|
144
|
+
"beds_per_spot": null,
|
145
|
+
"parking_area_per_spot": 405.0
|
146
|
+
},
|
147
|
+
{
|
148
|
+
"building_type": "Parking garage",
|
149
|
+
"building_area_per_spot": null,
|
150
|
+
"units_per_spot": null,
|
151
|
+
"students_per_spot": null,
|
152
|
+
"beds_per_spot": null,
|
153
|
+
"parking_area_per_spot": 486.0
|
154
|
+
},
|
155
|
+
{
|
156
|
+
"building_type": "SmallDataCenterLowITE",
|
157
|
+
"building_area_per_spot": 0.0,
|
158
|
+
"units_per_spot": null,
|
159
|
+
"students_per_spot": null,
|
160
|
+
"beds_per_spot": null,
|
161
|
+
"parking_area_per_spot": 405.0
|
162
|
+
},
|
163
|
+
{
|
164
|
+
"building_type": "SmallDataCenterHighITE",
|
165
|
+
"building_area_per_spot": 0.0,
|
166
|
+
"units_per_spot": null,
|
167
|
+
"students_per_spot": null,
|
168
|
+
"beds_per_spot": null,
|
169
|
+
"parking_area_per_spot": 405.0
|
170
|
+
},
|
171
|
+
{
|
172
|
+
"building_type": "LargeDataCenterLowITE",
|
173
|
+
"building_area_per_spot": 0.0,
|
174
|
+
"units_per_spot": null,
|
175
|
+
"students_per_spot": null,
|
176
|
+
"beds_per_spot": null,
|
177
|
+
"parking_area_per_spot": 405.0
|
178
|
+
},
|
179
|
+
{
|
180
|
+
"building_type": "LargeDataCenterHighITE",
|
181
|
+
"building_area_per_spot": 0.0,
|
182
|
+
"units_per_spot": null,
|
183
|
+
"students_per_spot": null,
|
184
|
+
"beds_per_spot": null,
|
185
|
+
"parking_area_per_spot": 405.0
|
186
|
+
},
|
187
|
+
{
|
188
|
+
"building_type": "SmallOfficeDetailed",
|
189
|
+
"building_area_per_spot": 250.0,
|
190
|
+
"units_per_spot": null,
|
191
|
+
"students_per_spot": null,
|
192
|
+
"beds_per_spot": null,
|
193
|
+
"parking_area_per_spot": 405.0
|
194
|
+
},
|
195
|
+
{
|
196
|
+
"building_type": "MediumOfficeDetailed",
|
197
|
+
"building_area_per_spot": 250.0,
|
198
|
+
"units_per_spot": null,
|
199
|
+
"students_per_spot": null,
|
200
|
+
"beds_per_spot": null,
|
201
|
+
"parking_area_per_spot": 405.0
|
202
|
+
},
|
203
|
+
{
|
204
|
+
"building_type": "LargeOfficeDetailed",
|
205
|
+
"building_area_per_spot": 620.0,
|
206
|
+
"units_per_spot": null,
|
207
|
+
"students_per_spot": null,
|
208
|
+
"beds_per_spot": null,
|
209
|
+
"parking_area_per_spot": 405.0
|
210
|
+
},
|
211
|
+
{
|
212
|
+
"building_type": "Courthouse",
|
213
|
+
"building_area_per_spot": 250.0,
|
214
|
+
"units_per_spot": null,
|
215
|
+
"students_per_spot": null,
|
216
|
+
"beds_per_spot": null,
|
217
|
+
"parking_area_per_spot": 405.0
|
218
|
+
},
|
219
|
+
{
|
220
|
+
"building_type": "College",
|
221
|
+
"building_area_per_spot": 250.0,
|
222
|
+
"units_per_spot": null,
|
223
|
+
"students_per_spot": null,
|
224
|
+
"beds_per_spot": null,
|
225
|
+
"parking_area_per_spot": 405.0
|
226
|
+
},
|
227
|
+
{
|
228
|
+
"building_type": "Laboratory",
|
229
|
+
"building_area_per_spot": 250.0,
|
230
|
+
"units_per_spot": null,
|
231
|
+
"students_per_spot": null,
|
232
|
+
"beds_per_spot": null,
|
233
|
+
"parking_area_per_spot": 405.0
|
234
|
+
},
|
235
|
+
{
|
236
|
+
"building_type": "Asm",
|
237
|
+
"building_area_per_spot": 285.7,
|
238
|
+
"units_per_spot": null,
|
239
|
+
"students_per_spot": null,
|
240
|
+
"beds_per_spot": null,
|
241
|
+
"parking_area_per_spot": 405.0
|
242
|
+
},
|
243
|
+
{
|
244
|
+
"building_type": "ECC",
|
245
|
+
"building_area_per_spot": null,
|
246
|
+
"units_per_spot": null,
|
247
|
+
"students_per_spot": 8.0,
|
248
|
+
"beds_per_spot": null,
|
249
|
+
"parking_area_per_spot": 405.0
|
250
|
+
},
|
251
|
+
{
|
252
|
+
"building_type": "EPr",
|
253
|
+
"building_area_per_spot": null,
|
254
|
+
"units_per_spot": null,
|
255
|
+
"students_per_spot": 17.0,
|
256
|
+
"beds_per_spot": null,
|
257
|
+
"parking_area_per_spot": 405.0
|
258
|
+
},
|
259
|
+
{
|
260
|
+
"building_type": "ERC",
|
261
|
+
"building_area_per_spot": null,
|
262
|
+
"units_per_spot": null,
|
263
|
+
"students_per_spot": 8.0,
|
264
|
+
"beds_per_spot": null,
|
265
|
+
"parking_area_per_spot": 405.0
|
266
|
+
},
|
267
|
+
{
|
268
|
+
"building_type": "ESe",
|
269
|
+
"building_area_per_spot": null,
|
270
|
+
"units_per_spot": null,
|
271
|
+
"students_per_spot": 8.0,
|
272
|
+
"beds_per_spot": null,
|
273
|
+
"parking_area_per_spot": 405.0
|
274
|
+
},
|
275
|
+
{
|
276
|
+
"building_type": "EUn",
|
277
|
+
"building_area_per_spot": null,
|
278
|
+
"units_per_spot": null,
|
279
|
+
"students_per_spot": 30.0,
|
280
|
+
"beds_per_spot": null,
|
281
|
+
"parking_area_per_spot": 405.0
|
282
|
+
},
|
283
|
+
{
|
284
|
+
"building_type": "Gro",
|
285
|
+
"building_area_per_spot": 285.7,
|
286
|
+
"units_per_spot": null,
|
287
|
+
"students_per_spot": null,
|
288
|
+
"beds_per_spot": null,
|
289
|
+
"parking_area_per_spot": 405.0
|
290
|
+
},
|
291
|
+
{
|
292
|
+
"building_type": "Hsp",
|
293
|
+
"building_area_per_spot": null,
|
294
|
+
"units_per_spot": null,
|
295
|
+
"students_per_spot": null,
|
296
|
+
"beds_per_spot": 0.83,
|
297
|
+
"parking_area_per_spot": 405.0
|
298
|
+
},
|
299
|
+
{
|
300
|
+
"building_type": "Htl",
|
301
|
+
"building_area_per_spot": null,
|
302
|
+
"units_per_spot": 1.0,
|
303
|
+
"students_per_spot": null,
|
304
|
+
"beds_per_spot": null,
|
305
|
+
"parking_area_per_spot": 405.0
|
306
|
+
},
|
307
|
+
{
|
308
|
+
"building_type": "MBT",
|
309
|
+
"building_area_per_spot": 1000.0,
|
310
|
+
"units_per_spot": null,
|
311
|
+
"students_per_spot": null,
|
312
|
+
"beds_per_spot": null,
|
313
|
+
"parking_area_per_spot": 405.0
|
314
|
+
},
|
315
|
+
{
|
316
|
+
"building_type": "MFm",
|
317
|
+
"building_area_per_spot": null,
|
318
|
+
"units_per_spot": 0.45,
|
319
|
+
"students_per_spot": null,
|
320
|
+
"beds_per_spot": null,
|
321
|
+
"parking_area_per_spot": 405.0
|
322
|
+
},
|
323
|
+
{
|
324
|
+
"building_type": "MLI",
|
325
|
+
"building_area_per_spot": 1000.0,
|
326
|
+
"units_per_spot": null,
|
327
|
+
"students_per_spot": null,
|
328
|
+
"beds_per_spot": null,
|
329
|
+
"parking_area_per_spot": 405.0
|
330
|
+
},
|
331
|
+
{
|
332
|
+
"building_type": "Mtl",
|
333
|
+
"building_area_per_spot": null,
|
334
|
+
"units_per_spot": 1.0,
|
335
|
+
"students_per_spot": null,
|
336
|
+
"beds_per_spot": null,
|
337
|
+
"parking_area_per_spot": 405.0
|
338
|
+
},
|
339
|
+
{
|
340
|
+
"building_type": "Nrs",
|
341
|
+
"building_area_per_spot": null,
|
342
|
+
"units_per_spot": 1.0,
|
343
|
+
"students_per_spot": null,
|
344
|
+
"beds_per_spot": null,
|
345
|
+
"parking_area_per_spot": 405.0
|
346
|
+
},
|
347
|
+
{
|
348
|
+
"building_type": "OfL",
|
349
|
+
"building_area_per_spot": 250.0,
|
350
|
+
"units_per_spot": null,
|
351
|
+
"students_per_spot": null,
|
352
|
+
"beds_per_spot": null,
|
353
|
+
"parking_area_per_spot": 405.0
|
354
|
+
},
|
355
|
+
{
|
356
|
+
"building_type": "OfS",
|
357
|
+
"building_area_per_spot": 250.0,
|
358
|
+
"units_per_spot": null,
|
359
|
+
"students_per_spot": null,
|
360
|
+
"beds_per_spot": null,
|
361
|
+
"parking_area_per_spot": 405.0
|
362
|
+
},
|
363
|
+
{
|
364
|
+
"building_type": "RFF",
|
365
|
+
"building_area_per_spot": 100.0,
|
366
|
+
"units_per_spot": null,
|
367
|
+
"students_per_spot": null,
|
368
|
+
"beds_per_spot": null,
|
369
|
+
"parking_area_per_spot": 405.0
|
370
|
+
},
|
371
|
+
{
|
372
|
+
"building_type": "RSD",
|
373
|
+
"building_area_per_spot": 100.0,
|
374
|
+
"units_per_spot": null,
|
375
|
+
"students_per_spot": null,
|
376
|
+
"beds_per_spot": null,
|
377
|
+
"parking_area_per_spot": 405.0
|
378
|
+
},
|
379
|
+
{
|
380
|
+
"building_type": "Rt3",
|
381
|
+
"building_area_per_spot": 285.7,
|
382
|
+
"units_per_spot": null,
|
383
|
+
"students_per_spot": null,
|
384
|
+
"beds_per_spot": null,
|
385
|
+
"parking_area_per_spot": 405.0
|
386
|
+
},
|
387
|
+
{
|
388
|
+
"building_type": "RtL",
|
389
|
+
"building_area_per_spot": 285.7,
|
390
|
+
"units_per_spot": null,
|
391
|
+
"students_per_spot": null,
|
392
|
+
"beds_per_spot": null,
|
393
|
+
"parking_area_per_spot": 405.0
|
394
|
+
},
|
395
|
+
{
|
396
|
+
"building_type": "RtS",
|
397
|
+
"building_area_per_spot": 285.7,
|
398
|
+
"units_per_spot": null,
|
399
|
+
"students_per_spot": null,
|
400
|
+
"beds_per_spot": null,
|
401
|
+
"parking_area_per_spot": 405.0
|
402
|
+
},
|
403
|
+
{
|
404
|
+
"building_type": "SCn",
|
405
|
+
"building_area_per_spot": 1000.0,
|
406
|
+
"units_per_spot": null,
|
407
|
+
"students_per_spot": null,
|
408
|
+
"beds_per_spot": null,
|
409
|
+
"parking_area_per_spot": 405.0
|
410
|
+
},
|
411
|
+
{
|
412
|
+
"building_type": "SUn",
|
413
|
+
"building_area_per_spot": 1000.0,
|
414
|
+
"units_per_spot": null,
|
415
|
+
"students_per_spot": null,
|
416
|
+
"beds_per_spot": null,
|
417
|
+
"parking_area_per_spot": 405.0
|
418
|
+
},
|
419
|
+
{
|
420
|
+
"building_type": "WRf",
|
421
|
+
"building_area_per_spot": 1000.0,
|
422
|
+
"units_per_spot": null,
|
423
|
+
"students_per_spot": null,
|
424
|
+
"beds_per_spot": null,
|
425
|
+
"parking_area_per_spot": 405.0
|
426
|
+
}
|
427
|
+
]
|
428
|
+
}
|
@@ -9,22 +9,22 @@ module OpenstudioStandards
|
|
9
9
|
# @return [Hash] hash of exterior lighting value types and building type and model specific values
|
10
10
|
def self.model_get_exterior_lighting_sizes(model)
|
11
11
|
# load parking file and convert to hash table
|
12
|
-
|
13
|
-
unless File.exist?(
|
14
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ExteriorLighting', "Unable to find file: #{
|
12
|
+
parking_json = "#{__dir__}/data/parking.json"
|
13
|
+
unless File.exist?(parking_json)
|
14
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ExteriorLighting', "Unable to find file: #{parking_json}")
|
15
15
|
return false
|
16
16
|
end
|
17
|
-
|
18
|
-
parking_hsh =
|
17
|
+
parking_hsh = JSON.parse(File.read("#{__dir__}/data/parking.json"), symbolize_names: true)
|
18
|
+
parking_hsh = parking_hsh[:parking]
|
19
19
|
|
20
20
|
# load entryways file and convert to hash table
|
21
|
-
|
22
|
-
unless File.exist?(
|
23
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ExteriorLighting', "Unable to find file: #{
|
21
|
+
entryways_json = "#{__dir__}/data/entryways.json"
|
22
|
+
unless File.exist?(entryways_json)
|
23
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ExteriorLighting', "Unable to find file: #{entryways_json}")
|
24
24
|
return false
|
25
25
|
end
|
26
|
-
|
27
|
-
entryways_hsh =
|
26
|
+
entryways_hsh = JSON.parse(File.read("#{__dir__}/data/entryways.json"), symbolize_names: true)
|
27
|
+
entryways_hsh = entryways_hsh[:entryways]
|
28
28
|
|
29
29
|
# get space properties from the model
|
30
30
|
space_type_hash = OpenstudioStandards::CreateTypical.model_get_space_type_information(model)
|
@@ -123,12 +123,12 @@ module OpenstudioStandards
|
|
123
123
|
# calculate door, window, and canopy length properties for exterior lighting
|
124
124
|
# main entries
|
125
125
|
unless entryways_properties[:entrance_doors_per_10000_ft2].nil?
|
126
|
-
main_entries += (ground_floor_area_ft2 / 10_000.0) * entryways_properties[:entrance_doors_per_10000_ft2]
|
126
|
+
main_entries += (ground_floor_area_ft2 / 10_000.0) * entryways_properties[:entrance_doors_per_10000_ft2].to_f
|
127
127
|
end
|
128
128
|
|
129
129
|
# other doors
|
130
130
|
unless entryways_properties[:other_doors_per_10000_ft2].nil?
|
131
|
-
other_doors += (ground_floor_area_ft2 / 10_000.0) * entryways_properties[:other_doors_per_10000_ft2]
|
131
|
+
other_doors += (ground_floor_area_ft2 / 10_000.0) * entryways_properties[:other_doors_per_10000_ft2].to_f
|
132
132
|
end
|
133
133
|
|
134
134
|
# rollup doors
|
@@ -143,12 +143,12 @@ module OpenstudioStandards
|
|
143
143
|
|
144
144
|
# entrance canopies
|
145
145
|
if !entryways_properties[:entrance_canopies].nil? && !entryways_properties[:canopy_size].nil?
|
146
|
-
canopy_entry_area += entryways_properties[:entrance_canopies] * entryways_properties[:canopy_size]
|
146
|
+
canopy_entry_area += entryways_properties[:entrance_canopies] * entryways_properties[:canopy_size].to_f
|
147
147
|
end
|
148
148
|
|
149
149
|
# emergency canopies
|
150
150
|
if !entryways_properties[:emergency_canopies].nil? && !entryways_properties[:canopy_size].nil?
|
151
|
-
canopy_emergency_area += entryways_properties[:emergency_canopies] * entryways_properties[:canopy_size]
|
151
|
+
canopy_emergency_area += entryways_properties[:emergency_canopies] * entryways_properties[:canopy_size].to_f
|
152
152
|
end
|
153
153
|
|
154
154
|
# building_facades
|
@@ -6,7 +6,7 @@ module OpenstudioStandards
|
|
6
6
|
|
7
7
|
# creates HeatExchangerAirToAirSensibleAndLatent object with user-input effectiveness values
|
8
8
|
#
|
9
|
-
# @param model [
|
9
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model
|
10
10
|
# @param name [String]
|
11
11
|
# @param type [String] Heat Exchanger Type. One of 'Plate', 'Rotary'
|
12
12
|
# @param economizer_lockout [Boolean] whether hx is locked out during economizing
|
@@ -96,10 +96,10 @@ module OpenstudioStandards
|
|
96
96
|
|
97
97
|
# creates LookupTable objects to define effectiveness of HeatExchangerAirToAirSensibleAndLatent objects
|
98
98
|
#
|
99
|
-
# @param hx [
|
99
|
+
# @param hx [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] OpenStudio HX object to update
|
100
100
|
# @param type [String] type of curve to create. one of 'Sensible Heating', 'Latent Heating, 'Sensible Cooling', 'Latent Cooling'
|
101
|
-
# @param values_hash [Hash{Float=>Float}] user_input flow decimal fraction => effectiveness decimal fraction pairs, e.g. {0.75 => 0.81, 1.0 => 0.76}
|
102
|
-
# @return [
|
101
|
+
# @param values_hash [Hash{Float=>Float}] user_input { flow decimal fraction => effectiveness } decimal fraction pairs, e.g. { 0.75 => 0.81, 1.0 => 0.76 }
|
102
|
+
# @return [OpenStudio::Model::TableLookup] lookup table object
|
103
103
|
def self.create_hx_effectiveness_table(hx, type, values_hash)
|
104
104
|
# validate inputs
|
105
105
|
types = ['Sensible Heating', 'Latent Heating', 'Sensible Cooling', 'Latent Cooling']
|
@@ -4,13 +4,13 @@ module OpenstudioStandards
|
|
4
4
|
# @!group Component:Modify
|
5
5
|
# Methods to modify HVAC Component objects
|
6
6
|
|
7
|
-
# Applies historical default or user-input effectiveness values to a
|
7
|
+
# Applies historical default or user-input effectiveness values to a HeatExchangerAirToAirSensibleAndLatent object
|
8
8
|
#
|
9
9
|
# @param hx [<OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent>] OpenStudio HX object to update
|
10
10
|
# @param defaults [Boolean] flag to apply historical default curves
|
11
11
|
# @param values [Hash{String=>Hash{Float=>Float}}] user-input effectiveness values, where keys are one of
|
12
12
|
# 'Sensible Heating', 'Latent Heating, 'Sensible Cooling', 'Latent Cooling'
|
13
|
-
# and value is a hash of {flow decimal fraction => effectivess decimal fraction}, e.g. {0.75 => 0.81, 1.0 => 0.76}
|
13
|
+
# and value is a hash of { flow decimal fraction => effectivess decimal fraction }, e.g. { 0.75 => 0.81, 1.0 => 0.76 }
|
14
14
|
# @return [<OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent>] modified OpenStudio HX object
|
15
15
|
def self.heat_exchanger_air_to_air_set_effectiveness_values(hx, defaults: false, values: nil)
|
16
16
|
if defaults
|
@@ -14,7 +14,7 @@ module OpenstudioStandards
|
|
14
14
|
make_up_air_source_zone: nil,
|
15
15
|
make_up_air_fraction: 0.5)
|
16
16
|
# load exhaust fan data
|
17
|
-
data = JSON.parse(File.read("#{
|
17
|
+
data = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/typical_exhaust.json"), symbolize_names: true)
|
18
18
|
|
19
19
|
# loop through spaces to get standards space information
|
20
20
|
space_type_hash = {}
|
@@ -55,7 +55,7 @@ module OpenstudioStandards
|
|
55
55
|
end
|
56
56
|
|
57
57
|
if exhaust_m3_per_s.zero?
|
58
|
-
OpenStudio.logFree(OpenStudio::
|
58
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.HVAC.create_exhaust_fan', "Calculated zero flow rate for thermal zone #{exhaust_zone.name}. No exhaust fan added.")
|
59
59
|
return nil
|
60
60
|
end
|
61
61
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# These methods convert exhuast fan data to and from .csv for editing.
|
2
|
+
private
|
3
|
+
|
4
|
+
require 'csv'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
def typical_exhaust_csv_to_json(input_csv = 'typical_exhaust.csv',
|
8
|
+
output_json = 'typical_exhaust.json')
|
9
|
+
# Initialize the structure
|
10
|
+
result = {
|
11
|
+
space_types: []
|
12
|
+
}
|
13
|
+
|
14
|
+
# Read the CSV file
|
15
|
+
CSV.foreach(input_csv, headers: true, header_converters: :symbol) do |row|
|
16
|
+
space_type = row[:space_type]
|
17
|
+
building_type = row[:building_type]
|
18
|
+
exhaust_per_area = row[:exhaust_per_area]
|
19
|
+
|
20
|
+
space_type_hash = {
|
21
|
+
space_type: space_type,
|
22
|
+
building_type: building_type,
|
23
|
+
exhaust_per_area: exhaust_per_area
|
24
|
+
}
|
25
|
+
|
26
|
+
# Add the space_type_hash to the result array
|
27
|
+
result[:space_types] << space_type_hash
|
28
|
+
end
|
29
|
+
|
30
|
+
# Write to the output JSON file
|
31
|
+
File.write(output_json, JSON.pretty_generate(result))
|
32
|
+
|
33
|
+
puts "Data has been converted to JSON and saved to #{output_json}"
|
34
|
+
end
|
35
|
+
|
36
|
+
# convert to json
|
37
|
+
typical_exhaust_csv_to_json
|
38
|
+
|
39
|
+
def typical_exhaust_json_to_csv(input_json = 'typical_exhaust.json',
|
40
|
+
output_csv = 'typical_exhaust.csv')
|
41
|
+
# Read the JSON file
|
42
|
+
data = JSON.parse(File.read(input_json), symbolize_names: true)
|
43
|
+
|
44
|
+
# Prepare the CSV headers
|
45
|
+
headers = [
|
46
|
+
:space_type,
|
47
|
+
:building_type,
|
48
|
+
:exhaust_per_area
|
49
|
+
]
|
50
|
+
|
51
|
+
# Write the CSV file
|
52
|
+
CSV.open(output_csv, 'w', write_headers: true, headers: headers) do |csv|
|
53
|
+
data[:space_types].each do |space_type_entry|
|
54
|
+
space_type = space_type_entry[:space_type]
|
55
|
+
building_type = space_type_entry[:building_type]
|
56
|
+
exhaust_per_area = space_type_entry[:exhaust_per_area]
|
57
|
+
|
58
|
+
csv << [
|
59
|
+
space_type,
|
60
|
+
building_type,
|
61
|
+
exhaust_per_area
|
62
|
+
]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
puts "Data has been converted to CSV and saved to #{output_csv}"
|
67
|
+
end
|