urbanopt-reporting 0.2.0 → 0.2.1

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +19 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +15 -0
  4. data/.github/pull_request_template.md +13 -0
  5. data/.rdoc_options +36 -0
  6. data/CHANGELOG.md +10 -0
  7. data/RDOC_MAIN.md +10 -0
  8. data/deploy_docs.sh +5 -0
  9. data/docs/.gitignore +3 -0
  10. data/docs/.vuepress/components/InnerJsonSchema.vue +76 -0
  11. data/docs/.vuepress/components/JsonSchema.vue +12 -0
  12. data/docs/.vuepress/components/ScenarioSchema.vue +12 -0
  13. data/docs/.vuepress/components/StaticLink.vue +8 -0
  14. data/docs/.vuepress/config.js +25 -0
  15. data/docs/.vuepress/highlight.js +8 -0
  16. data/docs/.vuepress/json-schema-deref-loader.js +22 -0
  17. data/docs/.vuepress/public/custom_rdoc_styles.css +78 -0
  18. data/docs/.vuepress/styles/palette.styl +1 -0
  19. data/docs/.vuepress/utils.js +17 -0
  20. data/docs/README.md +9 -0
  21. data/docs/package-lock.json +10018 -0
  22. data/docs/package.json +30 -0
  23. data/docs/schemas/scenario-schema.md +3 -0
  24. data/lib/measures/default_feature_reports/measure.rb +53 -44
  25. data/lib/urbanopt/reporting/default_reports/end_uses.rb +38 -38
  26. data/lib/urbanopt/reporting/default_reports/feature_report.rb +35 -19
  27. data/lib/urbanopt/reporting/default_reports/location.rb +11 -11
  28. data/lib/urbanopt/reporting/default_reports/program.rb +86 -86
  29. data/lib/urbanopt/reporting/default_reports/reporting_period.rb +78 -78
  30. data/lib/urbanopt/reporting/default_reports/schema/scenario_schema.json +80 -80
  31. data/lib/urbanopt/reporting/default_reports/thermal_storage.rb +10 -10
  32. data/lib/urbanopt/reporting/version.rb +1 -1
  33. data/urbanopt-reporting-gem.gemspec +4 -4
  34. metadata +35 -13
@@ -39,9 +39,9 @@ module URBANopt
39
39
  # Location include all location information.
40
40
  ##
41
41
  class Location
42
- attr_accessor :latitude, :longitude, :surface_elevation, :weather_filename #:nodoc:
42
+ attr_accessor :latitude_deg, :longitude_deg, :surface_elevation_ft, :weather_filename #:nodoc:
43
43
  ##
44
- # Location class initialize location attributes: +:latitude+ , +:longitude+ , +:surface_elevation+ , +:weather_filename+
44
+ # Location class initialize location attributes: +:latitude_deg+ , +:longitude_deg+ , +:surface_elevation_ft+ , +:weather_filename+
45
45
  ##
46
46
  # [parameters:]
47
47
  # +hash+ - _Hash_ - A hash which may contain a deserialized location.
@@ -50,9 +50,9 @@ module URBANopt
50
50
  hash.delete_if { |k, v| v.nil? }
51
51
  hash = defaults.merge(hash)
52
52
 
53
- @latitude = hash[:latitude]
54
- @longitude = hash[:longitude]
55
- @surface_elevation = hash[:surface_elevation]
53
+ @latitude_deg = hash[:latitude_deg]
54
+ @longitude_deg = hash[:longitude_deg]
55
+ @surface_elevation_ft = hash[:surface_elevation_ft]
56
56
  @weather_filename = hash[:weather_filename]
57
57
 
58
58
  # initialize class variables @@validator and @@schema
@@ -68,9 +68,9 @@ module URBANopt
68
68
  ##
69
69
  def to_hash
70
70
  result = {}
71
- result[:latitude] = @latitude if @latitude
72
- result[:longitude] = @longitude if @longitude
73
- result[:surface_elevation] = @surface_elevation if @surface_elevation
71
+ result[:latitude_deg] = @latitude_deg if @latitude_deg
72
+ result[:longitude_deg] = @longitude_deg if @longitude_deg
73
+ result[:surface_elevation_ft] = @surface_elevation_ft if @surface_elevation_ft
74
74
  result[:weather_filename] = @weather_filename if @weather_filename
75
75
 
76
76
  # validate location properties against schema
@@ -86,9 +86,9 @@ module URBANopt
86
86
  ##
87
87
  def defaults
88
88
  hash = {}
89
- hash[:latitude] = nil
90
- hash[:longitude] = nil
91
- hash[:surface_elevation] = nil
89
+ hash[:latitude_deg] = nil
90
+ hash[:longitude_deg] = nil
91
+ hash[:surface_elevation_ft] = nil
92
92
  hash[:weather_filename] = nil
93
93
 
94
94
  return hash
@@ -40,18 +40,18 @@ module URBANopt
40
40
  # Program includes all building program related information.
41
41
  ##
42
42
  class Program
43
- attr_accessor :site_area, :floor_area, :conditioned_area, :unconditioned_area, :footprint_area, :maximum_roof_height,
44
- :maximum_number_of_stories, :maximum_number_of_stories_above_ground, :parking_area, :number_of_parking_spaces,
45
- :number_of_parking_spaces_charging, :parking_footprint_area, :maximum_parking_height, :maximum_number_of_parking_stories,
43
+ attr_accessor :site_area_sqft, :floor_area_sqft, :conditioned_area_sqft, :unconditioned_area_sqft, :footprint_area_sqft, :maximum_roof_height_ft,
44
+ :maximum_number_of_stories, :maximum_number_of_stories_above_ground, :parking_area_sqft, :number_of_parking_spaces,
45
+ :number_of_parking_spaces_charging, :parking_footprint_area_sqft, :maximum_parking_height_ft, :maximum_number_of_parking_stories,
46
46
  :maximum_number_of_parking_stories_above_ground, :number_of_residential_units, :building_types, :building_type, :maximum_occupancy,
