openstudio-standards 0.1.3 → 0.1.4

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