honeybee-radiance-postprocess 0.4.462__py2.py3-none-any.whl → 0.4.464__py2.py3-none-any.whl
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.
- honeybee_radiance_postprocess/breeam/__init__.py +1 -0
- honeybee_radiance_postprocess/breeam/breeam.py +474 -0
- honeybee_radiance_postprocess/cli/breeam.py +47 -0
- honeybee_radiance_postprocess/cli/postprocess.py +3 -0
- {honeybee_radiance_postprocess-0.4.462.dist-info → honeybee_radiance_postprocess-0.4.464.dist-info}/METADATA +2 -3
- {honeybee_radiance_postprocess-0.4.462.dist-info → honeybee_radiance_postprocess-0.4.464.dist-info}/RECORD +10 -7
- {honeybee_radiance_postprocess-0.4.462.dist-info → honeybee_radiance_postprocess-0.4.464.dist-info}/LICENSE +0 -0
- {honeybee_radiance_postprocess-0.4.462.dist-info → honeybee_radiance_postprocess-0.4.464.dist-info}/WHEEL +0 -0
- {honeybee_radiance_postprocess-0.4.462.dist-info → honeybee_radiance_postprocess-0.4.464.dist-info}/entry_points.txt +0 -0
- {honeybee_radiance_postprocess-0.4.462.dist-info → honeybee_radiance_postprocess-0.4.464.dist-info}/top_level.txt +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
"""honeybee-radiance-postprocess library."""
|
@@ -0,0 +1,474 @@
|
|
1
|
+
"""Functions for BREEAM post-processing."""
|
2
|
+
from typing import Union
|
3
|
+
from pathlib import Path
|
4
|
+
import json
|
5
|
+
import numpy as np
|
6
|
+
|
7
|
+
from honeybee.model import Model
|
8
|
+
from honeybee_radiance.writer import _filter_by_pattern
|
9
|
+
|
10
|
+
from ..results.annual_daylight import AnnualDaylight
|
11
|
+
|
12
|
+
|
13
|
+
program_type_metrics = {
|
14
|
+
'BREEAM::Education_buildings::Preschools': [
|
15
|
+
{
|
16
|
+
'type': 'Education buildings',
|
17
|
+
'credits': 2,
|
18
|
+
'area': 80,
|
19
|
+
'average_daylight_illuminance': {
|
20
|
+
'illuminance': 300,
|
21
|
+
'hours': 2000
|
22
|
+
},
|
23
|
+
'minimum_daylight_illuminance': {
|
24
|
+
'illuminance': 90,
|
25
|
+
'hours': 2000
|
26
|
+
}
|
27
|
+
}
|
28
|
+
],
|
29
|
+
'BREEAM::Education_buildings::Higher_education': [
|
30
|
+
{
|
31
|
+
'type': 'Education buildings',
|
32
|
+
'credits': 2,
|
33
|
+
'area': 80,
|
34
|
+
'average_daylight_illuminance': {
|
35
|
+
'illuminance': 300,
|
36
|
+
'hours': 2000
|
37
|
+
},
|
38
|
+
'minimum_daylight_illuminance': {
|
39
|
+
'illuminance': 90,
|
40
|
+
'hours': 2000
|
41
|
+
}
|
42
|
+
},
|
43
|
+
{
|
44
|
+
'type': 'Education buildings',
|
45
|
+
'credits': 1,
|
46
|
+
'area': 60,
|
47
|
+
'average_daylight_illuminance': {
|
48
|
+
'illuminance': 300,
|
49
|
+
'hours': 2000
|
50
|
+
},
|
51
|
+
'minimum_daylight_illuminance': {
|
52
|
+
'illuminance': 90,
|
53
|
+
'hours': 2000
|
54
|
+
}
|
55
|
+
}
|
56
|
+
],
|
57
|
+
'BREEAM::Healthcare_buildings::Staff_and_public_areas': [
|
58
|
+
{
|
59
|
+
'type': 'Healthcare buildings',
|
60
|
+
'credits': 2,
|
61
|
+
'area': 80,
|
62
|
+
'average_daylight_illuminance': {
|
63
|
+
'illuminance': 300,
|
64
|
+
'hours': 2650
|
65
|
+
},
|
66
|
+
'minimum_daylight_illuminance': {
|
67
|
+
'illuminance': 90,
|
68
|
+
'hours': 2650
|
69
|
+
}
|
70
|
+
},
|
71
|
+
{
|
72
|
+
'type': 'Healthcare buildings',
|
73
|
+
'credits': 1,
|
74
|
+
'area': 80,
|
75
|
+
'average_daylight_illuminance': {
|
76
|
+
'illuminance': 300,
|
77
|
+
'hours': 2000
|
78
|
+
},
|
79
|
+
'minimum_daylight_illuminance': {
|
80
|
+
'illuminance': 90,
|
81
|
+
'hours': 2000
|
82
|
+
}
|
83
|
+
}
|
84
|
+
],
|
85
|
+
'BREEAM::Healthcare_buildings::Patients_areas_and_consulting_rooms': [
|
86
|
+
{
|
87
|
+
'type': 'Healthcare buildings',
|
88
|
+
'credits': 2,
|
89
|
+
'area': 80,
|
90
|
+
'average_daylight_illuminance': {
|
91
|
+
'illuminance': 300,
|
92
|
+
'hours': 2650
|
93
|
+
},
|
94
|
+
'minimum_daylight_illuminance': {
|
95
|
+
'illuminance': 90,
|
96
|
+
'hours': 2650
|
97
|
+
}
|
98
|
+
},
|
99
|
+
{
|
100
|
+
'type': 'Healthcare buildings',
|
101
|
+
'credits': 1,
|
102
|
+
'area': 80,
|
103
|
+
'average_daylight_illuminance': {
|
104
|
+
'illuminance': 300,
|
105
|
+
'hours': 2000
|
106
|
+
},
|
107
|
+
'minimum_daylight_illuminance': {
|
108
|
+
'illuminance': 90,
|
109
|
+
'hours': 2000
|
110
|
+
}
|
111
|
+
}
|
112
|
+
],
|
113
|
+
'BREEAM::Multi_residential_buildings::Kitchen': [
|
114
|
+
{
|
115
|
+
'type': 'Multi-residential buildings',
|
116
|
+
'credits': 2,
|
117
|
+
'area': 100,
|
118
|
+
'average_daylight_illuminance': {
|
119
|
+
'illuminance': 100,
|
120
|
+
'hours': 3450
|
121
|
+
},
|
122
|
+
'minimum_daylight_illuminance': {
|
123
|
+
'illuminance': 30,
|
124
|
+
'hours': 3450
|
125
|
+
}
|
126
|
+
}
|
127
|
+
],
|
128
|
+
'BREEAM::Multi_residential_buildings::Living_rooms_dining_rooms_studies': [
|
129
|
+
{
|
130
|
+
'type': 'Multi-residential buildings',
|
131
|
+
'credits': 2,
|
132
|
+
'area': 100,
|
133
|
+
'average_daylight_illuminance': {
|
134
|
+
'illuminance': 100,
|
135
|
+
'hours': 3450
|
136
|
+
},
|
137
|
+
'minimum_daylight_illuminance': {
|
138
|
+
'illuminance': 30,
|
139
|
+
'hours': 3450
|
140
|
+
}
|
141
|
+
}
|
142
|
+
],
|
143
|
+
'BREEAM::Multi_residential_buildings::Non_residential_or_communal_spaces': [
|
144
|
+
{
|
145
|
+
'type': 'Multi-residential buildings',
|
146
|
+
'credits': 2,
|
147
|
+
'area': 80,
|
148
|
+
'average_daylight_illuminance': {
|
149
|
+
'illuminance': 200,
|
150
|
+
'hours': 2650
|
151
|
+
},
|
152
|
+
'minimum_daylight_illuminance': {
|
153
|
+
'illuminance': 60,
|
154
|
+
'hours': 2650
|
155
|
+
}
|
156
|
+
}
|
157
|
+
],
|
158
|
+
'BREEAM::Retail_buildings::Sales_areas': [
|
159
|
+
{
|
160
|
+
'type': 'Retail buildings',
|
161
|
+
'credits': 1,
|
162
|
+
'area': 35,
|
163
|
+
'average_daylight_illuminance': {
|
164
|
+
'illuminance': 200,
|
165
|
+
'hours': 2650
|
166
|
+
},
|
167
|
+
'minimum_daylight_illuminance': {
|
168
|
+
'illuminance': 200,
|
169
|
+
'hours': 2650
|
170
|
+
}
|
171
|
+
}
|
172
|
+
],
|
173
|
+
'BREEAM::Retail_buildings::Other_occupied_areas': [
|
174
|
+
{
|
175
|
+
'type': 'Retail buildings',
|
176
|
+
'credits': 1,
|
177
|
+
'area': 80,
|
178
|
+
'average_daylight_illuminance': {
|
179
|
+
'illuminance': 200,
|
180
|
+
'hours': 2650
|
181
|
+
},
|
182
|
+
'minimum_daylight_illuminance': {
|
183
|
+
'illuminance': 60,
|
184
|
+
'hours': 2650
|
185
|
+
}
|
186
|
+
}
|
187
|
+
],
|
188
|
+
'BREEAM::Prison_buildings::Cells_and_custody_cells': [
|
189
|
+
{
|
190
|
+
'type': 'Prison buildings',
|
191
|
+
'credits': 2,
|
192
|
+
'area': 80,
|
193
|
+
'average_daylight_illuminance': {
|
194
|
+
'illuminance': 100,
|
195
|
+
'hours': 3150
|
196
|
+
},
|
197
|
+
'minimum_daylight_illuminance': None
|
198
|
+
}
|
199
|
+
],
|
200
|
+
'BREEAM::Prison_buildings::Internal_association_or_atrium': [
|
201
|
+
{
|
202
|
+
'type': 'Prison buildings',
|
203
|
+
'credits': 2,
|
204
|
+
'area': 80,
|
205
|
+
'average_daylight_illuminance': {
|
206
|
+
'illuminance': 300,
|
207
|
+
'hours': 2650
|
208
|
+
},
|
209
|
+
'minimum_daylight_illuminance': {
|
210
|
+
'illuminance': 210,
|
211
|
+
'hours': 2650
|
212
|
+
}
|
213
|
+
}
|
214
|
+
],
|
215
|
+
'BREEAM::Prison_buildings::Patient_care_spaces': [
|
216
|
+
{
|
217
|
+
'type': 'Prison buildings',
|
218
|
+
'credits': 2,
|
219
|
+
'area': 80,
|
220
|
+
'average_daylight_illuminance': {
|
221
|
+
'illuminance': 300,
|
222
|
+
'hours': 2650
|
223
|
+
},
|
224
|
+
'minimum_daylight_illuminance': {
|
225
|
+
'illuminance': 210,
|
226
|
+
'hours': 2650
|
227
|
+
}
|
228
|
+
}
|
229
|
+
],
|
230
|
+
'BREEAM::Prison_buildings::Teaching_lecture_and_seminar_spaces': [
|
231
|
+
{
|
232
|
+
'type': 'Prison buildings',
|
233
|
+
'credits': 2,
|
234
|
+
'area': 80,
|
235
|
+
'average_daylight_illuminance': {
|
236
|
+
'illuminance': 300,
|
237
|
+
'hours': 2000
|
238
|
+
},
|
239
|
+
'minimum_daylight_illuminance': {
|
240
|
+
'illuminance': 90,
|
241
|
+
'hours': 2000
|
242
|
+
}
|
243
|
+
}
|
244
|
+
],
|
245
|
+
'BREEAM::Office_buildings::Occupied_spaces': [
|
246
|
+
{
|
247
|
+
'type': 'Office buildings',
|
248
|
+
'credits': 2,
|
249
|
+
'area': 80,
|
250
|
+
'average_daylight_illuminance': {
|
251
|
+
'illuminance': 300,
|
252
|
+
'hours': 2000
|
253
|
+
},
|
254
|
+
'minimum_daylight_illuminance': {
|
255
|
+
'illuminance': 90,
|
256
|
+
'hours': 2000
|
257
|
+
}
|
258
|
+
}
|
259
|
+
],
|
260
|
+
'BREEAM::Crèche_buildings::Occupied_spaces': [
|
261
|
+
{
|
262
|
+
'type': 'Crèche buildings',
|
263
|
+
'credits': 2,
|
264
|
+
'area': 80,
|
265
|
+
'average_daylight_illuminance': {
|
266
|
+
'illuminance': 300,
|
267
|
+
'hours': 2000
|
268
|
+
},
|
269
|
+
'minimum_daylight_illuminance': {
|
270
|
+
'illuminance': 90,
|
271
|
+
'hours': 2000
|
272
|
+
}
|
273
|
+
}
|
274
|
+
],
|
275
|
+
'BREEAM::Other_buildings::Occupied_spaces': [
|
276
|
+
{
|
277
|
+
'type': 'Other buildings',
|
278
|
+
'credits': 1,
|
279
|
+
'area': 80,
|
280
|
+
'average_daylight_illuminance': {
|
281
|
+
'illuminance': 300,
|
282
|
+
'hours': 2000
|
283
|
+
},
|
284
|
+
'minimum_daylight_illuminance': {
|
285
|
+
'illuminance': 90,
|
286
|
+
'hours': 2000
|
287
|
+
}
|
288
|
+
}
|
289
|
+
]
|
290
|
+
}
|
291
|
+
|
292
|
+
|
293
|
+
def breeam_daylight_assessment_4b(
|
294
|
+
results: Union[str, AnnualDaylight], model: Union[str, Path, Model] = None,
|
295
|
+
grids_filter: str = '*', sub_folder: str = None):
|
296
|
+
"""Calculate credits for BREEAM 4b.
|
297
|
+
|
298
|
+
Args:
|
299
|
+
results: Path to results folder or a Results class object.
|
300
|
+
model: A model as a path or a HB Model object. If None, the function
|
301
|
+
will look for a model in the parent of the results folder. If a model
|
302
|
+
does not exist in this directory the function will raise an error.
|
303
|
+
Defaults to None.
|
304
|
+
grids_filter: The name of a grid or a pattern to filter the grids.
|
305
|
+
Defaults to '*'.
|
306
|
+
sub_folder: Relative path for a subfolder to write the output. If None,
|
307
|
+
the files will not be written. Defaults to None.
|
308
|
+
|
309
|
+
Returns:
|
310
|
+
Tuple:
|
311
|
+
- credit_summary: Summary of each building type.
|
312
|
+
- program_summary: Summary of program type / space type.
|
313
|
+
"""
|
314
|
+
if not isinstance(results, AnnualDaylight):
|
315
|
+
results = AnnualDaylight(results)
|
316
|
+
|
317
|
+
grids_info = results._filter_grids(grids_filter=grids_filter)
|
318
|
+
|
319
|
+
# check to see if there is a HBJSON with sensor grid meshes for areas
|
320
|
+
grid_areas = {}
|
321
|
+
grid_program_types = {}
|
322
|
+
if model is None:
|
323
|
+
found_file = False
|
324
|
+
for base_file in Path(results.folder).parent.iterdir():
|
325
|
+
if base_file.suffix in ('.hbjson', '.hbpkl'):
|
326
|
+
hb_model: Model = Model.from_file(base_file)
|
327
|
+
found_file = True
|
328
|
+
break
|
329
|
+
if not found_file:
|
330
|
+
raise FileNotFoundError(
|
331
|
+
'Found no hbjson or hbpkl file in parent of results folder.')
|
332
|
+
else:
|
333
|
+
if isinstance(model, Model):
|
334
|
+
hb_model = model
|
335
|
+
else:
|
336
|
+
hb_model = Model.from_file(model)
|
337
|
+
|
338
|
+
filt_grids = _filter_by_pattern(
|
339
|
+
hb_model.properties.radiance.sensor_grids, filter=grids_filter)
|
340
|
+
for s_grid in filt_grids:
|
341
|
+
if s_grid.mesh is not None:
|
342
|
+
grid_areas[s_grid.identifier] = np.array(s_grid.mesh.face_areas).sum()
|
343
|
+
else:
|
344
|
+
grid_areas[s_grid.identifier] = None
|
345
|
+
hb_room = hb_model.rooms_by_identifier([s_grid.room_identifier])[0]
|
346
|
+
try:
|
347
|
+
program_type_id = hb_room.properties.energy.program_type.identifier
|
348
|
+
except AttributeError as e:
|
349
|
+
raise ImportError('honeybee_energy library must be installed to use '
|
350
|
+
'breeam_daylight_assessment method. {}'.format(e))
|
351
|
+
if program_type_id not in program_type_metrics:
|
352
|
+
program_type_id = 'BREEAM::Office_buildings::Occupied_spaces'
|
353
|
+
grid_program_types[s_grid.identifier] = program_type_id
|
354
|
+
|
355
|
+
if not grid_areas:
|
356
|
+
grid_areas = {grid_info['full_id']: None for grid_info in grids_info}
|
357
|
+
|
358
|
+
type_summary = {}
|
359
|
+
for grid_info in grids_info:
|
360
|
+
program_type = grid_program_types[grid_info['full_id']]
|
361
|
+
if program_type not in type_summary:
|
362
|
+
type_summary[program_type] = {}
|
363
|
+
type_summary[program_type][grid_info['full_id']] = []
|
364
|
+
|
365
|
+
array = results._array_from_states(grid_info)
|
366
|
+
# calculate average along axis 0 (average for each hour)
|
367
|
+
avg_ill = array.mean(axis=0)
|
368
|
+
|
369
|
+
metrics_list = program_type_metrics[program_type]
|
370
|
+
for metrics in metrics_list:
|
371
|
+
metrics_summary = {}
|
372
|
+
metrics_summary['type'] = metrics['type']
|
373
|
+
metrics_summary['area'] = grid_areas[grid_info['full_id']]
|
374
|
+
# calculate number of hours where avg. illuminance > target illuminance
|
375
|
+
target_ill = metrics['average_daylight_illuminance']['illuminance']
|
376
|
+
hrs_abv = (avg_ill >= target_ill).sum()
|
377
|
+
# check if value is >= target hours
|
378
|
+
target_hrs = metrics['average_daylight_illuminance']['hours']
|
379
|
+
avg_comply = hrs_abv >= target_hrs
|
380
|
+
|
381
|
+
# calculate number of hours where illuminance > target illuminance
|
382
|
+
if program_type == 'BREEAM::Prison_buildings::Cells_and_custody_cells':
|
383
|
+
minimum_comply = True
|
384
|
+
else:
|
385
|
+
target_ill = metrics['minimum_daylight_illuminance']['illuminance']
|
386
|
+
hrs_abv_target = (array >= target_ill).sum(axis=1)
|
387
|
+
# get the minimum, i.e., worst lit point
|
388
|
+
worst_lit_point = np.min(hrs_abv_target)
|
389
|
+
# check if values is >= target hours
|
390
|
+
target_hrs = metrics['minimum_daylight_illuminance']['hours']
|
391
|
+
minimum_comply = worst_lit_point >= target_hrs
|
392
|
+
|
393
|
+
metrics_summary['credits'] = metrics['credits']
|
394
|
+
if avg_comply and minimum_comply:
|
395
|
+
metrics_summary['comply'] = True
|
396
|
+
else:
|
397
|
+
metrics_summary['comply'] = False
|
398
|
+
|
399
|
+
type_summary[program_type][grid_info['full_id']].append(metrics_summary)
|
400
|
+
|
401
|
+
program_summary = {}
|
402
|
+
for program_type, grid_summary in type_summary.items():
|
403
|
+
program_summary[program_type] = {}
|
404
|
+
program_summary[program_type]['credits'] = 0 # set 0 by default
|
405
|
+
program_summary[program_type]['comply'] = False # set False by default
|
406
|
+
|
407
|
+
metrics_summary = {}
|
408
|
+
for grid_id, metrics_list in grid_summary.items():
|
409
|
+
for metric in metrics_list:
|
410
|
+
if metric['credits'] not in metrics_summary:
|
411
|
+
metrics_summary[metric['credits']] = {}
|
412
|
+
metrics_summary[metric['credits']]['type'] = metric['type']
|
413
|
+
if 'total_area' not in metrics_summary[metric['credits']]:
|
414
|
+
metrics_summary[metric['credits']]['total_area'] = 0
|
415
|
+
metrics_summary[metric['credits']]['total_area'] += metric['area']
|
416
|
+
if 'area_comply' not in metrics_summary[metric['credits']]:
|
417
|
+
metrics_summary[metric['credits']]['area_comply'] = 0
|
418
|
+
if metric['comply']:
|
419
|
+
metrics_summary[metric['credits']]['area_comply'] += metric['area']
|
420
|
+
|
421
|
+
for credit, metric_summary in metrics_summary.items():
|
422
|
+
area_comply_pct = metric_summary['area_comply'] / metric_summary['total_area'] * 100
|
423
|
+
metric_summary['area_comply_%'] = area_comply_pct
|
424
|
+
for metric in program_type_metrics[program_type]:
|
425
|
+
if credit == metric['credits']:
|
426
|
+
if area_comply_pct >= metric['area']:
|
427
|
+
metric_summary['comply'] = True
|
428
|
+
else:
|
429
|
+
metric_summary['comply'] = False
|
430
|
+
|
431
|
+
for credit, metric_summary in metrics_summary.items():
|
432
|
+
if metric_summary['comply'] and credit > program_summary[program_type]['credits']:
|
433
|
+
program_summary[program_type]['comply'] = True
|
434
|
+
program_summary[program_type]['credits'] = credit
|
435
|
+
program_summary[program_type]['total_area'] = metric_summary['total_area']
|
436
|
+
program_summary[program_type]['area_comply'] = metric_summary['area_comply']
|
437
|
+
program_summary[program_type]['area_comply_%'] = metric_summary['area_comply_%']
|
438
|
+
program_summary[program_type]['type'] = metric_summary['type']
|
439
|
+
else:
|
440
|
+
program_summary[program_type]['total_area'] = metric_summary['total_area']
|
441
|
+
program_summary[program_type]['area_comply'] = metric_summary['area_comply']
|
442
|
+
program_summary[program_type]['area_comply_%'] = metric_summary['area_comply_%']
|
443
|
+
program_summary[program_type]['type'] = metric_summary['type']
|
444
|
+
|
445
|
+
building_type_summary = {}
|
446
|
+
for program_type, summary in program_summary.items():
|
447
|
+
if summary['type'] not in building_type_summary:
|
448
|
+
building_type_summary[summary['type']] = []
|
449
|
+
building_type_summary[summary['type']].append(summary)
|
450
|
+
|
451
|
+
credit_summary = []
|
452
|
+
for building_type, summary in building_type_summary.items():
|
453
|
+
_building_type_summary = {}
|
454
|
+
_building_type_summary['type'] = building_type
|
455
|
+
if all([v['comply'] for v in summary]):
|
456
|
+
_building_type_summary['comply'] = True
|
457
|
+
_building_type_summary['credits'] = min([v['credits'] for v in summary])
|
458
|
+
else:
|
459
|
+
_building_type_summary['comply'] = False
|
460
|
+
_building_type_summary['credits'] = 0
|
461
|
+
_building_type_summary['total_area'] = sum([v['total_area'] for v in summary])
|
462
|
+
|
463
|
+
credit_summary.append(_building_type_summary)
|
464
|
+
|
465
|
+
if sub_folder:
|
466
|
+
folder = Path(sub_folder)
|
467
|
+
folder.mkdir(parents=True, exist_ok=True)
|
468
|
+
|
469
|
+
credit_summary_file = folder.joinpath('summary.json')
|
470
|
+
credit_summary_file.write_text(json.dumps(credit_summary, indent=2))
|
471
|
+
program_summary_file = folder.joinpath('program_summary.json')
|
472
|
+
program_summary_file.write_text(json.dumps(program_summary, indent=2))
|
473
|
+
|
474
|
+
return credit_summary, program_summary
|
@@ -0,0 +1,47 @@
|
|
1
|
+
"""Commands for BREEAM post-processing."""
|
2
|
+
import sys
|
3
|
+
import logging
|
4
|
+
from pathlib import Path
|
5
|
+
import click
|
6
|
+
|
7
|
+
from honeybee_radiance_postprocess.breeam.breeam import breeam_daylight_assessment_4b
|
8
|
+
|
9
|
+
_logger = logging.getLogger(__name__)
|
10
|
+
|
11
|
+
|
12
|
+
@click.group(help='Commands for BREEAM post-processing of Radiance results.')
|
13
|
+
def breeam():
|
14
|
+
pass
|
15
|
+
|
16
|
+
|
17
|
+
@breeam.command('breeam-4b')
|
18
|
+
@click.argument(
|
19
|
+
'folder',
|
20
|
+
type=click.Path(exists=True, file_okay=False, dir_okay=True, resolve_path=True)
|
21
|
+
)
|
22
|
+
@click.option('--model-file', '-m', help='A Honeybee Model file that was used '
|
23
|
+
'in the simulation.', type=click.Path(
|
24
|
+
exists=False, file_okay=True, dir_okay=False, resolve_path=True))
|
25
|
+
@click.option(
|
26
|
+
'--sub-folder', '-sf', help='Relative path for subfolder to write output '
|
27
|
+
'files.', default='breeam_summary', type=click.Path(
|
28
|
+
exists=False, file_okay=False, dir_okay=True, resolve_path=True, path_type=Path)
|
29
|
+
)
|
30
|
+
def breeam_4b(
|
31
|
+
folder, model_file, sub_folder
|
32
|
+
):
|
33
|
+
"""Calculate metrics for BREEAM.
|
34
|
+
|
35
|
+
\b
|
36
|
+
Args:
|
37
|
+
folder: Results folder. This folder is an output folder of annual daylight
|
38
|
+
recipe.
|
39
|
+
model-file: A Honeybee Model file that was used in the simulation.
|
40
|
+
"""
|
41
|
+
try:
|
42
|
+
breeam_daylight_assessment_4b(folder, model=model_file, sub_folder=sub_folder)
|
43
|
+
except Exception:
|
44
|
+
_logger.exception('Failed to calculate BREEAM metrics.')
|
45
|
+
sys.exit(1)
|
46
|
+
else:
|
47
|
+
sys.exit(0)
|
@@ -23,6 +23,7 @@ from .two_phase import two_phase
|
|
23
23
|
from .leed import leed
|
24
24
|
from .abnt import abnt
|
25
25
|
from .well import well
|
26
|
+
from .breeam import breeam
|
26
27
|
from ..helper import model_grid_areas, grid_summary
|
27
28
|
|
28
29
|
_logger = logging.getLogger(__name__)
|
@@ -36,6 +37,8 @@ post_process.add_command(two_phase)
|
|
36
37
|
post_process.add_command(leed)
|
37
38
|
post_process.add_command(abnt)
|
38
39
|
post_process.add_command(well)
|
40
|
+
post_process.add_command(breeam)
|
41
|
+
|
39
42
|
|
40
43
|
@post_process.command('annual-daylight')
|
41
44
|
@click.argument(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: honeybee-radiance-postprocess
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.464
|
4
4
|
Summary: Postprocessing of Radiance results and matrices
|
5
5
|
Home-page: https://github.com/ladybug-tools/honeybee-radiance-postprocess
|
6
6
|
Author: Ladybug Tools
|
@@ -13,8 +13,7 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
14
14
|
Description-Content-Type: text/markdown
|
15
15
|
License-File: LICENSE
|
16
|
-
Requires-Dist: honeybee-radiance
|
17
|
-
Requires-Dist: honeybee-energy>=1.109.14
|
16
|
+
Requires-Dist: honeybee-radiance==1.66.125
|
18
17
|
Requires-Dist: numpy>=1.21.6
|
19
18
|
|
20
19
|
[](https://github.com/ladybug-tools/honeybee-radiance-postprocess/actions)
|
@@ -13,14 +13,17 @@ honeybee_radiance_postprocess/reader.py,sha256=p4A91amyCI16lRRn0bhZdInsg-qJV0Jas
|
|
13
13
|
honeybee_radiance_postprocess/type_hints.py,sha256=4R0kZgacQrqzoh8Tq7f8MVzUDzynV-C_jlh80UV6GPE,1122
|
14
14
|
honeybee_radiance_postprocess/util.py,sha256=uxqop4TsUMp8l8iLQf784NJINprHCgj00GZHvTth1C0,5603
|
15
15
|
honeybee_radiance_postprocess/vis_metadata.py,sha256=7ywIgdiuNKcctxifhpy7-Q2oaSX2ngQBeA0Kh7q1Gg0,1780
|
16
|
+
honeybee_radiance_postprocess/breeam/__init__.py,sha256=kQXElEqFnLGNnrMSpA51XDHoqBup849FHeAqWASIy6w,45
|
17
|
+
honeybee_radiance_postprocess/breeam/breeam.py,sha256=DfxyYPgfxNIbPSFTvIpH4bSMtJ70XPhC_3K87KlcZyM,17100
|
16
18
|
honeybee_radiance_postprocess/cli/__init__.py,sha256=_mYHnIOpH0qJ4QK56SB3qUT2Duuts2GR2U_0t_uE-2s,958
|
17
19
|
honeybee_radiance_postprocess/cli/abnt.py,sha256=RmEjhxdEK6Uks3S10rQs6n8cup9qv036qRwh_wj1taA,15705
|
20
|
+
honeybee_radiance_postprocess/cli/breeam.py,sha256=kBe36uCLcbk-y-hmZwKXquG-wVeFJbU9bEGv2x3bgm4,1442
|
18
21
|
honeybee_radiance_postprocess/cli/datacollection.py,sha256=Wb3UX03uW4OUZP7jWHftKfdf3aO_FSXjrnrziR3taf0,4541
|
19
22
|
honeybee_radiance_postprocess/cli/grid.py,sha256=gqnU3-HdggWCUg9mA1RLZJYHM7tH0v6r2E_X2SSkAig,11256
|
20
23
|
honeybee_radiance_postprocess/cli/leed.py,sha256=bxGX2UBehYNcaPJWHL2yEasSP6dATD7B0aNNQOflqqM,3712
|
21
24
|
honeybee_radiance_postprocess/cli/merge.py,sha256=oOqqud3VSo-3f3coDoUILcp78OI4DKxXLWCS1bi3PC4,5752
|
22
25
|
honeybee_radiance_postprocess/cli/mtxop.py,sha256=UZJnjNpPjDmShy1-Mxos4H2vTUqk_yP3ZyaC1_LLFeI,5015
|
23
|
-
honeybee_radiance_postprocess/cli/postprocess.py,sha256=
|
26
|
+
honeybee_radiance_postprocess/cli/postprocess.py,sha256=ZN7G79gDq3Dag2vUwliFWxxZp-gk3ON2sIm9RSwCXDw,39317
|
24
27
|
honeybee_radiance_postprocess/cli/schedule.py,sha256=6uIy98Co4zm-ZRcELo4Lfx_aN3lNiqPe-BSimXwt1F8,3877
|
25
28
|
honeybee_radiance_postprocess/cli/translate.py,sha256=rwUjjDK_Ttjen4ooAMvugyDN5xfltEEFURDZ_Tb1w-g,7308
|
26
29
|
honeybee_radiance_postprocess/cli/two_phase.py,sha256=xA6ayPv26DM5fuMkLhBMYGklf_j5ymowmncwJGXRgo8,7034
|
@@ -39,9 +42,9 @@ honeybee_radiance_postprocess/results/annual_irradiance.py,sha256=5zwrr4MNeHUebb
|
|
39
42
|
honeybee_radiance_postprocess/results/results.py,sha256=ABb_S8kDPruhGkDsfREXMg6K0p8FRhAZ3QIRUZCQPAI,54888
|
40
43
|
honeybee_radiance_postprocess/well/__init__.py,sha256=kQXElEqFnLGNnrMSpA51XDHoqBup849FHeAqWASIy6w,45
|
41
44
|
honeybee_radiance_postprocess/well/well.py,sha256=hsicVYFl-2DR4mtVANzUPu9NKA760elfYoIpOKc9bkQ,17501
|
42
|
-
honeybee_radiance_postprocess-0.4.
|
43
|
-
honeybee_radiance_postprocess-0.4.
|
44
|
-
honeybee_radiance_postprocess-0.4.
|
45
|
-
honeybee_radiance_postprocess-0.4.
|
46
|
-
honeybee_radiance_postprocess-0.4.
|
47
|
-
honeybee_radiance_postprocess-0.4.
|
45
|
+
honeybee_radiance_postprocess-0.4.464.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
46
|
+
honeybee_radiance_postprocess-0.4.464.dist-info/METADATA,sha256=IpF1ctFMUawS44zNAyg1BNB0IJnczzo4Vyd3POzLRqE,2240
|
47
|
+
honeybee_radiance_postprocess-0.4.464.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
|
48
|
+
honeybee_radiance_postprocess-0.4.464.dist-info/entry_points.txt,sha256=gFtVPx6UItXt27GfEZZO00eOZChJJEL6JwGSAB_O3rs,96
|
49
|
+
honeybee_radiance_postprocess-0.4.464.dist-info/top_level.txt,sha256=4-sFbzy7ewP2EDqJV3jeFlAFx7SuxtoBBELWaKAnLdA,30
|
50
|
+
honeybee_radiance_postprocess-0.4.464.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|