urbanopt-scenario 0.3.0 → 0.4.4

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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +3 -3
  3. data/.gitignore +2 -0
  4. data/CHANGELOG.md +61 -0
  5. data/CONTRIBUTING.md +1 -1
  6. data/Gemfile +33 -17
  7. data/Jenkinsfile +1 -1
  8. data/LICENSE.md +1 -1
  9. data/RDOC_MAIN.md +2 -2
  10. data/README.md +1 -1
  11. data/Rakefile +1 -1
  12. data/docs/.vuepress/components/InnerJsonSchema.vue +7 -15
  13. data/docs/.vuepress/config.js +13 -9
  14. data/docs/.vuepress/highlight.js +1 -1
  15. data/docs/.vuepress/json-schema-deref-loader.js +22 -0
  16. data/docs/README.md +2 -2
  17. data/docs/package-lock.json +2384 -2323
  18. data/docs/package.json +12 -8
  19. data/lib/urbanopt-scenario.rb +1 -1
  20. data/lib/urbanopt/scenario.rb +2 -1
  21. data/lib/urbanopt/scenario/default_reports.rb +3 -8
  22. data/lib/urbanopt/scenario/extension.rb +6 -4
  23. data/lib/urbanopt/scenario/logger.rb +1 -1
  24. data/lib/urbanopt/scenario/scenario_base.rb +5 -5
  25. data/lib/urbanopt/scenario/scenario_csv.rb +29 -17
  26. data/lib/urbanopt/scenario/scenario_datapoint_base.rb +12 -5
  27. data/lib/urbanopt/scenario/scenario_post_processor_base.rb +3 -3
  28. data/lib/urbanopt/scenario/scenario_post_processor_default.rb +120 -11
  29. data/lib/urbanopt/scenario/scenario_post_processor_opendss.rb +13 -14
  30. data/lib/urbanopt/scenario/scenario_runner_base.rb +8 -7
  31. data/lib/urbanopt/scenario/scenario_runner_osw.rb +29 -13
  32. data/lib/urbanopt/scenario/scenario_visualization.rb +235 -0
  33. data/lib/urbanopt/scenario/simulation_dir_base.rb +4 -4
  34. data/lib/urbanopt/scenario/simulation_dir_osw.rb +6 -9
  35. data/lib/urbanopt/scenario/simulation_mapper_base.rb +4 -4
  36. data/lib/urbanopt/scenario/version.rb +2 -2
  37. data/package-lock.json +3 -0
  38. data/urbanopt-scenario-gem.gemspec +10 -6
  39. metadata +78 -52
  40. data/doc_templates/LICENSE.md +0 -27
  41. data/doc_templates/README.md.erb +0 -42
  42. data/doc_templates/copyright_erb.txt +0 -31
  43. data/doc_templates/copyright_js.txt +0 -4
  44. data/doc_templates/copyright_ruby.txt +0 -29
  45. data/docs/.vuepress/components/ScenarioSchema.vue +0 -12
  46. data/docs/schemas/scenario-schema.md +0 -3
  47. data/lib/measures/.rubocop.yml +0 -5
  48. data/lib/measures/default_feature_reports/LICENSE.md +0 -27
  49. data/lib/measures/default_feature_reports/README.md +0 -26
  50. data/lib/measures/default_feature_reports/README.md.erb +0 -42
  51. data/lib/measures/default_feature_reports/measure.rb +0 -1013
  52. data/lib/measures/default_feature_reports/measure.xml +0 -160
  53. data/lib/urbanopt/scenario/default_reports/construction_cost.rb +0 -169
  54. data/lib/urbanopt/scenario/default_reports/date.rb +0 -97
  55. data/lib/urbanopt/scenario/default_reports/distributed_generation.rb +0 -379
  56. data/lib/urbanopt/scenario/default_reports/end_use.rb +0 -159
  57. data/lib/urbanopt/scenario/default_reports/end_uses.rb +0 -140
  58. data/lib/urbanopt/scenario/default_reports/feature_report.rb +0 -267
  59. data/lib/urbanopt/scenario/default_reports/generator.rb +0 -92
  60. data/lib/urbanopt/scenario/default_reports/location.rb +0 -99
  61. data/lib/urbanopt/scenario/default_reports/logger.rb +0 -44
  62. data/lib/urbanopt/scenario/default_reports/power_distribution.rb +0 -102
  63. data/lib/urbanopt/scenario/default_reports/program.rb +0 -265
  64. data/lib/urbanopt/scenario/default_reports/reporting_period.rb +0 -304
  65. data/lib/urbanopt/scenario/default_reports/scenario_report.rb +0 -317
  66. data/lib/urbanopt/scenario/default_reports/schema/README.md +0 -33
  67. data/lib/urbanopt/scenario/default_reports/schema/scenario_csv_columns.txt +0 -34
  68. data/lib/urbanopt/scenario/default_reports/schema/scenario_schema.json +0 -857
  69. data/lib/urbanopt/scenario/default_reports/solar_pv.rb +0 -93
  70. data/lib/urbanopt/scenario/default_reports/storage.rb +0 -105
  71. data/lib/urbanopt/scenario/default_reports/timeseries_csv.rb +0 -299
  72. data/lib/urbanopt/scenario/default_reports/validator.rb +0 -97
  73. data/lib/urbanopt/scenario/default_reports/wind.rb +0 -92
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
+ # URBANopt (tm), Copyright (c) 2019-2020, 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,
@@ -40,8 +40,9 @@ module URBANopt
40
40
  # Create all SimulationDirs for Scenario.