47
- :area, :window_area, :north_window_area, :south_window_area, :east_window_area, :west_window_area, :wall_area, :roof_area, :equipment_roof_area,
48
- :photovoltaic_roof_area, :available_roof_area, :total_roof_area, :orientation, :aspect_ratio, :total_construction_cost # :nodoc:
49
- # Program class initialize building program attributes: +:site_area+ , +:floor_area+ , +:conditioned_area+ , +:unconditioned_area+ ,
50
- # +:footprint_area+ , +:maximum_roof_height, +:maximum_number_of_stories+ , +:maximum_number_of_stories_above_ground+ , +:parking_area+ ,
51
- # +:number_of_parking_spaces+ , +:number_of_parking_spaces_charging+ , +:parking_footprint_area+ , +:maximum_parking_height+ , +:maximum_number_of_parking_stories+ ,
47
+ :area_sqft, :window_area_sqft, :north_window_area_sqft, :south_window_area_sqft, :east_window_area_sqft, :west_window_area_sqft, :wall_area_sqft, :roof_area_sqft, :equipment_roof_area_sqft,
48
+ :photovoltaic_roof_area_sqft, :available_roof_area_sqft, :total_roof_area_sqft, :orientation_deg, :aspect_ratio, :total_construction_cost_dollar # :nodoc:
49
+ # Program class initialize building program attributes: +:site_area_sqft+ , +:floor_area_sqft+ , +:conditioned_area_sqft+ , +:unconditioned_area_sqft+ ,
50
+ # +:footprint_area_sqft+ , +:maximum_roof_height_ft, +:maximum_number_of_stories+ , +:maximum_number_of_stories_above_ground+ , +:parking_area_sqft+ ,
51
+ # +:number_of_parking_spaces+ , +:number_of_parking_spaces_charging+ , +:parking_footprint_area_sqft+ , +:maximum_parking_height_ft+ , +:maximum_number_of_parking_stories+ ,
52
52
  # +:maximum_number_of_parking_stories_above_ground+ , +:number_of_residential_units+ , +:building_types+ , +:building_type+ , +:maximum_occupancy+ ,
53
- # +:area+ , +:window_area+ , +:north_window_area+ , +:south_window_area+ , +:east_window_area+ , +:west_window_area+ , +:wall_area+ , +:roof_area+ ,
54
- # +:equipment_roof_area+ , +:photovoltaic_roof_area+ , +:available_roof_area+ , +:total_roof_area+ , +:orientation+ , +:aspect_ratio+
53
+ # +:area_sqft+ , +:window_area_sqft+ , +:north_window_area_sqft+ , +:south_window_area_sqft+ , +:east_window_area_sqft+ , +:west_window_area_sqft+ , +:wall_area_sqft+ , +:roof_area_sqft+ ,
54
+ # +:equipment_roof_area_sqft+ , +:photovoltaic_roof_area_sqft+ , +:available_roof_area_sqft+ , +:total_roof_area_sqft+ , +:orientation_deg+ , +:aspect_ratio+
55
55
  ##
56
56
  # [parameters:]
57
57
  # +hash+ - _Hash_ - A hash which may contain a deserialized program.
@@ -60,29 +60,29 @@ module URBANopt
60
60
  hash.delete_if { |k, v| v.nil? }
61
61
  hash = defaults.merge(hash)
62
62
 
63
- @site_area = hash[:site_area]
64
- @floor_area = hash[:floor_area]
65
- @conditioned_area = hash[:conditioned_area]
66
- @unconditioned_area = hash[:unconditioned_area]
67
- @footprint_area = hash[:footprint_area]
68
- @maximum_roof_height = hash[:maximum_roof_height]
63
+ @site_area_sqft = hash[:site_area_sqft]
64
+ @floor_area_sqft = hash[:floor_area_sqft]
65
+ @conditioned_area_sqft = hash[:conditioned_area_sqft]
66
+ @unconditioned_area_sqft = hash[:unconditioned_area_sqft]
67
+ @footprint_area_sqft = hash[:footprint_area_sqft]
68
+ @maximum_roof_height_ft = hash[:maximum_roof_height_ft]
69
69
  @maximum_number_of_stories = hash[:maximum_number_of_stories]
70
70
  @maximum_number_of_stories_above_ground = hash[:maximum_number_of_stories_above_ground]
71
- @parking_area = hash[:parking_area]
71
+ @parking_area_sqft = hash[:parking_area_sqft]
72
72
  @number_of_parking_spaces = hash[:number_of_parking_spaces]
73
73
  @number_of_parking_spaces_charging = hash[:number_of_parking_spaces_charging]
74
- @parking_footprint_area = hash[:parking_footprint_area]
75
- @maximum_parking_height = hash[:maximum_parking_height]
74
+ @parking_footprint_area_sqft = hash[:parking_footprint_area_sqft]
75
+ @maximum_parking_height_ft = hash[:maximum_parking_height_ft]
76
76
  @maximum_number_of_parking_stories = hash[:maximum_number_of_parking_stories]
77
77
  @maximum_number_of_parking_stories_above_ground = hash[:maximum_number_of_parking_stories_above_ground]
78
78
  @number_of_residential_units = hash[:number_of_residential_units]
79
79
  @building_types = hash[:building_types]
