openstudio-standards 0.1.3 → 0.1.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  3. data/data/standards/OpenStudio_Standards_chillers.json +5 -5
  4. data/data/standards/OpenStudio_Standards_construction_sets.json +2 -2
  5. data/data/standards/OpenStudio_Standards_curve_cubics.json +12 -0
  6. data/data/standards/OpenStudio_Standards_heat_pumps.json +2126 -72
  7. data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +766 -14
  8. data/data/standards/OpenStudio_Standards_heat_rejection.json +172 -0
  9. data/data/standards/OpenStudio_Standards_prototype_inputs.json +355 -267
  10. data/data/standards/OpenStudio_Standards_schedules.json +262 -10
  11. data/data/standards/OpenStudio_Standards_space_types.json +1466 -794
  12. data/data/standards/manage_OpenStudio_Standards.rb +19 -21
  13. data/data/weather/weather_info.csv +96 -0
  14. data/lib/openstudio-standards/btap/btap.rb +1 -1
  15. data/lib/openstudio-standards/btap/compliance.rb +135 -40
  16. data/lib/openstudio-standards/btap/envelope.rb +26 -5
  17. data/lib/openstudio-standards/btap/geometry.rb +11 -1
  18. data/lib/openstudio-standards/btap/hvac.rb +489 -56
  19. data/lib/openstudio-standards/btap/simmanager.rb +1 -1
  20. data/lib/openstudio-standards/hvac_sizing/HVACSizing.CoilHeatingDXMultiSpeed.rb +120 -0
  21. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +151 -7
  22. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGasMultiStage.rb +48 -7
  23. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +14 -12
  24. data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -7
  25. data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +123 -91
  26. data/lib/openstudio-standards/prototypes/Prototype.Model.rb +130 -45
  27. data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +13 -7
  28. data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +332 -324
  29. data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +401 -99
  30. data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +309 -222
  31. data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +100 -80
  32. data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +37 -22
  33. data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +68 -53
  34. data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +109 -88
  35. data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +52 -4
  36. data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +230 -213
  37. data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +225 -218
  38. data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +29 -17
  39. data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +42 -32
  40. data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +331 -314
  41. data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +233 -219
  42. data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +40 -32
  43. data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +19 -6
  44. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +576 -555
  45. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +3 -1
  46. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +35 -17
  47. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +51 -23
  48. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +255 -0
  49. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +192 -0
  50. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +65 -0
  51. data/lib/openstudio-standards/standards/Standards.Fan.rb +37 -6
  52. data/lib/openstudio-standards/standards/Standards.Model.rb +28 -3
  53. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +3 -1
  54. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +41 -15
  55. data/lib/openstudio-standards/version.rb +1 -1
  56. data/lib/openstudio-standards/weather/Weather.Model.rb +509 -5
  57. data/lib/openstudio-standards/weather/Weather.stat_file.rb +145 -5
  58. metadata +8 -3
  59. data/lib/openstudio-standards/btap/environment.rb +0 -718
@@ -3,7 +3,23 @@
3
3
  class OpenStudio::Model::Model
4
4
 
5
5
  def define_space_type_map(building_type, building_vintage, climate_zone)
6
- space_type_map = {
6
+ space_type_map = nil
7
+ case building_vintage
8
+ when 'NECB 2011'
9
+ space_type_map ={
10
+ "Hotel/Motel - dining" => ["Banquet_Flr_6", "Dining_Flr_6"],
11
+ "Storage area" => ["Basement", "Storage_Flr_1"],
12
+ "Retail - mall concourse" => ["Cafe_Flr_1"],
13
+ "Corr. >= 2.4m wide" => ["Corridor_Flr_3", "Corridor_Flr_6"],
14
+ "Food preparation" => ["Kitchen_Flr_6"],
15
+ "Hospital - laundry/washing" => ["Laundry_Flr_1"],
16
+ "Hotel/Motel - lobby" => ["Lobby_Flr_1"],
17
+ "Electrical/Mechanical" => ["Mech_Flr_1"],
18
+ "Retail - sales" => ["Retail_1_Flr_1", "Retail_2_Flr_1"],
19
+ "Hotel/Motel - rooms" => ["Room_1_Flr_3", "Room_1_Flr_6", "Room_2_Flr_3", "Room_2_Flr_6", "Room_3_Mult19_Flr_3", "Room_3_Mult9_Flr_6", "Room_4_Mult19_Flr_3", "Room_5_Flr_3", "Room_6_Flr_3"]
20
+ }
21
+ else
22
+ space_type_map = {
7
23
  'Banquet' => ['Banquet_Flr_6','Dining_Flr_6'],
8
24
  'Basement'=>['Basement'],
9
25
  'Cafe' => ['Cafe_Flr_1'],
@@ -20,78 +36,82 @@ class OpenStudio::Model::Model
20
36
  'Retail'=> ['Retail_1_Flr_1'],
21
37
  'Retail2'=> ['Retail_2_Flr_1'],
22
38
  'Storage'=> ['Storage_Flr_1']
23
- }
39
+ }
40
+ end
41
+
42
+
43
+
24
44
 