41
41
  ##
42
42
  # [parameters:]
43
- # +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for scenario.
44
- # +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files
43
+ # * +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for scenario.
44
+ # * +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files
45
+ ##
45
46
  # [return:] _Array_ Returns an array of all SimulationDirs, even those created previously, for Scenario.
46
47
  def create_simulation_files(scenario, force_clear = false)
47
48
  raise 'create_input_files is not implemented for ScenarioRunnerBase, override in your class'
@@ -51,11 +52,11 @@ module URBANopt
51
52
  # Create and run all SimulationFiles for Scenario.
52
53
  ##
53
54
  # [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
- #
55
+ # * +scenario+ - _ScenarioBase_ - Scenario to create and run simulation input files for.
56
+ # * +force_clear+ - _Bool_ - Clear Scenario before creating Simulation input files.
57
+ ##
57
58
  # [return:] _Array_ Returns an array of all SimulationDirs, even those created previously, for Scenario.
58
- def run(scenario, force_clear = false)
59
+ def run(scenario, force_clear = false, options = {})
59
60
  raise 'run is not implemented for ScenarioRunnerBase, override in your class'
60
61
  end
61
62
  end
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
+ # URBANopt (tm), Copyright (c) 2019-2020, 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,
@@ -46,8 +46,9 @@ module URBANopt
46
46
  # Create all OSWs for Scenario.
47
47
  ##
48
48
  # [parameters:]
49
- # +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for.
50
- # +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files.
49
+ # * +scenario+ - _ScenarioBase_ - Scenario to create simulation input files for.
50
+ # * +force_clear+ - _Bool_ - Clear Scenario before creating simulation input files.
51
+ ##
51
52
  # [return:] _Array_ Returns array of all SimulationDirs, even those created previously, for Scenario.
52
53
  def create_simulation_files(scenario, force_clear = false)
53
54
  if force_clear
@@ -55,6 +56,7 @@ module URBANopt
55
56
  end
56
57
 
57
58
  FileUtils.mkdir_p(scenario.run_dir) if !File.exist?(scenario.run_dir)
59
+ FileUtils.rm_rf(File.join(scenario.run_dir, 'run_status.json')) if File.exist?(File.join(scenario.run_dir, 'run_status.json'))
58
60
 
59
61
  simulation_dirs = scenario.simulation_dirs
60
62
 
