urbanopt-scenario 0.4.1 → 0.4.2
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/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
|