25
45
  return space_type_map
26
46
  end
27
47
 
28
48
  def define_hvac_system_map(building_type, building_vintage, climate_zone)
29
49
  system_to_space_map = [
30
- {
31
- 'type' => 'VAV',
32
- 'name' => 'VAV WITH REHEAT',
33
- 'space_names' =>
34
- [
35
- 'Basement',
36
- 'Retail_1_Flr_1',
37
- 'Retail_2_Flr_1',
38
- 'Mech_Flr_1',
39
- 'Storage_Flr_1',
40
- 'Laundry_Flr_1',
41
- 'Cafe_Flr_1',
42
- 'Lobby_Flr_1',
43
- 'Corridor_Flr_3',
44
- 'Banquet_Flr_6',
45
- 'Dining_Flr_6',
46
- 'Corridor_Flr_6',
47
- 'Kitchen_Flr_6'
48
- ]
49
- },
50
- {
51
- 'type' => 'DOAS',
52
- 'space_names' =>
53
- [
54
- 'Room_1_Flr_3','Room_2_Flr_3','Room_3_Mult19_Flr_3','Room_4_Mult19_Flr_3','Room_5_Flr_3','Room_6_Flr_3','Room_1_Flr_6','Room_2_Flr_6','Room_3_Mult9_Flr_6'
55
- ]
56
- },
57
- {
58
- 'type' => 'Refrigeration',
59
- 'case_type' => 'Walkin Freezer',
60
- 'cooling_capacity_per_length' => 367.0,
61
- 'length' => 7.32,
62
- 'evaporator_fan_pwr_per_length' => 34.0,
63
- 'lighting_per_length' => 16.4,
64
- 'lighting_sch_name' => 'HotelLarge BLDG_LIGHT_SCH',
65
- 'defrost_pwr_per_length' => 273.0,
66
- 'restocking_sch_name' => 'HotelLarge Kitchen_Flr_6_Case:1_WALKINFREEZER_WalkInStockingSched',
67
- 'cop' => 1.5,
68
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
69
- 'condenser_fan_pwr' => 350.0,
70
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
71
- 'space_names' =>
72
- [
73
- 'Kitchen_Flr_6'
74
- ]
75
- },
76
- {
77
- 'type' => 'Refrigeration',
78
- 'case_type' => 'Display Case',
79
- 'cooling_capacity_per_length' => 734.0,
80
- 'length' => 3.66,
81
- 'evaporator_fan_pwr_per_length' => 55.0,
82
- 'lighting_per_length' => 33.0,
83
- 'lighting_sch_name' => 'HotelLarge BLDG_LIGHT_SCH',
84
- 'defrost_pwr_per_length' => 0.0,
85
- 'restocking_sch_name' => 'HotelLarge Kitchen_Flr_6_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
86
- 'cop' => 3.0,
87
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
88
- 'condenser_fan_pwr' => 750.0,
89
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
90
- 'space_names' =>
91
- [
92
- 'Kitchen_Flr_6'
93
- ]
94
- }
50
+ {
51
+ 'type' => 'VAV',
52
+ 'name' => 'VAV WITH REHEAT',
53
+ 'space_names' =>
54
+ [
55
+ 'Basement',
56
+ 'Retail_1_Flr_1',
57
+ 'Retail_2_Flr_1',
58
+ 'Mech_Flr_1',
59
+ 'Storage_Flr_1',
60
+ 'Laundry_Flr_1',
61
+ 'Cafe_Flr_1',
62
+ 'Lobby_Flr_1',
63
+ 'Corridor_Flr_3',
64
+ 'Banquet_Flr_6',
65
+ 'Dining_Flr_6',
66
+ 'Corridor_Flr_6',
67
+ 'Kitchen_Flr_6'
68
+ ]
69
+ },
70
+ {
71
+ 'type' => 'DOAS',
72
+ 'space_names' =>
73
+ [
74
+ 'Room_1_Flr_3','Room_2_Flr_3','Room_3_Mult19_Flr_3','Room_4_Mult19_Flr_3','Room_5_Flr_3','Room_6_Flr_3','Room_1_Flr_6','Room_2_Flr_6','Room_3_Mult9_Flr_6'
75
+ ]
76
+ },
77
+ {
78
+ 'type' => 'Refrigeration',
79
+ 'case_type' => 'Walkin Freezer',
80
+ 'cooling_capacity_per_length' => 367.0,
81
+ 'length' => 7.32,
82
+ 'evaporator_fan_pwr_per_length' => 34.0,
83
+ 'lighting_per_length' => 16.4,
84
+ 'lighting_sch_name' => 'HotelLarge BLDG_LIGHT_SCH',
85
+ 'defrost_pwr_per_length' => 273.0,
86
+ 'restocking_sch_name' => 'HotelLarge Kitchen_Flr_6_Case:1_WALKINFREEZER_WalkInStockingSched',
87
+ 'cop' => 1.5,
88
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
89
+ 'condenser_fan_pwr' => 350.0,
90
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
91
+ 'space_names' =>
92
+ [
93
+ 'Kitchen_Flr_6'
94
+ ]
95
+ },
96
+ {
97
+ 'type' => 'Refrigeration',
98
+ 'case_type' => 'Display Case',
99
+ 'cooling_capacity_per_length' => 734.0,
100
+ 'length' => 3.66,
101
+ 'evaporator_fan_pwr_per_length' => 55.0,
102
+ 'lighting_per_length' => 33.0,
103
+ 'lighting_sch_name' => 'HotelLarge BLDG_LIGHT_SCH',
104
+ 'defrost_pwr_per_length' => 0.0,
105
+ 'restocking_sch_name' => 'HotelLarge Kitchen_Flr_6_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
106
+ 'cop' => 3.0,
107
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
108
+ 'condenser_fan_pwr' => 750.0,
109
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
110
+ 'space_names' =>
111
+ [
112
+ 'Kitchen_Flr_6'
113
+ ]
114
+ }
95
115
  ]
