urbanopt-scenario 0.4.2 → 0.6.0
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/pull_request_template.md +1 -1
- data/CHANGELOG.md +39 -0
- data/Gemfile +8 -14
- data/LICENSE.md +29 -17
- data/RDOC_MAIN.md +2 -2
- data/README.md +1 -1
- data/Rakefile +16 -6
- data/docs/.vuepress/components/InnerJsonSchema.vue +7 -15
- data/docs/.vuepress/config.js +13 -9
- data/docs/.vuepress/highlight.js +1 -1
- data/docs/.vuepress/json-schema-deref-loader.js +22 -0
- data/docs/README.md +2 -2
- data/docs/package-lock.json +429 -498
- data/docs/package.json +7 -4
- data/lib/urbanopt-scenario.rb +16 -6
- data/lib/urbanopt/scenario.rb +16 -6
- data/lib/urbanopt/scenario/default_reports.rb +16 -6
- data/lib/urbanopt/scenario/extension.rb +21 -9
- data/lib/urbanopt/scenario/logger.rb +16 -6
- data/lib/urbanopt/scenario/scenario_base.rb +20 -10
- data/lib/urbanopt/scenario/scenario_csv.rb +54 -28
- data/lib/urbanopt/scenario/scenario_datapoint_base.rb +20 -10
- data/lib/urbanopt/scenario/scenario_post_processor_base.rb +18 -8
- data/lib/urbanopt/scenario/scenario_post_processor_default.rb +40 -25
- data/lib/urbanopt/scenario/scenario_post_processor_opendss.rb +25 -15
- data/lib/urbanopt/scenario/scenario_runner_base.rb +22 -11
- data/lib/urbanopt/scenario/scenario_runner_osw.rb +22 -10
- data/lib/urbanopt/scenario/scenario_visualization.rb +25 -15
- data/lib/urbanopt/scenario/simulation_dir_base.rb +19 -9
- data/lib/urbanopt/scenario/simulation_dir_osw.rb +20 -10
- data/lib/urbanopt/scenario/simulation_mapper_base.rb +19 -9
- data/lib/urbanopt/scenario/version.rb +17 -7
- data/urbanopt-scenario-gem.gemspec +13 -8
- metadata +8 -65
- data/docs/.vuepress/components/ScenarioSchema.vue +0 -12
- data/docs/schemas/scenario-schema.md +0 -3
@@ -1,21 +1,31 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
|
-
|
4
|
+
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
6
6
|
# are permitted provided that the following conditions are met:
|
7
|
-
|
7
|
+
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
9
9
|
# of conditions and the following disclaimer.
|
10
|
-
|
10
|
+
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
13
13
|
# materials provided with the distribution.
|
14
|
-
|
14
|
+
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
17
17
|
# prior written permission.
|
18
|
-
|
18
|
+
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
27
|
+
# consent of Alliance.
|
28
|
+
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
@@ -35,7 +45,7 @@ module URBANopt
|
|
35
45
|
# ScenarioPostProcessorBase post-processes a Scenario to create scenario level results.
|
36
46
|
##
|
37
47
|
# [parameters:]
|
38
|
-
# +scenario_base+ - _ScenarioBase_ - An object of ScenarioBase class.
|
48
|
+
# * +scenario_base+ - _ScenarioBase_ - An object of ScenarioBase class.
|
39
49
|
def initialize(scenario_base)
|
40
50
|
@scenario_base = scenario_base
|
41
51
|
end
|
@@ -53,7 +63,7 @@ module URBANopt
|
|
53
63
|
# Add results from a simulation_dir to this result.
|
54
64
|
##
|
55
65
|
# [parameters:]
|
56
|
-
# +simulation_dir+ - _SimulationDirOSW_ - An object on SimulationDirOSW class.
|
66
|
+
# * +simulation_dir+ - _SimulationDirOSW_ - An object on SimulationDirOSW class.
|
57
67
|
def add_simulation_dir(simulation_dir)
|
58
68
|
raise 'add_simulation_dir not implemented for ScenarioPostProcessorBase, override in your class'
|
59
69
|
end
|
@@ -1,21 +1,31 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
|
-
|
4
|
+
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
6
6
|
# are permitted provided that the following conditions are met:
|
7
|
-
|
7
|
+
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
9
9
|
# of conditions and the following disclaimer.
|
10
|
-
|
10
|
+
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
13
13
|
# materials provided with the distribution.
|
14
|
-
|
14
|
+
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
17
17
|
# prior written permission.
|
18
|
-
|
18
|
+
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
27
|
+
# consent of Alliance.
|
28
|
+
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
@@ -32,8 +42,6 @@ require 'urbanopt/scenario/scenario_post_processor_base'
|
|
32
42
|
require 'urbanopt/reporting/default_reports'
|
33
43
|
|
34
44
|
require 'csv'
|
35
|
-
require 'json'
|
36
|
-
require 'fileutils'
|
37
45
|
require 'sqlite3'
|
38
46
|
|
39
47
|
module URBANopt
|
@@ -43,7 +51,7 @@ module URBANopt
|
|
43
51
|
# ScenarioPostProcessorBase post-processes a scenario to create scenario level results
|
44
52
|
##
|
45
53
|
# [parameters:]
|
46
|
-
# +scenario_base+ - _ScenarioBase_ - An object of ScenarioBase class.
|
54
|
+
# * +scenario_base+ - _ScenarioBase_ - An object of ScenarioBase class.
|
47
55
|
def initialize(scenario_base)
|
48
56
|
super(scenario_base)
|
49
57
|
|
@@ -69,7 +77,7 @@ module URBANopt
|
|
69
77
|
# Add results from a simulation_dir to this result.
|
70
78
|
##
|
71
79
|
# [parameters:]
|
72
|
-
# +simulation_dir+ - _SimulationDirOSW_ - An object on SimulationDirOSW class.
|
80
|
+
# * +simulation_dir+ - _SimulationDirOSW_ - An object on SimulationDirOSW class.
|
73
81
|
def add_simulation_dir(simulation_dir)
|
74
82
|
feature_reports = URBANopt::Reporting::DefaultReports::FeatureReport.from_simulation_dir(simulation_dir)
|
75
83
|
|
@@ -86,6 +94,9 @@ module URBANopt
|
|
86
94
|
|
87
95
|
# Create database file with scenario-level results
|
88
96
|
# Sum values for each timestep across all features. Save to new table in a new database
|
97
|
+
##
|
98
|
+
# [parameters:]
|
99
|
+
# * +file_name+ - _String_ - Assign a name to the saved scenario results file
|
89
100
|
def create_scenario_db_file(file_name = @default_save_name)
|
90
101
|
new_db_file = File.join(@initialization_hash[:directory_name], "#{file_name}.db")
|
91
102
|
scenario_db = SQLite3::Database.open new_db_file
|
@@ -97,8 +108,9 @@ module URBANopt
|
|
97
108
|
Hour VARCHAR(255),
|
98
109
|
Minute VARCHAR(255),
|
99
110
|
Dst INTEGER,
|
100
|
-
|
101
|
-
Value INTEGER
|
111
|
+
FuelType VARCHAR(255),
|
112
|
+
Value INTEGER,
|
113
|
+
FuelUnits VARCHAR(255)
|
102
114
|
)"
|
103
115
|
|
104
116
|
values_arr = []
|
@@ -121,18 +133,19 @@ module URBANopt
|
|
121
133
|
else
|
122
134
|
raise "Couldn't find scenario CSV: #{scenario_csv}"
|
123
135
|
end
|
124
|
-
feature_1_name = File.basename(feature_list[0]) # Get name of first feature, so we can read eplusout.sql from there
|
125
|
-
uo_output_sql_file = File.join(@initialization_hash[:directory_name], feature_1_name, 'eplusout.sql')
|
126
136
|
feature_list.each do |feature| # Loop through each feature in the scenario
|
137
|
+
uo_output_sql_file = File.join(@initialization_hash[:directory_name], File.basename(feature), 'eplusout.sql')
|
127
138
|
feature_db = SQLite3::Database.open uo_output_sql_file
|
128
139
|
# Doing "db.results_as_hash = true" is prettier, but in this case significantly slower.
|
129
140
|
|
130
|
-
|
131
|
-
|
132
|
-
elec_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour, Time.Minute, Time.Dst, ReportData.Value
|
141
|
+
elec_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour,
|
142
|
+
Time.Minute, Time.Dst, ReportData.Value
|
133
143
|
FROM ReportData
|
134
144
|
INNER JOIN Time ON Time.TimeIndex=ReportData.TimeIndex
|
135
|
-
|
145
|
+
INNER JOIN ReportDataDictionary AS rddi ON rddi.ReportDataDictionaryIndex=ReportData.ReportDataDictionaryIndex
|
146
|
+
WHERE rddi.IndexGroup == 'Facility:Electricity'
|
147
|
+
AND rddi.ReportingFrequency == 'Zone Timestep'
|
148
|
+
AND Time.Year > 1900
|
136
149
|
ORDER BY ReportData.TimeIndex"
|
137
150
|
|
138
151
|
elec_query.each do |row| # Add up all the values for electricity usage across all Features at this timestep
|
@@ -149,12 +162,14 @@ module URBANopt
|
|
149
162
|
end # End elec_query
|
150
163
|
elec_query.close
|
151
164
|
|
152
|
-
|
153
|
-
|
154
|
-
gas_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour, Time.Minute, Time.Dst, ReportData.Value
|
165
|
+
gas_query = feature_db.query "SELECT ReportData.TimeIndex, Time.Year, Time.Month, Time.Day, Time.Hour,
|
166
|
+
Time.Minute, Time.Dst, ReportData.Value
|
155
167
|
FROM ReportData
|
156
168
|
INNER JOIN Time ON Time.TimeIndex=ReportData.TimeIndex
|
157
|
-
|
169
|
+
INNER JOIN ReportDataDictionary AS rddi ON rddi.ReportDataDictionaryIndex=ReportData.ReportDataDictionaryIndex
|
170
|
+
WHERE rddi.IndexGroup == 'Facility:Gas'
|
171
|
+
AND rddi.ReportingFrequency == 'Zone Timestep'
|
172
|
+
AND Time.Year > 1900
|
158
173
|
ORDER BY ReportData.TimeIndex"
|
159
174
|
|
160
175
|
gas_query.each do |row|
|
@@ -175,8 +190,8 @@ module URBANopt
|
|
175
190
|
elec_sql = []
|
176
191
|
gas_sql = []
|
177
192
|
values_arr.each do |i|
|
178
|
-
elec_sql << "(#{i[:time_index]}, #{i[:year]}, #{i[:month]}, #{i[:day]}, #{i[:hour]}, #{i[:minute]}, #{i[:dst]},
|
179
|
-
gas_sql << "(#{i[:time_index]}, #{i[:year]}, #{i[:month]}, #{i[:day]}, #{i[:hour]}, #{i[:minute]}, #{i[:dst]},
|
193
|
+
elec_sql << "(#{i[:time_index]}, #{i[:year]}, #{i[:month]}, #{i[:day]}, #{i[:hour]}, #{i[:minute]}, #{i[:dst]}, 'Electricity', #{i[:elec_val]}, 'J')"
|
194
|
+
gas_sql << "(#{i[:time_index]}, #{i[:year]}, #{i[:month]}, #{i[:day]}, #{i[:hour]}, #{i[:minute]}, #{i[:dst]}, 'Gas', #{i[:gas_val]}, 'J')"
|
180
195
|
end
|
181
196
|
|
182
197
|
# Put summed Values into the database
|
@@ -189,7 +204,7 @@ module URBANopt
|
|
189
204
|
# Save scenario result
|
190
205
|
##
|
191
206
|
# [parameters:]
|
192
|
-
# +file_name+ - _String_ - Assign a name to the saved scenario results file
|
207
|
+
# * +file_name+ - _String_ - Assign a name to the saved scenario results file
|
193
208
|
def save(file_name = @default_save_name)
|
194
209
|
@scenario_result.save
|
195
210
|
|
@@ -1,21 +1,31 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
|
-
|
4
|
+
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
6
6
|
# are permitted provided that the following conditions are met:
|
7
|
-
|
7
|
+
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
9
9
|
# of conditions and the following disclaimer.
|
10
|
-
|
10
|
+
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
13
13
|
# materials provided with the distribution.
|
14
|
-
|
14
|
+
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
17
17
|
# prior written permission.
|
18
|
-
|
18
|
+
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
27
|
+
# consent of Alliance.
|
28
|
+
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
@@ -34,7 +44,6 @@ require 'urbanopt/reporting/default_reports'
|
|
34
44
|
require 'csv'
|
35
45
|
require 'json'
|
36
46
|
require 'fileutils'
|
37
|
-
require 'pathname'
|
38
47
|
|
39
48
|
module URBANopt
|
40
49
|
module Scenario
|
@@ -43,8 +52,8 @@ module URBANopt
|
|
43
52
|
# OpenDSSPostProcessor post-processes OpenDSS results to selected OpenDSS results and integrate them in scenario and feature reports.
|
44
53
|
##
|
45
54
|
# [parameters:]
|
46
|
-
# +scenario_report+ - _ScenarioBase_ - An object of Scenario_report class.
|
47
|
-
# +opendss_results_dir_name+ - _directory name of opendss results
|
55
|
+
# * +scenario_report+ - _ScenarioBase_ - An object of Scenario_report class.
|
56
|
+
# * +opendss_results_dir_name+ - _directory name of opendss results
|
48
57
|
def initialize(scenario_report, opendss_results_dir_name = 'opendss')
|
49
58
|
if !scenario_report.nil?
|
50
59
|
@scenario_report = scenario_report
|
@@ -202,9 +211,9 @@ module URBANopt
|
|
202
211
|
# Save csv report method
|
203
212
|
##
|
204
213
|
# [parameters:]
|
205
|
-
# +feature_report+ - _feature report object_ - An onject of the feature report
|
206
|
-
# +updated_feature_report_csv+ - _CSV_ - An updated feature report csv
|
207
|
-
# +file_name+ - _String_ - Assigned name to save the file with no extension
|
214
|
+
# * +feature_report+ - _feature report object_ - An onject of the feature report
|
215
|
+
# * +updated_feature_report_csv+ - _CSV_ - An updated feature report csv
|
216
|
+
# * +file_name+ - _String_ - Assigned name to save the file with no extension
|
208
217
|
def save_csv(feature_report, updated_feature_report_csv, file_name = 'default_feature_report')
|
209
218
|
File.write(File.join(feature_report.directory_name, 'feature_reports', "#{file_name}.csv"), updated_feature_report_csv)
|
210
219
|
end
|
@@ -213,7 +222,7 @@ module URBANopt
|
|
213
222
|
# create opendss json report results
|
214
223
|
##
|
215
224
|
# [parameters:]
|
216
|
-
# +feature_report+ - _feature report object_ - An onject of the feature report
|
225
|
+
# * +feature_report+ - _feature report object_ - An onject of the feature report
|
217
226
|
def add_summary_results(feature_report)
|
218
227
|
under_voltage_hrs = 0
|
219
228
|
over_voltage_hrs = 0
|
@@ -258,7 +267,7 @@ module URBANopt
|
|
258
267
|
updated_feature_csv = merge_data(@feature_reports_data[id], @opendss_data[id])
|
259
268
|
|
260
269
|
# save fetaure reports
|
261
|
-
feature_report.
|
270
|
+
feature_report.save_json_report('default_feature_report_opendss')
|
262
271
|
|
263
272
|
# resave updated csv report
|
264
273
|
save_csv(feature_report, updated_feature_csv, 'default_feature_report_opendss')
|
@@ -268,7 +277,8 @@ module URBANopt
|
|
268
277
|
save_transformers_reports
|
269
278
|
|
270
279
|
# save the updated scenario reports
|
271
|
-
|
280
|
+
# set save_feature_reports to false since only the scenario reports should be saved now
|
281
|
+
@scenario_report.save(file_name = 'scenario_report_opendss', save_feature_reports = false)
|
272
282
|
end
|
273
283
|
end
|
274
284
|
end
|
@@ -1,21 +1,31 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
|
-
|
4
|
+
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
6
6
|
# are permitted provided that the following conditions are met:
|
7
|
-
|
7
|
+
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
9
9
|
# of conditions and the following disclaimer.
|
10
|
-
|
10
|
+
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
13
13
|
# materials provided with the distribution.
|
14
|
-
|
14
|
+
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
17
17
|
# prior written permission.
|
18
|
-
|
18
|
+
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
27
|
+
# consent of Alliance.
|
28
|
+
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
@@ -40,8 +50,9 @@ module URBANopt
|
|
40
50
|
# Create all SimulationDirs for Scenario.
|
41
51
|
##
|
42
52
|
# [parameters:]
|
43
|
-
# +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for scenario.
|
44
|
-
# +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files
|
53
|
+
# * +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for scenario.
|
54
|
+
# * +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files
|
55
|
+
##
|
45
56
|
# [return:] _Array_ Returns an array of all SimulationDirs, even those created previously, for Scenario.
|
46
57
|
def create_simulation_files(scenario, force_clear = false)
|
47
58
|
raise 'create_input_files is not implemented for ScenarioRunnerBase, override in your class'
|
@@ -51,9 +62,9 @@ module URBANopt
|
|
51
62
|
# Create and run all SimulationFiles for Scenario.
|
52
63
|
##
|
53
64
|
# [parameters:]
|
54
|
-
# +scenario+ - _ScenarioBase_ - Scenario to create and run simulation input files for.
|
55
|
-
# +force_clear+ - _Bool_ - Clear Scenario before creating Simulation input files.
|
56
|
-
|
65
|
+
# * +scenario+ - _ScenarioBase_ - Scenario to create and run simulation input files for.
|
66
|
+
# * +force_clear+ - _Bool_ - Clear Scenario before creating Simulation input files.
|
67
|
+
##
|
57
68
|
# [return:] _Array_ Returns an array of all SimulationDirs, even those created previously, for Scenario.
|
58
69
|
def run(scenario, force_clear = false, options = {})
|
59
70
|
raise 'run is not implemented for ScenarioRunnerBase, override in your class'
|
@@ -1,21 +1,31 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
|
-
|
4
|
+
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
6
6
|
# are permitted provided that the following conditions are met:
|
7
|
-
|
7
|
+
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
9
9
|
# of conditions and the following disclaimer.
|
10
|
-
|
10
|
+
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
13
13
|
# materials provided with the distribution.
|
14
|
-
|
14
|
+
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
17
17
|
# prior written permission.
|
18
|
-
|
18
|
+
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
27
|
+
# consent of Alliance.
|
28
|
+
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
@@ -46,8 +56,9 @@ module URBANopt
|
|
46
56
|
# Create all OSWs for Scenario.
|
47
57
|
##
|
48
58
|
# [parameters:]
|
49
|
-
# +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for.
|
50
|
-
# +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files.
|
59
|
+
# * +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for.
|
60
|
+
# * +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files.
|
61
|
+
##
|
51
62
|
# [return:] _Array_ Returns array of all SimulationDirs, even those created previously, for Scenario.
|
52
63
|
def create_simulation_files(scenario, force_clear = false)
|
53
64
|
if force_clear
|
@@ -79,8 +90,9 @@ module URBANopt
|
|
79
90
|
# - Run osw file groups in order and store simulation failure in a array.
|
80
91
|
##
|
81
92
|
# [parameters:]
|
82
|
-
# +scenario+ - _ScenarioBase_ - Scenario to create and run SimulationFiles for.
|
83
|
-
# +force_clear+ - _Bool_ - Clear Scenario before creating SimulationFiles.
|
93
|
+
# * +scenario+ - _ScenarioBase_ - Scenario to create and run SimulationFiles for.
|
94
|
+
# * +force_clear+ - _Bool_ - Clear Scenario before creating SimulationFiles.
|
95
|
+
##
|
84
96
|
# [return:] _Array_ Returns array of all SimulationFiles, even those created previously, for Scenario.
|
85
97
|
def run(scenario, force_clear = false, options = {})
|
86
98
|
# instantiate openstudio runner - use the defaults for now. If need to change then create
|
@@ -1,21 +1,31 @@
|
|
1
1
|
# *********************************************************************************
|
2
|
-
# URBANopt
|
2
|
+
# URBANopt™, Copyright (c) 2019-2021, Alliance for Sustainable Energy, LLC, and other
|
3
3
|
# contributors. All rights reserved.
|
4
|
-
|
4
|
+
|
5
5
|
# Redistribution and use in source and binary forms, with or without modification,
|
6
6
|
# are permitted provided that the following conditions are met:
|
7
|
-
|
7
|
+
|
8
8
|
# Redistributions of source code must retain the above copyright notice, this list
|
9
9
|
# of conditions and the following disclaimer.
|
10
|
-
|
10
|
+
|
11
11
|
# Redistributions in binary form must reproduce the above copyright notice, this
|
12
12
|
# list of conditions and the following disclaimer in the documentation and/or other
|
13
13
|
# materials provided with the distribution.
|
14
|
-
|
14
|
+
|
15
15
|
# Neither the name of the copyright holder nor the names of its contributors may be
|
16
16
|
# used to endorse or promote products derived from this software without specific
|
17
17
|
# prior written permission.
|
18
|
-
|
18
|
+
|
19
|
+
# Redistribution of this software, without modification, must refer to the software
|
20
|
+
# by the same designation. Redistribution of a modified version of this software
|
21
|
+
# (i) may not refer to the modified version by the same designation, or by any
|
22
|
+
# confusingly similar designation, and (ii) must refer to the underlying software
|
23
|
+
# originally provided by Alliance as “URBANopt”. Except to comply with the foregoing,
|
24
|
+
# the term “URBANopt”, or any confusingly similar designation may not be used to
|
25
|
+
# refer to any modified version of this software or any modified version of the
|
26
|
+
# underlying software originally provided by Alliance without the prior written
|
27
|
+
# consent of Alliance.
|
28
|
+
|
19
29
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
20
30
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
21
31
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
@@ -31,21 +41,22 @@
|
|
31
41
|
require 'csv'
|
32
42
|
require 'date'
|
33
43
|
require 'json'
|
34
|
-
require 'fileutils'
|
35
44
|
|
36
45
|
module URBANopt
|
37
46
|
module Scenario
|
38
47
|
class ResultVisualization
|
39
|
-
def self.create_visualization(run_dir, feature = true)
|
48
|
+
def self.create_visualization(run_dir, feature = true, feature_names = false)
|
40
49
|
@all_results = []
|
41
|
-
run_dir.each do |folder|
|
42
|
-
name = folder.split('/')[-1]
|
43
50
|
|
51
|
+
run_dir.each do |folder|
|
44
52
|
# create visualization for scenarios
|
45
53
|
if feature == false
|
54
|
+
name = folder.split('/')[-1]
|
46
55
|
csv_dir = File.join(folder, 'default_scenario_report.csv')
|
47
56
|
# create visualization for features
|
48
57
|
elsif feature == true
|
58
|
+
index = run_dir.index(folder)
|
59
|
+
name = folder.split('/')[-1] + '-' + feature_names[index]
|
49
60
|
csv_dir = File.join(folder, 'feature_reports/default_feature_report.csv')
|
50
61
|
end
|
51
62
|
|
@@ -181,14 +192,13 @@ module URBANopt
|
|
181
192
|
monthly_sum_dec += v.to_f
|
182
193
|
i += 1
|
183
194
|
end
|
184
|
-
|
185
|
-
if k <= size
|
186
|
-
annual_sum += v.to_f
|
187
|
-
k += 1
|
188
|
-
end
|
195
|
+
|
189
196
|
end
|
190
197
|
end
|
191
198
|
|
199
|
+
# sum up monthly values for annual aggregate
|
200
|
+
annual_sum = monthly_sum_jan + monthly_sum_feb + monthly_sum_mar + monthly_sum_apr + monthly_sum_may + monthly_sum_jun + monthly_sum_jul + monthly_sum_aug + monthly_sum_sep + monthly_sum_oct + monthly_sum_nov + monthly_sum_dec
|
201
|
+
|
192
202
|
# store headers as key and monthly sums as values for each header
|
193
203
|
monthly_totals[headers_unitless[j]] = [monthly_sum_jan, monthly_sum_feb, monthly_sum_mar, monthly_sum_apr, monthly_sum_may, monthly_sum_jun, monthly_sum_jul, monthly_sum_aug, monthly_sum_sep, monthly_sum_oct, monthly_sum_nov, monthly_sum_dec]
|
194
204
|
|