@@ -78,13 +80,15 @@ module URBANopt
78
80
  # - Run osw file groups in order and store simulation failure in a array.
79
81
  ##
80
82
  # [parameters:]
81
- # +scenario+ - _ScenarioBase_ - Scenario to create and run SimulationFiles for.
82
- # +force_clear+ - _Bool_ - Clear Scenario before creating SimulationFiles.
83
+ # * +scenario+ - _ScenarioBase_ - Scenario to create and run SimulationFiles for.
84
+ # * +force_clear+ - _Bool_ - Clear Scenario before creating SimulationFiles.
85
+ ##
83
86
  # [return:] _Array_ Returns array of all SimulationFiles, even those created previously, for Scenario.
84
- def run(scenario, force_clear = false)
87
+ def run(scenario, force_clear = false, options = {})
85
88
  # instantiate openstudio runner - use the defaults for now. If need to change then create
86
89
  # the runner.conf file (i.e. run `rake openstudio:runner:init`)
87
- runner = OpenStudio::Extension::Runner.new(scenario.root_dir)
90
+ # allow passing gemfile_path and bundle_install_path in options
91
+ runner = OpenStudio::Extension::Runner.new(scenario.root_dir, [], options)
88
92
 
89
93
  # create simulation files
90
94
  simulation_dirs = create_simulation_files(scenario, force_clear)
@@ -156,18 +160,30 @@ module URBANopt
156
160
  # puts "DATAPOINT FAILURES: #{failures}"
157
161
  # end
158
162
 
159
- # look for other failed datapoints
163
+ # write results to file and to command line
164
+ get_results(scenario, simulation_dirs)
165
+
166
+ return simulation_dirs
167
+ end
168
+
169
+ def get_results(scenario, simulation_dirs)
170
+ # look for other failed datapoints (command line display)
171
+ # also compile datapoint status for latest_run.json file
172
+ status_arr = []
160
173
  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]
174
+ simulation_dirs.each do |sim_dir|
175
+ if File.exist?(sim_dir.failed_job_path)
176
+ failed_sims << sim_dir.run_dir.split('/')[-1]
164
177
  end
178
+ status_arr << { "id": sim_dir.feature_id, "status": sim_dir.simulation_status, "mapper_class": sim_dir.mapper_class }
165
179
  end
180
+
181
+ # write to file
182
+ File.open(File.join(scenario.run_dir, 'run_status.json'), 'w') { |f| f.write JSON.pretty_generate("timestamp": Time.now.strftime('%Y-%m-%dT%k:%M:%S.%L'), "results": status_arr) }
183
+
166
184
  if !failed_sims.empty?
167
185
  puts "FAILED SIMULATION IDs: #{failed_sims.join(',')}"
168
186
  end
169
-
170
- return simulation_dirs
171
187
  end
172
188
  end
173
189
  end
