urbanopt-scenario 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile +13 -13
- data/README.md +1 -1
- data/lib/urbanopt/scenario/scenario_post_processor_default.rb +32 -21
- data/lib/urbanopt/scenario/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07bc344e1b00e7a82bae3418bccb9883d3545961b49c3f9b887993bb0f76e3fe
|
4
|
+
data.tar.gz: '09911a325c45c5b38ea4eed13758e5306cf674b62485b7dd9fc271f12734e62d'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e7e5cfd5eb849e97d3691d9001e26422cf90bda0cd0f471367189f11afdecd4bcdfc3baa4171e9e86574e0bb9ba7d125aed9da61982f24c564b2b0ae6b18cec
|
7
|
+
data.tar.gz: 7b11327eb4ea23787255a49c00a7db44f4172bb62f0583273ce7c8ddee2925b5e09057cc0dd68101f24d1adf82f386d6cffc3b089adb808573cef48ea6ae1fd4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# URBANopt Scenario Gem
|
2
2
|
|
3
|
+
## Version 0.4.2
|
4
|
+
Date Range: 09/29/20 - 09/30/20
|
5
|
+
|
6
|
+
- Fixed [#158]( https://github.com/urbanopt/urbanopt-scenario-gem/pull/158 ), SQLite Query fix for gas consumption reporting
|
7
|
+
|
3
8
|
## Version 0.4.1
|
4
9
|
Date Range: 09/22/20 - 09/28/20
|
5
10
|
|
data/Gemfile
CHANGED
@@ -32,21 +32,21 @@ allow_local = ENV['FAVOR_LOCAL_GEMS']
|
|
32
32
|
# gem 'openstudio-model-articulation', github: 'NREL/openstudio-model-articulation-gem', branch: 'develop'
|
33
33
|
# end
|
34
34
|
|
35
|
-
#if allow_local && File.exist?('../urbanopt-core-gem')
|
36
|
-
#
|
37
|
-
#elsif allow_local
|
38
|
-
#
|
39
|
-
#else
|
40
|
-
#
|
41
|
-
#end
|
42
|
-
|
43
|
-
#if allow_local && File.exist?('../urbanopt-reporting-gem')
|
35
|
+
# if allow_local && File.exist?('../urbanopt-core-gem')
|
36
|
+
# gem 'urbanopt-core', path: '../urbanopt-core-gem'
|
37
|
+
# elsif allow_local
|
38
|
+
# gem 'urbanopt-core', github: 'URBANopt/urbanopt-core-gem', branch: 'develop'
|
39
|
+
# else
|
40
|
+
# gem 'urbanopt-core', '~>0.4.0'
|
41
|
+
# end
|
42
|
+
|
43
|
+
# if allow_local && File.exist?('../urbanopt-reporting-gem')
|
44
44
|
# gem 'urbanopt-reporting', path: '../urbanopt-reporting-gem'
|
45
|
-
#elsif allow_local
|
45
|
+
# elsif allow_local
|
46
46
|
# gem 'urbanopt-reporting', github: 'URBANopt/urbanopt-reporting-gem', branch: 'develop'
|
47
|
-
#else
|
48
|
-
#
|
49
|
-
#end
|
47
|
+
# else
|
48
|
+
# gem 'urbanopt-reporting', '~> 0.2.0'
|
49
|
+
# end
|
50
50
|
|
51
51
|
# if allow_local && File.exist?('../openstudio-load-flexibility-measures-gem')
|
52
52
|
# gem 'openstudio-load-flexibility-measures', path: '../openstudio-load-flexibility-measures-gem'
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# URBANopt Scenario Gem
|
2
2
|
|
3
|
-
The URBANopt<sup>™</sup> Scenario Gem includes functionality for defining scenarios, running simulations, and post-processing results. User defined SimulationMapper classes translate each Feature to a SimulationDir which is a directory containing simulation input files.
|
3
|
+
The URBANopt<sup>™</sup> Scenario Gem includes functionality for defining scenarios, running simulations, and post-processing results. User defined SimulationMapper classes translate each Feature to a SimulationDir which is a directory containing simulation input files. The ScenarioRunner is used to perform simulations for each SimulationDir. Finally, a ScenarioPostProcessor can run on a Scenario to generate scenario level results.
|
4
4
|
|
5
5
|
[RDoc Documentation](https://urbanopt.github.io/urbanopt-scenario-gem/)
|
6
6
|
|
@@ -91,21 +91,27 @@ module URBANopt
|
|
91
91
|
scenario_db = SQLite3::Database.open new_db_file
|
92
92
|
scenario_db.execute "CREATE TABLE IF NOT EXISTS ReportData(
|
93
93
|
TimeIndex INTEGER,
|
94
|
+
Year VARCHAR(255),
|
95
|
+
Month VARCHAR(255),
|
96
|
+
Day VARCHAR(255),
|
97
|
+
Hour VARCHAR(255),
|
98
|
+
Minute VARCHAR(255),
|
99
|
+
Dst INTEGER,
|
94
100
|
ReportDataDictionaryIndex INTEGER,
|
95
101
|
Value INTEGER
|
96
102
|
)"
|
97
103
|
|
98
104
|
values_arr = []
|
99
105
|
feature_list = Pathname.new(@initialization_hash[:directory_name]).children.select(&:directory?) # Folders in the run/scenario directory
|
100
|
-
|
106
|
+
|
101
107
|
# get scenario CSV
|
102
108
|
scenario_csv = File.join(@initialization_hash[:root_dir], @initialization_hash[:name] + '.csv')
|
103
109
|
if File.exist?(scenario_csv)
|
104
110
|
# csv found
|
105
|
-
feature_ids = CSV.read(scenario_csv, :
|
111
|
+
feature_ids = CSV.read(scenario_csv, headers: true)
|
106
112
|
feature_list = []
|
107
113
|
# loop through building feature ids from scenario csv
|
108
|
-
feature_ids[
|
114
|
+
feature_ids['Feature Id'].each do |feature|
|
109
115
|
if Dir.exist?(File.join(@initialization_hash[:directory_name], feature))
|
110
116
|
feature_list << File.join(@initialization_hash[:directory_name], feature)
|
111
117
|
else
|
@@ -121,40 +127,45 @@ module URBANopt
|
|
121
127
|
feature_db = SQLite3::Database.open uo_output_sql_file
|
122
128
|
# Doing "db.results_as_hash = true" is prettier, but in this case significantly slower.
|
123
129
|
|
124
|
-
# RDDI == 10 is the timestep value for facility electricity
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
130
|
+
# RDDI == 10 is the timestep value for facility electricity in OS 3.0.1
|
131
|
+
# TODO: Dynamically read RDDI from table RDDI, insted of hardcoding it
|
132
|
+
elec_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour, Time.Minute, Time.Dst, ReportData.Value
|
133
|
+
FROM ReportData
|
134
|
+
INNER JOIN Time ON Time.TimeIndex=ReportData.TimeIndex
|
135
|
+
WHERE ReportDataDictionaryIndex == 10
|
136
|
+
ORDER BY ReportData.TimeIndex"
|
129
137
|
|
130
138
|
elec_query.each do |row| # Add up all the values for electricity usage across all Features at this timestep
|
131
139
|
# row[0] == TimeIndex, row[1] == Value
|
140
|
+
|
132
141
|
arr_match = values_arr.find { |v| v[:time_index] == row[0] }
|
133
142
|
if arr_match.nil?
|
134
143
|
# add new row to value_arr
|
135
|
-
values_arr << { time_index: row[0], elec_val: Float(row[
|
144
|
+
values_arr << { time_index: row[0], year: row[1], month: row[2], day: row[3], hour: row[4], minute: row[5], dst: row[6], elec_val: Float(row[7]), gas_val: 0 }
|
136
145
|
else
|
137
146
|
# running sum
|
138
|
-
arr_match[:elec_val] += Float(row[
|
147
|
+
arr_match[:elec_val] += Float(row[7])
|
139
148
|
end
|
140
149
|
end # End elec_query
|
141
150
|
elec_query.close
|
142
151
|
|
143
|
-
# RDDI ==
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
152
|
+
# RDDI == 1382 is the timestep value for facility gas in OS 3.0.1
|
153
|
+
# TODO: Dynamically read RDDI from table RDDI, insted of hardcoding it
|
154
|
+
gas_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour, Time.Minute, Time.Dst, ReportData.Value
|
155
|
+
FROM ReportData
|
156
|
+
INNER JOIN Time ON Time.TimeIndex=ReportData.TimeIndex
|
157
|
+
WHERE ReportDataDictionaryIndex == 1382
|
158
|
+
ORDER BY ReportData.TimeIndex"
|
148
159
|
|
149
160
|
gas_query.each do |row|
|
150
161
|
# row[0] == TimeIndex, row[1] == Value
|
151
162
|
arr_match = values_arr.find { |v| v[:time_index] == row[0] }
|
152
163
|
if arr_match.nil?
|
153
164
|
# add new row to value_arr
|
154
|
-
values_arr << { time_index: row[0], gas_val: Float(row[
|
165
|
+
values_arr << { time_index: row[0], year: row[1], month: row[2], day: row[3], hour: row[4], minute: row[5], dst: row[6], gas_val: Float(row[7]), elec_val: 0 }
|
155
166
|
else
|
156
167
|
# running sum
|
157
|
-
arr_match[:gas_val] += Float(row[
|
168
|
+
arr_match[:gas_val] += Float(row[7])
|
158
169
|
end
|
159
170
|
end # End gas_query
|
160
171
|
gas_query.close
|
@@ -164,13 +175,13 @@ module URBANopt
|
|
164
175
|
elec_sql = []
|
165
176
|
gas_sql = []
|
166
177
|
values_arr.each do |i|
|
167
|
-
elec_sql << "(#{i[:time_index]}, 10, #{i[:elec_val]})"
|
168
|
-
gas_sql << "(#{i[:time_index]},
|
178
|
+
elec_sql << "(#{i[:time_index]}, #{i[:year]}, #{i[:month]}, #{i[:day]}, #{i[:hour]}, #{i[:minute]}, #{i[:dst]}, 10, #{i[:elec_val]})"
|
179
|
+
gas_sql << "(#{i[:time_index]}, #{i[:year]}, #{i[:month]}, #{i[:day]}, #{i[:hour]}, #{i[:minute]}, #{i[:dst]}, 1382, #{i[:gas_val]})"
|
169
180
|
end
|
170
181
|
|
171
182
|
# Put summed Values into the database
|
172
|
-
scenario_db.execute("INSERT INTO ReportData
|
173
|
-
scenario_db.execute("INSERT INTO ReportData
|
183
|
+
scenario_db.execute("INSERT INTO ReportData VALUES #{elec_sql.join(', ')}")
|
184
|
+
scenario_db.execute("INSERT INTO ReportData VALUES #{gas_sql.join(', ')}")
|
174
185
|
scenario_db.close
|
175
186
|
end
|
176
187
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: urbanopt-scenario
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rawad El Kontar
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-09-
|
12
|
+
date: 2020-09-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|