80
- @window_area = hash[:window_area]
81
- @wall_area = hash[:wall_area]
82
- @roof_area = hash[:roof_area]
83
- @orientation = hash[:orientation]
80
+ @window_area_sqft = hash[:window_area_sqft]
81
+ @wall_area_sqft = hash[:wall_area_sqft]
82
+ @roof_area_sqft = hash[:roof_area_sqft]
83
+ @orientation_deg = hash[:orientation_deg]
84
84
  @aspect_ratio = hash[:aspect_ratio]
85
- @total_construction_cost = hash[:total_construction_cost]
85
+ @total_construction_cost_dollar = hash[:total_construction_cost_dollar]
86
86
 
87
87
  # initialize class variables @@validator and @@schema
88
88
  @@validator ||= Validator.new
@@ -94,29 +94,29 @@ module URBANopt
94
94
  ##
95
95
  def defaults
96
96
  hash = {}
97
- hash[:site_area] = nil
98
- hash[:floor_area] = nil
99
- hash[:conditioned_area] = nil
100
- hash[:unconditioned_area] = nil
101
- hash[:footprint_area] = nil
102
- hash[:maximum_roof_height] = nil
97
+ hash[:site_area_sqft] = nil
98
+ hash[:floor_area_sqft] = nil
99
+ hash[:conditioned_area_sqft] = nil
100
+ hash[:unconditioned_area_sqft] = nil
101
+ hash[:footprint_area_sqft] = nil
102
+ hash[:maximum_roof_height_ft] = nil
103
103
  hash[:maximum_number_of_stories] = nil
104
104
  hash[:maximum_number_of_stories_above_ground] = nil
105
- hash[:parking_area] = nil
105
+ hash[:parking_area_sqft] = nil
106
106
  hash[:number_of_parking_spaces] = nil
107
107
  hash[:number_of_parking_spaces_charging] = nil
108
- hash[:parking_footprint_area] = nil
109
- hash[:maximum_parking_height] = nil
108
+ hash[:parking_footprint_area_sqft] = nil
109
+ hash[:maximum_parking_height_ft] = nil
110
110
  hash[:maximum_number_of_parking_stories] = nil
111
111
  hash[:maximum_number_of_parking_stories_above_ground] = nil
112
112
  hash[:number_of_residential_units] = nil
113
- hash[:building_types] = [{ building_type: nil, maximum_occupancy: nil, floor_area: nil }]
114
- hash[:window_area] = { north_window_area: nil, south_window_area: nil, east_window_area: nil, west_window_area: nil, total_window_area: nil }
115
- hash[:wall_area] = { north_wall_area: nil, south_wall_area: nil, east_wall_area: nil, west_wall_area: nil, total_wall_area: nil }
116
- hash[:roof_area] = { equipment_roof_area: nil, photovoltaic_roof_area: nil, available_roof_area: nil, total_roof_area: nil }
117
- hash[:orientation] = nil
113
+ hash[:building_types] = [{ building_type: nil, maximum_occupancy: nil, floor_area_sqft: nil }]
114
+ hash[:window_area_sqft] = { north_window_area_sqft: nil, south_window_area_sqft: nil, east_window_area_sqft: nil, west_window_area_sqft: nil, total_window_area_sqft: nil }
115
+ hash[:wall_area_sqft] = { north_wall_area_sqft: nil, south_wall_area_sqft: nil, east_wall_area_sqft: nil, west_wall_area_sqft: nil, total_wall_area_sqft: nil }
116
+ hash[:roof_area_sqft] = { equipment_roof_area_sqft: nil, photovoltaic_roof_area_sqft: nil, available_roof_area_sqft: nil, total_roof_area_sqft: nil }
117
+ hash[:orientation_deg] = nil
118
118
  hash[:aspect_ratio] = nil
119
- hash[:total_construction_cost] = nil
119
+ hash[:total_construction_cost_dollar] = nil
120
120
  return hash
121
121
  end
122
122
 
@@ -128,19 +128,19 @@ module URBANopt
128
128
  ##
129
129
  def to_hash
130
130
  result = {}
131
- result[:site_area] = @site_area if @site_area
132
- result[:floor_area] = @floor_area if @floor_area
133
- result[:conditioned_area] = @conditioned_area if @conditioned_area
134
- result[:unconditioned_area] = @unconditioned_area if @unconditioned_area
135
- result[:footprint_area] = @footprint_area if @footprint_area
136
- result[:maximum_roof_height] = @maximum_roof_height if @maximum_roof_height
131
+ result[:site_area_sqft] = @site_area_sqft if @site_area_sqft
132
+ result[:floor_area_sqft] = @floor_area_sqft if @floor_area_sqft
133
+ result[:conditioned_area_sqft] = @conditioned_area_sqft if @conditioned_area_sqft
134
+ result[:unconditioned_area_sqft] = @unconditioned_area_sqft if @unconditioned_area_sqft
135
+ result[:footprint_area_sqft] = @footprint_area_sqft if @footprint_area_sqft
136
+ result[:maximum_roof_height_ft] = @maximum_roof_height_ft if @maximum_roof_height_ft
137
137
  result[:maximum_number_of_stories] = @maximum_number_of_stories if @maximum_number_of_stories
138
138
  result[:maximum_number_of_stories_above_ground] = @maximum_number_of_stories_above_ground if @maximum_number_of_parking_stories_above_ground
139
- result[:parking_area] = @parking_area if @parking_area
139
+ result[:parking_area_sqft] = @parking_area_sqft if @parking_area_sqft
140
140
  result[:number_of_parking_spaces] = @number_of_parking_spaces if @number_of_parking_spaces
141
141
  result[:number_of_parking_spaces_charging] = @number_of_parking_spaces_charging if @number_of_parking_spaces_charging