96
116
  return system_to_space_map
97
117
  end
@@ -99,14 +119,14 @@ class OpenStudio::Model::Model
99
119
  def define_space_multiplier
100
120
  # This map define the multipliers for spaces with multipliers not equals to 1
101
121
  space_multiplier_map = {
102
- 'Room_1_Flr_3' => 4,
103
- 'Room_2_Flr_3' => 4,
104
- 'Room_3_Mult19_Flr_3' => 76,
105
- 'Room_4_Mult19_Flr_3' => 76,
106
- 'Room_5_Flr_3' => 4,
107
- 'Room_6_Flr_3' => 4,
108
- 'Corridor_Flr_3' => 4,
109
- 'Room_3_Mult9_Flr_6' => 9
122
+ 'Room_1_Flr_3' => 4,
123
+ 'Room_2_Flr_3' => 4,
124
+ 'Room_3_Mult19_Flr_3' => 76,
125
+ 'Room_4_Mult19_Flr_3' => 76,
126
+ 'Room_5_Flr_3' => 4,
127
+ 'Room_6_Flr_3' => 4,
128
+ 'Corridor_Flr_3' => 4,
129
+ 'Room_3_Mult9_Flr_6' => 9
110
130
  }
111
131
  return space_multiplier_map
112
132
  end
@@ -192,11 +212,11 @@ class OpenStudio::Model::Model
192
212
 
193
213
  # Add the daylighting controls for lobby, cafe, dinning and banquet
194
214
  def add_daylighting_controls(building_vintage)
