urbanopt-reopt 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +27 -0
- data/.rakeTasks +7 -0
- data/.rdoc_options +37 -0
- data/.rspec +3 -0
- data/.rubocop.yml +9 -0
- data/.travis.yml +22 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +67 -0
- data/Jenkinsfile +10 -0
- data/LICENSE.md +27 -0
- data/RDOC_MAIN.md +176 -0
- data/README.md +177 -0
- data/Rakefile +30 -0
- data/deploy_docs.sh +5 -0
- data/developer_nrel_key.rb +31 -0
- data/doc_templates/LICENSE.md +27 -0
- data/doc_templates/README.md.erb +42 -0
- data/doc_templates/copyright_erb.txt +31 -0
- data/doc_templates/copyright_js.txt +4 -0
- data/doc_templates/copyright_ruby.txt +29 -0
- data/docs/.gitignore +3 -0
- data/docs/.vuepress/components/InnerJsonSchema.vue +78 -0
- data/docs/.vuepress/components/JsonSchema.vue +12 -0
- data/docs/.vuepress/components/ReoptInputSchema.vue +12 -0
- data/docs/.vuepress/components/ReoptOutputSchema.vue +12 -0
- data/docs/.vuepress/components/StaticLink.vue +8 -0
- data/docs/.vuepress/config.js +16 -0
- data/docs/.vuepress/highlight.js +8 -0
- data/docs/.vuepress/public/custom_rdoc_styles.css +58 -0
- data/docs/.vuepress/utils.js +17 -0
- data/docs/README.md +196 -0
- data/docs/package-lock.json +254 -0
- data/docs/package.json +22 -0
- data/docs/schemas/reopt-input-schema.md +57 -0
- data/docs/schemas/reopt-output-schema.md +66 -0
- data/index.html +1 -0
- data/index.md +176 -0
- data/lib/files/.gitkeep +0 -0
- data/lib/urbanopt/reopt/extension.rb +44 -0
- data/lib/urbanopt/reopt/feature_report_adapter.rb +364 -0
- data/lib/urbanopt/reopt/reopt_lite_api.rb +230 -0
- data/lib/urbanopt/reopt/reopt_logger.rb +42 -0
- data/lib/urbanopt/reopt/reopt_post_processor.rb +245 -0
- data/lib/urbanopt/reopt/reopt_schema/reopt_input_schema.json +1111 -0
- data/lib/urbanopt/reopt/reopt_schema/reopt_output_schema.json +538 -0
- data/lib/urbanopt/reopt/scenario/reopt_scenario_csv.rb +115 -0
- data/lib/urbanopt/reopt/scenario_report_adapter.rb +404 -0
- data/lib/urbanopt/reopt/version.rb +35 -0
- data/lib/urbanopt/reopt.rb +36 -0
- data/lib/urbanopt/reopt_scenario.rb +31 -0
- data/lib/urbanopt-reopt.rb +31 -0
- data/urbanopt-reopt.gemspec +33 -0
- metadata +194 -0
@@ -0,0 +1,538 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"description": "Data Dictionary for REopt Lite Outputs",
|
4
|
+
"type": "object",
|
5
|
+
"properties": {
|
6
|
+
"$ref": "#/definitions/Response"
|
7
|
+
},
|
8
|
+
"required": [
|
9
|
+
"Scenario"
|
10
|
+
],
|
11
|
+
"definitions": {
|
12
|
+
"Response": {
|
13
|
+
"inputs": {
|
14
|
+
"type": "object",
|
15
|
+
"properties": {
|
16
|
+
"Scenario": {
|
17
|
+
"type": "object",
|
18
|
+
"description": "See REopt Input Schema"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
},
|
22
|
+
"outputs": {
|
23
|
+
"type": "object",
|
24
|
+
"properties": {
|
25
|
+
"Scenario": {
|
26
|
+
"type": "object",
|
27
|
+
"properties": {
|
28
|
+
"run_uuid": {
|
29
|
+
"type": "str",
|
30
|
+
"description": "Unique id",
|
31
|
+
"units": "none"
|
32
|
+
},
|
33
|
+
"api_version": {
|
34
|
+
"type": "str"
|
35
|
+
},
|
36
|
+
"status": {
|
37
|
+
"type": "str",
|
38
|
+
"description": "Problem Status",
|
39
|
+
"units": "none"
|
40
|
+
},
|
41
|
+
"Profile": {
|
42
|
+
"type": "object",
|
43
|
+
"properties": {
|
44
|
+
"pre_setup_scenario_seconds": {
|
45
|
+
"type": "float",
|
46
|
+
"description": "Time spent before setting up scenario",
|
47
|
+
"units": "seconds"
|
48
|
+
},
|
49
|
+
"setup_scenario_seconds": {
|
50
|
+
"type": "float",
|
51
|
+
"description": "Time spent setting up scenario",
|
52
|
+
"units": "seconds"
|
53
|
+
},
|
54
|
+
"reopt_seconds": {
|
55
|
+
"type": "float",
|
56
|
+
"description": "Time spent solving scenario",
|
57
|
+
"units": "seconds"
|
58
|
+
},
|
59
|
+
"reopt_bau_seconds": {
|
60
|
+
"type": "float",
|
61
|
+
"description": "Time spent solving base-case scenario",
|
62
|
+
"units": "seconds"
|
63
|
+
},
|
64
|
+
"parse_run_outputs_seconds": {
|
65
|
+
"type": "float",
|
66
|
+
"description": "Time spent parsing outputs",
|
67
|
+
"units": "seconds"
|
68
|
+
}
|
69
|
+
}
|
70
|
+
},
|
71
|
+
"Site": {
|
72
|
+
"type": "object",
|
73
|
+
"properties": {
|
74
|
+
"LoadProfile": {
|
75
|
+
"type": "object",
|
76
|
+
"properties": {
|
77
|
+
"year_one_electric_load_series_kw": {
|
78
|
+
"type": "list_of_float",
|
79
|
+
"description": "Year one hourly time series of electric load",
|
80
|
+
"units": "kW"
|
81
|
+
},
|
82
|
+
"critical_load_series_kw": {
|
83
|
+
"type": "list_of_float",
|
84
|
+
"description": "Hourly critical load for outage simulator. Values are either uploaded by user, or determined from typical load (either uploaded or simulated) and critical_load_pct.",
|
85
|
+
"units": "kW"
|
86
|
+
},
|
87
|
+
"annual_calculated_kwh": {
|
88
|
+
"type": "float",
|
89
|
+
"description": "Annual energy consumption calculated by summing up 8760 load profile",
|
90
|
+
"units": "kWh"
|
91
|
+
},
|
92
|
+
"resilience_check_flag": {
|
93
|
+
"type": "boolean",
|
94
|
+
"description": "BAU resilience check status for existing system"
|
95
|
+
},
|
96
|
+
"sustain_hours": {
|
97
|
+
"type": "int",
|
98
|
+
"description": "Number of hours the existing system can sustain with resilience check",
|
99
|
+
"units": "hours"
|
100
|
+
}
|
101
|
+
}
|
102
|
+
},
|
103
|
+
"Financial": {
|
104
|
+
"type": "object",
|
105
|
+
"properties": {
|
106
|
+
"lcc_us_dollars": {
|
107
|
+
"type": "float",
|
108
|
+
"description": "Optimal lifecycle cost",
|
109
|
+
"units": "dollars"
|
110
|
+
},
|
111
|
+
"lcc_bau_us_dollars": {
|
112
|
+
"type": "float",
|
113
|
+
"description": "Business as usual lifecycle cost",
|
114
|
+
"units": "dollars"
|
115
|
+
},
|
116
|
+
"npv_us_dollars": {
|
117
|
+
"type": "float",
|
118
|
+
"description": "Net present value of savings realized by the project",
|
119
|
+
"units": "dollars"
|
120
|
+
},
|
121
|
+
"net_capital_costs_plus_om_us_dollars": {
|
122
|
+
"type": "float",
|
123
|
+
"description": "Capital cost for all technologies plus present value of operations and maintenance over anlaysis period",
|
124
|
+
"units": "$"
|
125
|
+
},
|
126
|
+
"avoided_outage_costs_us_dollars": {
|
127
|
+
"type": "float",
|
128
|
+
"description": "Avoided outage costs are determined using the Value of Lost Load [$/kWh], multiplied by the average critical load in kW (determined using critical_load_pct), the average hours that the critical load is sustained (determined by simulating outages starting at every hour of the year), and a present worth factor that accounts for cost growth with escalation_pct over the analysis_years and discounts the avoided costs to present value using offtaker_discount_pct. Note that the use of a present worth factor presumes that the outage period and the microgrid's ability to meet the critical load is the same each year in the analysis_years.If outage_is_major_event is set to true, then the present worth factor is set to 1, which assumes that only one outage occurs in the analysis_years.",
|
129
|
+
"units": "$"
|
130
|
+
},
|
131
|
+
"net_capital_costs": {
|
132
|
+
"type": "float",
|
133
|
+
"description": "Capital cost for all technologies.",
|
134
|
+
"units": "$"
|
135
|
+
},
|
136
|
+
"microgrid_upgrade_cost_us_dollars": {
|
137
|
+
"type": "float",
|
138
|
+
"description": "Cost in US dollars to make a distributed energy system islandable from the grid.Determined by multiplying the total capital costs of resultant energy systems from REopt(such as PV and Storage system) with the input valuefor microgrid_upgrade_cost_pct(which defaults to 0.30)."
|
139
|
+
}
|
140
|
+
}
|
141
|
+
},
|
142
|
+
"PV": {
|
143
|
+
"type": "object",
|
144
|
+
"properties": {
|
145
|
+
"size_kw": {
|
146
|
+
"type": "float",
|
147
|
+
"description": "Optimal PV system size",
|
148
|
+
"units": "kW"
|
149
|
+
},
|
150
|
+
"average_yearly_energy_produced_kwh": {
|
151
|
+
"type": "float",
|
152
|
+
"description": "Average annual energy produced by the PV system over one year",
|
153
|
+
"units": "kWh"
|
154
|
+
},
|
155
|
+
"average_yearly_energy_exported_kwh": {
|
156
|
+
"type": "float",
|
157
|
+
"description": "Average annual energy exported by the PV system",
|
158
|
+
"units": "kWh"
|
159
|
+
},
|
160
|
+
"year_one_energy_produced_kwh": {
|
161
|
+
"type": "float",
|
162
|
+
"description": "Year one energy produced by the PV system",
|
163
|
+
"units": "kWh"
|
164
|
+
},
|
165
|
+
"year_one_power_production_series_kw": {
|
166
|
+
"type": "list_of_float",
|
167
|
+
"description": "Year one PV power production time series",
|
168
|
+
"units": "kW"
|
169
|
+
},
|
170
|
+
"year_one_to_battery_series_kw": {
|
171
|
+
"type": "list_of_float",
|
172
|
+
"description": "Year one hourly time series of PV charging",
|
173
|
+
"units": "kW"
|
174
|
+
},
|
175
|
+
"year_one_to_load_series_kw": {
|
176
|
+
"type": "list_of_float",
|
177
|
+
"description": "Year one hourly time series of PV serving load",
|
178
|
+
"units": "kW"
|
179
|
+
},
|
180
|
+
"year_one_to_grid_series_kw": {
|
181
|
+
"type": "list_of_float",
|
182
|
+
"description": "Year one hourly time series of PV exporting to grid",
|
183
|
+
"units": "kW"
|
184
|
+
},
|
185
|
+
"existing_pv_om_cost_us_dollars": {
|
186
|
+
"type": "float",
|
187
|
+
"description": "Lifetime O & M costfor existing PV system.",
|
188
|
+
"units": "$"
|
189
|
+
},
|
190
|
+
"station_latitude": {
|
191
|
+
"type": "float",
|
192
|
+
"description": "The latitude of the station usedfor weather resource data",
|
193
|
+
"units": "degrees"
|
194
|
+
},
|
195
|
+
"station_longitude": {
|
196
|
+
"type": "float",
|
197
|
+
"description": "The longitude of the station usedfor weather resource data",
|
198
|
+
"units": "degrees"
|
199
|
+
},
|
200
|
+
"station_distance_km": {
|
201
|
+
"type": "float",
|
202
|
+
"description": "The distance from the weather resource station from the input site",
|
203
|
+
"units": "km"
|
204
|
+
}
|
205
|
+
}
|
206
|
+
},
|
207
|
+
"Wind": {
|
208
|
+
"type": "object",
|
209
|
+
"properties": {
|
210
|
+
"size_kw": {
|
211
|
+
"type": "float",
|
212
|
+
"description": "Recommended wind system size",
|
213
|
+
"units": "kW"
|
214
|
+
},
|
215
|
+
"average_yearly_energy_produced_kwh": {
|
216
|
+
"type": "float",
|
217
|
+
"description": "Average energy produced by the wind system over one year",
|
218
|
+
"units": "kWh"
|
219
|
+
},
|
220
|
+
"average_yearly_energy_exported_kwh": {
|
221
|
+
"type": "float",
|
222
|
+
"description": "Average annual energy exported by the wind system",
|
223
|
+
"units": "kWh"
|
224
|
+
},
|
225
|
+
"year_one_energy_produced_kwh": {
|
226
|
+
"type": "float",
|
227
|
+
"description": "Wind energy produced in year one",
|
228
|
+
"units": "kWh"
|
229
|
+
},
|
230
|
+
"year_one_power_production_series_kw": {
|
231
|
+
"type": "list_of_float",
|
232
|
+
"description": "Hourly wind resource",
|
233
|
+
"units": "kW"
|
234
|
+
},
|
235
|
+
"year_one_to_battery_series_kw": {
|
236
|
+
"type": "list_of_float",
|
237
|
+
"description": "Year one wind to battery time series",
|
238
|
+
"units": "kW"
|
239
|
+
},
|
240
|
+
"year_one_to_load_series_kw": {
|
241
|
+
"type": "list_of_float",
|
242
|
+
"description": "Year one wind to load time series",
|
243
|
+
"units": "kW"
|
244
|
+
},
|
245
|
+
"year_one_to_grid_series_kw": {
|
246
|
+
"type": "list_of_float",
|
247
|
+
"description": "Year one wind to grid time series",
|
248
|
+
"units": "kW"
|
249
|
+
}
|
250
|
+
}
|
251
|
+
},
|
252
|
+
"Storage": {
|
253
|
+
"type": "object",
|
254
|
+
"properties": {
|
255
|
+
"size_kw": {
|
256
|
+
"type": "float",
|
257
|
+
"description": "Optimal battery power capacity",
|
258
|
+
"units": "kW"
|
259
|
+
},
|
260
|
+
"size_kwh": {
|
261
|
+
"type": "float",
|
262
|
+
"description": "Optimal battery energy capacity",
|
263
|
+
"units": "kWh"
|
264
|
+
},
|
265
|
+
"year_one_to_load_series_kw": {
|
266
|
+
"type": "list_of_float",
|
267
|
+
"description": "Year one hourly time series of battery serving load",
|
268
|
+
"units": "kW"
|
269
|
+
},
|
270
|
+
"year_one_to_grid_series_kw": {
|
271
|
+
"type": "list_of_float",
|
272
|
+
"description": "Year one hourly time series of battery exporting to grid",
|
273
|
+
"units": "kW"
|
274
|
+
},
|
275
|
+
"year_one_soc_series_pct": {
|
276
|
+
"type": "list_of_float",
|
277
|
+
"description": "Year one hourly time series of battery state of charge",
|
278
|
+
"units": " %"
|
279
|
+
}
|
280
|
+
}
|
281
|
+
},
|
282
|
+
"ElectricTariff": {
|
283
|
+
"type": "object",
|
284
|
+
"properties": {
|
285
|
+
"year_one_energy_cost_us_dollars": {
|
286
|
+
"type": "float",
|
287
|
+
"description": "Optimal year one utility energy cost",
|
288
|
+
"units": "$"
|
289
|
+
},
|
290
|
+
"year_one_demand_cost_us_dollars": {
|
291
|
+
"type": "float",
|
292
|
+
"description": "Optimal year one utility demand cost",
|
293
|
+
"units": "$"
|
294
|
+
},
|
295
|
+
"year_one_fixed_cost_us_dollars": {
|
296
|
+
"type": "float",
|
297
|
+
"description": "Optimal year one utility fixed cost",
|
298
|
+
"units": "$"
|
299
|
+
},
|
300
|
+
"year_one_min_charge_adder_us_dollars": {
|
301
|
+
"type": "float",
|
302
|
+
"description": "Optimal year one utility minimum charge adder",
|
303
|
+
"units": "$"
|
304
|
+
},
|
305
|
+
"year_one_energy_cost_bau_us_dollars": {
|
306
|
+
"type": "float",
|
307
|
+
"description": "Business as usual year one utility energy cost",
|
308
|
+
"units": "$"
|
309
|
+
},
|
310
|
+
"year_one_demand_cost_bau_us_dollars": {
|
311
|
+
"type": "float",
|
312
|
+
"description": "Business as usual year one utility demand cost",
|
313
|
+
"units": "$"
|
314
|
+
},
|
315
|
+
"year_one_fixed_cost_bau_us_dollars": {
|
316
|
+
"type": "float",
|
317
|
+
"description": "Business as usual year one utility fixed cost",
|
318
|
+
"units": "$"
|
319
|
+
},
|
320
|
+
"year_one_min_charge_adder_bau_us_dollars": {
|
321
|
+
"type": "float",
|
322
|
+
"description": "Business as usual year one utility minimum charge adder",
|
323
|
+
"units": "$"
|
324
|
+
},
|
325
|
+
"total_energy_cost_us_dollars": {
|
326
|
+
"type": "float",
|
327
|
+
"description": "Total utility energy cost over the lifecycle,after - tax",
|
328
|
+
"units": "$"
|
329
|
+
},
|
330
|
+
"total_demand_cost_us_dollars": {
|
331
|
+
"type": "float",
|
332
|
+
"description": "Optimal total lifecycle utility demand cost over the analysis period,after - tax",
|
333
|
+
"units": "$"
|
334
|
+
},
|
335
|
+
"total_fixed_cost_us_dollars": {
|
336
|
+
"type": "float",
|
337
|
+
"description": "Total utility fixed cost over the lifecycle,after - tax",
|
338
|
+
"units": "$"
|
339
|
+
},
|
340
|
+
"total_min_charge_adder_us_dollars": {
|
341
|
+
"type": "float",
|
342
|
+
"description": "Total utility minimum charge adder",
|
343
|
+
"units": "$"
|
344
|
+
},
|
345
|
+
"total_energy_cost_bau_us_dollars": {
|
346
|
+
"type": "float",
|
347
|
+
"description": "Business as usual total utility energy cost over the lifecycle,after - tax",
|
348
|
+
"units": "$"
|
349
|
+
},
|
350
|
+
"total_demand_cost_bau_us_dollars": {
|
351
|
+
"type": "float",
|
352
|
+
"description": "Business as usual total lifecycle utility demand cost over the analysis period,after - tax",
|
353
|
+
"units": "$"
|
354
|
+
},
|
355
|
+
"total_fixed_cost_bau_us_dollars": {
|
356
|
+
"type": "float",
|
357
|
+
"description": "Business as usual total utility fixed cost over the lifecycle,after - tax",
|
358
|
+
"units": "$"
|
359
|
+
},
|
360
|
+
"total_export_benefit_us_dollars": {
|
361
|
+
"type": "float",
|
362
|
+
"description": "Totalexport benefit cost over the lifecycle,after - tax",
|
363
|
+
"units": "$"
|
364
|
+
},
|
365
|
+
"total_min_charge_adder_bau_us_dollars": {
|
366
|
+
"type": "float",
|
367
|
+
"description": "Business as usual total utility minimum charge adder",
|
368
|
+
"units": "$"
|
369
|
+
},
|
370
|
+
"year_one_bill_us_dollars": {
|
371
|
+
"type": "float",
|
372
|
+
"description": "Optimal year one total utility bill",
|
373
|
+
"units": "$"
|
374
|
+
},
|
375
|
+
"year_one_bill_bau_us_dollars": {
|
376
|
+
"type": "float",
|
377
|
+
"description": "Business as usual year one total utility bill",
|
378
|
+
"units": "$"
|
379
|
+
},
|
380
|
+
"year_one_export_benefit_us_dollars": {
|
381
|
+
"type": "float",
|
382
|
+
"description": "Optimal year one value of exported energy",
|
383
|
+
"units": "$"
|
384
|
+
},
|
385
|
+
"year_one_energy_cost_series_us_dollars_per_kwh": {
|
386
|
+
"type": "list_of_float",
|
387
|
+
"description": "Year one hourly energy costs",
|
388
|
+
"units": "$ / kWh"
|
389
|
+
},
|
390
|
+
"year_one_demand_cost_series_us_dollars_per_kw": {
|
391
|
+
"type": "list_of_float",
|
392
|
+
"description": "Year one hourly demand costs",
|
393
|
+
"units": "$ / kW"
|
394
|
+
},
|
395
|
+
"year_one_to_load_series_kw": {
|
396
|
+
"type": "list_of_float",
|
397
|
+
"description": "Year one grid to load time series",
|
398
|
+
"units": "kW"
|
399
|
+
},
|
400
|
+
"year_one_to_battery_series_kw": {
|
401
|
+
"type": "list_of_float",
|
402
|
+
"description": "Year one hourly time series of power from grid to battery",
|
403
|
+
"units": "kW"
|
404
|
+
},
|
405
|
+
"year_one_energy_supplied_kwh": {
|
406
|
+
"type": "float",
|
407
|
+
"description": "Year one hourly time series of power from grid to load",
|
408
|
+
"units": "kWh"
|
409
|
+
},
|
410
|
+
"year_one_energy_supplied_kwh_bau": {
|
411
|
+
"type": "float",
|
412
|
+
"description": "Year one hourly time series of power from grid to load in bau scenario",
|
413
|
+
"units": "kWh"
|
414
|
+
}
|
415
|
+
}
|
416
|
+
},
|
417
|
+
"Generator": {
|
418
|
+
"type": "object",
|
419
|
+
"properties": {
|
420
|
+
"size_kw": {
|
421
|
+
"type": "float",
|
422
|
+
"description": "Optimal diesel generator system size",
|
423
|
+
"units": "kW"
|
424
|
+
},
|
425
|
+
"fuel_used_gal": {
|
426
|
+
"type": "float",
|
427
|
+
"description": "Generator fuel used to meet critical load during grid outage.",
|
428
|
+
"units": "US gallons"
|
429
|
+
},
|
430
|
+
"fuel_used_gal_bau": {
|
431
|
+
"type": "float",
|
432
|
+
"description": "Generator fuel used to meet critical load during grid outage in baucase.",
|
433
|
+
"units": "US gallons"
|
434
|
+
},
|
435
|
+
"average_yearly_energy_produced_kwh": {
|
436
|
+
"type": "float",
|
437
|
+
"description": "Average annual energy produced by the diesel generator over one year",
|
438
|
+
"units": "kWh"
|
439
|
+
},
|
440
|
+
"average_yearly_energy_exported_kwh": {
|
441
|
+
"type": "float",
|
442
|
+
"description": "Average annual energy exported by the diesel generator",
|
443
|
+
"units": "kWh"
|
444
|
+
},
|
445
|
+
"year_one_energy_produced_kwh": {
|
446
|
+
"type": "float",
|
447
|
+
"description": "Year one energy produced by the diesel generator",
|
448
|
+
"units": "kWh"
|
449
|
+
},
|
450
|
+
"year_one_power_production_series_kw": {
|
451
|
+
"type": "list_of_float",
|
452
|
+
"description": "Year one diesel generator power production time series",
|
453
|
+
"units": "kW"
|
454
|
+
},
|
455
|
+
"year_one_to_battery_series_kw": {
|
456
|
+
"type": "list_of_float",
|
457
|
+
"description": "Year one hourly time series of diesel generator charging",
|
458
|
+
"units": "kW"
|
459
|
+
},
|
460
|
+
"year_one_to_load_series_kw": {
|
461
|
+
"type": "list_of_float",
|
462
|
+
"description": "Year one generator to load time series.",
|
463
|
+
"units": "kW"
|
464
|
+
},
|
465
|
+
"year_one_to_grid_series_kw": {
|
466
|
+
"type": "list_of_float",
|
467
|
+
"description": "Year one hourly time series of diesel generator exporting to grid",
|
468
|
+
"units": "kW"
|
469
|
+
},
|
470
|
+
"existing_gen_total_fixed_om_cost_us_dollars": {
|
471
|
+
"type": "float",
|
472
|
+
"description": "Lifetime fixed O & M costfor existing diesel generator system in baucase.",
|
473
|
+
"units": "$"
|
474
|
+
},
|
475
|
+
"existing_gen_total_variable_om_cost_us_dollars": {
|
476
|
+
"type": "float",
|
477
|
+
"description": "Lifetime variable(based on kwh produced) O & M costfor existing diesel generator system.",
|
478
|
+
"units": "$"
|
479
|
+
},
|
480
|
+
"existing_gen_year_one_variable_om_cost_us_dollars": {
|
481
|
+
"type": "float",
|
482
|
+
"description": "Year one variable(based on kwh produced) O & M costfor existing diesel generator system.",
|
483
|
+
"units": "$"
|
484
|
+
},
|
485
|
+
"total_variable_om_cost_us_dollars": {
|
486
|
+
"type": "float",
|
487
|
+
"description": "Total lifecycle variable(based on kwh produced) O & M costfor existing + newly recommended diesel generator system",
|
488
|
+
"units": "$"
|
489
|
+
},
|
490
|
+
"year_one_variable_om_cost_us_dollars": {
|
491
|
+
"type": "float",
|
492
|
+
"description": "Year one variable(based on kwh produced) O & M costfor existing + newly recommended diesel generator system",
|
493
|
+
"units": "$"
|
494
|
+
},
|
495
|
+
"total_fuel_cost_us_dollars": {
|
496
|
+
"type": "float",
|
497
|
+
"description": "Total lifecycle fuel costfor existing + newly recommended diesel generator system",
|
498
|
+
"units": "$"
|
499
|
+
},
|
500
|
+
"year_one_fuel_cost_us_dollars": {
|
501
|
+
"type": "float",
|
502
|
+
"description": "Year one fuel costfor existing + newly recommended diesel generator system",
|
503
|
+
"units": "$"
|
504
|
+
},
|
505
|
+
"existing_gen_total_fuel_cost_us_dollars": {
|
506
|
+
"type": "float",
|
507
|
+
"description": "Total lifecycle fuel costfor existing diesel generator system",
|
508
|
+
"units": "$"
|
509
|
+
},
|
510
|
+
"existing_gen_year_one_fuel_cost_us_dollars": {
|
511
|
+
"type": "float",
|
512
|
+
"description": "Year one fuel costfor existing diesel generator system",
|
513
|
+
"units": "$"
|
514
|
+
}
|
515
|
+
}
|
516
|
+
}
|
517
|
+
}
|
518
|
+
}
|
519
|
+
}
|
520
|
+
}
|
521
|
+
}
|
522
|
+
},
|
523
|
+
"messages": {
|
524
|
+
"type": "object",
|
525
|
+
"properties": {
|
526
|
+
"warnings": {
|
527
|
+
"type": "list_of_string",
|
528
|
+
"description": "Warnings generated by simulation"
|
529
|
+
},
|
530
|
+
"error": {
|
531
|
+
"type": "str",
|
532
|
+
"description": "Error generated by simulation"
|
533
|
+
}
|
534
|
+
}
|
535
|
+
}
|
536
|
+
}
|
537
|
+
}
|
538
|
+
}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# *********************************************************************************
|
2
|
+
# URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
|
3
|
+
# contributors. All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
# are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# Redistributions of source code must retain the above copyright notice, this list
|
9
|
+
# of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
|
+
# list of conditions and the following disclaimer in the documentation and/or other
|
13
|
+
# materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
|
+
# used to endorse or promote products derived from this software without specific
|
17
|
+
# prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
|
+
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
|
+
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
22
|
+
# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
23
|
+
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
24
|
+
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
26
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
27
|
+
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
28
|
+
# OF THE POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
# *********************************************************************************
|
30
|
+
|
31
|
+
require 'urbanopt/scenario/scenario_base'
|
32
|
+
require 'urbanopt/scenario/simulation_dir_osw'
|
33
|
+
|
34
|
+
require 'csv'
|
35
|
+
require 'fileutils'
|
36
|
+
|
37
|
+
module URBANopt # nodoc:
|
38
|
+
module Scenario # nodoc:
|
39
|
+
class REoptScenarioCSV < ScenarioCSV
|
40
|
+
##
|
41
|
+
# REoptScenarioCSV is an extension of ScenarioCSV which assigns a Simulation Mapper to each Feature in a FeatureFile using a simple CSV format.
|
42
|
+
# The a \REopt Lite enabled CSV file has four columns 1) feature_id, 2) feature_name, 3) mapper_class_name and 4) optional reopt assumptions file name. There is one row for each Feature.
|
43
|
+
# A REoptScenarioCSV can be instantiated with set of assumptions to use in \REopt Lite for an optimization at the aggregated ScenarioReport level.
|
44
|
+
# A REoptScenarioCSV is also instantiated with a +reopt_files_dir+ file directory containing all \REopt Lite assumptions files (required only if the ScenarioReport or its FeatureReports will have specified assumptions).
|
45
|
+
#
|
46
|
+
# [*parameters:*]
|
47
|
+
#
|
48
|
+
# * +name+ - _String_ - Human readable scenario name.
|
49
|
+
# * +root_dir+ - _String_ - Root directory for the scenario, contains Gemfile describing dependencies.
|
50
|
+
# * +run_dir+ - _String_ - Directory for simulation of this scenario, deleting run directory clears the scenario.
|
51
|
+
# * +feature_file+ - _URBANopt::Core::FeatureFile_ - FeatureFile containing features to simulate.
|
52
|
+
# * +mapper_files_dir+ - _String_ - Directory containing all mapper class files containing MapperBase definitions.
|
53
|
+
# * +csv_file+ - _String_ - Path to CSV file assigning a MapperBase class to each feature in feature_file.
|
54
|
+
# * +num_header_rows+ - _String_ - Number of header rows to skip in CSV file.
|
55
|
+
# * +reopt_files_dir+ - _String_ - Path to folder containing default \REopt Lite assumptions JSON's.
|
56
|
+
# * +scenario_reopt_assumptions_file_name+ - _String_ - Name of .json file in the +reopt_files_dir+ location to use in assessing the aggregated ScenarioReport in \REopt Lite.
|
57
|
+
##
|
58
|
+
def initialize(name, root_dir, run_dir, feature_file, mapper_files_dir, csv_file, num_header_rows, reopt_files_dir = nil, scenario_reopt_assumptions_file_name = nil)
|
59
|
+
super(name, root_dir, run_dir, feature_file, mapper_files_dir, csv_file, num_header_rows)
|
60
|
+
|
61
|
+
@reopt_files_dir = reopt_files_dir
|
62
|
+
@reopt_feature_assumptions = []
|
63
|
+
@scenario_reopt_assumptions_file = nil
|
64
|
+
|
65
|
+
if !reopt_files_dir.nil? && !scenario_reopt_assumptions_file_name.nil?
|
66
|
+
@scenario_reopt_assumptions_file = File.join(@reopt_files_dir, scenario_reopt_assumptions_file_name)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
# Path to json files of reopt assumptions for feature reports ordered by feature order
|
70
|
+
attr_accessor :reopt_feature_assumptions
|
71
|
+
|
72
|
+
# Path to json file of reopt assumptions for scenario report
|
73
|
+
attr_reader :scenario_reopt_assumptions_file #:nodoc:
|
74
|
+
|
75
|
+
# Gets all the simulation directories
|
76
|
+
def simulation_dirs
|
77
|
+
# DLM: TODO use HeaderConverters from CSV module
|
78
|
+
rows_skipped = 0
|
79
|
+
result = []
|
80
|
+
CSV.foreach(@csv_file).with_index do |row, idx|
|
81
|
+
if rows_skipped < @num_header_rows
|
82
|
+
rows_skipped += 1
|
83
|
+
next
|
84
|
+
end
|
85
|
+
|
86
|
+
break if row[0].nil?
|
87
|
+
|
88
|
+
# gets +feature_id+ , +feature_name+ and +mapper_class+ from csv_file
|
89
|
+
feature_id = row[0].chomp
|
90
|
+
feature_name = row[1].chomp
|
91
|
+
mapper_class = row[2].chomp
|
92
|
+
# Assume fourth columns, if exists, contains the name of the JSON file in the reopt_files_dir to use when running \REopt Lite for the feature report
|
93
|
+
|
94
|
+
if row.length > 3
|
95
|
+
if !@reopt_files_dir.nil?
|
96
|
+
@reopt_feature_assumptions[idx - 1] = File.join(@reopt_files_dir, row[3].chomp)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# gets +features+ from the feature_file.
|
101
|
+
features = []
|
102
|
+
feature = feature_file.get_feature_by_id(feature_id)
|
103
|
+
features << feature
|
104
|
+
|
105
|
+
feature_names = []
|
106
|
+
feature_names << feature_name
|
107
|
+
simulation_dir = SimulationDirOSW.new(self, features, feature_names, mapper_class)
|
108
|
+
|
109
|
+
result << simulation_dir
|
110
|
+
end
|
111
|
+
return result
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|