142
- result[:parking_footprint_area] = @parking_footprint_area if @parking_footprint_area
143
- result[:maximum_parking_height] = @maximum_parking_height if @maximum_parking_height
142
+ result[:parking_footprint_area_sqft] = @parking_footprint_area_sqft if @parking_footprint_area_sqft
143
+ result[:maximum_parking_height_ft] = @maximum_parking_height_ft if @maximum_parking_height_ft
144
144
  result[:maximum_number_of_parking_stories] = @maximum_number_of_parking_stories if @maximum_number_of_parking_stories
145
145
  result[:maximum_number_of_parking_stories_above_ground] = @maximum_number_of_parking_stories_above_ground if @maximum_number_of_parking_stories_above_ground
146
146
  result[:number_of_residential_units] = @number_of_residential_units if @number_of_residential_units
@@ -152,25 +152,25 @@ module URBANopt
152
152
  end
153
153
  end
154
154
 
155
- # result[:window_area] = @window_area if @window_area
156
- window_area_hash = @window_area if @window_area
157
- window_area_hash.delete_if { |k, v| v.nil? }
158
- result[:window_area] = window_area_hash if @window_area
155
+ # result[:window_area_sqft] = @window_area_sqft if @window_area_sqft
156
+ window_area_sqft_hash = @window_area_sqft if @window_area_sqft
157
+ window_area_sqft_hash.delete_if { |k, v| v.nil? }
158
+ result[:window_area_sqft] = window_area_sqft_hash if @window_area_sqft
159
159
 
160
- # result[:wall_area] = @wall_area if @wall_area
161
- wall_area_hash = @wall_area if @wall_area
162
- wall_area_hash.delete_if { |k, v| v.nil? }
163
- result[:wall_area] = wall_area_hash if @wall_area
160
+ # result[:wall_area_sqft] = @wall_area_sqft if @wall_area_sqft
161
+ wall_area_sqft_hash = @wall_area_sqft if @wall_area_sqft
162
+ wall_area_sqft_hash.delete_if { |k, v| v.nil? }
163
+ result[:wall_area_sqft] = wall_area_sqft_hash if @wall_area_sqft
164
164
 
165
- # result[:roof_area] = @roof_area if @roof_area
166
- roof_area_hash = @roof_area if @roof_area
167
- roof_area_hash.delete_if { |k, v| v.nil? }
168
- result[:roof_area] = roof_area_hash if @roof_area
165
+ # result[:roof_area_sqft] = @roof_area_sqft if @roof_area_sqft
166
+ roof_area_sqft_hash = @roof_area_sqft if @roof_area_sqft
167
+ roof_area_sqft_hash.delete_if { |k, v| v.nil? }
168
+ result[:roof_area_sqft] = roof_area_sqft_hash if @roof_area_sqft
169
169
 
170
- result[:orientation] = @orientation if @orientation
170
+ result[:orientation_deg] = @orientation_deg if @orientation_deg
171
171
  result[:aspect_ratio] = @aspect_ratio if @aspect_ratio
172
172
 
173
- result[:total_construction_cost] = @total_construction_cost if @total_construction_cost
173
+ result[:total_construction_cost_dollar] = @total_construction_cost_dollar if @total_construction_cost_dollar
174
174
 
175
175
  # validate program properties against schema
176
176
  if @@validator.validate(@@schema[:definitions][:Program][:properties], result).any?
@@ -221,43 +221,43 @@ module URBANopt
221
221
  # +other+ - _Program_ - An object of Program class.
222
222
  ##
223
223
  def add_program(other)
224
- @site_area = add_values(@site_area, other.site_area)
224
+ @site_area_sqft = add_values(@site_area_sqft, other.site_area_sqft)
225
225
 
226
- @floor_area = add_values(@floor_area, other.floor_area)
227
- @conditioned_area = add_values(@conditioned_area, other.conditioned_area)
228
- @unconditioned_area = add_values(@unconditioned_area, other.unconditioned_area)
229
- @footprint_area = add_values(@footprint_area, other.footprint_area)
230
- @maximum_roof_height = max_value(@maximum_roof_height, other.maximum_roof_height)
226
+ @floor_area_sqft = add_values(@floor_area_sqft, other.floor_area_sqft)
227
+ @conditioned_area_sqft = add_values(@conditioned_area_sqft, other.conditioned_area_sqft)
228
+ @unconditioned_area_sqft = add_values(@unconditioned_area_sqft, other.unconditioned_area_sqft)
229
+ @footprint_area_sqft = add_values(@footprint_area_sqft, other.footprint_area_sqft)
230
+ @maximum_roof_height_ft = max_value(@maximum_roof_height_ft, other.maximum_roof_height_ft)
231
231
  @maximum_number_of_stories = max_value(@maximum_number_of_stories, other.maximum_number_of_stories)
232
232
  @maximum_number_of_stories_above_ground = max_value(@maximum_number_of_stories_above_ground, other.maximum_number_of_stories_above_ground)
233
- @parking_area = add_values(@parking_area, other.parking_area)
233
+ @parking_area_sqft = add_values(@parking_area_sqft, other.parking_area_sqft)
234
234
  @number_of_parking_spaces = add_values(@number_of_parking_spaces, other.number_of_parking_spaces)
235
235
  @number_of_parking_spaces_charging = add_values(@number_of_parking_spaces_charging, other.number_of_parking_spaces_charging)
236
- @parking_footprint_area = add_values(@parkig_footprint_area, other.parking_footprint_area)
237
- @maximum_parking_height = max_value(@maximum_parking_height, other.maximum_parking_height)
236
+ @parking_footprint_area_sqft = add_values(@parkig_footprint_area_sqft, other.parking_footprint_area_sqft)
237
+ @maximum_parking_height_ft = max_value(@maximum_parking_height_ft, other.maximum_parking_height_ft)
238
238
  @maximum_number_of_parking_stories = max_value(@maximum_number_of_parking_stories, other.maximum_number_of_parking_stories)