195
- space_names = ['Banquet_Flr_6','Dining_Flr_6','Cafe_Flr_1','Lobby_Flr_1']
196
- space_names.each do |space_name|
197
- space = self.getSpaceByName(space_name).get
198
- space.addDaylightingControls(building_vintage, false, false)
199
- end
215
+ space_names = ['Banquet_Flr_6','Dining_Flr_6','Cafe_Flr_1','Lobby_Flr_1']
216
+ space_names.each do |space_name|
217
+ space = self.getSpaceByName(space_name).get
218
+ space.addDaylightingControls(building_vintage, false, false)
219
+ end
200
220
  end
201
221
 
202
222
  def custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
@@ -27,6 +27,20 @@ class OpenStudio::Model::Model
27
27
  'DataCenter_basement_ZN_6'
28
28
  ]
29
29
  }
30
+ when 'NECB 2011'
31
+ space_type_map = {
32
+ "Electrical/Mechanical" => ["Basement"],
33
+
34
+ "Office - open plan" => [ "Core_bottom", "Core_mid", "Core_top", "MidFloor_Plenum",
35
+ "Perimeter_bot_ZN_1", "Perimeter_bot_ZN_2", "Perimeter_bot_ZN_3",
36
+ "Perimeter_bot_ZN_4", "Perimeter_mid_ZN_1", "Perimeter_mid_ZN_2",
37
+ "Perimeter_mid_ZN_3", "Perimeter_mid_ZN_4", "Perimeter_top_ZN_1",
38
+ "Perimeter_top_ZN_2", "Perimeter_top_ZN_3", "Perimeter_top_ZN_4",
39
+ "DataCenter_basement_ZN_6", "DataCenter_bot_ZN_6", "DataCenter_mid_ZN_6",
40
+ "DataCenter_top_ZN_6"],
41
+
42
+ "- undefined -" => ["GroundFloor_Plenum", "TopFloor_Plenum"]
43
+ }
30
44
  end
31
45
  return space_type_map
32
46
  end
@@ -85,8 +99,8 @@ class OpenStudio::Model::Model
85
99
  }
86
100
  ]
87
101
  when '90.1-2004','90.1-2007','90.1-2010','90.1-2013'
88
- system_to_space_map = [
89
- {
102
+ system_to_space_map = [
103
+ {
90
104
  'type' => 'VAV',
91
105
  'name' => 'VAV_bot WITH REHEAT',
92
106
  'space_names' =>
@@ -126,11 +140,12 @@ class OpenStudio::Model::Model
126
140
  'return_plenum' => 'TopFloor_Plenum'
127
141
  },
128
142
  {
143
+
129
144
  'type' => 'CAV',
130
145
  'name' => 'CAV_bas',
131
146
  'space_names' =>
132
- [
133
- 'Basement'
147
+ [
148
+ 'Basement'
134
149
  ]
135
150
  },
136
151
  {
@@ -170,10 +185,11 @@ class OpenStudio::Model::Model
170
185
  'main_data_center' => false
171
186
  }
172
187
  ]
188
+
173
189
  end
174
190
 
175
191
  return system_to_space_map
176
-
192
+
177
193
  end
178
194
 
179
195
  def define_space_multiplier
@@ -200,19 +216,19 @@ class OpenStudio::Model::Model
200
216
  #find all zones associated with these spaces
201
217
  thermal_zones = []
202
218
  system['space_names'].each do |space_name|
203
- space = self.getSpaceByName(space_name)
204
- if space.empty?
205
- OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "No space called #{space_name} was found in the model")
206
- return false
207
- end
208
- space = space.get
209
- zone = space.thermalZone
210
- if zone.empty?
211
- OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "No thermal zone was created for the space called #{space_name}")
212
- return false
213
- end
214
- thermal_zones << zone.get
219
+ space = self.getSpaceByName(space_name)
220
+ if space.empty?
221
+ OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "No space called #{space_name} was found in the model")
222
+ return false
215
223
  end
224
+ space = space.get
225
+ zone = space.thermalZone
226
+ if zone.empty?
227
+ OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "No thermal zone was created for the space called #{space_name}")
228
+ return false
229
+ end
230
+ thermal_zones << zone.get
231
+ end
216
232
 
