urbanopt-scenario 0.1.1 → 0.2.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -8
- data/.github/ISSUE_TEMPLATE/feature_request.md +2 -10
- data/.github/pull_request_template.md +5 -15
- data/{.github/CONTRIBUTING.md → CONTRIBUTING.md} +0 -0
- data/Gemfile +4 -2
- data/Jenkinsfile +2 -2
- data/Rakefile +1 -1
- data/docs/package-lock.json +4607 -6451
- data/docs/package.json +1 -1
- data/lib/measures/default_feature_reports/LICENSE.md +1 -1
- data/lib/measures/default_feature_reports/README.md +1 -1
- data/lib/measures/default_feature_reports/measure.rb +256 -41
- data/lib/measures/default_feature_reports/measure.xml +19 -15
- data/lib/urbanopt/scenario/default_reports/distributed_generation.rb +204 -17
- data/lib/urbanopt/scenario/default_reports/feature_report.rb +47 -0
- data/lib/urbanopt/scenario/default_reports/program.rb +6 -1
- data/lib/urbanopt/scenario/default_reports/reporting_period.rb +5 -2
- data/lib/urbanopt/scenario/default_reports/scenario_report.rb +17 -6
- data/lib/urbanopt/scenario/default_reports/schema/README.md +11 -12
- data/lib/urbanopt/scenario/default_reports/schema/scenario_csv_columns.txt +14 -6
- data/lib/urbanopt/scenario/default_reports/schema/scenario_schema.json +27 -18
- data/lib/urbanopt/scenario/default_reports/solar_pv.rb +1 -0
- data/lib/urbanopt/scenario/default_reports/timeseries_csv.rb +29 -3
- data/lib/urbanopt/scenario/scenario_runner_osw.rb +21 -5
- data/lib/urbanopt/scenario/version.rb +1 -1
- data/urbanopt-scenario-gem.gemspec +7 -5
- metadata +39 -25
- data/.travis.yml +0 -23
@@ -18,17 +18,16 @@ The URBANopt Scenario Gem includes functionality for defining scenarios, running
|
|
18
18
|
|
19
19
|
| output | unit |
|
20
20
|
| -----------------------------------------| ------- |
|
21
|
-
| Electricity:Facility |
|
22
|
-
| ElectricityProduced:Facility |
|
23
|
-
| Gas:Facility |
|
24
|
-
| DistrictCooling:Facility |
|
25
|
-
| DistrictHeating:Facility |
|
21
|
+
| Electricity:Facility | kWh |
|
22
|
+
| ElectricityProduced:Facility | kWh |
|
23
|
+
| Gas:Facility | kBtu |
|
24
|
+
| DistrictCooling:Facility | kWh |
|
25
|
+
| DistrictHeating:Facility | kWh |
|
26
26
|
| District Cooling Chilled Water Rate | GPM |
|
27
|
-
| District Cooling Mass Flow Rate |
|
28
|
-
| District Cooling Inlet Temperature | °
|
29
|
-
| District Cooling Outlet Temperature | °
|
27
|
+
| District Cooling Mass Flow Rate | kg/s |
|
28
|
+
| District Cooling Inlet Temperature | °C |
|
29
|
+
| District Cooling Outlet Temperature | °C |
|
30
30
|
| District Heating Hot Water Rate | GPM |
|
31
|
-
| District Heating Mass Flow Rate |
|
32
|
-
| District Heating Inlet Temperature | °
|
33
|
-
| District Heating Outlet Temperature | °
|
34
|
-
| Electricity:Grid:ToLoad | kWh. |
|
31
|
+
| District Heating Mass Flow Rate | kg/s |
|
32
|
+
| District Heating Inlet Temperature | °C |
|
33
|
+
| District Heating Outlet Temperature | °C |
|
@@ -1,13 +1,21 @@
|
|
1
|
-
|
1
|
+
Datetime
|
2
|
+
Electricity:Facility
|
2
3
|
ElectricityProduced:Facility
|
3
|
-
Gas:Facility
|
4
|
+
Gas:Facility
|
4
5
|
DistrictCooling:Facility
|
5
6
|
DistrictHeating:Facility
|
6
7
|
District Cooling Chilled Water Rate
|
7
|
-
District Cooling Mass Flow Rate
|
8
|
+
District Cooling Mass Flow Rate
|
8
9
|
District Cooling Inlet Temperature
|
9
10
|
District Cooling Outlet Temperature
|
10
|
-
District Heating Hot Water Rate
|
11
|
-
District Heating Mass Flow Rate
|
12
|
-
District Heating Inlet Temperature
|
11
|
+
District Heating Hot Water Rate
|
12
|
+
District Heating Mass Flow Rate
|
13
|
+
District Heating Inlet Temperature
|
13
14
|
District Heating Outlet Temperature
|
15
|
+
Net Electric Energy
|
16
|
+
Electricity:Facility Power
|
17
|
+
ElectricityProduced:Facility Power
|
18
|
+
Electricity:Facility Apparent Power
|
19
|
+
ElectricityProduced:Facility Apparent Power
|
20
|
+
Net Power
|
21
|
+
Net Apparent Power
|
@@ -64,7 +64,6 @@
|
|
64
64
|
"distributed_generation": {
|
65
65
|
"$ref": "#/definitions/DistributedGeneration"
|
66
66
|
}
|
67
|
-
|
68
67
|
},
|
69
68
|
"required": [
|
70
69
|
"id",
|
@@ -83,42 +82,42 @@
|
|
83
82
|
"type": "object",
|
84
83
|
"properties": {
|
85
84
|
"lcc_us_dollars": {
|
86
|
-
"
|
87
|
-
"
|
85
|
+
"description": "Optimal lifecycle cost",
|
86
|
+
"type": "number"
|
88
87
|
},
|
89
88
|
"npv_us_dollars": {
|
90
|
-
"
|
91
|
-
"
|
89
|
+
"description": "Net present value of savings realized by the project",
|
90
|
+
"type": "number"
|
92
91
|
},
|
93
92
|
"year_one_energy_cost_us_dollars": {
|
94
|
-
"
|
95
|
-
"
|
93
|
+
"description": "Optimal year one utility energy cost",
|
94
|
+
"type": "number"
|
96
95
|
},
|
97
96
|
"year_one_demand_cost_us_dollars": {
|
98
|
-
"
|
99
|
-
"
|
97
|
+
"description": "Optimal year one utility demand cost",
|
98
|
+
"type": "number"
|
100
99
|
},
|
101
100
|
"year_one_bill_us_dollars": {
|
102
|
-
"
|
103
|
-
"
|
101
|
+
"description": "Optimal year one utility bill",
|
102
|
+
"type": "number"
|
104
103
|
},
|
105
104
|
"total_energy_cost_us_dollars": {
|
106
|
-
"
|
107
|
-
"
|
105
|
+
"description": "Total utility energy cost over the lifecycle, after-tax",
|
106
|
+
"type": "number"
|
108
107
|
},
|
109
|
-
"SolarPV"
|
108
|
+
"SolarPV": {
|
110
109
|
"$ref": "#/definitions/SolarPV"
|
111
110
|
},
|
112
|
-
"Wind"
|
111
|
+
"Wind": {
|
113
112
|
"$ref": "#/definitions/Wind"
|
114
113
|
},
|
115
|
-
"Generator"
|
114
|
+
"Generator": {
|
116
115
|
"$ref": "#/definitions/Generator"
|
117
116
|
},
|
118
|
-
"Storage"
|
117
|
+
"Storage": {
|
119
118
|
"$ref": "#/definitions/Storage"
|
120
119
|
}
|
121
|
-
|
120
|
+
}
|
122
121
|
},
|
123
122
|
"SolarPV": {
|
124
123
|
"type": "object",
|
@@ -436,6 +435,12 @@
|
|
436
435
|
"time_setpoint_not_met_during_occupied_hours": {
|
437
436
|
"description": "(hrs)",
|
438
437
|
"type": "number"
|
438
|
+
},
|
439
|
+
"hours_out_of_comfort_bounds_PMV": {
|
440
|
+
"type": "number"
|
441
|
+
},
|
442
|
+
"hours_out_of_comfort_bounds_PPD": {
|
443
|
+
"type": "number"
|
439
444
|
}
|
440
445
|
},
|
441
446
|
"additionalProperties": false
|
@@ -709,6 +714,10 @@
|
|
709
714
|
"aspect_ratio": {
|
710
715
|
"description": "Ratio of longest to shortest axis",
|
711
716
|
"type": "number"
|
717
|
+
},
|
718
|
+
"total_construction_cost": {
|
719
|
+
"description": "total construction cost calculated from the defined cost per floor area ($)",
|
720
|
+
"type": "number"
|
712
721
|
}
|
713
722
|
},
|
714
723
|
"required": [
|
@@ -56,7 +56,12 @@ module URBANopt
|
|
56
56
|
|
57
57
|
@path = hash[:path]
|
58
58
|
@first_report_datetime = hash[:first_report_datetime]
|
59
|
+
|
60
|
+
# from scenario csv shema get required reults to be aggregated
|
61
|
+
@required_column_names = load_scenario_csv_schema_headers
|
62
|
+
|
59
63
|
@column_names = hash[:column_names]
|
64
|
+
@column_names.delete_if { |x| !@required_column_names.include? x.split('(')[0] }
|
60
65
|
|
61
66
|
# hash of column_name to array of values, does not get serialized to hash
|
62
67
|
@mutex = Mutex.new
|
@@ -70,6 +75,23 @@ module URBANopt
|
|
70
75
|
@@logger ||= URBANopt::Scenario::DefaultReports.logger
|
71
76
|
end
|
72
77
|
|
78
|
+
##
|
79
|
+
# load required scenario report csv headers from reports schema
|
80
|
+
##
|
81
|
+
def load_scenario_csv_schema_headers
|
82
|
+
# rubocop: disable Security/Open
|
83
|
+
scenario_csv_schema = open(File.expand_path('../default_reports/schema/scenario_csv_columns.txt', File.dirname(__FILE__)))
|
84
|
+
# rubocop: enable Security/Open
|
85
|
+
|
86
|
+
scenario_csv_schema_headers = []
|
87
|
+
File.readlines(scenario_csv_schema).each do |line|
|
88
|
+
l = line.delete("\n")
|
89
|
+
a = l.delete("\t")
|
90
|
+
scenario_csv_schema_headers << a
|
91
|
+
end
|
92
|
+
return scenario_csv_schema_headers
|
93
|
+
end
|
94
|
+
|
73
95
|
##
|
74
96
|
# Assigns default values if values does not exist.
|
75
97
|
##
|
@@ -153,7 +175,7 @@ module URBANopt
|
|
153
175
|
end
|
154
176
|
else
|
155
177
|
row.each_with_index do |value, i|
|
156
|
-
@data[@column_names[i]] << value
|
178
|
+
@data[@column_names[i]] << value
|
157
179
|
end
|
158
180
|
end
|
159
181
|
end
|
@@ -214,7 +236,7 @@ module URBANopt
|
|
214
236
|
##
|
215
237
|
def add_timeseries_csv(other)
|
216
238
|
# initialize first_report_datetime with the incoming first_report_datetime if its nil.
|
217
|
-
if @first_report_datetime.nil?
|
239
|
+
if @first_report_datetime.nil? || @first_report_datetime == ''
|
218
240
|
@first_report_datetime = other.first_report_datetime
|
219
241
|
end
|
220
242
|
|
@@ -239,12 +261,16 @@ module URBANopt
|
|
239
261
|
end
|
240
262
|
|
241
263
|
current_values = @data[column_name]
|
264
|
+
|
242
265
|
if current_values
|
243
266
|
if current_values.size != new_values.size
|
244
267
|
raise 'Values of different sizes in add_timeseries_csv'
|
245
268
|
end
|
246
269
|
new_values.each_with_index do |value, i|
|
247
|
-
|
270
|
+
# aggregate all columns except Datime column
|
271
|
+
if column_name != 'Datetime'
|
272
|
+
new_values[i] = value.to_f + current_values[i].to_f
|
273
|
+
end
|
248
274
|
end
|
249
275
|
@data[column_name] = new_values
|
250
276
|
else
|
@@ -132,7 +132,7 @@ module URBANopt
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
# Run osw groups in order and store simulation failure in
|
135
|
+
# Run osw groups in order and store simulation failure in an array.
|
136
136
|
# Return simulation_dirs after running all simulations.
|
137
137
|
|
138
138
|
# failures
|
@@ -140,17 +140,33 @@ module URBANopt
|
|
140
140
|
# run building_osws
|
141
141
|
# building_failures = runner.run_osws(building_osws, num_parallel = Extension::NUM_PARALLEL, max_to_run = Extension::MAX_DATAPOINTS)
|
142
142
|
building_failures = runner.run_osws(building_osws)
|
143
|
-
failures
|
143
|
+
failures + building_failures
|
144
144
|
# run district_system_osws
|
145
145
|
# district_system_failures = runner.run_osws(district_system_osws, num_parallel = Extension::NUM_PARALLEL, max_to_run = Extension::MAX_DATAPOINTS)
|
146
146
|
district_system_failures = runner.run_osws(district_system_osws)
|
147
|
-
failures
|
147
|
+
failures + district_system_failures
|
148
148
|
# run transformer_osws
|
149
149
|
# transformer_failures = runner.run_osws(transformer_osws, num_parallel = Extension::NUM_PARALLEL, max_to_run = Extension::MAX_DATAPOINTS)
|
150
150
|
transformer_failures = runner.run_osws(transformer_osws)
|
151
|
-
failures
|
151
|
+
failures + transformer_failures
|
152
|
+
|
153
|
+
puts 'Done Running Scenario'
|
154
|
+
|
155
|
+
# if failures.size > 0
|
156
|
+
# puts "DATAPOINT FAILURES: #{failures}"
|
157
|
+
# end
|
158
|
+
|
159
|
+
# look for other failed datapoints
|
160
|
+
failed_sims = []
|
161
|
+
simulation_dirs.each do |simulation_dir|
|
162
|
+
if File.exist?(File.join(simulation_dir.run_dir, 'failed.job'))
|
163
|
+
failed_sims << simulation_dir.run_dir.split('/')[-1]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
if !failed_sims.empty?
|
167
|
+
puts "FAILED SIMULATION IDs: #{failed_sims.join(',')}"
|
168
|
+
end
|
152
169
|
|
153
|
-
# puts "failures = #{failures}"
|
154
170
|
return simulation_dirs
|
155
171
|
end
|
156
172
|
end
|
@@ -6,8 +6,8 @@ require 'urbanopt/scenario/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'urbanopt-scenario'
|
8
8
|
spec.version = URBANopt::Scenario::VERSION
|
9
|
-
spec.authors = ['Dan Macumber']
|
10
|
-
spec.email = ['
|
9
|
+
spec.authors = ['Rawad El Kontar', 'Dan Macumber']
|
10
|
+
spec.email = ['rawad.elkontar@nrel.gov']
|
11
11
|
|
12
12
|
spec.summary = 'Library to export data point OSW files from URBANopt Scenario CSV'
|
13
13
|
spec.description = 'Library to export data point OSW files from URBANopt Scenario CSV'
|
@@ -21,18 +21,20 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.bindir = 'exe'
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
|
+
spec.required_ruby_version = '~> 2.2.4'
|
24
25
|
|
25
26
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
26
27
|
spec.add_development_dependency 'rake', '12.3.1'
|
27
28
|
spec.add_development_dependency 'rspec', '3.7.0'
|
29
|
+
spec.add_development_dependency 'github_api', '~> 0.18.0'
|
30
|
+
# Fix rack version temporarily to work with Ruby 2.2.4
|
31
|
+
spec.add_development_dependency 'rack', '2.1.2'
|
28
32
|
|
29
33
|
spec.add_dependency 'json-schema'
|
30
34
|
spec.add_dependency 'json_pure'
|
31
|
-
spec.add_dependency 'openstudio-model-articulation', '~> 0.1.
|
35
|
+
spec.add_dependency 'openstudio-model-articulation', '~> 0.1.1'
|
32
36
|
spec.add_dependency 'urbanopt-core', '~> 0.1.0'
|
33
37
|
|
34
|
-
spec.add_dependency 'github_api'
|
35
|
-
|
36
38
|
# lock the version of these dependencies due to using older version of Ruby.
|
37
39
|
spec.add_dependency 'public_suffix', '3.1.1'
|
38
40
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: urbanopt-scenario
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- Rawad El Kontar
|
7
8
|
- Dan Macumber
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2020-
|
12
|
+
date: 2020-03-11 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
@@ -52,6 +53,34 @@ dependencies:
|
|
52
53
|
- - '='
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: 3.7.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: github_api
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.18.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.18.0
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rack
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.1.2
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.1.2
|
55
84
|
- !ruby/object:Gem::Dependency
|
56
85
|
name: json-schema
|
57
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +115,14 @@ dependencies:
|
|
86
115
|
requirements:
|
87
116
|
- - "~>"
|
88
117
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.1.
|
118
|
+
version: 0.1.1
|
90
119
|
type: :runtime
|
91
120
|
prerelease: false
|
92
121
|
version_requirements: !ruby/object:Gem::Requirement
|
93
122
|
requirements:
|
94
123
|
- - "~>"
|
95
124
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.1.
|
125
|
+
version: 0.1.1
|
97
126
|
- !ruby/object:Gem::Dependency
|
98
127
|
name: urbanopt-core
|
99
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,20 +137,6 @@ dependencies:
|
|
108
137
|
- - "~>"
|
109
138
|
- !ruby/object:Gem::Version
|
110
139
|
version: 0.1.0
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: github_api
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
140
|
- !ruby/object:Gem::Dependency
|
126
141
|
name: public_suffix
|
127
142
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,12 +153,11 @@ dependencies:
|
|
138
153
|
version: 3.1.1
|
139
154
|
description: Library to export data point OSW files from URBANopt Scenario CSV
|
140
155
|
email:
|
141
|
-
-
|
156
|
+
- rawad.elkontar@nrel.gov
|
142
157
|
executables: []
|
143
158
|
extensions: []
|
144
159
|
extra_rdoc_files: []
|
145
160
|
files:
|
146
|
-
- ".github/CONTRIBUTING.md"
|
147
161
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
148
162
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
149
163
|
- ".github/pull_request_template.md"
|
@@ -151,8 +165,8 @@ files:
|
|
151
165
|
- ".rdoc_options"
|
152
166
|
- ".rspec"
|
153
167
|
- ".rubocop.yml"
|
154
|
-
- ".travis.yml"
|
155
168
|
- CHANGELOG.md
|
169
|
+
- CONTRIBUTING.md
|
156
170
|
- Gemfile
|
157
171
|
- Jenkinsfile
|
158
172
|
- LICENSE.md
|
@@ -234,14 +248,14 @@ require_paths:
|
|
234
248
|
- lib
|
235
249
|
required_ruby_version: !ruby/object:Gem::Requirement
|
236
250
|
requirements:
|
237
|
-
- - "
|
251
|
+
- - "~>"
|
238
252
|
- !ruby/object:Gem::Version
|
239
|
-
version:
|
253
|
+
version: 2.2.4
|
240
254
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
255
|
requirements:
|
242
|
-
- - "
|
256
|
+
- - ">"
|
243
257
|
- !ruby/object:Gem::Version
|
244
|
-
version:
|
258
|
+
version: 1.3.1
|
245
259
|
requirements: []
|
246
260
|
rubyforge_project:
|
247
261
|
rubygems_version: 2.4.5.1
|