@@ -0,0 +1,235 @@
1
+ # *********************************************************************************
2
+ # URBANopt (tm), 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 'csv'
32
+ require 'date'
33
+ require 'json'
34
+ require 'fileutils'
35
+
36
+ module URBANopt
37
+ module Scenario
38
+ class ResultVisualization
39
+ def self.create_visualization(run_dir, feature = true)
40
+ @all_results = []
41
+ run_dir.each do |folder|
42
+ name = folder.split('/')[-1]
43
+
44
+ # create visualization for scenarios
45
+ if feature == false
46
+ csv_dir = File.join(folder, 'default_scenario_report.csv')
47
+ # create visualization for features
48
+ elsif feature == true
49
+ csv_dir = File.join(folder, 'feature_reports/default_feature_report.csv')
50
+ end
51
+
52
+ if File.exist?(csv_dir)
53
+ size = CSV.open(csv_dir).readlines.size
54
+
55
+ monthly_values = {}
56
+ monthly_totals = {}
57
+ annual_values = {}
58
+
59
+ headers_unitless = []
60
+ i = 0
61
+ CSV.foreach(csv_dir).map do |row|
62
+ if i == 0
63
+ # store header values from csv
64
+ headers = row
65
+ headers.each do |header|
66
+ header_unitless = header.to_s.split('(')[0]
67
+ headers_unitless << header_unitless
68
+ monthly_values[header_unitless] = []
69
+ end
70
+ # store values from csv for each row
71
+ elsif i <= size
72
+ headers_unitless.each_index do |j|
73
+ monthly_values[headers_unitless[j]] << row[j]
74
+ end
75
+ end
76
+ i += 1
77
+ end
78
+
79
+ if monthly_values['Datetime'][0].split(/\W+/)[0].to_f > 31
80
+ format = '%Y/%m/%d %H:%M'
81
+ year = monthly_values['Datetime'][0].split(/\W+/)[0]
82
+ else
83
+ format = '%m/%d/%Y %H:%M'
84
+ year = monthly_values['Datetime'][0].split(/\W+/)[2]
85
+ end
86
+
87
+ # create dates for each month
88
+ jan_date = DateTime.new(year.to_i, 1, 1, 1, 0)
89
+ feb_date = DateTime.new(year.to_i, 2, 1, 0, 0)
90
+ mar_date = DateTime.new(year.to_i, 3, 1, 0, 0)
91
+ apr_date = DateTime.new(year.to_i, 4, 1, 0, 0)
92
+ may_date = DateTime.new(year.to_i, 5, 1, 0, 0)
93
+ jun_date = DateTime.new(year.to_i, 6, 1, 0, 0)
94
+ jul_date = DateTime.new(year.to_i, 7, 1, 0, 0)
95
+ aug_date = DateTime.new(year.to_i, 8, 1, 0, 0)
96
+ sep_date = DateTime.new(year.to_i, 9, 1, 0, 0)
97
+ oct_date = DateTime.new(year.to_i, 10, 1, 0, 0)
98
+ nov_date = DateTime.new(year.to_i, 11, 1, 0, 0)
99
+ dec_date = DateTime.new(year.to_i, 12, 1, 0, 0)
100
+ jan_next_year = DateTime.new(year.to_i + 1, 1, 1, 0, 0)
101
+
102
+ monthly_values['Datetime'].each do |i|
103
+ date_obj = DateTime.strptime(i.to_s, format)
104
+ index = monthly_values['Datetime'].index(i)
105
+
106
+ # store index of each date from the csv
107
+ if feb_date == date_obj
108
+ @feb_index = index
109
+ elsif mar_date == date_obj
110
+ @mar_index = index
111
+ elsif apr_date == date_obj
112
+ @apr_index = index
113
+ elsif may_date == date_obj
114
+ @may_index = index
115
+ elsif jun_date == date_obj
116
+ @jun_index = index
117
+ elsif jul_date == date_obj
118
+ @jul_index = index
119
+ elsif aug_date == date_obj
120
+ @aug_index = index
121
+ elsif sep_date == date_obj
122
+ @sep_index = index
123
+ elsif oct_date == date_obj
124
+ @oct_index = index
125
+ elsif nov_date == date_obj
126
+ @nov_index = index
127
+ elsif dec_date == date_obj
128
+ @dec_index = index
129
+ elsif jan_next_year == date_obj
130
+ @jan_next_year_index = index
131
+ end
132
+ end
133
+
134
+ headers_unitless.each_index do |j|
135
+ i = 0
136
+ k = 0
137
+
138
+ 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 = annual_sum = 0
139
+
140
+ # loop through values for each header
141
+ all_values = monthly_values[headers_unitless[j]]
142
+
143
+ unless @jan_next_year_index.nil? || @feb_index.nil? || @mar_index.nil? || @apr_index.nil? || @may_index.nil? || @jun_index.nil? || @jul_index.nil? || @aug_index.nil? || @sep_index.nil? || @oct_index.nil? || @nov_index.nil? || @dec_index.nil?
144
+
145
+ # for each header store monthly sums of values
146
+ all_values.each do |v|
147
+ if i < @feb_index
148
+ monthly_sum_jan += v.to_f
149
+ i += 1
150
+ elsif @feb_index <= i && i < @mar_index
151
+ monthly_sum_feb += v.to_f
152
+ i += 1
153
+ elsif @mar_index <= i && i < @apr_index
154
+ monthly_sum_mar += v.to_f
155
+ i += 1
156
+ elsif @apr_index <= i && i < @may_index
157
+ monthly_sum_apr += v.to_f
158
+ i += 1
159
+ elsif @may_index <= i && i < @jun_index
160
+ monthly_sum_may += v.to_f
161
+ i += 1
162
+ elsif @jun_index <= i && i < @jul_index
163
+ monthly_sum_jun += v.to_f
164
+ i += 1
165
+ elsif @jul_index <= i && i < @aug_index
166
+ monthly_sum_jul += v.to_f
167
+ i += 1
168
+ elsif @aug_index <= i && i < @sep_index
169
+ monthly_sum_aug += v.to_f
170
+ i += 1
171
+ elsif @sep_index <= i && i < @oct_index
172
+ monthly_sum_sep += v.to_f
173
+ i += 1
174
+ elsif @oct_index <= i && i < @nov_index
175
+ monthly_sum_oct += v.to_f
176
+ i += 1
177
+ elsif @nov_index <= i && i < @dec_index
178
+ monthly_sum_nov += v.to_f
179
+ i += 1
180
+ elsif @dec_index <= i && i < @jan_next_year_index
181
+ monthly_sum_dec += v.to_f
182
+ i += 1
183
+ end
184
+
185
+ end
186
+ end
187
+
188
+ # sum up monthly values for annual aggregate
189
+ 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
190
+
191
+ # store headers as key and monthly sums as values for each header
192
+ 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]
193
+
194
+ annual_values[headers_unitless[j]] = annual_sum
195
+ end
196
+
197
+ @results = {}
198
+ @results['name'] = name
199
+ @results['monthly_values'] = {}
200
+ @results['annual_values'] = {}
201
+
202
+ if @jan_next_year_index.nil? || @feb_index.nil? || @mar_index.nil? || @apr_index.nil? || @may_index.nil? || @jun_index.nil? || @jul_index.nil? || @aug_index.nil? || @sep_index.nil? || @oct_index.nil? || @nov_index.nil? || @dec_index.nil?
203
+ @results['complete_simulation'] = false
204
+ puts "#{name} did not contain an annual simulation…visualizations will not render for it."
205
+ else
206
+ @results['complete_simulation'] = true
207
+ end
208
+
209
+ monthly_totals&.each do |key, value|
210
+ unless key == 'Datetime'
211
+ @results['monthly_values'][key] = value
212
+ end
213
+ end
214
+
215
+ annual_values&.each do |key, value|
216
+ unless key == 'Datetime'
217
+ @results['annual_values'][key] = value
218
+ end
219
+ end
220
+
221
+ end
222
+
223
+ unless @results.nil?
224
+ @all_results << @results
225
+ end
226
+ end
227
+ # create json with required data stored in a variable
228
+ results_path = File.join(run_dir[0], '../scenarioData.js')
229
+ File.open(results_path, 'w') do |file|
230
+ file << "var scenarioData = #{JSON.pretty_generate(@all_results)};"
231
+ end
232
+ end
233
+ end # ResultVisualization
234
+ end # Scenario
235
+ end # URBANopt
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
+ # URBANopt (tm), Copyright (c) 2019-2020, 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,
@@ -35,9 +35,9 @@ module URBANopt
35
35
  # SimulationDirBase is the agnostic representation of a directory of simulation input files.