217
233
  return_plenum = nil
218
234
  unless system['return_plenum'].nil?
@@ -238,18 +254,17 @@ class OpenStudio::Model::Model
238
254
 
239
255
  def update_waterheater_loss_coefficient(building_vintage)
240
256
  case building_vintage
241
- when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
257
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
242
258
  self.getWaterHeaterMixeds.sort.each do |water_heater|
243
259
  water_heater.setOffCycleLossCoefficienttoAmbientTemperature(11.25413987)
244
260
  water_heater.setOnCycleLossCoefficienttoAmbientTemperature(11.25413987)
245
261
  end
246
- end
247
- end
248
-
262
+ end
263
+ end
264
+
249
265
  def custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
250
266
 
251
267
  self.update_waterheater_loss_coefficient(building_vintage)
252
-
253
268
  return true
254
269
 
255
270
  end
@@ -3,13 +3,27 @@
3
3
  class OpenStudio::Model::Model
4
4
 
5
5
  def define_space_type_map(building_type, building_vintage, climate_zone)
6
- space_type_map = {
7
- 'WholeBuilding - Md Office' => [
8
- 'Perimeter_bot_ZN_1', 'Perimeter_bot_ZN_2', 'Perimeter_bot_ZN_3', 'Perimeter_bot_ZN_4', 'Core_bottom',
9
- 'Perimeter_mid_ZN_1', 'Perimeter_mid_ZN_2', 'Perimeter_mid_ZN_3', 'Perimeter_mid_ZN_4', 'Core_mid',
10
- 'Perimeter_top_ZN_1', 'Perimeter_top_ZN_2', 'Perimeter_top_ZN_3', 'Perimeter_top_ZN_4', 'Core_top'
11
- ]
12
- }
6
+ space_type_map = nil
7
+ case building_vintage
8
+ when 'NECB 2011'
9
+ space_type_map ={
10
+ "Office - open plan" => ["Core_bottom", "Core_mid", "Core_top",
11
+ "Perimeter_bot_ZN_1", "Perimeter_bot_ZN_2", "Perimeter_bot_ZN_3",
12
+ "Perimeter_bot_ZN_4", "Perimeter_mid_ZN_1", "Perimeter_mid_ZN_2",
13
+ "Perimeter_mid_ZN_3", "Perimeter_mid_ZN_4", "Perimeter_top_ZN_1",
14
+ "Perimeter_top_ZN_2", "Perimeter_top_ZN_3", "Perimeter_top_ZN_4"],
15
+
16
+ "- undefined -" => ["FirstFloor_Plenum", "TopFloor_Plenum", "MidFloor_Plenum"]
17
+ }
18
+ else
19
+ space_type_map = {
20
+ 'WholeBuilding - Md Office' => [
21
+ 'Perimeter_bot_ZN_1', 'Perimeter_bot_ZN_2', 'Perimeter_bot_ZN_3', 'Perimeter_bot_ZN_4', 'Core_bottom',
22
+ 'Perimeter_mid_ZN_1', 'Perimeter_mid_ZN_2', 'Perimeter_mid_ZN_3', 'Perimeter_mid_ZN_4', 'Core_mid',
23
+ 'Perimeter_top_ZN_1', 'Perimeter_top_ZN_2', 'Perimeter_top_ZN_3', 'Perimeter_top_ZN_4', 'Core_top'
24
+ ]
25
+ }
26
+ end
13
27
  return space_type_map
14
28
  end
15
29
 