239
239
  @maximum_number_of_parking_stories_above_ground = max_value(maximum_number_of_parking_stories_above_ground, other.maximum_number_of_parking_stories_above_ground)
240
240
  @number_of_residential_units = add_values(@number_of_residential_units, other.number_of_residential_units)
241
- @total_construction_cost = add_values(@total_construction_cost, other.total_construction_cost)
241
+ @total_construction_cost_dollar = add_values(@total_construction_cost_dollar, other.total_construction_cost_dollar)
242
242
 
243
243
  @building_types = other.building_types
244
244
 
245
- @window_area[:north_window_area] = add_values(@window_area[:north_window_area], other.window_area[:north_window_area])
246
- @window_area[:south_window_area] = add_values(@window_area[:south_window_area], other.window_area[:south_window_area])
247
- @window_area[:east_window_area] = add_values(@window_area[:east_window_area], other.window_area[:east_window_area])
248
- @window_area[:west_window_area] = add_values(@window_area[:west_window_area], other.window_area[:west_window_area])
249
- @window_area[:total_window_area] = add_values(@window_area[:total_window_area], other.window_area[:total_window_area])
245
+ @window_area_sqft[:north_window_area_sqft] = add_values(@window_area_sqft[:north_window_area_sqft], other.window_area_sqft[:north_window_area_sqft])
246
+ @window_area_sqft[:south_window_area_sqft] = add_values(@window_area_sqft[:south_window_area_sqft], other.window_area_sqft[:south_window_area_sqft])
247
+ @window_area_sqft[:east_window_area_sqft] = add_values(@window_area_sqft[:east_window_area_sqft], other.window_area_sqft[:east_window_area_sqft])
248
+ @window_area_sqft[:west_window_area_sqft] = add_values(@window_area_sqft[:west_window_area_sqft], other.window_area_sqft[:west_window_area_sqft])
249
+ @window_area_sqft[:total_window_area_sqft] = add_values(@window_area_sqft[:total_window_area_sqft], other.window_area_sqft[:total_window_area_sqft])
250
250
 
251
- @wall_area[:north_wall_area] = add_values(@wall_area[:north_wall_area], other.wall_area[:north_wall_area])
252
- @wall_area[:south_wall_area] = add_values(@wall_area[:south_wall_area], other.wall_area[:south_wall_area])
253
- @wall_area[:east_wall_area] = add_values(@wall_area[:east_wall_area], other.wall_area[:east_wall_area])
254
- @wall_area[:west_wall_area] = add_values(@wall_area[:west_wall_area], other.wall_area[:west_wall_area])
255
- @wall_area[:total_wall_area] = add_values(@wall_area[:total_wall_area], other.wall_area[:total_wall_area])
251
+ @wall_area_sqft[:north_wall_area_sqft] = add_values(@wall_area_sqft[:north_wall_area_sqft], other.wall_area_sqft[:north_wall_area_sqft])
252
+ @wall_area_sqft[:south_wall_area_sqft] = add_values(@wall_area_sqft[:south_wall_area_sqft], other.wall_area_sqft[:south_wall_area_sqft])
253
+ @wall_area_sqft[:east_wall_area_sqft] = add_values(@wall_area_sqft[:east_wall_area_sqft], other.wall_area_sqft[:east_wall_area_sqft])
254
+ @wall_area_sqft[:west_wall_area_sqft] = add_values(@wall_area_sqft[:west_wall_area_sqft], other.wall_area_sqft[:west_wall_area_sqft])
255
+ @wall_area_sqft[:total_wall_area_sqft] = add_values(@wall_area_sqft[:total_wall_area_sqft], other.wall_area_sqft[:total_wall_area_sqft])
256
256
 
257
- @roof_area[:equipment_roof_area] = add_values(@roof_area[:equipment_roof_area], other.roof_area[:equipment_roof_area])
258
- @roof_area[:photovoltaic_roof_area] = add_values(@roof_area[:photovoltaic_roof_area], other.roof_area[:photovoltaic_roof_area])
259
- @roof_area[:available_roof_area] = add_values(@roof_area[:available_roof_area], other.roof_area[:available_roof_area])
260
- @roof_area[:total_roof_area] = add_values(@roof_area[:total_roof_area], other.roof_area[:total_roof_area])
257
+ @roof_area_sqft[:equipment_roof_area_sqft] = add_values(@roof_area_sqft[:equipment_roof_area_sqft], other.roof_area_sqft[:equipment_roof_area_sqft])
258
+ @roof_area_sqft[:photovoltaic_roof_area_sqft] = add_values(@roof_area_sqft[:photovoltaic_roof_area_sqft], other.roof_area_sqft[:photovoltaic_roof_area_sqft])
259
+ @roof_area_sqft[:available_roof_area_sqft] = add_values(@roof_area_sqft[:available_roof_area_sqft], other.roof_area_sqft[:available_roof_area_sqft])
260
+ @roof_area_sqft[:total_roof_area_sqft] = add_values(@roof_area_sqft[:total_roof_area_sqft], other.roof_area_sqft[:total_roof_area_sqft])
261
261
  end
262
262
  end
263
263
  end
@@ -43,16 +43,16 @@ module URBANopt
43
43
  # ReportingPeriod includes all the results of a specific reporting period.
44
44
  ##
45
45
  class ReportingPeriod
