urbanopt-reporting 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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