urbanopt-cli 0.1.0 → 0.2.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/pull_request_template.md +13 -0
- data/.gitignore +3 -0
- data/Gemfile +54 -0
- data/README.md +2 -2
- data/example_files/Gemfile +19 -4
- data/example_files/example_project.json +615 -579
- data/example_files/mappers/Baseline.rb +293 -158
- data/example_files/mappers/base_workflow.osw +19 -3
- data/example_files/osm_building/7.osm +14137 -0
- data/example_files/osm_building/8.osm +25793 -0
- data/example_files/osm_building/9.osm +15586 -0
- data/example_files/runner.conf +7 -0
- data/lib/uo_cli/version.rb +1 -1
- data/lib/uo_cli.rb +109 -41
- data/uo_cli.gemspec +8 -6
- metadata +37 -30
@@ -48,7 +48,7 @@ module URBANopt
|
|
48
48
|
# do initialization of class variables in thread safe way
|
49
49
|
@@instance_lock.synchronize do
|
50
50
|
if @@osw.nil?
|
51
|
-
|
51
|
+
|
52
52
|
# load the OSW for this class
|
53
53
|
osw_path = File.join(File.dirname(__FILE__), 'base_workflow.osw')
|
54
54
|
File.open(osw_path, 'r') do |file|
|
@@ -78,180 +78,315 @@ module URBANopt
|
|
78
78
|
feature_name = feature_names[0]
|
79
79
|
end
|
80
80
|
|
81
|
+
# deep clone of @@osw before we configure it
|
82
|
+
osw = Marshal.load(Marshal.dump(@@osw))
|
83
|
+
|
84
|
+
# now we have the feature, we can look up its properties and set arguments in the OSW
|
85
|
+
osw[:name] = feature_name
|
86
|
+
osw[:description] = feature_name
|
87
|
+
|
81
88
|
if feature_type == 'Building'
|
82
|
-
|
83
|
-
building_type_1 = feature.building_type
|
84
89
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
90
|
+
# set_run_period
|
91
|
+
begin
|
92
|
+
timesteps_per_hour = feature.timesteps_per_hour
|
93
|
+
if !timesteps_per_hour.empty?
|
94
|
+
OpenStudio::Extension.set_measure_argument(osw, 'set_run_period', 'timesteps_per_hour', timesteps_per_hour)
|
95
|
+
end
|
96
|
+
rescue
|
97
|
+
end
|
98
|
+
begin
|
99
|
+
begin_date = feature.begin_date
|
100
|
+
if !feature.begin_date.empty?
|
101
|
+
# check date-only YYYY-MM-DD
|
102
|
+
if feature.begin_date.length > 10
|
103
|
+
feature.begin_date = feature.begin_date[0, 10]
|
104
|
+
end
|
105
|
+
OpenStudio::Extension.set_measure_argument(osw, 'set_run_period', 'begin_date', begin_date)
|
106
|
+
end
|
107
|
+
rescue
|
108
|
+
end
|
109
|
+
begin
|
110
|
+
end_date = feature.end_date
|
111
|
+
if !feature.end_date.empty?
|
112
|
+
# check date-only YYYY-MM-DD
|
113
|
+
if feature.end_date.length > 10
|
114
|
+
feature.end_date = feature.end_date[0, 10]
|
115
|
+
end
|
116
|
+
OpenStudio::Extension.set_measure_argument(osw, 'set_run_period', 'end_date', end_date)
|
117
|
+
end
|
118
|
+
rescue
|
119
|
+
end
|
120
|
+
|
121
|
+
# ChangeBuildingLocation
|
122
|
+
# cec climate zone takes precedence
|
123
|
+
cec_found = false
|
124
|
+
begin
|
125
|
+
cec_climate_zone = feature.cec_climate_zone
|
126
|
+
if !cec_climate_zone.empty?
|
127
|
+
cec_climate_zone = "T24-CEC" + cec_climate_zone
|
128
|
+
OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', cec_climate_zone)
|
129
|
+
cec_found = true
|
130
|
+
end
|
131
|
+
rescue
|
132
|
+
end
|
133
|
+
if !cec_found
|
134
|
+
begin
|
135
|
+
climate_zone = feature.climate_zone
|
136
|
+
if !climate_zone.empty?
|
137
|
+
climate_zone = "ASHRAE 169-2013-" + climate_zone
|
138
|
+
OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'climate_zone', climate_zone)
|
139
|
+
end
|
140
|
+
rescue
|
141
|
+
end
|
142
|
+
end
|
120
143
|
|
121
|
-
|
122
|
-
|
123
|
-
|
144
|
+
begin
|
145
|
+
weather_filename = feature.weather_filename
|
146
|
+
if !feature.weather_filename.empty?
|
147
|
+
OpenStudio::Extension.set_measure_argument(osw, 'ChangeBuildingLocation', 'weather_file_name', weather_filename)
|
148
|
+
end
|
149
|
+
rescue
|
150
|
+
end
|
151
|
+
# convert to hash
|
152
|
+
building_hash = feature.to_hash
|
153
|
+
# check for detailed model filename
|
154
|
+
if building_hash.key?(:detailed_model_filename)
|
155
|
+
detailed_model_filename = building_hash[:detailed_model_filename]
|
156
|
+
osw[:file_paths] << File.join(File.dirname(__FILE__), '../osm_building/')
|
157
|
+
osw[:seed_file] = detailed_model_filename
|
124
158
|
|
125
|
-
|
126
|
-
|
127
|
-
mixed_use_types << mixed_type_2
|
128
|
-
mixed_use_types << mixed_type_3
|
129
|
-
mixed_use_types << mixed_type_4
|
159
|
+
# skip PMV measure with detailed models:
|
160
|
+
OpenStudio::Extension.set_measure_argument(osw, 'PredictedMeanVote', '__SKIP__', true)
|
130
161
|
|
131
|
-
|
162
|
+
# in case detailed model filename is not present
|
163
|
+
else
|
164
|
+
building_type_1 = building_hash[:building_type]
|
165
|
+
case building_type_1
|
166
|
+
when 'Multifamily (5 or more units)'
|
167
|
+
building_type_1 = 'MidriseApartment'
|
168
|
+
when 'Multifamily (2 to 4 units)'
|
169
|
+
building_type_1 = 'MidriseApartment'
|
170
|
+
when 'Single-Family'
|
171
|
+
building_type_1 = 'MidriseApartment'
|
172
|
+
when 'Office'
|
173
|
+
building_type_1 = 'MediumOffice'
|
174
|
+
when 'Outpatient health care'
|
175
|
+
building_type_1 = 'Outpatient'
|
176
|
+
when 'Inpatient health care'
|
177
|
+
building_type_1 = 'Hospital'
|
178
|
+
when 'Lodging'
|
179
|
+
building_type_1 = 'LargeHotel'
|
180
|
+
when 'Food service'
|
181
|
+
building_type_1 = 'FullServiceRestaurant'
|
182
|
+
when 'Strip shopping mall'
|
183
|
+
building_type_1 = 'RetailStripmall'
|
184
|
+
when 'Retail other than mall'
|
185
|
+
building_type_1 = 'RetailStandalone'
|
186
|
+
when 'Education'
|
187
|
+
building_type_1 = 'SecondarySchool'
|
188
|
+
when 'Nursing'
|
189
|
+
building_type_1 = 'MidriseApartment'
|
190
|
+
when 'Mixed use'
|
191
|
+
mixed_type_1 = building_hash[:mixed_type_1]
|
192
|
+
mixed_type_2 = building_hash[:mixed_type_2]
|
193
|
+
mixed_type_2_percentage = building_hash[:mixed_type_2_percentage]
|
194
|
+
mixed_type_2_fract_bldg_area = mixed_type_2_percentage*0.01
|
195
|
+
|
196
|
+
mixed_type_3 = building_hash[:mixed_type_3]
|
197
|
+
mixed_type_3_percentage = building_hash[:mixed_type_3_percentage]
|
198
|
+
mixed_type_3_fract_bldg_area = mixed_type_3_percentage*0.01
|
199
|
+
|
200
|
+
mixed_type_4 = building_hash[:mixed_type_4]
|
201
|
+
mixed_type_4_percentage = building_hash[:mixed_type_4_percentage]
|
202
|
+
mixed_type_4_fract_bldg_area = mixed_type_4_percentage*0.01
|
203
|
+
|
204
|
+
mixed_use_types = []
|
205
|
+
mixed_use_types << mixed_type_1
|
206
|
+
mixed_use_types << mixed_type_2
|
207
|
+
mixed_use_types << mixed_type_3
|
208
|
+
mixed_use_types << mixed_type_4
|
209
|
+
|
210
|
+
openstudio_mixed_use_types = []
|
211
|
+
|
212
|
+
mixed_use_types.each do |mixed_use_type|
|
213
|
+
|
214
|
+
case mixed_use_type
|
215
|
+
when 'Multifamily (5 or more units)'
|
216
|
+
mixed_use_type = 'MidriseApartment'
|
217
|
+
when 'Multifamily (2 to 4 units)'
|
218
|
+
mixed_use_type = 'MidriseApartment'
|
219
|
+
when 'Single-Family'
|
220
|
+
mixed_use_type = 'MidriseApartment'
|
221
|
+
when 'Office'
|
222
|
+
mixed_use_type = 'MediumOffice'
|
223
|
+
when 'Outpatient health care'
|
224
|
+
mixed_use_type = 'Outpatient'
|
225
|
+
when 'Inpatient health care'
|
226
|
+
mixed_use_type = 'Hospital'
|
227
|
+
when 'Lodging'
|
228
|
+
mixed_use_type = 'LargeHotel'
|
229
|
+
when 'Food service'
|
230
|
+
mixed_use_type = 'FullServiceRestaurant'
|
231
|
+
when 'Strip shopping mall'
|
232
|
+
mixed_use_type = 'RetailStripmall'
|
233
|
+
when 'Retail other than mall'
|
234
|
+
mixed_use_type = 'RetailStandalone'
|
235
|
+
when 'Education'
|
236
|
+
mixed_use_type = 'SecondarySchool'
|
237
|
+
when 'Nursing'
|
238
|
+
mixed_use_type = 'MidriseApartment'
|
239
|
+
end
|
240
|
+
|
241
|
+
openstudio_mixed_use_types << mixed_use_type
|
242
|
+
end
|
243
|
+
|
244
|
+
openstudio_mixed_type_1 = openstudio_mixed_use_types[0]
|
245
|
+
openstudio_mixed_type_2 = openstudio_mixed_use_types[1]
|
246
|
+
openstudio_mixed_type_3 = openstudio_mixed_use_types[2]
|
247
|
+
openstudio_mixed_type_4 = openstudio_mixed_use_types[3]
|
248
|
+
|
249
|
+
end
|
250
|
+
footprint_area = building_hash[:footprint_area]
|
251
|
+
floor_height = 10
|
252
|
+
number_of_stories = building_hash[:number_of_stories]
|
253
|
+
if building_hash.key?(:number_of_stories_above_ground)
|
254
|
+
number_of_stories_above_ground = building_hash[:number_of_stories_above_ground]
|
255
|
+
number_of_stories_below_ground = number_of_stories - number_of_stories_above_ground
|
256
|
+
else
|
257
|
+
number_of_stories_above_ground = number_of_stories
|
258
|
+
number_of_stories_below_ground = 0
|
259
|
+
end
|
260
|
+
if building_hash.key?(:system_type)
|
261
|
+
system_type = building_hash[:system_type]
|
262
|
+
else
|
263
|
+
system_type = "Inferred"
|
264
|
+
end
|
132
265
|
|
133
|
-
|
266
|
+
def time_mapping(time)
|
267
|
+
hour = time.split(':')[0]
|
268
|
+
minute = time.split(':')[1]
|
269
|
+
fraction = minute.to_f/60
|
270
|
+
fraction_roundup = fraction.round(2)
|
271
|
+
minute_fraction = fraction_roundup.to_s.split('.')[1]
|
272
|
+
new_time = [hour, minute_fraction].join('.')
|
273
|
+
return new_time
|
274
|
+
end
|
134
275
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
mixed_use_type = 'MidriseApartment'
|
142
|
-
when 'Office'
|
143
|
-
mixed_use_type = 'MediumOffice'
|
144
|
-
when 'Outpatient health care'
|
145
|
-
mixed_use_type = 'Outpatient'
|
146
|
-
when 'Inpatient health care'
|
147
|
-
mixed_use_type = 'Hospital'
|
148
|
-
when 'Lodging'
|
149
|
-
mixed_use_type = 'LargeHotel'
|
150
|
-
when 'Food service'
|
151
|
-
mixed_use_type = 'FullServiceRestaurant'
|
152
|
-
when 'Strip shopping mall'
|
153
|
-
mixed_use_type = 'RetailStripmall'
|
154
|
-
when 'Retail other than mall'
|
155
|
-
mixed_use_type = 'RetailStandalone'
|
156
|
-
when 'Education'
|
157
|
-
mixed_use_type = 'SecondarySchool'
|
158
|
-
when 'Nursing'
|
159
|
-
mixed_use_type = 'MidriseApartment'
|
276
|
+
#set weekday start time
|
277
|
+
begin
|
278
|
+
weekday_start_time = feature.weekday_start_time
|
279
|
+
if !feature.weekday_start_time.empty?
|
280
|
+
new_weekday_start_time = time_mapping(weekday_start_time)
|
281
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'wkdy_op_hrs_start_time', new_weekday_start_time, 'create_typical_building_from_model 1')
|
160
282
|
end
|
283
|
+
rescue
|
284
|
+
end
|
161
285
|
|
162
|
-
|
286
|
+
# set weekday duration
|
287
|
+
begin
|
288
|
+
weekday_duration = feature.weekday_duration
|
289
|
+
if !feature.weekday_duration.empty?
|
290
|
+
new_weekday_duration = time_mapping(weekday_duration)
|
291
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'wkdy_op_hrs_duration', new_weekday_duration, 'create_typical_building_from_model 1')
|
292
|
+
end
|
293
|
+
rescue
|
294
|
+
end
|
295
|
+
|
296
|
+
# set weekend start time
|
297
|
+
begin
|
298
|
+
weekend_start_time = feature.weekend_start_time
|
299
|
+
if !feature.weekend_start_time.empty?
|
300
|
+
new_weekend_start_time = time_mapping(weekend_start_time)
|
301
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'wknd_op_hrs_start_time', new_weekend_start_time, 'create_typical_building_from_model 1')
|
302
|
+
end
|
303
|
+
rescue
|
304
|
+
end
|
305
|
+
|
306
|
+
# set weekend duration
|
307
|
+
begin
|
308
|
+
weekend_duration = feature.weekend_duration
|
309
|
+
if !feature.weekend_duration.empty?
|
310
|
+
new_weekend_duration = time_mapping(weekend_duration)
|
311
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'wknd_op_hrs_duration', new_weekend_duration, 'create_typical_building_from_model 1')
|
312
|
+
end
|
313
|
+
rescue
|
163
314
|
end
|
164
315
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
316
|
+
# template
|
317
|
+
begin
|
318
|
+
template = feature.template
|
319
|
+
if !feature.template.empty?
|
320
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'template', template)
|
321
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'template', feature.template, 'create_typical_building_from_model 1')
|
322
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'template', feature.template, 'create_typical_building_from_model 2')
|
323
|
+
end
|
324
|
+
rescue
|
325
|
+
end
|
326
|
+
|
327
|
+
# TODO: surface_elevation has no current mapping
|
328
|
+
# TODO: tariff_filename has no current mapping
|
329
|
+
|
330
|
+
# create a bar building, will have spaces tagged with individual space types given the
|
331
|
+
# input building types
|
332
|
+
# set skip measure to false
|
333
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', '__SKIP__', false)
|
334
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'single_floor_area', footprint_area)
|
335
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'floor_height', floor_height)
|
336
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'num_stories_above_grade', number_of_stories_above_ground)
|
337
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'num_stories_below_grade', number_of_stories_below_ground)
|
169
338
|
|
170
|
-
|
339
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_a', building_type_1)
|
171
340
|
|
172
|
-
|
173
|
-
floor_height = 10
|
174
|
-
number_of_stories = feature.number_of_stories
|
175
|
-
|
176
|
-
# default values
|
177
|
-
number_of_stories_above_ground = number_of_stories
|
178
|
-
number_of_stories_below_ground = 0
|
179
|
-
begin
|
180
|
-
number_of_stories_above_ground = feature.number_of_stories_above_ground
|
181
|
-
number_of_stories_below_ground = number_of_stories - number_of_stories_above_ground
|
182
|
-
rescue
|
183
|
-
end
|
184
|
-
#template = feature.template
|
185
|
-
end
|
341
|
+
if building_type_1 == 'Mixed use'
|
186
342
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
343
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_a', openstudio_mixed_type_1)
|
344
|
+
|
345
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_b', openstudio_mixed_type_2)
|
346
|
+
|
347
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_b_fract_bldg_area', mixed_type_2_fract_bldg_area)
|
348
|
+
|
349
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_c', openstudio_mixed_type_3)
|
350
|
+
|
351
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_c_fract_bldg_area', mixed_type_3_fract_bldg_area)
|
352
|
+
|
353
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_d', openstudio_mixed_type_4)
|
354
|
+
|
355
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_d_fract_bldg_area', mixed_type_4_fract_bldg_area)
|
356
|
+
|
357
|
+
end
|
193
358
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
# now we have the feature, we can look up its properties and set arguments in the OSW
|
198
|
-
osw[:name] = feature_name
|
199
|
-
osw[:description] = feature_name
|
200
|
-
|
201
|
-
# create a bar building, will have spaces tagged with individual space types given the input building types
|
202
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'single_floor_area', footprint_area)
|
203
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'floor_height', floor_height)
|
204
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'num_stories_above_grade', number_of_stories_above_ground)
|
205
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'num_stories_below_grade', number_of_stories_below_ground)
|
359
|
+
# calling create typical building the first time will create space types
|
360
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', '__SKIP__', false)
|
361
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'add_hvac', false, 'create_typical_building_from_model 1')
|
206
362
|
|
207
|
-
|
208
|
-
|
209
|
-
|
363
|
+
# create a blended space type for each story
|
364
|
+
OpenStudio::Extension.set_measure_argument(osw,
|
365
|
+
'blended_space_type_from_model', '__SKIP__', false)
|
366
|
+
OpenStudio::Extension.set_measure_argument(osw,
|
367
|
+
'blended_space_type_from_model', 'blend_method', 'Building Story')
|
368
|
+
|
369
|
+
# create geometry for the desired feature, this will reuse blended space types in the model for each story and remove the bar geometry
|
370
|
+
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', '__SKIP__', false)
|
371
|
+
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', 'geojson_file', scenario.feature_file.path)
|
372
|
+
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', 'feature_id', feature_id)
|
373
|
+
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', 'surrounding_buildings', 'ShadingOnly')
|
374
|
+
|
375
|
+
# call create typical building a second time, do not touch space types, only add hvac
|
376
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', '__SKIP__', false)
|
377
|
+
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'system_type', system_type, 'create_typical_building_from_model 2')
|
378
|
+
end
|
210
379
|
|
211
|
-
|
212
|
-
|
213
|
-
OpenStudio::Extension.set_measure_argument(osw, '
|
214
|
-
|
215
|
-
OpenStudio::Extension.set_measure_argument(osw, '
|
216
|
-
|
217
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_c', openstudio_mixed_type_3)
|
218
|
-
|
219
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_c_fract_bldg_area', mixed_type_3_fract_bldg_area)
|
220
|
-
|
221
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_d', openstudio_mixed_type_4)
|
222
|
-
|
223
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_bar_from_building_type_ratios', 'bldg_type_d_fract_bldg_area', mixed_type_4_fract_bldg_area)
|
224
|
-
|
225
|
-
end
|
226
|
-
|
227
|
-
# calling create typical building the first time will create space types
|
228
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'add_hvac', false, 'create_typical_building_from_model 1')
|
229
|
-
|
230
|
-
# create a blended space type for each story
|
231
|
-
OpenStudio::Extension.set_measure_argument(osw,
|
232
|
-
'blended_space_type_from_model', 'blend_method', 'Building Story')
|
233
|
-
|
234
|
-
# create geometry for the desired feature, this will reuse blended space types in the model for each story and remove the bar geometry
|
235
|
-
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', 'geojson_file', scenario.feature_file.path)
|
236
|
-
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', 'feature_id', feature_id)
|
237
|
-
OpenStudio::Extension.set_measure_argument(osw, 'urban_geometry_creation', 'surrounding_buildings', 'ShadingOnly')
|
238
|
-
|
239
|
-
if building_type_1 == 'MidriseApartment'
|
240
|
-
OpenStudio::Extension.set_measure_argument(osw, 'IncreaseInsulationRValueForExteriorWalls', '__SKIP__', true)
|
241
|
-
OpenStudio::Extension.set_measure_argument(osw, 'IncreaseInsulationRValueForExteriorWalls', 'r_value', 10)
|
242
|
-
end
|
243
|
-
|
244
|
-
# call create typical building a second time, do not touch space types, only add hvac
|
245
|
-
OpenStudio::Extension.set_measure_argument(osw, 'create_typical_building_from_model', 'system_type', system_type, 'create_typical_building_from_model 2')
|
246
|
-
|
247
|
-
# call the default feature reporting measure
|
248
|
-
OpenStudio::Extension.set_measure_argument(osw, 'default_feature_reports', 'feature_id', feature_id)
|
249
|
-
OpenStudio::Extension.set_measure_argument(osw, 'default_feature_reports', 'feature_name', feature_name)
|
250
|
-
OpenStudio::Extension.set_measure_argument(osw, 'default_feature_reports', 'feature_type', feature_type)
|
380
|
+
|
381
|
+
# call the default feature reporting measure
|
382
|
+
OpenStudio::Extension.set_measure_argument(osw, 'default_feature_reports', 'feature_id', feature_id)
|
383
|
+
OpenStudio::Extension.set_measure_argument(osw, 'default_feature_reports', 'feature_name', feature_name)
|
384
|
+
OpenStudio::Extension.set_measure_argument(osw, 'default_feature_reports', 'feature_type', feature_type)
|
385
|
+
end # if Building
|
251
386
|
|
252
387
|
return osw
|
253
|
-
end
|
388
|
+
end # def
|
254
389
|
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
390
|
+
end #BaselineMapper
|
391
|
+
end #Scenario
|
392
|
+
end #URBANopt
|
@@ -9,7 +9,7 @@
|
|
9
9
|
{
|
10
10
|
"measure_dir_name": "set_run_period",
|
11
11
|
"arguments": {
|
12
|
-
"timesteps_per_hour":
|
12
|
+
"timesteps_per_hour": 4,
|
13
13
|
"begin_date": "2019-06-01",
|
14
14
|
"end_date": "2019-08-01"
|
15
15
|
}
|
@@ -17,11 +17,12 @@
|
|
17
17
|
"measure_dir_name": "ChangeBuildingLocation",
|
18
18
|
"arguments": {
|
19
19
|
"weather_file_name": "USA_NY_Buffalo-Greater.Buffalo.Intl.AP.725280_TMY3.epw",
|
20
|
-
"climate_zone": "6A"
|
20
|
+
"climate_zone": "ASHRAE 169-2013-6A"
|
21
21
|
}
|
22
22
|
},{
|
23
23
|
"measure_dir_name": "create_bar_from_building_type_ratios",
|
24
24
|
"arguments": {
|
25
|
+
"__SKIP__": true,
|
25
26
|
"bldg_type_a": null,
|
26
27
|
"bldg_type_a_num_units": 0,
|
27
28
|
"bldg_type_b": "SmallOffice",
|
@@ -49,16 +50,20 @@
|
|
49
50
|
"name": "create_typical_building_from_model 1",
|
50
51
|
"measure_dir_name": "create_typical_building_from_model",
|
51
52
|
"arguments": {
|
52
|
-
"
|
53
|
+
"__SKIP__": true,
|
54
|
+
"add_hvac": false,
|
55
|
+
"add_refrigeration": false
|
53
56
|
}
|
54
57
|
},{
|
55
58
|
"measure_dir_name": "blended_space_type_from_model",
|
56
59
|
"arguments": {
|
60
|
+
"__SKIP__": true,
|
57
61
|
"blend_method": "Building Story"
|
58
62
|
}
|
59
63
|
},{
|
60
64
|
"measure_dir_name": "urban_geometry_creation",
|
61
65
|
"arguments": {
|
66
|
+
"__SKIP__": true,
|
62
67
|
"geojson_file": "exportGeo.json",
|
63
68
|
"feature_id": "5",
|
64
69
|
"surrounding_buildings": "None"
|
@@ -67,6 +72,7 @@
|
|
67
72
|
"name": "create_typical_building_from_model 2",
|
68
73
|
"measure_dir_name": "create_typical_building_from_model",
|
69
74
|
"arguments": {
|
75
|
+
"__SKIP__": true,
|
70
76
|
"template": "90.1-2004",
|
71
77
|
"add_constructions": false,
|
72
78
|
"add_space_type_loads": false,
|
@@ -74,11 +80,21 @@
|
|
74
80
|
"add_exterior_lights": false,
|
75
81
|
"add_exhaust": false,
|
76
82
|
"add_swh": false,
|
83
|
+
"add_refrigeration": false,
|
77
84
|
"remove_objects": false,
|
78
85
|
"system_type": "Inferred",
|
79
86
|
"add_hvac": true,
|
80
87
|
"use_upstream_args": false
|
81
88
|
}
|
89
|
+
},{
|
90
|
+
"measure_dir_name":"PredictedMeanVote",
|
91
|
+
"arguments":{
|
92
|
+
"__SKIP__":false,
|
93
|
+
"comfortWarnings":true,
|
94
|
+
"workEfficiencySchedule":"Work Efficiency Schedule",
|
95
|
+
"clothingSchedule":"Clothing Schedule",
|
96
|
+
"airVelocitySchedule":"Air Velocity Schedule"
|
97
|
+
}
|
82
98
|
},{
|
83
99
|
"measure_dir_name": "IncreaseInsulationRValueForExteriorWalls",
|
84
100
|
"arguments": {
|