46
- attr_accessor :id, :name, :multiplier, :start_date, :end_date, :month, :day_of_month, :year, :total_site_energy, :total_source_energy,
47
- :net_site_energy, :net_source_energy, :total_utility_cost, :net_utility_cost, :utility_costs, :electricity, :natural_gas, :additional_fuel, :district_cooling,
48
- :district_heating, :water, :electricity_produced, :end_uses, :energy_production, :photovoltaic,
49
- :fuel_type, :total_cost, :usage_cost, :demand_cost, :comfort_result, :time_setpoint_not_met_during_occupied_cooling,
46
+ attr_accessor :id, :name, :multiplier, :start_date, :end_date, :month, :day_of_month, :year, :total_site_energy_kwh, :total_source_energy_kwh,
47
+ :net_site_energy_kwh, :net_source_energy_kwh, :total_utility_cost_dollar, :net_utility_cost_dollar, :utility_costs_dollar, :electricity_kwh, :natural_gas_kwh, :additional_fuel_kwh, :district_cooling_kwh,
48
+ :district_heating_kwh, :water_qbft, :electricity_produced_kwh, :end_uses, :energy_production_kwh, :photovoltaic,
49
+ :fuel_type, :total_cost_dollar, :usage_cost_dollar, :demand_cost_dollar, :comfort_result, :time_setpoint_not_met_during_occupied_cooling,
50
50
  :time_setpoint_not_met_during_occupied_heating, :time_setpoint_not_met_during_occupied_hours, :hours_out_of_comfort_bounds_PMV, :hours_out_of_comfort_bounds_PPD #:nodoc:
51
51
  # ReportingPeriod class initializes the reporting period attributes:
52
- # +:id+ , +:name+ , +:multiplier+ , +:start_date+ , +:end_date+ , +:month+ , +:day_of_month+ , +:year+ , +:total_site_energy+ , +:total_source_energy+ ,
53
- # +:net_site_energy+ , +:net_source_energy+ , +:total_utility_cost , +:net_utility_cost+ , +:utility_costs+ , +:electricity+ , +:natural_gas+ , +:additional_fuel+ , +:district_cooling+ ,
54
- # +:district_heating+ , +:water+ , +:electricity_produced+ , +:end_uses+ , +:energy_production+ , +:photovoltaic+ ,
55
- # +:fuel_type+ , +:total_cost+ , +:usage_cost+ , +:demand_cost+ , +:comfort_result+ , +:time_setpoint_not_met_during_occupied_cooling+ ,
52
+ # +:id+ , +:name+ , +:multiplier+ , +:start_date+ , +:end_date+ , +:month+ , +:day_of_month+ , +:year+ , +:total_site_energy_kwh+ , +:total_source_energy_kwh+ ,
53
+ # +:net_site_energy_kwh+ , +:net_source_energy_kwh+ , +:total_utility_cost_dollar , +:net_utility_cost_dollar+ , +:utility_costs_dollar+ , +:electricity_kwh+ , +:natural_gas_kwh+ , +:additional_fuel_kwh+ , +:district_cooling_kwh+ ,
54
+ # +:district_heating_kwh+ , +:water_qbft+ , +:electricity_produced_kwh+ , +:end_uses+ , +:energy_production_kwh+ , +:photovoltaic_kwh+ ,
55
+ # +:fuel_type+ , +:total_cost_dollar+ , +:usage_cost_dollar+ , +:demand_cost_dollar+ , +:comfort_result+ , +:time_setpoint_not_met_during_occupied_cooling+ ,
56
56
  # +:time_setpoint_not_met_during_occupied_heating+ , +:time_setpoint_not_met_during_occupied_hours+
57
57
  ##
58
58
  # [parameters:]
@@ -68,24 +68,24 @@ module URBANopt
68
68
  @start_date = Date.new(hash[:start_date])
69
69
  @end_date = Date.new(hash[:end_date])
70
70
 
71
- @total_site_energy = hash[:total_site_energy]
72
- @total_source_energy = hash[:total_source_energy]
73
- @net_site_energy = hash [:net_site_energy]
74
- @net_source_energy = hash [:net_source_energy]
75
- @net_utility_cost = hash [:net_utility_cost]
76
- @total_utility_cost = hash [:total_utility_cost]
77
- @electricity = hash [:electricity]
78
- @natural_gas = hash [:natural_gas]
79
- @additional_fuel = hash [:additional_fuel]
80
- @district_cooling = hash [:district_cooling]
81
- @district_heating = hash[:district_heating]
82
- @water = hash[:water]
83
- @electricity_produced = hash[:electricity_produced]
71
+ @total_site_energy_kwh = hash[:total_site_energy_kwh]
72
+ @total_source_energy_kwh = hash[:total_source_energy_kwh]
73
+ @net_site_energy_kwh = hash [:net_site_energy_kwh]
74
+ @net_source_energy_kwh = hash [:net_source_energy_kwh]
75
+ @net_utility_cost_dollar = hash [:net_utility_cost_dollar]
76
+ @total_utility_cost_dollar = hash [:total_utility_cost_dollar]
77
+ @electricity_kwh = hash [:electricity_kwh]
78
+ @natural_gas_kwh = hash [:natural_gas_kwh]
79
+ @additional_fuel_kwh = hash [:additional_fuel_kwh]
80
+ @district_cooling_kwh = hash [:district_cooling_kwh]
81
+ @district_heating_kwh = hash[:district_heating_kwh]
82
+ @water_qbft = hash[:water_qbft]
83
+ @electricity_produced_kwh = hash[:electricity_produced_kwh]
84
84
  @end_uses = EndUses.new(hash[:end_uses])
85
85
 
86
- @energy_production = hash[:energy_production]
86
+ @energy_production_kwh = hash[:energy_production_kwh]
87
87
 
88
- @utility_costs = hash[:utility_costs]
88
+ @utility_costs_dollar = hash[:utility_costs_dollar]
89
89
 
90
90
  @comfort_result = hash[:comfort_result]
91
91
 
@@ -106,22 +106,22 @@ module URBANopt
106
106
  hash[:start_date] = Date.new.to_hash
