dragonfly-energy 1.35.20__tar.gz → 1.35.67__tar.gz
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.
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/PKG-INFO +3 -3
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/cli/simulate.py +86 -51
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/cli/translate.py +136 -23
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/des/loop.py +2 -9
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/run.py +21 -3
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/writer.py +52 -4
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/PKG-INFO +3 -3
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/requires.txt +2 -2
- dragonfly_energy-1.35.67/requirements.txt +2 -0
- dragonfly_energy-1.35.20/requirements.txt +0 -2
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/.coveragerc +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/CODE_OF_CONDUCT.md +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/CONTRIBUTING.md +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/LICENSE +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/MANIFEST.in +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/README.md +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dev-requirements.txt +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/__init__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/__main__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/_base.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/_extend_dragonfly.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/cli/__init__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/cli/install.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/config.json +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/config.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/des/__init__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/des/connector.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/des/ghe.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/des/junction.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/measure.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/__init__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/colorobj.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/connector.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/junction.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/__init__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/extended_catalog.json +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/powerlines.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/transformers.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/wires.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/network.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/powerline.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/result.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/road.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/substation.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/transformer.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/transformerprop.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/wire.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/__init__.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/building.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/context.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/model.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/room2d.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/story.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/reopt.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/SOURCES.txt +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/dependency_links.txt +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/entry_points.txt +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/top_level.txt +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/openstudio-requirements.txt +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/setup.cfg +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/setup.py +0 -0
- {dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/standards-requirements.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dragonfly-energy
|
|
3
|
-
Version: 1.35.
|
|
3
|
+
Version: 1.35.67
|
|
4
4
|
Summary: Dragonfly extension for energy simulation.
|
|
5
5
|
Home-page: https://github.com/ladybug-tools/dragonfly-energy
|
|
6
6
|
Author: Ladybug Tools
|
|
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: Implementation :: IronPython
|
|
|
18
18
|
Classifier: Operating System :: OS Independent
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: dragonfly-core==1.
|
|
22
|
-
Requires-Dist: honeybee-energy==1.116.
|
|
21
|
+
Requires-Dist: dragonfly-core==1.74.21
|
|
22
|
+
Requires-Dist: honeybee-energy==1.116.102
|
|
23
23
|
Provides-Extra: standards
|
|
24
24
|
Requires-Dist: honeybee-energy-standards==2.2.6; extra == "standards"
|
|
25
25
|
Provides-Extra: openstudio
|
|
@@ -24,60 +24,92 @@ def simulate():
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
@simulate.command('model')
|
|
27
|
-
@click.argument(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
@click.argument(
|
|
28
|
+
'model-json',
|
|
29
|
+
type=click.Path(exists=True, file_okay=True, dir_okay=False, resolve_path=True)
|
|
30
|
+
)
|
|
31
|
+
@click.argument(
|
|
32
|
+
'epw-file',
|
|
33
|
+
type=click.Path(exists=True, file_okay=True, dir_okay=False, resolve_path=True)
|
|
34
|
+
)
|
|
31
35
|
@click.option(
|
|
32
36
|
'--sim-par-json', '-sp', help='Full path to a honeybee energy '
|
|
33
37
|
'SimulationParameter JSON that describes all of the settings for '
|
|
34
38
|
'the simulation.', default=None, show_default=True,
|
|
35
|
-
type=click.Path(exists=True, file_okay=True, dir_okay=False, resolve_path=True)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
39
|
+
type=click.Path(exists=True, file_okay=True, dir_okay=False, resolve_path=True)
|
|
40
|
+
)
|
|
41
|
+
@click.option(
|
|
42
|
+
'--obj-per-model', '-o', help='Text to describe how the input Model '
|
|
43
|
+
'should be divided across the output Models. Choose from: District, '
|
|
44
|
+
'Building, Story.', type=str, default="Building", show_default=True
|
|
45
|
+
)
|
|
46
|
+
@click.option(
|
|
47
|
+
'--multiplier/--full-geometry', ' /-fg', help='Flag to note if the '
|
|
48
|
+
'multipliers on each Building story will be passed along to the '
|
|
49
|
+
'generated Honeybee Room objects or if full geometry objects should be '
|
|
50
|
+
'written for each story in the building.', default=True, show_default=True
|
|
51
|
+
)
|
|
52
|
+
@click.option(
|
|
53
|
+
'--plenum/--no-plenum', '-p/-np', help='Flag to indicate whether '
|
|
54
|
+
'ceiling/floor plenum depths assigned to Room2Ds should generate '
|
|
55
|
+
'distinct 3D Rooms in the translation.', default=True, show_default=True
|
|
56
|
+
)
|
|
57
|
+
@click.option(
|
|
58
|
+
'--no-cap/--cap', ' /-c', help='Flag to indicate whether context shade '
|
|
59
|
+
'buildings should be capped with a top face.', default=True, show_default=True
|
|
60
|
+
)
|
|
61
|
+
@click.option(
|
|
62
|
+
'--shade-dist', '-sd', help='An optional number to note the distance '
|
|
63
|
+
'beyond which other buildings shade should not be exported into a given '
|
|
64
|
+
'Model. If None, all other buildings will be included as context shade in '
|
|
65
|
+
'each and every Model. Set to 0 to exclude all neighboring buildings '
|
|
66
|
+
'from the resulting models.', type=float, default=None, show_default=True
|
|
67
|
+
)
|
|
68
|
+
@click.option(
|
|
69
|
+
'--no-ceil-adjacency/--ceil-adjacency', ' /-a', help='Flag to indicate '
|
|
70
|
+
'whether adjacencies should be solved between interior stories when '
|
|
71
|
+
'Room2Ds perfectly match one another in their floor plate. This ensures '
|
|
72
|
+
'that Surface boundary conditions are used instead of Adiabatic ones. '
|
|
73
|
+
'Note that this input has no effect when the object-per-model is Story.',
|
|
74
|
+
default=True, show_default=True
|
|
75
|
+
)
|
|
76
|
+
@click.option(
|
|
77
|
+
'--merge-method', '-m', help='Text to describe how the Room2Ds should '
|
|
78
|
+
'be merged into individual Rooms during the translation. Specifying a '
|
|
79
|
+
'value here can be an effective way to reduce the number of Room '
|
|
80
|
+
'volumes in the resulting Model and, ultimately, yield a faster simulation '
|
|
81
|
+
'time with less results to manage. Choose from: None, Zones, PlenumZones, '
|
|
82
|
+
'Stories, PlenumStories.', type=str, default='None', show_default=True
|
|
83
|
+
)
|
|
84
|
+
@click.option(
|
|
85
|
+
'--measures', '-m', help='Full path to a folder containing an OSW JSON '
|
|
86
|
+
'be used as the base for the execution of the OpenStudio CLI. While this '
|
|
87
|
+
'OSW can contain paths to measures that exist anywhere on the machine, '
|
|
88
|
+
'the best practice is to copy the measures into this measures '
|
|
89
|
+
'folder and use relative paths within the OSW. '
|
|
90
|
+
'This makes it easier to move the inputs for this command from one '
|
|
91
|
+
'machine to another.', default=None, show_default=True,
|
|
92
|
+
type=click.Path(file_okay=False, dir_okay=True, resolve_path=True)
|
|
93
|
+
)
|
|
94
|
+
@click.option(
|
|
95
|
+
'--folder', '-f', help='Folder on this computer, into which the IDF '
|
|
96
|
+
'and result files will be written. If None, the files will be output '
|
|
97
|
+
'to the honeybee default simulation folder and placed in a project '
|
|
98
|
+
'folder with the same name as the model json.',
|
|
99
|
+
default=None, show_default=True,
|
|
100
|
+
type=click.Path(file_okay=False, dir_okay=True, resolve_path=True)
|
|
101
|
+
)
|
|
102
|
+
@click.option(
|
|
103
|
+
'--log-file', '-log', help='Optional log file to output a dictionary '
|
|
104
|
+
'with the paths of the generated files under the following keys: '
|
|
105
|
+
'osm, idf, sql. By default the list will be printed out to stdout',
|
|
106
|
+
type=click.File('w'), default='-', show_default=True
|
|
107
|
+
)
|
|
108
|
+
def simulate_model(
|
|
109
|
+
model_json, epw_file, sim_par_json, obj_per_model, multiplier,
|
|
110
|
+
plenum, no_cap, shade_dist, no_ceil_adjacency, merge_method,
|
|
111
|
+
measures, folder, log_file
|
|
112
|
+
):
|
|
81
113
|
"""Simulate a Dragonfly Model JSON file in EnergyPlus.
|
|
82
114
|
|
|
83
115
|
\b
|
|
@@ -160,7 +192,10 @@ def simulate_model(model_json, epw_file, sim_par_json, obj_per_model, multiplier
|
|
|
160
192
|
cap = not no_cap
|
|
161
193
|
ceil_adjacency = not no_ceil_adjacency
|
|
162
194
|
hb_models = model.to_honeybee(
|
|
163
|
-
obj_per_model, shade_dist, multiplier,
|
|
195
|
+
obj_per_model, shade_dist, use_multiplier=multiplier,
|
|
196
|
+
exclude_plenums=no_plenum, cap=cap,
|
|
197
|
+
solve_ceiling_adjacencies=ceil_adjacency, merge_method=merge_method
|
|
198
|
+
)
|
|
164
199
|
|
|
165
200
|
# write out the honeybee JSONs
|
|
166
201
|
osms = []
|
|
@@ -54,6 +54,12 @@ def translate():
|
|
|
54
54
|
'that Surface boundary conditions are used instead of Adiabatic ones. '
|
|
55
55
|
'Note that this input has no effect when the object-per-model is Story.',
|
|
56
56
|
default=True, show_default=True)
|
|
57
|
+
@click.option('--merge-method', '-m', help='Text to describe how the Room2Ds should '
|
|
58
|
+
'be merged into individual Rooms during the translation. Specifying a '
|
|
59
|
+
'value here can be an effective way to reduce the number of Room '
|
|
60
|
+
'volumes in the resulting Model and, ultimately, yield a faster simulation '
|
|
61
|
+
'time with less results to manage. Choose from: None, Zones, PlenumZones, '
|
|
62
|
+
'Stories, PlenumStories.', type=str, default='None', show_default=True)
|
|
57
63
|
@click.option('--folder', '-f', help='Deprecated input that is no longer used.',
|
|
58
64
|
default=None, show_default=True,
|
|
59
65
|
type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
|
|
@@ -87,8 +93,10 @@ def translate():
|
|
|
87
93
|
'By default this will be printed out to stdout',
|
|
88
94
|
type=click.File('w'), default='-', show_default=True)
|
|
89
95
|
def model_to_osm_cli(
|
|
90
|
-
|
|
91
|
-
|
|
96
|
+
model_file, sim_par_json, epw_file,
|
|
97
|
+
multiplier, plenum, no_ceil_adjacency, merge_method,
|
|
98
|
+
folder, osm_file, idf_file, geometry_ids, resource_ids, log_file
|
|
99
|
+
):
|
|
92
100
|
"""Translate a Dragonfly Model to an OpenStudio Model.
|
|
93
101
|
|
|
94
102
|
\b
|
|
@@ -103,8 +111,10 @@ def model_to_osm_cli(
|
|
|
103
111
|
geo_names = not geometry_ids
|
|
104
112
|
res_names = not resource_ids
|
|
105
113
|
model_to_osm(
|
|
106
|
-
model_file, sim_par_json, epw_file,
|
|
107
|
-
|
|
114
|
+
model_file, sim_par_json, epw_file,
|
|
115
|
+
full_geometry, no_plenum, ceil_adjacency, merge_method,
|
|
116
|
+
folder, osm_file, idf_file, geo_names, res_names, log_file
|
|
117
|
+
)
|
|
108
118
|
except Exception as e:
|
|
109
119
|
_logger.exception('Model translation failed.\n{}'.format(e))
|
|
110
120
|
sys.exit(1)
|
|
@@ -114,7 +124,7 @@ def model_to_osm_cli(
|
|
|
114
124
|
|
|
115
125
|
def model_to_osm(
|
|
116
126
|
model_file, sim_par_json=None, epw_file=None,
|
|
117
|
-
full_geometry=False, no_plenum=False, ceil_adjacency=False,
|
|
127
|
+
full_geometry=False, no_plenum=False, ceil_adjacency=False, merge_method='None',
|
|
118
128
|
folder=None, osm_file=None, idf_file=None,
|
|
119
129
|
geometry_names=False, resource_names=False, log_file=None,
|
|
120
130
|
multiplier=True, plenum=True, no_ceil_adjacency=True,
|
|
@@ -145,6 +155,21 @@ def model_to_osm(
|
|
|
145
155
|
in their floor plate. This ensures that Surface boundary conditions
|
|
146
156
|
are used instead of Adiabatic ones. Note that this input has no
|
|
147
157
|
effect when the object-per-model is Story. (Default: False).
|
|
158
|
+
merge_method: An optional text string to describe how the Room2Ds should
|
|
159
|
+
be merged into individual Rooms during the translation. Specifying a
|
|
160
|
+
value here can be an effective way to reduce the number of Room
|
|
161
|
+
volumes in the resulting Model and, ultimately, yield a faster simulation
|
|
162
|
+
time with less results to manage. Note that Room2Ds will only be merged if
|
|
163
|
+
they form a contiguous volume. Otherwise, there will be multiple Rooms per
|
|
164
|
+
zone or story, each with an integer added at the end of their
|
|
165
|
+
identifiers. Choose from the following options:
|
|
166
|
+
|
|
167
|
+
* None - No merging will occur
|
|
168
|
+
* Zones - Room2Ds in the same zone will be merged
|
|
169
|
+
* PlenumZones - Only plenums in the same zone will be merged
|
|
170
|
+
* Stories - Rooms in the same story will be merged
|
|
171
|
+
* PlenumStories - Only plenums in the same story will be merged
|
|
172
|
+
|
|
148
173
|
folder: Deprecated input that is no longer used.
|
|
149
174
|
osm_file: Optional path where the OSM will be copied after it is translated
|
|
150
175
|
in the folder. If None, the file will not be copied.
|
|
@@ -238,7 +263,8 @@ def model_to_osm(
|
|
|
238
263
|
hb_models = model.to_honeybee(
|
|
239
264
|
object_per_model='District', use_multiplier=multiplier,
|
|
240
265
|
exclude_plenums=no_plenum, solve_ceiling_adjacencies=ceil_adjacency,
|
|
241
|
-
enforce_adj=False
|
|
266
|
+
merge_method=merge_method, enforce_adj=False
|
|
267
|
+
)
|
|
242
268
|
hb_model = hb_models[0]
|
|
243
269
|
|
|
244
270
|
# create the HBJSON for input to OpenStudio CLI
|
|
@@ -286,6 +312,12 @@ def model_to_osm(
|
|
|
286
312
|
'that Surface boundary conditions are used instead of Adiabatic ones. '
|
|
287
313
|
'Note that this input has no effect when the object-per-model is Story.',
|
|
288
314
|
default=True, show_default=True)
|
|
315
|
+
@click.option('--merge-method', '-m', help='Text to describe how the Room2Ds should '
|
|
316
|
+
'be merged into individual Rooms during the translation. Specifying a '
|
|
317
|
+
'value here can be an effective way to reduce the number of Room '
|
|
318
|
+
'volumes in the resulting Model and, ultimately, yield a faster simulation '
|
|
319
|
+
'time with less results to manage. Choose from: None, Zones, PlenumZones, '
|
|
320
|
+
'Stories, PlenumStories.', type=str, default='None', show_default=True)
|
|
289
321
|
@click.option('--additional-str', '-a', help='Text string for additional lines that '
|
|
290
322
|
'should be added to the IDF.', type=str, default='', show_default=True)
|
|
291
323
|
@click.option('--compact-schedules/--csv-schedules', ' /-c', help='Flag to note '
|
|
@@ -320,7 +352,7 @@ def model_to_osm(
|
|
|
320
352
|
'of the translation. By default this will be printed out to stdout',
|
|
321
353
|
type=click.File('w'), default='-', show_default=True)
|
|
322
354
|
def model_to_idf_cli(
|
|
323
|
-
model_file, sim_par_json, multiplier, plenum, no_ceil_adjacency,
|
|
355
|
+
model_file, sim_par_json, multiplier, plenum, no_ceil_adjacency, merge_method,
|
|
324
356
|
additional_str, compact_schedules, hvac_to_ideal_air,
|
|
325
357
|
geometry_ids, resource_ids, output_file
|
|
326
358
|
):
|
|
@@ -344,7 +376,7 @@ def model_to_idf_cli(
|
|
|
344
376
|
res_names = not resource_ids
|
|
345
377
|
model_to_idf(
|
|
346
378
|
model_file, sim_par_json, full_geometry, no_plenum, ceil_adjacency,
|
|
347
|
-
additional_str, csv_schedules,
|
|
379
|
+
merge_method, additional_str, csv_schedules,
|
|
348
380
|
hvac_check, geo_names, res_names, output_file)
|
|
349
381
|
except Exception as e:
|
|
350
382
|
_logger.exception('Model translation failed.\n{}\n'.format(e))
|
|
@@ -355,7 +387,7 @@ def model_to_idf_cli(
|
|
|
355
387
|
|
|
356
388
|
def model_to_idf(
|
|
357
389
|
model_file, sim_par_json=None,
|
|
358
|
-
full_geometry=False, no_plenum=False, ceil_adjacency=False,
|
|
390
|
+
full_geometry=False, no_plenum=False, ceil_adjacency=False, merge_method='None',
|
|
359
391
|
additional_str='', csv_schedules=False, hvac_check=False,
|
|
360
392
|
geometry_names=False, resource_names=False, output_file=None,
|
|
361
393
|
multiplier=True, plenum=True, no_ceil_adjacency=True,
|
|
@@ -384,6 +416,21 @@ def model_to_idf(
|
|
|
384
416
|
in their floor plate. This ensures that Surface boundary conditions
|
|
385
417
|
are used instead of Adiabatic ones. Note that this input has no
|
|
386
418
|
effect when the object-per-model is Story. (Default: False).
|
|
419
|
+
merge_method: An optional text string to describe how the Room2Ds should
|
|
420
|
+
be merged into individual Rooms during the translation. Specifying a
|
|
421
|
+
value here can be an effective way to reduce the number of Room
|
|
422
|
+
volumes in the resulting Model and, ultimately, yield a faster simulation
|
|
423
|
+
time with less results to manage. Note that Room2Ds will only be merged if
|
|
424
|
+
they form a contiguous volume. Otherwise, there will be multiple Rooms per
|
|
425
|
+
zone or story, each with an integer added at the end of their
|
|
426
|
+
identifiers. Choose from the following options:
|
|
427
|
+
|
|
428
|
+
* None - No merging will occur
|
|
429
|
+
* Zones - Room2Ds in the same zone will be merged
|
|
430
|
+
* PlenumZones - Only plenums in the same zone will be merged
|
|
431
|
+
* Stories - Rooms in the same story will be merged
|
|
432
|
+
* PlenumStories - Only plenums in the same story will be merged
|
|
433
|
+
|
|
387
434
|
additional_str: Text string for additional lines that should be added
|
|
388
435
|
to the IDF.
|
|
389
436
|
csv_schedules: Boolean to note whether any ScheduleFixedIntervals in the
|
|
@@ -435,7 +482,8 @@ def model_to_idf(
|
|
|
435
482
|
hb_models = model.to_honeybee(
|
|
436
483
|
object_per_model='District', use_multiplier=multiplier,
|
|
437
484
|
exclude_plenums=no_plenum, solve_ceiling_adjacencies=ceil_adjacency,
|
|
438
|
-
enforce_adj=False
|
|
485
|
+
merge_method=merge_method, enforce_adj=False
|
|
486
|
+
)
|
|
439
487
|
hb_model = hb_models[0]
|
|
440
488
|
|
|
441
489
|
# reset the IDs to be derived from the display_names if requested
|
|
@@ -481,6 +529,12 @@ def model_to_idf(
|
|
|
481
529
|
'that Surface boundary conditions are used instead of Adiabatic ones. '
|
|
482
530
|
'Note that this input has no effect when the object-per-model is Story.',
|
|
483
531
|
default=True, show_default=True)
|
|
532
|
+
@click.option('--merge-method', '-m', help='Text to describe how the Room2Ds should '
|
|
533
|
+
'be merged into individual Rooms during the translation. Specifying a '
|
|
534
|
+
'value here can be an effective way to reduce the number of Room '
|
|
535
|
+
'volumes in the resulting Model and, ultimately, yield a faster simulation '
|
|
536
|
+
'time with less results to manage. Choose from: None, Zones, PlenumZones, '
|
|
537
|
+
'Stories, PlenumStories.', type=str, default='None', show_default=True)
|
|
484
538
|
@click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
|
|
485
539
|
default=None,
|
|
486
540
|
type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
|
|
@@ -524,7 +578,7 @@ def model_to_idf(
|
|
|
524
578
|
'of the translation. By default it printed out to stdout', default='-',
|
|
525
579
|
type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
|
|
526
580
|
def model_to_gbxml_cli(
|
|
527
|
-
model_file, multiplier, plenum, no_ceil_adjacency,
|
|
581
|
+
model_file, multiplier, plenum, no_ceil_adjacency, merge_method,
|
|
528
582
|
osw_folder, default_subfaces, triangulate_non_planar, minimal,
|
|
529
583
|
interior_face_type, ground_face_type, program_name, program_version, output_file
|
|
530
584
|
):
|
|
@@ -543,7 +597,7 @@ def model_to_gbxml_cli(
|
|
|
543
597
|
permit_non_planar = not triangulate_non_planar
|
|
544
598
|
complete_geometry = not minimal
|
|
545
599
|
model_to_gbxml(
|
|
546
|
-
model_file, osw_folder, full_geometry, no_plenum, ceil_adjacency,
|
|
600
|
+
model_file, osw_folder, full_geometry, no_plenum, ceil_adjacency, merge_method,
|
|
547
601
|
triangulate_subfaces, permit_non_planar, complete_geometry,
|
|
548
602
|
interior_face_type, ground_face_type, program_name, program_version,
|
|
549
603
|
output_file)
|
|
@@ -556,7 +610,7 @@ def model_to_gbxml_cli(
|
|
|
556
610
|
|
|
557
611
|
def model_to_gbxml(
|
|
558
612
|
model_file, osw_folder=None, full_geometry=False,
|
|
559
|
-
no_plenum=False, ceil_adjacency=False,
|
|
613
|
+
no_plenum=False, ceil_adjacency=False, merge_method='None',
|
|
560
614
|
triangulate_subfaces=False, permit_non_planar=False, complete_geometry=False,
|
|
561
615
|
interior_face_type='', ground_face_type='',
|
|
562
616
|
program_name=None, program_version=None, output_file=None,
|
|
@@ -581,6 +635,21 @@ def model_to_gbxml(
|
|
|
581
635
|
in their floor plate. This ensures that Surface boundary conditions
|
|
582
636
|
are used instead of Adiabatic ones. Note that this input has no
|
|
583
637
|
effect when the object-per-model is Story. (Default: False).
|
|
638
|
+
merge_method: An optional text string to describe how the Room2Ds should
|
|
639
|
+
be merged into individual Rooms during the translation. Specifying a
|
|
640
|
+
value here can be an effective way to reduce the number of Room
|
|
641
|
+
volumes in the resulting Model and, ultimately, yield a faster simulation
|
|
642
|
+
time with less results to manage. Note that Room2Ds will only be merged if
|
|
643
|
+
they form a contiguous volume. Otherwise, there will be multiple Rooms per
|
|
644
|
+
zone or story, each with an integer added at the end of their
|
|
645
|
+
identifiers. Choose from the following options:
|
|
646
|
+
|
|
647
|
+
* None - No merging will occur
|
|
648
|
+
* Zones - Room2Ds in the same zone will be merged
|
|
649
|
+
* PlenumZones - Only plenums in the same zone will be merged
|
|
650
|
+
* Stories - Rooms in the same story will be merged
|
|
651
|
+
* PlenumStories - Only plenums in the same story will be merged
|
|
652
|
+
|
|
584
653
|
triangulate_subfaces: Boolean to note whether sub-faces (including
|
|
585
654
|
Apertures and Doors) should be triangulated if they have more
|
|
586
655
|
than 4 sides (True) or whether they should be left as they are (False).
|
|
@@ -632,7 +701,7 @@ def model_to_gbxml(
|
|
|
632
701
|
hb_models = model.to_honeybee(
|
|
633
702
|
object_per_model='District', use_multiplier=multiplier,
|
|
634
703
|
exclude_plenums=no_plenum, solve_ceiling_adjacencies=ceil_adjacency,
|
|
635
|
-
enforce_adj=False)
|
|
704
|
+
merge_method=merge_method, enforce_adj=False)
|
|
636
705
|
hb_model = hb_models[0]
|
|
637
706
|
|
|
638
707
|
# translate the model to a gbXML string
|
|
@@ -664,6 +733,12 @@ def model_to_gbxml(
|
|
|
664
733
|
'that Surface boundary conditions are used instead of Adiabatic ones. '
|
|
665
734
|
'Note that this input has no effect when the object-per-model is Story.',
|
|
666
735
|
default=True, show_default=True)
|
|
736
|
+
@click.option('--merge-method', '-m', help='Text to describe how the Room2Ds should '
|
|
737
|
+
'be merged into individual Rooms during the translation. Specifying a '
|
|
738
|
+
'value here can be an effective way to reduce the number of Room '
|
|
739
|
+
'volumes in the resulting Model and, ultimately, yield a faster simulation '
|
|
740
|
+
'time with less results to manage. Choose from: None, Zones, PlenumZones, '
|
|
741
|
+
'Stories, PlenumStories.', type=str, default='None', show_default=True)
|
|
667
742
|
@click.option('--single-window/--detailed-windows', ' /-dw', help='Flag to note '
|
|
668
743
|
'whether all windows within walls should be converted to a single '
|
|
669
744
|
'window with an area that matches the original geometry.',
|
|
@@ -702,7 +777,7 @@ def model_to_gbxml(
|
|
|
702
777
|
'of the translation. By default it printed out to stdout.', default='-',
|
|
703
778
|
type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
|
|
704
779
|
def model_to_trace_gbxml_cli(
|
|
705
|
-
model_file, multiplier, plenum, no_ceil_adjacency,
|
|
780
|
+
model_file, multiplier, plenum, no_ceil_adjacency, merge_method,
|
|
706
781
|
single_window, rect_sub_distance, frame_merge_distance,
|
|
707
782
|
program_name, program_version, osw_folder, output_file
|
|
708
783
|
):
|
|
@@ -719,8 +794,8 @@ def model_to_trace_gbxml_cli(
|
|
|
719
794
|
ceil_adjacency = not no_ceil_adjacency
|
|
720
795
|
detailed_windows = not single_window
|
|
721
796
|
model_to_trace_gbxml(
|
|
722
|
-
model_file, full_geometry, no_plenum, ceil_adjacency,
|
|
723
|
-
rect_sub_distance, frame_merge_distance, osw_folder,
|
|
797
|
+
model_file, full_geometry, no_plenum, ceil_adjacency, merge_method,
|
|
798
|
+
detailed_windows, rect_sub_distance, frame_merge_distance, osw_folder,
|
|
724
799
|
program_name, program_version, output_file)
|
|
725
800
|
except Exception as e:
|
|
726
801
|
_logger.exception('Model translation failed.\n{}'.format(e))
|
|
@@ -730,7 +805,8 @@ def model_to_trace_gbxml_cli(
|
|
|
730
805
|
|
|
731
806
|
|
|
732
807
|
def model_to_trace_gbxml(
|
|
733
|
-
model_file, full_geometry=False,
|
|
808
|
+
model_file, full_geometry=False,
|
|
809
|
+
no_plenum=False, ceil_adjacency=False, merge_method='None',
|
|
734
810
|
detailed_windows=False, rect_sub_distance='0.15m', frame_merge_distance='0.2m',
|
|
735
811
|
program_name=None, program_version=None, osw_folder=None, output_file=None,
|
|
736
812
|
multiplier=True, plenum=True, no_ceil_adjacency=True, single_window=True
|
|
@@ -752,6 +828,21 @@ def model_to_trace_gbxml(
|
|
|
752
828
|
in their floor plate. This ensures that Surface boundary conditions
|
|
753
829
|
are used instead of Adiabatic ones. Note that this input has no
|
|
754
830
|
effect when the object-per-model is Story. (Default: False).
|
|
831
|
+
merge_method: An optional text string to describe how the Room2Ds should
|
|
832
|
+
be merged into individual Rooms during the translation. Specifying a
|
|
833
|
+
value here can be an effective way to reduce the number of Room
|
|
834
|
+
volumes in the resulting Model and, ultimately, yield a faster simulation
|
|
835
|
+
time with less results to manage. Note that Room2Ds will only be merged if
|
|
836
|
+
they form a contiguous volume. Otherwise, there will be multiple Rooms per
|
|
837
|
+
zone or story, each with an integer added at the end of their
|
|
838
|
+
identifiers. Choose from the following options:
|
|
839
|
+
|
|
840
|
+
* None - No merging will occur
|
|
841
|
+
* Zones - Room2Ds in the same zone will be merged
|
|
842
|
+
* PlenumZones - Only plenums in the same zone will be merged
|
|
843
|
+
* Stories - Rooms in the same story will be merged
|
|
844
|
+
* PlenumStories - Only plenums in the same story will be merged
|
|
845
|
+
|
|
755
846
|
detailed_windows: A boolean for whether all windows within walls should be
|
|
756
847
|
left as they are (True) or converted to a single window with an area
|
|
757
848
|
that matches the original geometry (False). (Default: False).
|
|
@@ -799,7 +890,7 @@ def model_to_trace_gbxml(
|
|
|
799
890
|
hb_models = model.to_honeybee(
|
|
800
891
|
object_per_model='District', use_multiplier=multiplier,
|
|
801
892
|
exclude_plenums=no_plenum, solve_ceiling_adjacencies=ceil_adjacency,
|
|
802
|
-
enforce_adj=False)
|
|
893
|
+
merge_method=merge_method, enforce_adj=False)
|
|
803
894
|
hb_model = hb_models[0]
|
|
804
895
|
|
|
805
896
|
# translate the honeybee model to a TRACE-compatible gbXML string
|
|
@@ -831,6 +922,12 @@ def model_to_trace_gbxml(
|
|
|
831
922
|
'that Surface boundary conditions are used instead of Adiabatic ones. '
|
|
832
923
|
'Note that this input has no effect when the object-per-model is Story.',
|
|
833
924
|
default=True, show_default=True)
|
|
925
|
+
@click.option('--merge-method', '-m', help='Text to describe how the Room2Ds should '
|
|
926
|
+
'be merged into individual Rooms during the translation. Specifying a '
|
|
927
|
+
'value here can be an effective way to reduce the number of Room '
|
|
928
|
+
'volumes in the resulting Model and, ultimately, yield a faster simulation '
|
|
929
|
+
'time with less results to manage. Choose from: None, Zones, PlenumZones, '
|
|
930
|
+
'Stories, PlenumStories.', type=str, default='None', show_default=True)
|
|
834
931
|
@click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
|
|
835
932
|
default=None,
|
|
836
933
|
type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
|
|
@@ -856,8 +953,8 @@ def model_to_trace_gbxml(
|
|
|
856
953
|
'of the translation. By default it printed out to stdout', default='-',
|
|
857
954
|
type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
|
|
858
955
|
def model_to_sdd_cli(
|
|
859
|
-
model_file, multiplier, plenum, no_ceil_adjacency,
|
|
860
|
-
geometry_ids, resource_ids, output_file
|
|
956
|
+
model_file, multiplier, plenum, no_ceil_adjacency, merge_method,
|
|
957
|
+
osw_folder, geometry_ids, resource_ids, output_file
|
|
861
958
|
):
|
|
862
959
|
"""Translate a Dragonfly Model to a CBECC SDD file.
|
|
863
960
|
|
|
@@ -873,7 +970,7 @@ def model_to_sdd_cli(
|
|
|
873
970
|
geo_names = not geometry_ids
|
|
874
971
|
res_names = not resource_ids
|
|
875
972
|
model_to_sdd(
|
|
876
|
-
model_file, full_geometry, no_plenum, ceil_adjacency,
|
|
973
|
+
model_file, full_geometry, no_plenum, ceil_adjacency, merge_method,
|
|
877
974
|
osw_folder, geo_names, res_names, output_file)
|
|
878
975
|
except Exception as e:
|
|
879
976
|
_logger.exception('Model translation failed.\n{}'.format(e))
|
|
@@ -883,7 +980,8 @@ def model_to_sdd_cli(
|
|
|
883
980
|
|
|
884
981
|
|
|
885
982
|
def model_to_sdd(
|
|
886
|
-
model_file, full_geometry=False,
|
|
983
|
+
model_file, full_geometry=False,
|
|
984
|
+
no_plenum=False, ceil_adjacency=False, merge_method='None',
|
|
887
985
|
osw_folder=None, geometry_names=False, resource_names=False, output_file=None,
|
|
888
986
|
multiplier=True, plenum=True, no_ceil_adjacency=True,
|
|
889
987
|
geometry_ids=True, resource_ids=True
|
|
@@ -905,6 +1003,21 @@ def model_to_sdd(
|
|
|
905
1003
|
in their floor plate. This ensures that Surface boundary conditions
|
|
906
1004
|
are used instead of Adiabatic ones. Note that this input has no
|
|
907
1005
|
effect when the object-per-model is Story. (Default: False).
|
|
1006
|
+
merge_method: An optional text string to describe how the Room2Ds should
|
|
1007
|
+
be merged into individual Rooms during the translation. Specifying a
|
|
1008
|
+
value here can be an effective way to reduce the number of Room
|
|
1009
|
+
volumes in the resulting Model and, ultimately, yield a faster simulation
|
|
1010
|
+
time with less results to manage. Note that Room2Ds will only be merged if
|
|
1011
|
+
they form a contiguous volume. Otherwise, there will be multiple Rooms per
|
|
1012
|
+
zone or story, each with an integer added at the end of their
|
|
1013
|
+
identifiers. Choose from the following options:
|
|
1014
|
+
|
|
1015
|
+
* None - No merging will occur
|
|
1016
|
+
* Zones - Room2Ds in the same zone will be merged
|
|
1017
|
+
* PlenumZones - Only plenums in the same zone will be merged
|
|
1018
|
+
* Stories - Rooms in the same story will be merged
|
|
1019
|
+
* PlenumStories - Only plenums in the same story will be merged
|
|
1020
|
+
|
|
908
1021
|
osw_folder: Deprecated input that is no longer used.
|
|
909
1022
|
geometry_names: Boolean to note whether a cleaned version of all geometry
|
|
910
1023
|
display names should be used instead of identifiers when translating
|
|
@@ -798,7 +798,7 @@ class GHEThermalLoop(object):
|
|
|
798
798
|
# add the fifth generation system parameters
|
|
799
799
|
des_param = {
|
|
800
800
|
'fifth_generation': {
|
|
801
|
-
'ghe_parameters': self.to_ghe_param_dict(
|
|
801
|
+
'ghe_parameters': self.to_ghe_param_dict(),
|
|
802
802
|
'central_pump_parameters': pump_par,
|
|
803
803
|
'horizontal_piping_parameters': horiz_par,
|
|
804
804
|
'soil': soil_par
|
|
@@ -809,11 +809,6 @@ class GHEThermalLoop(object):
|
|
|
809
809
|
|
|
810
810
|
def to_ghe_param_dict(self, tolerance=0.01):
|
|
811
811
|
"""Get the GroundHeatExchanger as it appears in a System Parameter dictionary.
|
|
812
|
-
|
|
813
|
-
Args:
|
|
814
|
-
tolerance: The minimum difference between the coordinate values of two
|
|
815
|
-
geometries at which they are considered co-located. (Default: 0.01,
|
|
816
|
-
suitable for objects in meters).
|
|
817
812
|
"""
|
|
818
813
|
# compute the geometric constraints of the borehole fields
|
|
819
814
|
geo_pars = []
|
|
@@ -825,9 +820,7 @@ class GHEThermalLoop(object):
|
|
|
825
820
|
'b_max_x': self.borehole_parameters.max_spacing,
|
|
826
821
|
'b_max_y': self.borehole_parameters.max_spacing,
|
|
827
822
|
'max_height': self.borehole_parameters.max_depth,
|
|
828
|
-
'min_height': self.borehole_parameters.min_depth
|
|
829
|
-
'property_boundary': [], # TODO: remove when GMT is better
|
|
830
|
-
'no_go_boundaries': [] # TODO: remove when GMT is better
|
|
823
|
+
'min_height': self.borehole_parameters.min_depth
|
|
831
824
|
}
|
|
832
825
|
}
|
|
833
826
|
geo_pars.append(geo_par)
|
|
@@ -213,7 +213,9 @@ def base_honeybee_osw(
|
|
|
213
213
|
json.dump(geo_dict, fp, indent=4)
|
|
214
214
|
|
|
215
215
|
# if the DES system is GSHP, specify any autocalculated ground temperatures
|
|
216
|
-
|
|
216
|
+
msg_template = 'Autocalculated EPW ground temperature in this climate is ' \
|
|
217
|
+
'{}C, which is too {} for a {} EFT of {}C. {} EFT is being reset to {}.'
|
|
218
|
+
dead_band = 12 # minimum annual delta T of the ground GHEDesigner needs
|
|
217
219
|
with open(sys_param_file, 'r') as spf:
|
|
218
220
|
sys_dict = json.load(spf)
|
|
219
221
|
if 'district_system' in sys_dict:
|
|
@@ -230,11 +232,27 @@ def base_honeybee_osw(
|
|
|
230
232
|
if 'min_eft' in design and \
|
|
231
233
|
design['min_eft'] + dead_band > start_temp:
|
|
232
234
|
# ground is too cold
|
|
233
|
-
|
|
235
|
+
new_min_eft = round(start_temp - dead_band)
|
|
236
|
+
if new_min_eft < -6.67: # just too cold
|
|
237
|
+
new_min_eft = -6.67
|
|
238
|
+
msg = msg_template.format(
|
|
239
|
+
start_temp, 'cold', 'min', design['min_eft'],
|
|
240
|
+
'Min', new_min_eft)
|
|
241
|
+
print(msg)
|
|
242
|
+
design['min_eft'] = new_min_eft
|
|
243
|
+
# set fluid to ensure it does not freeze
|
|
244
|
+
fluid = g5_par['ghe_parameters']['fluid']
|
|
245
|
+
fluid['fluid_name'] = 'PropyleneGlycol'
|
|
246
|
+
fluid['concentration_percent'] = 25
|
|
234
247
|
elif 'max_eft' in design and \
|
|
235
248
|
design['max_eft'] - dead_band < start_temp:
|
|
236
249
|
# ground is too hot
|
|
237
|
-
|
|
250
|
+
new_max_eft = round(start_temp + dead_band)
|
|
251
|
+
msg = msg_template.format(
|
|
252
|
+
start_temp, 'hot', 'max', design['max_eft'],
|
|
253
|
+
'Max', new_max_eft)
|
|
254
|
+
print(msg)
|
|
255
|
+
design['max_eft'] = new_max_eft
|
|
238
256
|
soil_par['undisturbed_temp'] = start_temp
|
|
239
257
|
with open(sys_param_file, 'w') as fp:
|
|
240
258
|
json.dump(sys_dict, fp, indent=4)
|
|
@@ -15,7 +15,7 @@ from honeybee.model import Model as hb_model
|
|
|
15
15
|
|
|
16
16
|
def model_to_urbanopt(
|
|
17
17
|
model, location, point=Point2D(0, 0), shade_distance=None, use_multiplier=True,
|
|
18
|
-
exclude_plenums=False, solve_ceiling_adjacencies=False,
|
|
18
|
+
exclude_plenums=False, solve_ceiling_adjacencies=False, merge_method='None',
|
|
19
19
|
des_loop=None, electrical_network=None, road_network=None, ground_pv=None,
|
|
20
20
|
folder=None, tolerance=None
|
|
21
21
|
):
|
|
@@ -51,6 +51,22 @@ def model_to_urbanopt(
|
|
|
51
51
|
another in their floor plate. This ensures that Surface boundary
|
|
52
52
|
conditions are used instead of Adiabatic ones. Note that this input
|
|
53
53
|
has no effect when the object_per_model is Story. (Default: False).
|
|
54
|
+
merge_method: An optional text string to describe how the Room2Ds should
|
|
55
|
+
be merged into individual Rooms during the translation. Specifying a
|
|
56
|
+
value here can be an effective way to reduce the number of Room
|
|
57
|
+
volumes in the resulting 3D Honeybee Model and, ultimately, yield
|
|
58
|
+
a faster simulation time in the destination engine with fewer results
|
|
59
|
+
to manage. Note that Room2Ds will only be merged if they form a
|
|
60
|
+
continuous volume. Otherwise, there will be multiple Rooms per
|
|
61
|
+
zone or story, each with an integer added at the end of their
|
|
62
|
+
identifiers. Choose from the following options:
|
|
63
|
+
|
|
64
|
+
* None - No merging of Room2Ds will occur
|
|
65
|
+
* Zones - Room2Ds in the same zone will be merged
|
|
66
|
+
* PlenumZones - Only plenums in the same zone will be merged
|
|
67
|
+
* Stories - Rooms in the same story will be merged
|
|
68
|
+
* PlenumStories - Only plenums in the same story will be merged
|
|
69
|
+
|
|
54
70
|
des_loop: An optional District Energy System (DES) ThermalLoop that's
|
|
55
71
|
associated with the dragonfly Model. (Default: None).
|
|
56
72
|
electrical_network: An optional OpenDSS ElectricalNetwork that's associated
|
|
@@ -202,7 +218,9 @@ def model_to_urbanopt(
|
|
|
202
218
|
hb_model_jsons = []
|
|
203
219
|
hb_models = model.to_honeybee(
|
|
204
220
|
'Building', shade_distance, use_multiplier, exclude_plenums,
|
|
205
|
-
solve_ceiling_adjacencies=solve_ceiling_adjacencies,
|
|
221
|
+
solve_ceiling_adjacencies=solve_ceiling_adjacencies, merge_method=merge_method,
|
|
222
|
+
tolerance=tolerance
|
|
223
|
+
)
|
|
206
224
|
for bldg_model in hb_models:
|
|
207
225
|
try:
|
|
208
226
|
bldg_model.remove_degenerate_geometry(0.01)
|
|
@@ -353,6 +371,9 @@ def model_to_des(
|
|
|
353
371
|
geojson_dict['project']['weather_filename'] = epw_f_name
|
|
354
372
|
|
|
355
373
|
# if the DES system is GSHP, specify any autocalculated ground temperatures
|
|
374
|
+
msg_template = 'Autocalculated EPW ground temperature in this climate is ' \
|
|
375
|
+
'{}C, which is too {} for a {} EFT of {}C. {} EFT is being reset to {}.'
|
|
376
|
+
dead_band = 12 # minimum annual delta T of the ground GHEDesigner needs
|
|
356
377
|
if 'district_system' in des_dict:
|
|
357
378
|
if 'fifth_generation' in des_dict['district_system']:
|
|
358
379
|
g5_par = des_dict['district_system']['fifth_generation']
|
|
@@ -360,8 +381,35 @@ def model_to_des(
|
|
|
360
381
|
soil_par = g5_par['soil']
|
|
361
382
|
if soil_par['undisturbed_temp'] == 'Autocalculate':
|
|
362
383
|
epw_obj = EPW(epw_file)
|
|
363
|
-
|
|
364
|
-
|
|
384
|
+
start_temp = epw_obj.dry_bulb_temperature.average
|
|
385
|
+
if 'ghe_parameters' in g5_par and \
|
|
386
|
+
'design' in g5_par['ghe_parameters']:
|
|
387
|
+
design = g5_par['ghe_parameters']['design']
|
|
388
|
+
if 'min_eft' in design and \
|
|
389
|
+
design['min_eft'] + dead_band > start_temp:
|
|
390
|
+
# ground is too cold
|
|
391
|
+
new_min_eft = round(start_temp - dead_band)
|
|
392
|
+
if new_min_eft < -6.67: # just too cold
|
|
393
|
+
new_min_eft = -6.67
|
|
394
|
+
msg = msg_template.format(
|
|
395
|
+
start_temp, 'cold', 'min', design['min_eft'],
|
|
396
|
+
'Min', new_min_eft)
|
|
397
|
+
print(msg)
|
|
398
|
+
design['min_eft'] = new_min_eft
|
|
399
|
+
# set fluid to ensure it does not freeze
|
|
400
|
+
fluid = g5_par['ghe_parameters']['fluid']
|
|
401
|
+
fluid['fluid_name'] = 'PropyleneGlycol'
|
|
402
|
+
fluid['concentration_percent'] = 25
|
|
403
|
+
elif 'max_eft' in design and \
|
|
404
|
+
design['max_eft'] - dead_band < start_temp:
|
|
405
|
+
# ground is too hot
|
|
406
|
+
new_max_eft = round(start_temp + dead_band)
|
|
407
|
+
msg = msg_template.format(
|
|
408
|
+
start_temp, 'hot', 'max', design['max_eft'],
|
|
409
|
+
'Max', new_max_eft)
|
|
410
|
+
print(msg)
|
|
411
|
+
design['max_eft'] = new_max_eft
|
|
412
|
+
soil_par['undisturbed_temp'] = start_temp
|
|
365
413
|
|
|
366
414
|
# write out the GeoJSON and system parameter files
|
|
367
415
|
feature_geojson = os.path.join(folder, '{}.geojson'.format(model.identifier))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dragonfly-energy
|
|
3
|
-
Version: 1.35.
|
|
3
|
+
Version: 1.35.67
|
|
4
4
|
Summary: Dragonfly extension for energy simulation.
|
|
5
5
|
Home-page: https://github.com/ladybug-tools/dragonfly-energy
|
|
6
6
|
Author: Ladybug Tools
|
|
@@ -18,8 +18,8 @@ Classifier: Programming Language :: Python :: Implementation :: IronPython
|
|
|
18
18
|
Classifier: Operating System :: OS Independent
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: dragonfly-core==1.
|
|
22
|
-
Requires-Dist: honeybee-energy==1.116.
|
|
21
|
+
Requires-Dist: dragonfly-core==1.74.21
|
|
22
|
+
Requires-Dist: honeybee-energy==1.116.102
|
|
23
23
|
Provides-Extra: standards
|
|
24
24
|
Requires-Dist: honeybee-energy-standards==2.2.6; extra == "standards"
|
|
25
25
|
Provides-Extra: openstudio
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/powerlines.py
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/lib/transformers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/substation.py
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/transformer.py
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/opendss/transformerprop.py
RENAMED
|
File without changes
|
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/__init__.py
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/building.py
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy/properties/context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{dragonfly_energy-1.35.20 → dragonfly_energy-1.35.67}/dragonfly_energy.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|