@@ -19,63 +33,64 @@ class OpenStudio::Model::Model
19
33
  system_to_space_map = [
20
34
  {
21
35
  'type' => 'PSZ-AC',
36
+
22
37
  'space_names' =>
23
- [
24
- 'Perimeter_bot_ZN_1',
25
- 'Perimeter_bot_ZN_2',
26
- 'Perimeter_bot_ZN_3',
27
- 'Perimeter_bot_ZN_4',
28
- 'Core_bottom',
29
- 'Perimeter_mid_ZN_1',
30
- 'Perimeter_mid_ZN_2',
31
- 'Perimeter_mid_ZN_3',
32
- 'Perimeter_mid_ZN_4',
33
- 'Core_mid',
34
- 'Perimeter_top_ZN_1',
35
- 'Perimeter_top_ZN_2',
36
- 'Perimeter_top_ZN_3',
37
- 'Perimeter_top_ZN_4',
38
- 'Core_top'
38
+ [
39
+ 'Perimeter_bot_ZN_1',
40
+ 'Perimeter_bot_ZN_2',
41
+ 'Perimeter_bot_ZN_3',
42
+ 'Perimeter_bot_ZN_4',
43
+ 'Core_bottom',
44
+ 'Perimeter_mid_ZN_1',
45
+ 'Perimeter_mid_ZN_2',
46
+ 'Perimeter_mid_ZN_3',
47
+ 'Perimeter_mid_ZN_4',
48
+ 'Core_mid',
49
+ 'Perimeter_top_ZN_1',
50
+ 'Perimeter_top_ZN_2',
51
+ 'Perimeter_top_ZN_3',
52
+ 'Perimeter_top_ZN_4',
53
+ 'Core_top'
39
54
  ]
40
- }
41
- ]
55
+ }
56
+ ]
42
57
  else
43
58
  system_to_space_map = [
44
59
  {
45
- 'type' => 'PVAV',
46
- 'space_names' =>
60
+ 'type' => 'PVAV',
61
+ 'space_names' =>
47
62
  [
48
- 'Perimeter_bot_ZN_1',
49
- 'Perimeter_bot_ZN_2',
50
- 'Perimeter_bot_ZN_3',
51
- 'Perimeter_bot_ZN_4',
52
- 'Core_bottom'
53
- ],
54
- 'return_plenum' => 'FirstFloor_Plenum'
63
+ 'Perimeter_bot_ZN_1',
64
+ 'Perimeter_bot_ZN_2',
65
+ 'Perimeter_bot_ZN_3',
66
+ 'Perimeter_bot_ZN_4',
67
+ 'Core_bottom'
68
+ ],
69
+ 'return_plenum' => 'FirstFloor_Plenum'
55
70
  },
56
71
  {
57
- 'type' => 'PVAV',
58
- 'space_names' =>
72
+ 'type' => 'PVAV',
73
+ 'space_names' =>
59
74
  [
60
- 'Perimeter_mid_ZN_1',
61
- 'Perimeter_mid_ZN_2',
62
- 'Perimeter_mid_ZN_3',
63
- 'Perimeter_mid_ZN_4',
64
- 'Core_mid'
65
- ],
66
- 'return_plenum' => 'MidFloor_Plenum'
75
+ 'Perimeter_mid_ZN_1',
76
+ 'Perimeter_mid_ZN_2',
77
+ 'Perimeter_mid_ZN_3',
78
+ 'Perimeter_mid_ZN_4',
79
+ 'Core_mid'
80
+ ],
81
+ 'return_plenum' => 'MidFloor_Plenum'
67
82
  },
68
83
  {
69
- 'type' => 'PVAV',
70
- 'space_names' =>
84
+ 'type' => 'PVAV',
85
+ 'space_names' =>
71
86
  [
72
- 'Perimeter_top_ZN_1',
73
- 'Perimeter_top_ZN_2',
74
- 'Perimeter_top_ZN_3',
75
- 'Perimeter_top_ZN_4',
76
- 'Core_top'
77
- ],
78
- 'return_plenum' => 'TopFloor_Plenum'
87
+ 'Perimeter_top_ZN_1',
88
+ 'Perimeter_top_ZN_2',
89
+ 'Perimeter_top_ZN_3',
90
+ 'Perimeter_top_ZN_4',
91
+ 'Core_top'
92
+ ],
93
+ 'return_plenum' => 'TopFloor_Plenum'
79
94
  }
80
95
  ]
81
96
  end
@@ -109,7 +124,7 @@ class OpenStudio::Model::Model
109
124
 
110
125
  def update_waterheater_loss_coefficient(building_vintage)
111
126
  case building_vintage
112
- when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
127
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
113
128
  self.getWaterHeaterMixeds.sort.each do |water_heater|
114
129
  water_heater.setOffCycleLossCoefficienttoAmbientTemperature(7.561562668)
115
130
  water_heater.setOnCycleLossCoefficienttoAmbientTemperature(7.561562668)