107
107
  hash[:end_date] = Date.new.to_hash
108
108
 
109
- hash[:total_site_energy] = nil
110
- hash[:total_source_energy] = nil
111
- hash [:net_site_energy] = nil
112
- hash [:net_source_energy] = nil
113
- hash [:net_utility_cost] = nil
114
- hash [:total_utility_cost] = nil
115
- hash [:electricity] = nil
116
- hash [:natural_gas] = nil
117
- hash [:additional_fuel] = nil
118
- hash [:district_cooling] = nil
119
- hash[:district_heating] = nil
120
-
121
- hash[:electricity_produced] = nil
109
+ hash[:total_site_energy_kwh] = nil
110
+ hash[:total_source_energy_kwh] = nil
111
+ hash [:net_site_energy_kwh] = nil
112
+ hash [:net_source_energy_kwh] = nil
113
+ hash [:net_utility_cost_dollar] = nil
114
+ hash [:total_utility_cost_dollar] = nil
115
+ hash [:electricity_kwh] = nil
116
+ hash [:natural_gas_kwh] = nil
117
+ hash [:additional_fuel_kwh] = nil
118
+ hash [:district_cooling_kwh] = nil
119
+ hash[:district_heating_kwh] = nil
120
+
121
+ hash[:electricity_produced_kwh] = nil
122
122
  hash[:end_uses] = EndUses.new.to_hash
123
- hash[:energy_production] = { electricity_produced: { photovoltaic: nil } }
124
- hash[:utility_costs] = [{ fuel_type: nil, total_cost: nil, usage_cost: nil, demand_cost: nil }]
123
+ hash[:energy_production_kwh] = { electricity_produced: { photovoltaic: nil } }
124
+ hash[:utility_costs_dollar] = [{ fuel_type: nil, total_cost_dollar: nil, usage_cost_dollar: nil, demand_cost_dollar: nil }]
125
125
  hash[:comfort_result] = { time_setpoint_not_met_during_occupied_cooling: nil, time_setpoint_not_met_during_occupied_heating: nil,
126
126
  time_setpoint_not_met_during_occupied_hours: nil, hours_out_of_comfort_bounds_PMV: nil, hours_out_of_comfort_bounds_PPD: nil }
127
127
 
@@ -142,32 +142,32 @@ module URBANopt
142
142
  result[:multiplier] = @multiplier if @multiplier
143
143
  result[:start_date] = @start_date.to_hash if @start_date
144
144
  result[:end_date] = @end_date.to_hash if @end_date
145
- result[:total_site_energy] = @total_site_energy if @total_site_energy
146
- result[:total_source_energy] = @total_source_energy if @total_source_energy
147
- result[:net_site_energy] = @net_site_energy if @net_site_energy
148
- result[:net_source_energy] = @net_source_energy if @net_source_energy
149
- result[:net_utility_cost] = @net_utility_cost if @net_utility_cost
150
- result[:total_utility_cost] = @total_utility_cost if @total_utility_cost
151
- result[:electricity] = @electricity if @electricity
152
- result[:natural_gas] = @natural_gas if @natural_gas
153
- result[:additional_fuel] = @additional_fuel if @additional_fuel
154
- result[:district_cooling] = @district_cooling if @district_cooling
155
- result[:district_heating] = @district_heating if @district_heating
156
- result[:water] = @water if @water
157
- result[:electricity_produced] = @electricity_produced if @electricity_produced
145
+ result[:total_site_energy_kwh] = @total_site_energy_kwh if @total_site_energy_kwh
146
+ result[:total_source_energy_kwh] = @total_source_energy_kwh if @total_source_energy_kwh
147
+ result[:net_site_energy_kwh] = @net_site_energy_kwh if @net_site_energy_kwh
148
+ result[:net_source_energy_kwh] = @net_source_energy_kwh if @net_source_energy_kwh
149
+ result[:net_utility_cost_dollar] = @net_utility_cost_dollar if @net_utility_cost_dollar
150
+ result[:total_utility_cost_dollar] = @total_utility_cost_dollar if @total_utility_cost_dollar
151
+ result[:electricity_kwh] = @electricity_kwh if @electricity_kwh
152
+ result[:natural_gas_kwh] = @natural_gas_kwh if @natural_gas_kwh
153
+ result[:additional_fuel_kwh] = @additional_fuel_kwh if @additional_fuel_kwh
154
+ result[:district_cooling_kwh] = @district_cooling_kwh if @district_cooling_kwh
155
+ result[:district_heating_kwh] = @district_heating_kwh if @district_heating_kwh
156
+ result[:water_qbft] = @water_qbft if @water_qbft
157
+ result[:electricity_produced_kwh] = @electricity_produced_kwh if @electricity_produced_kwh
158
158
  result[:end_uses] = @end_uses.to_hash if @end_uses
159
159
 
160
- energy_production_hash = @energy_production if @energy_production
161
- energy_production_hash.delete_if { |k, v| v.nil? }
162
- energy_production_hash.each do |eph|
160
+ energy_production_kwh_hash = @energy_production_kwh if @energy_production_kwh
161
+ energy_production_kwh_hash.delete_if { |k, v| v.nil? }
162
+ energy_production_kwh_hash.each do |eph|
163
163
  eph.delete_if { |k, v| v.nil? }
164
164
  end
165
165
 
166
- result[:energy_production] = energy_production_hash if @energy_production
166
+ result[:energy_production_kwh] = energy_production_kwh_hash if @energy_production_kwh
167
167
 
168
- if @utility_costs.any?
169
- result[:utility_costs] = @utility_costs
170
- @utility_costs.each do |uc|
168
+ if @utility_costs_dollar.any?
169
+ result[:utility_costs_dollar] = @utility_costs_dollar
170
+ @utility_costs_dollar.each do |uc|
171
171
  uc&.delete_if { |k, v| v.nil? }