36
36
  ##
37
37
  # [parameters:]
38
- # +scenario+ - _ScenarioBase_ - Scenario containing this SimulationDirBase.
39
- # +features+ - _Array_ - Array of Features that this SimulationDirBase represents.
40
- # +feature_names+ - _Array_ - Array of scenario specific names for these Features.
38
+ # * +scenario+ - _ScenarioBase_ - Scenario containing this SimulationDirBase.
39
+ # * +features+ - _Array_ - Array of Features that this SimulationDirBase represents.
40
+ # * +feature_names+ - _Array_ - Array of scenario specific names for these Features.
41
41
  def initialize(scenario, features, feature_names)
42
42
  @scenario = scenario
43
43
  @features = features
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
+ # URBANopt (tm), Copyright (c) 2019-2020, 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,
@@ -37,10 +37,10 @@ module URBANopt
37
37
  # SimulationDirOSW creates a OSW file to simulate features, a SimulationMapperBase is invoked to translate features to OSW.
38
38
  ##
39
39
  # [parameters:]
40
- # +scenario+ - _ScenarioBase_ - Scenario containing this SimulationFileBase.
41
- # +features+ - _Array_ - Array of Features this SimulationFile represents.
42
- # +feature_names+ - _Array_ - Array of scenario specific names for these Features.
43
- # +mapper_class+ - _String_ - Name of class derived frmo SimulationMapperBase used to translate feature to simulation OSW.
40
+ # * +scenario+ - _ScenarioBase_ - Scenario containing this SimulationFileBase.
41
+ # * +features+ - _Array_ - Array of Features this SimulationFile represents.
42
+ # * +feature_names+ - _Array_ - Array of scenario specific names for these Features.
43
+ # * +mapper_class+ - _String_ - Name of class derived frmo SimulationMapperBase used to translate feature to simulation OSW.
44
44
  def initialize(scenario, features, feature_names, mapper_class)