172
172
  end
173
173
  end
@@ -211,34 +211,34 @@ module URBANopt
211
211
  ##
212
212
  def self.merge_reporting_period(existing_period, new_period)
213
213
  # modify the existing_period by summing up the results
214
- existing_period.total_site_energy = add_values(existing_period.total_site_energy, new_period.total_site_energy)
215
- existing_period.total_source_energy = add_values(existing_period.total_source_energy, new_period.total_source_energy)
216
- existing_period.net_source_energy = add_values(existing_period.net_source_energy, new_period.net_source_energy)
217
- existing_period.net_utility_cost = add_values(existing_period.net_utility_cost, new_period.net_utility_cost)
218
- existing_period.total_utility_cost = add_values(existing_period.total_utility_cost, new_period.total_utility_cost)
219
- existing_period.electricity = add_values(existing_period.electricity, new_period.electricity)
220
- existing_period.natural_gas = add_values(existing_period.natural_gas, new_period.natural_gas)
221
- existing_period.additional_fuel = add_values(existing_period.additional_fuel, new_period.additional_fuel)
222
- existing_period.district_cooling = add_values(existing_period.district_cooling, new_period.district_cooling)
223
- existing_period.district_heating = add_values(existing_period.district_heating, new_period.district_heating)
224
- existing_period.water = add_values(existing_period.water, new_period.water)
225
- existing_period.electricity_produced = add_values(existing_period.electricity_produced, new_period.electricity_produced)
214
+ existing_period.total_site_energy_kwh = add_values(existing_period.total_site_energy_kwh, new_period.total_site_energy_kwh)
215
+ existing_period.total_source_energy_kwh = add_values(existing_period.total_source_energy_kwh, new_period.total_source_energy_kwh)
216
+ existing_period.net_source_energy_kwh = add_values(existing_period.net_source_energy_kwh, new_period.net_source_energy_kwh)
217
+ existing_period.net_utility_cost_dollar = add_values(existing_period.net_utility_cost_dollar, new_period.net_utility_cost_dollar)
218
+ existing_period.total_utility_cost_dollar = add_values(existing_period.total_utility_cost_dollar, new_period.total_utility_cost_dollar)
219
+ existing_period.electricity_kwh = add_values(existing_period.electricity_kwh, new_period.electricity_kwh)
220
+ existing_period.natural_gas_kwh = add_values(existing_period.natural_gas_kwh, new_period.natural_gas_kwh)
221
+ existing_period.additional_fuel_kwh = add_values(existing_period.additional_fuel_kwh, new_period.additional_fuel_kwh)
222
+ existing_period.district_cooling_kwh = add_values(existing_period.district_cooling_kwh, new_period.district_cooling_kwh)
223
+ existing_period.district_heating_kwh = add_values(existing_period.district_heating_kwh, new_period.district_heating_kwh)
224
+ existing_period.water_qbft = add_values(existing_period.water_qbft, new_period.water_qbft)
225
+ existing_period.electricity_produced_kwh = add_values(existing_period.electricity_produced_kwh, new_period.electricity_produced_kwh)
226
226
 
227
227
  # merge end uses
228
228
  new_end_uses = new_period.end_uses
229
229
  existing_period.end_uses&.merge_end_uses!(new_end_uses)
230
230
 
231
- if existing_period.energy_production
232
- if existing_period.energy_production[:electricity_produced]
233
- existing_period.energy_production[:electricity_produced][:photovoltaic] = add_values(existing_period.energy_production[:electricity_produced][:photovoltaic], new_period.energy_production[:electricity_produced][:photovoltaic])
231
+ if existing_period.energy_production_kwh
232
+ if existing_period.energy_production_kwh[:electricity_produced_kwh]
233
+ existing_period.energy_production_kwh[:electricity_produced_kwh][:photovoltaic_kwh] = add_values(existing_period.energy_production_kwh[:electricity_produced][:photovoltaic], new_period.energy_production_kwh[:electricity_produced_kwh][:photovoltaic_kwh])
234
234
  end
235
235
  end
236
236
 
237
- existing_period.utility_costs&.each_with_index do |item, i|
238
- existing_period.utility_costs[i][:fuel_type] = existing_period.utility_costs[i][:fuel_type]
239
- existing_period.utility_costs[i][:total_cost] = add_values(existing_period.utility_costs[i][:total_cost], new_period.utility_costs[i][:total_cost])
240
- existing_period.utility_costs[i][:usage_cost] = add_values(existing_period.utility_costs[i][:usage_cost], new_period.utility_costs[i][:usage_cost])
241
- existing_period.utility_costs[i][:demand_cost] = add_values(existing_period.utility_costs[i][:demand_cost], new_period.utility_costs[i][:demand_cost])
237
+ existing_period.utility_costs_dollar&.each_with_index do |item, i|
238
+ existing_period.utility_costs_dollar[i][:fuel_type] = existing_period.utility_costs_dollar[i][:fuel_type]
239
+ existing_period.utility_costs_dollar[i][:total_cost] = add_values(existing_period.utility_costs_dollar[i][:total_cost], new_period.utility_costs_dollar[i][:total_cost])
240
+ existing_period.utility_costs_dollar[i][:usage_cost] = add_values(existing_period.utility_costs_dollar[i][:usage_cost], new_period.utility_costs_dollar[i][:usage_cost])
241
+ existing_period.utility_costs_dollar[i][:demand_cost] = add_values(existing_period.utility_costs_dollar[i][:demand_cost], new_period.utility_costs_dollar[i][:demand_cost])
242
242
  end
243
243
 
244
244
  if existing_period.comfort_result