45
45
  super(scenario, features, feature_names)
46
46
 
@@ -60,8 +60,7 @@ module URBANopt
60
60
  @mapper_class = mapper_class
61
61
  end
62
62
 
63
- attr_reader :mapper_class
64
-
63
+ attr_reader :mapper_class, :feature_id
65
64
  ##
66
65
  # Return the directory that this simulation will run in.
67
66
  ##
@@ -195,7 +194,6 @@ module URBANopt
195
194
 
196
195
  return false
197
196
  end
198
- # rubocop: enable Metrics/AbcSize #:nodoc:
199
197
 
200
198
  ##
201
199
  # Return simulation status one of {'Not Started', 'Started', 'Complete', 'Failed'}
@@ -213,7 +211,6 @@ module URBANopt
213
211
 
214
212
  return 'Not Started'
215
213
  end
216
- # rubocop: enable Style/GuardClause #:nodoc:
217
214
 
218
215
  ##
219
216
  # Clear the directory that this simulation runs in
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
+ # URBANopt (tm), Copyright (c) 2019-2020, 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,
@@ -36,9 +36,9 @@ module URBANopt
36
36
 
37
37
  # create osw file given a ScenarioBase object, features, and feature_names
38
38
  # [parameters:]
39
- # +scenario+ - _ScenarioBase_ - An object of ScenarioBase class.
40
- # +features+ - _Array_ - Array of Features.
41
- # +feature_names+ - _Array_ - Array of scenario specific names for these Features.
39
+ # * +scenario+ - _ScenarioBase_ - An object of ScenarioBase class.
40
+ # * +features+ - _Array_ - Array of Features.
41
+ # * +feature_names+ - _Array_ - Array of scenario specific names for these Features.
42
42
  def create_osw(scenario, features, feature_names)
43
43
  raise 'create_osw not implemented for SimulationMapperBase, override in your class'
44
44
  end
@@ -1,5 +1,5 @@
1
1
  # *********************************************************************************
2
- # URBANopt, Copyright (c) 2019-2020, Alliance for Sustainable Energy, LLC, and other
2
+ # URBANopt (tm), Copyright (c) 2019-2020, 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,
@@ -30,6 +30,6 @@
30
30
 
31
31
  module URBANopt
32
32
  module Scenario
33
- VERSION = '0.3.0'.freeze
33
+ VERSION = '0.4.4'.freeze
34
34
  end
35
35
  end