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
@@ -2,7 +2,7 @@
2
2
  # open the class to add methods to size all HVAC equipment
3
3
  class OpenStudio::Model::Model
4
4
 
5
- # Load the helper libraries for
5
+ # Load the helper libraries for
6
6
  require_relative 'Prototype.FanConstantVolume'
7
7
  require_relative 'Prototype.FanVariableVolume'
8
8
  require_relative 'Prototype.FanOnOff'
@@ -11,6 +11,7 @@ class OpenStudio::Model::Model
11
11
  require_relative 'Prototype.ControllerWaterCoil'
12
12
  require_relative 'Prototype.Model.hvac'
13
13
  require_relative 'Prototype.Model.swh'
14
+ require_relative '../standards/Standards.Model'
14
15
 
15
16
  # Creates a DOE prototype building model and replaces
16
17
  # the current model with this model.
@@ -22,13 +23,17 @@ class OpenStudio::Model::Model
22
23
  # @return [Bool] returns true if successful, false if not
23
24
  # @example Create a Small Office, 90.1-2010, in ASHRAE Climate Zone 5A (Chicago)
24
25
  # model.create_prototype_building('SmallOffice', '90.1-2010', 'ASHRAE 169-2006-5A')
25
- def create_prototype_building(building_type, building_vintage, climate_zone, sizing_run_dir = Dir.pwd, debug = false)
26
-
27
- # There are no reference models for HighriseApartment at vintages Pre-1980 and 1980-2004. This is a quick check.
26
+
27
+ def create_prototype_building(building_type, building_vintage, climate_zone, epw_file, sizing_run_dir = Dir.pwd, debug = false)
28
+
29
+ # There are no reference models for HighriseApartment at vintages Pre-1980 and 1980-2004, nor for NECB 2011. This is a quick check.
28
30
  if building_type == "HighriseApartment"
29
31
  if building_vintage == 'DOE Ref Pre-1980' or building_vintage == 'DOE Ref 1980-2004'
30
32
  OpenStudio::logFree(OpenStudio::Error, 'Not available', "DOE Reference models for #{building_type} at vintage #{building_vintage} are not available, the measure is disabled for this specific type.")
31
33
  return false
34
+ elsif building_vintage == "NECB 2011"
35
+ OpenStudio::logFree(OpenStudio::Error, 'Not available', "Reference model for #{building_type} at vintage #{building_vintage} is not available, the measure is disabled for this specific type.")
36
+ return false
32
37
  end
33
38
  end
34
39
 
@@ -39,33 +44,75 @@ class OpenStudio::Model::Model
39
44
  'template' => building_vintage,
40
45
  'building_type' => building_type
41
46
  }
42
- prototype_input = self.find_object($os_standards['prototype_inputs'], search_criteria)
47
+
48
+ prototype_input = self.find_object($os_standards['prototype_inputs'], search_criteria,nil)
49
+
50
+
43
51
  if prototype_input.nil?
44
52
  OpenStudio::logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{search_criteria}, cannot create model.")
45
53
  return false
46
54
  end
47
55
 
48
- self.load_building_type_methods(building_type, building_vintage, climate_zone)
49
- self.load_geometry(building_type, building_vintage, climate_zone)
50
- self.getBuilding.setName("#{building_vintage}-#{building_type}-#{climate_zone} created: #{Time.new}")
51
- space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
52
- self.assign_space_type_stubs(lookup_building_type, building_vintage, space_type_map)
53
- self.add_loads(building_vintage, climate_zone)
54
- self.apply_infiltration_standard(building_vintage)
55
- self.modify_infiltration_coefficients(building_type, building_vintage, climate_zone)
56
- self.modify_surface_convection_algorithm(building_vintage)
57
- self.add_constructions(lookup_building_type, building_vintage, climate_zone)
58
- self.create_thermal_zones(building_type,building_vintage, climate_zone)
59
- self.add_hvac(building_type, building_vintage, climate_zone, prototype_input)
60
- self.custom_hvac_tweaks(building_type, building_vintage, climate_zone, prototype_input)
61
- self.add_swh(building_type, building_vintage, climate_zone, prototype_input)
62
- self.custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
63
- self.add_exterior_lights(building_type, building_vintage, climate_zone, prototype_input)
64
- self.add_occupancy_sensors(building_type, building_vintage, climate_zone)
65
- self.add_design_days_and_weather_file(building_type, building_vintage, climate_zone)
66
- self.set_sizing_parameters(building_type, building_vintage)
56
+
57
+ case building_vintage
58
+ when 'NECB 2011'
59
+ self.load_building_type_methods(building_type, building_vintage, climate_zone)
60
+ self.load_geometry(building_type, building_vintage, climate_zone)
61
+ self.getBuilding.setName("#{building_vintage}-#{building_type}-#{climate_zone}-#{epw_file} created: #{Time.new}")
62
+ space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
63
+ self.assign_space_type_stubs("Space Function", building_vintage, space_type_map) # TO DO: add support for defining NECB 2011 archetype by building type (versus space function)
64
+ self.add_loads(building_vintage, climate_zone)
65
+ self.modify_infiltration_coefficients(building_type, building_vintage, climate_zone) #does not apply to NECB 2011 but left here for consistency
66
+ self.modify_surface_convection_algorithm(building_vintage)
67
+
68
+ #Should this be the first thing done Maria?
69
+ self.add_design_days_and_weather_file(building_type, building_vintage, climate_zone, epw_file)
70
+ puts self.get_full_weather_file_path
71
+ self.add_constructions(lookup_building_type, building_vintage, climate_zone) #set "dummy construction set
72
+ #BTAP::Geometry::intersect_surfaces(self)
73
+ #BTAP::Geometry::match_surfaces(self)
74
+ BTAP::Compliance::NECB2011::set_necb_fwdr( self, true, runner=nil) # set FWDR
75
+ BTAP::Compliance::NECB2011::set_all_construction_sets_to_necb!(self, runner=nil)
76
+ #Getting System Fuel type types from BTAP::Environment.
77
+ BTAP::Environment::get_canadian_system_defaults_by_weatherfile_name(epw_file)
78
+ boiler_fueltype, baseboard_type, mau_type, mau_heating_coil_type, mua_cooling_type, chiller_type, heating_coil_types_sys3, heating_coil_types_sys4,heating_coil_types_sys6, fan_type = BTAP::Environment::get_canadian_system_defaults_by_weatherfile_name(epw_file)
79
+ BTAP::Compliance::NECB2011::necb_autozone_and_autosystem(self, runner=nil, use_ideal_air_loads = false, boiler_fueltype, mau_type, mau_heating_coil_type, baseboard_type, chiller_type, mua_cooling_type, heating_coil_types_sys3, heating_coil_types_sys4, heating_coil_types_sys6, fan_type )
80
+
81
+ self.set_sizing_parameters(building_type, building_vintage)
82
+ self.yearDescription.get.setDayofWeekforStartDay('Sunday')
83
+ self.add_swh(building_type, building_vintage, climate_zone, prototype_input) # note exhaust fan schedule for * common spaces.
84
+ # TO DO: routine custom_swh_tweaks sets loss coefficient to ambient for water heater, differs for each archetype
85
+ # NECB 2011 follows ASHRAE 90.1 for now, does this need to change?
86
+ self.custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
87
+ # self.add_exterior_lights(building_type, building_vintage, climate_zone, prototype_input)
88
+ # self.add_occupancy_sensors(building_type, building_vintage, climate_zone)
89
+
90
+ #
91
+
92
+ else
93
+
94
+ self.load_building_type_methods(building_type, building_vintage, climate_zone)
95
+ self.load_geometry(building_type, building_vintage, climate_zone)
96
+ self.getBuilding.setName("#{building_vintage}-#{building_type}-#{climate_zone} created: #{Time.new}")
97
+ space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
98
+ self.assign_space_type_stubs(lookup_building_type, building_vintage, space_type_map)
99
+ self.add_loads(building_vintage, climate_zone)
100
+ self.apply_infiltration_standard(building_vintage)
101
+ self.modify_infiltration_coefficients(building_type, building_vintage, climate_zone)
102
+ self.modify_surface_convection_algorithm(building_vintage)
103
+ self.add_constructions(lookup_building_type, building_vintage, climate_zone)
104
+ self.create_thermal_zones(building_type,building_vintage, climate_zone)
105
+ self.add_hvac(building_type, building_vintage, climate_zone, prototype_input)
106
+ self.custom_hvac_tweaks(building_type, building_vintage, climate_zone, prototype_input)
107
+ self.add_swh(building_type, building_vintage, climate_zone, prototype_input)
108
+ self.custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
109
+ self.add_exterior_lights(building_type, building_vintage, climate_zone, prototype_input)
110
+ self.add_occupancy_sensors(building_type, building_vintage, climate_zone)
111
+ self.add_design_days_and_weather_file(building_type, building_vintage, climate_zone, epw_file)
112
+ self.set_sizing_parameters(building_type, building_vintage)
67
113
  self.yearDescription.get.setDayofWeekforStartDay('Sunday')
68
114
 
115
+ end
69
116
  # set climate zone and building type
70
117
  self.getBuilding.setStandardsBuildingType(building_type)
71
118
  if climate_zone.include? 'ASHRAE 169-2006-'
@@ -77,10 +124,14 @@ class OpenStudio::Model::Model
77
124
  return false
78
125
  end
79
126
 
127
+
80
128
  # If there are any multizone systems, set damper positions
81
129
  # and perform a second sizing run
82
130
  has_multizone_systems = false
131
+
132
+
83
133
  self.getAirLoopHVACs.sort.each do |air_loop|
134
+
84
135
  if air_loop.is_multizone_vav_system
85
136
  self.apply_multizone_vav_outdoor_air_sizing(building_vintage)
86
137
  if self.runSizingRun("#{sizing_run_dir}/SizingRun2") == false
@@ -94,28 +145,42 @@ class OpenStudio::Model::Model
94
145
  # which include sizing the fan pressure rises based
95
146
  # on the flow rate of the system.
96
147
  self.applyPrototypeHVACAssumptions(building_type, building_vintage, climate_zone)
97
-
148
+
149
+ # for 90.1-2010 Outpatient, AHU2 set minimum outdoor air flow rate as 0
150
+ # AHU1 doesn't have economizer
151
+ if building_type == "Outpatient"
152
+ self.modify_OAcontroller(building_vintage)
153
+ # For operating room 1&2 in 2010 and 2013, VAV minimum air flow is set by schedule
154
+ self.reset_or_room_vav_minimum_damper(prototype_input, building_vintage)
155
+ end
156
+
157
+ if building_type == "Hospital"
158
+ self.modify_hospital_OAcontroller(building_vintage)
159
+ end
160
+
98
161
  # Apply the HVAC efficiency standard
99
162
  self.applyHVACEfficiencyStandard(building_vintage, climate_zone)
100
163
 
101
164
  # Add daylighting controls per standard
102
165
  # only four zones in large hotel have daylighting controls
103
166
  # todo: YXC to merge to the main function
104
- if building_type != "LargeHotel"
105
- self.addDaylightingControls(building_vintage)
106
- else
167
+ if building_type == "LargeHotel"
107
168
  self.add_daylighting_controls(building_vintage)
169
+ elsif building_type == "Hospital"
170
+ self.hospital_add_daylighting_controls(building_vintage)
171
+ else
172
+ self.addDaylightingControls(building_vintage)
108
173
  end
109
174
 
110
175
  if building_type == "QuickServiceRestaurant" || building_type == "FullServiceRestaurant" || building_type == "Outpatient"
111
176
  self.update_exhaust_fan_efficiency(building_vintage)
112
177
  end
113
-
178
+
114
179
  if building_type == "HighriseApartment"
115
180
  self.update_fan_efficiency
116
181
  end
117
182
 
118
- # for 90.1-2010 Outpatient, AHU2 set minimum outdoor air flow rate as 0
183
+ # Add output variables for debugging
119
184
  # AHU1 doesn't have economizer
120
185
  if building_type == "Outpatient"
121
186
  # remove the controller:mechanical ventilation for AHU1 OA
@@ -158,6 +223,8 @@ class OpenStudio::Model::Model
158
223
  lookup_name = 'Retail'
159
224
  when 'RetailStripmall'
160
225
  lookup_name = 'StripMall'
226
+ when 'Office'
227
+ lookup_name = 'Office'
161
228
  end
162
229
 
163
230
  return lookup_name
@@ -232,6 +299,8 @@ class OpenStudio::Model::Model
232
299
 
233
300
  # Determine which geometry file to use
234
301
  # based on building_type and template
302
+ # NECB 2011 geometry is not explicitly defined; for NECB 2011 vintage, latest ASHRAE 90.1 geometry file is assigned (implicitly)
303
+
235
304
  case building_type
236
305
  when 'SecondarySchool'
237
306
  if building_vintage == 'DOE Ref Pre-1980' || building_vintage == 'DOE Ref 1980-2004'
@@ -273,7 +342,7 @@ class OpenStudio::Model::Model
273
342
  geometry_file = 'Geometry.small_hotel_pnnl2007.osm'
274
343
  when '90.1-2010'
275
344
  geometry_file = 'Geometry.small_hotel_pnnl2010.osm'
276
- when '90.1-2013'
345
+ else #'90.1-2013'
277
346
  geometry_file = 'Geometry.small_hotel_pnnl2013.osm'
278
347
  end
279
348
  when 'LargeHotel'
@@ -311,14 +380,14 @@ class OpenStudio::Model::Model
311
380
  case building_vintage
312
381
  when 'DOE Ref Pre-1980'
313
382
  geometry_file = 'Geometry.quick_service_restaurant_pre1980.osm'
314
- when 'DOE Ref 1980-2004','90.1-2010','90.1-2007','90.1-2004','90.1-2013'
383
+ else #'DOE Ref 1980-2004','90.1-2010','90.1-2007','90.1-2004','90.1-2013'
315
384
  geometry_file = 'Geometry.quick_service_restaurant_allothers.osm'
316
385
  end
317
386
  when 'FullServiceRestaurant'
318
387
  case building_vintage
319
388
  when 'DOE Ref Pre-1980'
320
389
  geometry_file = 'Geometry.full_service_restaurant_pre1980.osm'
321
- when 'DOE Ref 1980-2004','90.1-2010','90.1-2007','90.1-2004','90.1-2013'
390
+ else # 'DOE Ref 1980-2004','90.1-2010','90.1-2007','90.1-2004','90.1-2013'
322
391
  geometry_file = 'Geometry.full_service_restaurant_allothers.osm'
323
392
  end
324
393
  when 'Hospital'
@@ -327,6 +396,9 @@ class OpenStudio::Model::Model
327
396
  geometry_file = 'Geometry.outpatient.osm'
328
397
  when 'MidriseApartment'
329
398
  geometry_file = 'Geometry.mid_rise_apartment.osm'
399
+ when 'Office' # For NECB 2011 prototypes (old)
400
+ geometry_file = 'Geometry.large_office_2010.osm'
401
+ alt_search_name = 'Office'
330
402
  when 'HighriseApartment'
331
403
  geometry_file = 'Geometry.high_rise_apartment.osm'
332
404
  else
@@ -393,12 +465,14 @@ class OpenStudio::Model::Model
393
465
  stub_space_type.set_rendering_color(building_vintage)
394
466
 
395
467
  space_names.each do |space_name|
468
+
396
469
  space = self.getSpaceByName(space_name)
470
+
397
471
  next if space.empty?
398
472
  space = space.get
399
473
  space.setSpaceType(stub_space_type)
400
474
 
401
- #OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', "Setting #{space.name} to #{building_type}.#{space_type_name}")
475
+ OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', "Setting #{space.name} to #{building_type}.#{space_type_name}")
402
476
  end
403
477
  end
404
478
 
@@ -442,13 +516,14 @@ class OpenStudio::Model::Model
442
516
 
443
517
  # Rendering color
444
518
  space_type.set_rendering_color(building_vintage)
445
-
519
+
446
520
  # Loads
447
521
  space_type.set_internal_loads(building_vintage, true, true, true, true, true, true)
448
-
522
+
449
523
  # Schedules
450
524
  space_type.set_internal_load_schedules(building_vintage, true, true, true, true, true, true, true)
451
-
525
+
526
+
452
527
  end
453
528
 
454
529
  OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished applying space types (loads)')
@@ -675,11 +750,18 @@ class OpenStudio::Model::Model
675
750
  end
676
751
 
677
752
  # get all the space types that are conditioned
678
- conditioned_space_names = find_conditioned_space_names(building_type, building_vintage, climate_zone)
753
+
754
+ # not required for NECB 2011
755
+ unless (building_vintage == 'NECB 2011')
756
+ conditioned_space_names = find_conditioned_space_names(building_type, building_vintage, climate_zone)
757
+ end
758
+
679
759
 
680
760
  # add internal mass
681
- unless (building_type == 'SmallHotel') &&
682
- (building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013')
761
+ # not required for NECB 2011
762
+ unless ((building_vintage == 'NECB 2011') or
763
+ ((building_type == 'SmallHotel') &&
764
+ (building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013')))
683
765
  internal_mass_def = OpenStudio::Model::InternalMassDefinition.new(self)
684
766
  internal_mass_def.setSurfaceAreaperSpaceFloorArea(2.0)
685
767
  internal_mass_def.setConstruction(construction)
@@ -986,10 +1068,10 @@ class OpenStudio::Model::Model
986
1068
  end
987
1069
  # Set the terrain type
988
1070
  self.getSite.setTerrain(terrain)
989
-
1071
+
990
1072
  # modify the infiltration coefficients for 90.1-2004, 90.1-2007, 90.1-2010, 90.1-2013
991
- return true unless building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013'
992
-
1073
+ return true unless building_vintage == '90.1-2004' or building_vintage == '90.1-2007' or building_vintage == '90.1-2010' or building_vintage == '90.1-2013' or building_vintage == 'NECB 2011'
1074
+
993
1075
  # The pre-1980 and 1980-2004 buildings have this:
994
1076
  # 1.0000, !- Constant Term Coefficient
995
1077
  # 0.0000, !- Temperature Term Coefficient
@@ -1022,7 +1104,7 @@ class OpenStudio::Model::Model
1022
1104
  when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
1023
1105
  inside.setAlgorithm('TARP')
1024
1106
  outside.setAlgorithm('DOE-2')
1025
- when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
1107
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
1026
1108
  inside.setAlgorithm('TARP')
1027
1109
  outside.setAlgorithm('TARP')
1028
1110
  end
@@ -1057,6 +1139,9 @@ class OpenStudio::Model::Model
1057
1139
  clg = 1.0
1058
1140
  htg = 1.0
1059
1141
  end
1142
+ when 'NECB 2011'
1143
+ clg = 1.3
1144
+ htg = 1.3
1060
1145
  end
1061
1146
 
1062
1147
  sizing_params = self.getSizingParameters
@@ -1243,7 +1328,7 @@ class OpenStudio::Model::Model
1243
1328
  return false
1244
1329
  end
1245
1330
  else
1246
- OpenStudio::logFree(OpenStudio::Error, "openstudio.prototype.Model", "Model has not been assigned a weather file.")
1331
+ OpenStudio::logFree(OpenStudio::Error, "openstudio.prototype.Model", "Model has not been assigned a weather file.3")
1247
1332
  return false
1248
1333
  end
1249
1334
 
@@ -5,7 +5,7 @@ class OpenStudio::Model::Model
5
5
  def add_swh(building_type, building_vintage, climate_zone, prototype_input)
6
6
 
7
7
  OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding Service Water Heating')
8
-
8
+
9
9
  # Add the main service water heating loop, if specified
10
10
  unless prototype_input['main_water_heater_volume'].nil?
11
11
 
@@ -20,13 +20,13 @@ class OpenStudio::Model::Model
20
20
  OpenStudio.convert(prototype_input['main_water_heater_volume'],'gal','m^3').get,
21
21
  prototype_input['main_water_heater_fuel'],
22
22
  OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'],'Btu/hr','W').get,
23
- building_type) unless building_type == 'RetailStripmall'
23
+ building_type) unless building_type == 'RetailStripmall' and building_vintage != 'NECB 2011'
24
24
 
25
25
  # Attach the end uses if specified in prototype inputs
26
26
  # TODO remove special logic for large office SWH end uses
27
27
  # TODO remove special logic for stripmall SWH end uses and service water loops
28
28
  # TODO remove special logic for large hotel SWH end uses
29
- if building_type == 'LargeOffice'
29
+ if building_type == 'LargeOffice' and building_vintage != 'NECB 2011'
30
30
 
31
31
  # Only the core spaces have service water
32
32
  ['Core_bottom', 'Core_mid', 'Core_top'].each do |space_name|
@@ -40,7 +40,7 @@ class OpenStudio::Model::Model
40
40
  building_type)
41
41
  end
42
42
 
43
- elsif building_type == 'RetailStripmall'
43
+ elsif building_type == 'RetailStripmall' and building_vintage != 'NECB 2011'
44
44
 
45
45
  return true if building_vintage == "DOE Ref Pre-1980" || building_vintage == "DOE Ref 1980-2004"
46
46
 
@@ -187,7 +187,12 @@ class OpenStudio::Model::Model
187
187
 
188
188
  else
189
189
 
190
- # Attaches the end uses if specified by space type
190
+ # Attaches the end uses if specified by space type
191
+
192
+ if building_vintage == 'NECB 2011'
193
+ building_type = 'Space Function'
194
+ end
195
+
191
196
  space_type_map = self.define_space_type_map(building_type, building_vintage, climate_zone)
192
197
  space_type_map.each do |space_type_name, space_names|
193
198
  search_criteria = {
@@ -200,11 +205,12 @@ class OpenStudio::Model::Model
200
205
  # Skip space types with no data
201
206
  next if data.nil?
202
207
 
203
- # Skip space types with no water use
204
- next if data['service_water_heating_peak_flow_rate'].nil?
208
+ # Skip space types with no water use, unless it is a NECB archetype (these do not have peak flow rates defined)
209
+ next if data['service_water_heating_peak_flow_rate'].nil? unless building_vintage == 'NECB 2011'
205
210
 
206
211
  # Add a service water use for each space
207
212
  space_names.each do |space_name|
213
+
208
214
  space = self.getSpaceByName(space_name).get
209
215
  space_multiplier = space.multiplier
210
216
  self.add_swh_end_uses_by_space(get_lookup_name(building_type),
@@ -16,7 +16,15 @@ class OpenStudio::Model::Model
16
16
  'Kitchen' => ['Kitchen'],
17
17
  'Attic' => ['attic']
18
18
  }
19
+
20
+ when 'NECB 2011'
21
+ space_type_map ={
22
+ "- undefined -" => ["attic"],
23
+ "Dining - family space" => ["Dining"],
24
+ "Food preparation" => ["Kitchen"]
25
+ }
19
26
  end
27
+
20
28
  return space_type_map
21
29
  end
22
30
 
@@ -26,415 +34,415 @@ class OpenStudio::Model::Model
26
34
  when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
27
35
  system_to_space_map = [
28
36
  {
29
- 'type' => 'PSZ-AC',
30
- 'space_names' => ['Dining', 'Kitchen']
37
+ 'type' => 'PSZ-AC',
38
+ 'space_names' => ['Dining', 'Kitchen']
31
39
  },
32
40
  {
33
- 'type' => 'Exhaust Fan',
34
- 'name' => 'Dining Exhaust Fan',
35
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
36
- 'flow_rate' => 1.828,
37
- 'flow_fraction_schedule_name' => nil,
38
- 'balanced_exhaust_fraction_schedule_name' => nil,
39
- 'space_names' =>
41
+ 'type' => 'Exhaust Fan',
42
+ 'name' => 'Dining Exhaust Fan',
43
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
44
+ 'flow_rate' => 1.828,
45
+ 'flow_fraction_schedule_name' => nil,
46
+ 'balanced_exhaust_fraction_schedule_name' => nil,
47
+ 'space_names' =>
40
48
  [
41
- 'Dining'
42
- ]
49
+ 'Dining'
50
+ ]
43
51
  },
44
52
  {
45
- 'type' => 'Exhaust Fan',
46
- 'name' => 'Kitchen Exhaust Fan',
47
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
48
- 'flow_rate' => 0.06,
49
- 'flow_fraction_schedule_name' => nil,
50
- 'balanced_exhaust_fraction_schedule_name' => nil,
51
- 'space_names' =>
53
+ 'type' => 'Exhaust Fan',
54
+ 'name' => 'Kitchen Exhaust Fan',
55
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
56
+ 'flow_rate' => 0.06,
57
+ 'flow_fraction_schedule_name' => nil,
58
+ 'balanced_exhaust_fraction_schedule_name' => nil,
59
+ 'space_names' =>
52
60
  [
53
- 'Kitchen'
54
- ]
61
+ 'Kitchen'
62
+ ]
55
63
  },
56
64
  {
57
- 'type' => 'Refrigeration',
58
- 'case_type' => 'Walkin Freezer',
59
- 'cooling_capacity_per_length' => 688,
60
- 'length' => 2.44,
61
- 'evaporator_fan_pwr_per_length' => 74,
62
- 'lighting_per_length' => 33,
63
- 'lighting_sch_name' => 'FullServiceRestaurant Bldg Light',
64
- 'defrost_pwr_per_length' => 820,
65
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
66
- 'cop' => 1.5,
67
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
68
- 'condenser_fan_pwr' => 330,
69
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
70
- 'space_names' =>
65
+ 'type' => 'Refrigeration',
66
+ 'case_type' => 'Walkin Freezer',
67
+ 'cooling_capacity_per_length' => 688,
68
+ 'length' => 2.44,
69
+ 'evaporator_fan_pwr_per_length' => 74,
70
+ 'lighting_per_length' => 33,
71
+ 'lighting_sch_name' => 'FullServiceRestaurant Bldg Light',
72
+ 'defrost_pwr_per_length' => 820,
73
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
74
+ 'cop' => 1.5,
75
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
76
+ 'condenser_fan_pwr' => 330,
77
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
78
+ 'space_names' =>
71
79
  [
72
- 'Kitchen'
73
- ]
80
+ 'Kitchen'
81
+ ]
74
82
  },
75
83
  {
76
- 'type' => 'Refrigeration',
77
- 'case_type' => 'Display Case',
78
- 'cooling_capacity_per_length' => 734.0,
79
- 'length' => 3.05,
80
- 'evaporator_fan_pwr_per_length' => 66,
81
- 'lighting_per_length' => 33.0,
82
- 'lighting_sch_name' => 'FullServiceRestaurant Bldg Light',
83
- 'defrost_pwr_per_length' => 0.0,
84
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
85
- 'cop' => 3.0,
86
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
87
- 'condenser_fan_pwr' => 330,
88
- 'condenser_fan_pwr_curve_name' => nil,
89
- 'space_names' =>
84
+ 'type' => 'Refrigeration',
85
+ 'case_type' => 'Display Case',
86
+ 'cooling_capacity_per_length' => 734.0,
87
+ 'length' => 3.05,
88
+ 'evaporator_fan_pwr_per_length' => 66,
89
+ 'lighting_per_length' => 33.0,
90
+ 'lighting_sch_name' => 'FullServiceRestaurant Bldg Light',
91
+ 'defrost_pwr_per_length' => 0.0,
92
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
93
+ 'cop' => 3.0,
94
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
95
+ 'condenser_fan_pwr' => 330,
96
+ 'condenser_fan_pwr_curve_name' => nil,
97
+ 'space_names' =>
90
98
  [
91
- 'Kitchen'
92
- ]
99
+ 'Kitchen'
100
+ ]
93
101
  }
94
102
  ]
95
103
  when '90.1-2004'
96
104
  system_to_space_map = [
97
105
  {
98
- 'type' => 'PSZ-AC',
99
- 'space_names' => ['Dining', 'Kitchen']
106
+ 'type' => 'PSZ-AC',
107
+ 'space_names' => ['Dining', 'Kitchen']
100
108
  },
101
109
  {
102
- 'type' => 'Exhaust Fan',
103
- 'name' => 'Dining Exhaust Fan',
104
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
105
- 'flow_rate' => 2.644,
106
- 'flow_fraction_schedule_name' => nil,
107
- 'balanced_exhaust_fraction_schedule_name' => nil,
108
- 'space_names' =>
110
+ 'type' => 'Exhaust Fan',
111
+ 'name' => 'Dining Exhaust Fan',
112
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
113
+ 'flow_rate' => 2.644,
114
+ 'flow_fraction_schedule_name' => nil,
115
+ 'balanced_exhaust_fraction_schedule_name' => nil,
116
+ 'space_names' =>
109
117
  [
110
- 'Dining'
111
- ]
118
+ 'Dining'
119
+ ]
112
120
  },
113
121
  {
114
- 'type' => 'Exhaust Fan',
115
- 'name' => 'Kitchen Exhaust Fan',
116
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
117
- 'flow_rate' => 2.83169,
118
- 'flow_fraction_schedule_name' => nil,
119
- 'balanced_exhaust_fraction_schedule_name' => nil,
120
- 'space_names' =>
122
+ 'type' => 'Exhaust Fan',
123
+ 'name' => 'Kitchen Exhaust Fan',
124
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
125
+ 'flow_rate' => 2.83169,
126
+ 'flow_fraction_schedule_name' => nil,
127
+ 'balanced_exhaust_fraction_schedule_name' => nil,
128
+ 'space_names' =>
121
129
  [
122
- 'Kitchen'
123
- ]
130
+ 'Kitchen'
131
+ ]
124
132
  },
125
133
  {
126
- 'type' => 'Refrigeration',
127
- 'case_type' => 'Walkin Freezer',
128
- 'cooling_capacity_per_length' => 688,
129
- 'length' => 2.44,
130
- 'evaporator_fan_pwr_per_length' => 74,
131
- 'lighting_per_length' => 33,
132
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
133
- 'defrost_pwr_per_length' => 820,
134
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
135
- 'cop' => 1.5,
136
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
137
- 'condenser_fan_pwr' => 330,
138
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
139
- 'space_names' =>
134
+ 'type' => 'Refrigeration',
135
+ 'case_type' => 'Walkin Freezer',
136
+ 'cooling_capacity_per_length' => 688,
137
+ 'length' => 2.44,
138
+ 'evaporator_fan_pwr_per_length' => 74,
139
+ 'lighting_per_length' => 33,
140
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
141
+ 'defrost_pwr_per_length' => 820,
142
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
143
+ 'cop' => 1.5,
144
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
145
+ 'condenser_fan_pwr' => 330,
146
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
147
+ 'space_names' =>
140
148
  [
141
- 'Kitchen'
142
- ]
149
+ 'Kitchen'
150
+ ]
143
151
  },
144
152
  {
145
- 'type' => 'Refrigeration',
146
- 'case_type' => 'Display Case',
147
- 'cooling_capacity_per_length' => 734.0,
148
- 'length' => 3.05,
149
- 'evaporator_fan_pwr_per_length' => 66,
150
- 'lighting_per_length' => 33.0,
151
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
152
- 'defrost_pwr_per_length' => 0.0,
153
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
154
- 'cop' => 3.0,
155
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
156
- 'condenser_fan_pwr' => 330,
157
- 'condenser_fan_pwr_curve_name' => nil,
158
- 'space_names' =>
153
+ 'type' => 'Refrigeration',
154
+ 'case_type' => 'Display Case',
155
+ 'cooling_capacity_per_length' => 734.0,
156
+ 'length' => 3.05,
157
+ 'evaporator_fan_pwr_per_length' => 66,
158
+ 'lighting_per_length' => 33.0,
159
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
160
+ 'defrost_pwr_per_length' => 0.0,
161
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
162
+ 'cop' => 3.0,
163
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
164
+ 'condenser_fan_pwr' => 330,
165
+ 'condenser_fan_pwr_curve_name' => nil,
166
+ 'space_names' =>
159
167
  [
160
- 'Kitchen'
161
- ]
168
+ 'Kitchen'
169
+ ]
162
170
  }
163
171
  ]
164
172
  when '90.1-2007'
165
173
  system_to_space_map = [
166
174
  {
167
- 'type' => 'PSZ-AC',
168
- 'space_names' => ['Dining', 'Kitchen']
175
+ 'type' => 'PSZ-AC',
176
+ 'space_names' => ['Dining', 'Kitchen']
169
177
  },
170
178
  {
171
- 'type' => 'Exhaust Fan',
172
- 'name' => 'Dining Exhaust Fan',
173
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
174
- 'flow_rate' => 1.331432,
175
- 'flow_fraction_schedule_name' => nil,
176
- 'balanced_exhaust_fraction_schedule_name' => nil,
177
- 'space_names' =>
179
+ 'type' => 'Exhaust Fan',
180
+ 'name' => 'Dining Exhaust Fan',
181
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
182
+ 'flow_rate' => 1.331432,
183
+ 'flow_fraction_schedule_name' => nil,
184
+ 'balanced_exhaust_fraction_schedule_name' => nil,
185
+ 'space_names' =>
178
186
  [
179
- 'Dining'
180
- ]
187
+ 'Dining'
188
+ ]
181
189
  },
182
190
  {
183
- 'type' => 'Exhaust Fan',
184
- 'name' => 'Kitchen Exhaust Fan',
185
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
186
- 'flow_rate' => 2.83169,
187
- 'flow_fraction_schedule_name' => nil,
188
- 'balanced_exhaust_fraction_schedule_name' => nil,
189
- 'space_names' =>
191
+ 'type' => 'Exhaust Fan',
192
+ 'name' => 'Kitchen Exhaust Fan',
193
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
194
+ 'flow_rate' => 2.83169,
195
+ 'flow_fraction_schedule_name' => nil,
196
+ 'balanced_exhaust_fraction_schedule_name' => nil,
197
+ 'space_names' =>
190
198
  [
191
- 'Kitchen'
192
- ]
199
+ 'Kitchen'
200
+ ]
193
201
  },
194
202
  {
195
- 'type' => 'Refrigeration',
196
- 'case_type' => 'Walkin Freezer',
197
- 'cooling_capacity_per_length' => 688,
198
- 'length' => 2.44,
199
- 'evaporator_fan_pwr_per_length' => 74,
200
- 'lighting_per_length' => 33,
201
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
202
- 'defrost_pwr_per_length' => 820,
203
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
204
- 'cop' => 1.5,
205
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
206
- 'condenser_fan_pwr' => 330,
207
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
208
- 'space_names' =>
203
+ 'type' => 'Refrigeration',
204
+ 'case_type' => 'Walkin Freezer',
205
+ 'cooling_capacity_per_length' => 688,
206
+ 'length' => 2.44,
207
+ 'evaporator_fan_pwr_per_length' => 74,
208
+ 'lighting_per_length' => 33,
209
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
210
+ 'defrost_pwr_per_length' => 820,
211
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
212
+ 'cop' => 1.5,
213
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
214
+ 'condenser_fan_pwr' => 330,
215
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
216
+ 'space_names' =>
209
217
  [
210
- 'Kitchen'
211
- ]
218
+ 'Kitchen'
219
+ ]
212
220
  },
213
221
  {
214
- 'type' => 'Refrigeration',
215
- 'case_type' => 'Display Case',
216
- 'cooling_capacity_per_length' => 734.0,
217
- 'length' => 3.05,
218
- 'evaporator_fan_pwr_per_length' => 66,
219
- 'lighting_per_length' => 33.0,
220
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
221
- 'defrost_pwr_per_length' => 0.0,
222
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
223
- 'cop' => 3.0,
224
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
225
- 'condenser_fan_pwr' => 330,
226
- 'condenser_fan_pwr_curve_name' => nil,
227
- 'space_names' =>
222
+ 'type' => 'Refrigeration',
223
+ 'case_type' => 'Display Case',
224
+ 'cooling_capacity_per_length' => 734.0,
225
+ 'length' => 3.05,
226
+ 'evaporator_fan_pwr_per_length' => 66,
227
+ 'lighting_per_length' => 33.0,
228
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
229
+ 'defrost_pwr_per_length' => 0.0,
230
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
231
+ 'cop' => 3.0,
232
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
233
+ 'condenser_fan_pwr' => 330,
234
+ 'condenser_fan_pwr_curve_name' => nil,
235
+ 'space_names' =>
228
236
  [
229
- 'Kitchen'
230
- ]
237
+ 'Kitchen'
238
+ ]
231
239
  }
232
240
  ]
233
241
  when '90.1-2007'
234
242
  system_to_space_map = [
235
243
  {
236
- 'type' => 'PSZ-AC',
237
- 'space_names' => ['Dining', 'Kitchen']
244
+ 'type' => 'PSZ-AC',
245
+ 'space_names' => ['Dining', 'Kitchen']
238
246
  },
239
247
  {
240
- 'type' => 'Exhaust Fan',
241
- 'name' => 'Dining Exhaust Fan',
242
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
243
- 'flow_rate' => 1.331432,
244
- 'flow_fraction_schedule_name' => nil,
245
- 'balanced_exhaust_fraction_schedule_name' => nil,
246
- 'space_names' =>
248
+ 'type' => 'Exhaust Fan',
249
+ 'name' => 'Dining Exhaust Fan',
250
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
251
+ 'flow_rate' => 1.331432,
252
+ 'flow_fraction_schedule_name' => nil,
253
+ 'balanced_exhaust_fraction_schedule_name' => nil,
254
+ 'space_names' =>
247
255
  [
248
- 'Dining'
249
- ]
256
+ 'Dining'
257
+ ]
250
258
  },
251
259
  {
252
- 'type' => 'Exhaust Fan',
253
- 'name' => 'Kitchen Exhaust Fan',
254
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
255
- 'flow_rate' => 2.83169,
256
- 'flow_fraction_schedule_name' => nil,
257
- 'balanced_exhaust_fraction_schedule_name' => nil,
258
- 'space_names' =>
260
+ 'type' => 'Exhaust Fan',
261
+ 'name' => 'Kitchen Exhaust Fan',
262
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
263
+ 'flow_rate' => 2.83169,
264
+ 'flow_fraction_schedule_name' => nil,
265
+ 'balanced_exhaust_fraction_schedule_name' => nil,
266
+ 'space_names' =>
259
267
  [
260
- 'Kitchen'
261
- ]
268
+ 'Kitchen'
269
+ ]
262
270
  },
263
271
  {
264
- 'type' => 'Refrigeration',
265
- 'case_type' => 'Walkin Freezer',
266
- 'cooling_capacity_per_length' => 688,
267
- 'length' => 2.44,
268
- 'evaporator_fan_pwr_per_length' => 74,
269
- 'lighting_per_length' => 33,
270
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
271
- 'defrost_pwr_per_length' => 820,
272
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
273
- 'cop' => 1.5,
274
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
275
- 'condenser_fan_pwr' => 330,
276
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
277
- 'space_names' =>
272
+ 'type' => 'Refrigeration',
273
+ 'case_type' => 'Walkin Freezer',
274
+ 'cooling_capacity_per_length' => 688,
275
+ 'length' => 2.44,
276
+ 'evaporator_fan_pwr_per_length' => 74,
277
+ 'lighting_per_length' => 33,
278
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
279
+ 'defrost_pwr_per_length' => 820,
280
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
281
+ 'cop' => 1.5,
282
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
283
+ 'condenser_fan_pwr' => 330,
284
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
285
+ 'space_names' =>
278
286
  [
279
- 'Kitchen'
280
- ]
287
+ 'Kitchen'
288
+ ]
281
289
  },
282
290
  {
283
- 'type' => 'Refrigeration',
284
- 'case_type' => 'Display Case',
285
- 'cooling_capacity_per_length' => 734.0,
286
- 'length' => 3.05,
287
- 'evaporator_fan_pwr_per_length' => 66,
288
- 'lighting_per_length' => 33.0,
289
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
290
- 'defrost_pwr_per_length' => 0.0,
291
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
292
- 'cop' => 3.0,
293
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
294
- 'condenser_fan_pwr' => 330,
295
- 'condenser_fan_pwr_curve_name' => nil,
296
- 'space_names' =>
291
+ 'type' => 'Refrigeration',
292
+ 'case_type' => 'Display Case',
293
+ 'cooling_capacity_per_length' => 734.0,
294
+ 'length' => 3.05,
295
+ 'evaporator_fan_pwr_per_length' => 66,
296
+ 'lighting_per_length' => 33.0,
297
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
298
+ 'defrost_pwr_per_length' => 0.0,
299
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
300
+ 'cop' => 3.0,
301
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
302
+ 'condenser_fan_pwr' => 330,
303
+ 'condenser_fan_pwr_curve_name' => nil,
304
+ 'space_names' =>
297
305
  [
298
- 'Kitchen'
299
- ]
306
+ 'Kitchen'
307
+ ]
300
308
  }
301
309
  ]
302
310
  when '90.1-2010'
303
311
  system_to_space_map = [
304
312
  {
305
- 'type' => 'PSZ-AC',
306
- 'space_names' => ['Dining', 'Kitchen']
313
+ 'type' => 'PSZ-AC',
314
+ 'space_names' => ['Dining', 'Kitchen']
307
315
  },
308
316
  {
309
- 'type' => 'Exhaust Fan',
310
- 'name' => 'Dining Exhaust Fan',
311
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
312
- 'flow_rate' => 1.331432,
313
- 'flow_fraction_schedule_name' => nil,
314
- 'balanced_exhaust_fraction_schedule_name' => nil,
315
- 'space_names' =>
317
+ 'type' => 'Exhaust Fan',
318
+ 'name' => 'Dining Exhaust Fan',
319
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
320
+ 'flow_rate' => 1.331432,
321
+ 'flow_fraction_schedule_name' => nil,
322
+ 'balanced_exhaust_fraction_schedule_name' => nil,
323
+ 'space_names' =>
316
324
  [
317
- 'Dining'
318
- ]
325
+ 'Dining'
326
+ ]
319
327
  },
320
328
  {
321
- 'type' => 'Exhaust Fan',
322
- 'name' => 'Kitchen Exhaust Fan',
323
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
324
- 'flow_rate' => 2.548516,
325
- 'flow_fraction_schedule_name' => nil,
326
- 'balanced_exhaust_fraction_schedule_name' => nil,
327
- 'space_names' =>
329
+ 'type' => 'Exhaust Fan',
330
+ 'name' => 'Kitchen Exhaust Fan',
331
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
332
+ 'flow_rate' => 2.548516,
333
+ 'flow_fraction_schedule_name' => nil,
334
+ 'balanced_exhaust_fraction_schedule_name' => nil,
335
+ 'space_names' =>
328
336
  [
329
- 'Kitchen'
330
- ]
337
+ 'Kitchen'
338
+ ]
331
339
  },
332
340
  {
333
- 'type' => 'Refrigeration',
334
- 'case_type' => 'Walkin Freezer',
335
- 'cooling_capacity_per_length' => 688,
336
- 'length' => 2.44,
337
- 'evaporator_fan_pwr_per_length' => 74,
338
- 'lighting_per_length' => 33,
339
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
340
- 'defrost_pwr_per_length' => 820,
341
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
342
- 'cop' => 1.5,
343
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
344
- 'condenser_fan_pwr' => 330,
345
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
346
- 'space_names' =>
341
+ 'type' => 'Refrigeration',
342
+ 'case_type' => 'Walkin Freezer',
343
+ 'cooling_capacity_per_length' => 688,
344
+ 'length' => 2.44,
345
+ 'evaporator_fan_pwr_per_length' => 74,
346
+ 'lighting_per_length' => 33,
347
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
348
+ 'defrost_pwr_per_length' => 820,
349
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
350
+ 'cop' => 1.5,
351
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
352
+ 'condenser_fan_pwr' => 330,
353
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
354
+ 'space_names' =>
347
355
  [
348
- 'Kitchen'
349
- ]
356
+ 'Kitchen'
357
+ ]
350
358
  },
351
359
  {
352
- 'type' => 'Refrigeration',
353
- 'case_type' => 'Display Case',
354
- 'cooling_capacity_per_length' => 734.0,
355
- 'length' => 3.05,
356
- 'evaporator_fan_pwr_per_length' => 66,
357
- 'lighting_per_length' => 33.0,
358
- 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
359
- 'defrost_pwr_per_length' => 0.0,
360
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
361
- 'cop' => 3.0,
362
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
363
- 'condenser_fan_pwr' => 330,
364
- 'condenser_fan_pwr_curve_name' => nil,
365
- 'space_names' =>
360
+ 'type' => 'Refrigeration',
361
+ 'case_type' => 'Display Case',
362
+ 'cooling_capacity_per_length' => 734.0,
363
+ 'length' => 3.05,
364
+ 'evaporator_fan_pwr_per_length' => 66,
365
+ 'lighting_per_length' => 33.0,
366
+ 'lighting_sch_name' => 'RestaurantSitDown BLDG_LIGHT_KITCHEN_SCH_2004_2007',
367
+ 'defrost_pwr_per_length' => 0.0,
368
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
369
+ 'cop' => 3.0,
370
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
371
+ 'condenser_fan_pwr' => 330,
372
+ 'condenser_fan_pwr_curve_name' => nil,
373
+ 'space_names' =>
366
374
  [
367
- 'Kitchen'
368
- ]
375
+ 'Kitchen'
376
+ ]
369
377
  }
370
378
  ]
371
379
  when '90.1-2013'
372
380
  system_to_space_map = [
373
381
  {
374
- 'type' => 'PSZ-AC',
375
- 'space_names' => ['Dining', 'Kitchen']
382
+ 'type' => 'PSZ-AC',
383
+ 'space_names' => ['Dining', 'Kitchen']
376
384
  },
377
385
  {
378
- 'type' => 'Exhaust Fan',
379
- 'name' => 'Dining Exhaust Fan',
380
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
381
- 'flow_rate' => 1.331432,
382
- 'flow_fraction_schedule_name' => nil,
383
- 'balanced_exhaust_fraction_schedule_name' => nil,
384
- 'space_names' =>
386
+ 'type' => 'Exhaust Fan',
387
+ 'name' => 'Dining Exhaust Fan',
388
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
389
+ 'flow_rate' => 1.331432,
390
+ 'flow_fraction_schedule_name' => nil,
391
+ 'balanced_exhaust_fraction_schedule_name' => nil,
392
+ 'space_names' =>
385
393
  [
386
- 'Dining'
387
- ]
394
+ 'Dining'
395
+ ]
388
396
  },
389
397
  {
390
- 'type' => 'Exhaust Fan',
391
- 'name' => 'Kitchen Exhaust Fan',
392
- 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
393
- 'flow_rate' => 2.548516,
394
- 'flow_fraction_schedule_name' => nil,
395
- 'balanced_exhaust_fraction_schedule_name' => nil,
396
- 'space_names' =>
398
+ 'type' => 'Exhaust Fan',
399
+ 'name' => 'Kitchen Exhaust Fan',
400
+ 'availability_sch_name' => 'RestaurantSitDown HVACOperationSchd',
401
+ 'flow_rate' => 2.548516,
402
+ 'flow_fraction_schedule_name' => nil,
403
+ 'balanced_exhaust_fraction_schedule_name' => nil,
404
+ 'space_names' =>
397
405
  [
398
- 'Kitchen'
399
- ]
406
+ 'Kitchen'
407
+ ]
400
408
  },
401
409
  {
402
- 'type' => 'Refrigeration',
403
- 'case_type' => 'Walkin Freezer',
404
- 'cooling_capacity_per_length' => 688,
405
- 'length' => 2.44,
406
- 'evaporator_fan_pwr_per_length' => 21.14286,
407
- 'lighting_per_length' => 33,
408
- 'lighting_sch_name' => 'RestaurantSitDown walkin_occ_lght_SCH',
409
- 'defrost_pwr_per_length' => 820,
410
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
411
- 'cop' => 1.5,
412
- 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
413
- 'condenser_fan_pwr' => 330,
414
- 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
415
- 'space_names' =>
410
+ 'type' => 'Refrigeration',
411
+ 'case_type' => 'Walkin Freezer',
412
+ 'cooling_capacity_per_length' => 688,
413
+ 'length' => 2.44,
414
+ 'evaporator_fan_pwr_per_length' => 21.14286,
415
+ 'lighting_per_length' => 33,
416
+ 'lighting_sch_name' => 'RestaurantSitDown walkin_occ_lght_SCH',
417
+ 'defrost_pwr_per_length' => 820,
418
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:1_WALKINFREEZER_WalkInStockingSched',
419
+ 'cop' => 1.5,
420
+ 'cop_f_of_t_curve_name' => 'RACK1_RackCOPfTCurve',
421
+ 'condenser_fan_pwr' => 330,
422
+ 'condenser_fan_pwr_curve_name' => 'RACK1_RackCondFanCurve2',
423
+ 'space_names' =>
416
424
  [
417
- 'Kitchen'
418
- ]
425
+ 'Kitchen'
426
+ ]
419
427
  },
420
428
  {
421
- 'type' => 'Refrigeration',
422
- 'case_type' => 'Display Case',
423
- 'cooling_capacity_per_length' => 734.0,
424
- 'length' => 3.05,
425
- 'evaporator_fan_pwr_per_length' => 18.85714,
426
- 'lighting_per_length' => 33.0,
427
- 'lighting_sch_name' => 'RestaurantSitDown walkin_occ_lght_SCH',
428
- 'defrost_pwr_per_length' => 0.0,
429
- 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
430
- 'cop' => 3.0,
431
- 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
432
- 'condenser_fan_pwr' => 330,
433
- 'condenser_fan_pwr_curve_name' => nil,
434
- 'space_names' =>
429
+ 'type' => 'Refrigeration',
430
+ 'case_type' => 'Display Case',
431
+ 'cooling_capacity_per_length' => 734.0,
432
+ 'length' => 3.05,
433
+ 'evaporator_fan_pwr_per_length' => 18.85714,
434
+ 'lighting_per_length' => 33.0,
435
+ 'lighting_sch_name' => 'RestaurantSitDown walkin_occ_lght_SCH',
436
+ 'defrost_pwr_per_length' => 0.0,
437
+ 'restocking_sch_name' => 'RestaurantSitDown Kitchen_Case:2_SELFCONTAINEDDISPLAYCASE_CaseStockingSched',
438
+ 'cop' => 3.0,
439
+ 'cop_f_of_t_curve_name' => 'RACK2_RackCOPfTCurve',
440
+ 'condenser_fan_pwr' => 330,
441
+ 'condenser_fan_pwr_curve_name' => nil,
442
+ 'space_names' =>
435
443
  [
436
- 'Kitchen'
437
- ]
444
+ 'Kitchen'
445
+ ]
438
446
  }
439
447
  ]
440
448
 
@@ -468,7 +476,7 @@ class OpenStudio::Model::Model
468
476
 
469
477
  def add_door_infiltration(building_vintage,climate_zone)
470
478
  # add extra infiltration for dining room door and attic (there is no attic in 'DOE Ref Pre-1980')
471
- unless building_vintage == 'DOE Ref 1980-2004' or building_vintage == 'DOE Ref Pre-1980'
479
+ unless building_vintage == 'DOE Ref 1980-2004' or building_vintage == 'DOE Ref Pre-1980' or building_vintage == 'NECB 2011'
472
480
  dining_space = self.getSpaceByName('Dining').get
473
481
  attic_space = self.getSpaceByName('Attic').get
474
482
  infiltration_diningdoor = OpenStudio::Model::SpaceInfiltrationDesignFlowRate.new(self)
@@ -482,14 +490,14 @@ class OpenStudio::Model::Model
482
490
  elsif building_vintage == '90.1-2007'
483
491
  case climate_zone
484
492
  when 'ASHRAE 169-2006-1A', 'ASHRAE 169-2006-2A', 'ASHRAE 169-2006-2B', 'ASHRAE 169-2006-3A', 'ASHRAE 169-2006-3B',
485
- 'ASHRAE 169-2006-3C', 'ASHRAE 169-2006-4A', 'ASHRAE 169-2006-4B', 'ASHRAE 169-2006-4C'
493
+ 'ASHRAE 169-2006-3C', 'ASHRAE 169-2006-4A', 'ASHRAE 169-2006-4B', 'ASHRAE 169-2006-4C'
486
494
  infiltration_per_zone_diningdoor = 0.614474994
487
495
  infiltration_diningdoor.setSchedule(add_schedule('RestaurantSitDown DOOR_INFIL_SCH'))
488
496
  else
489
497
  infiltration_per_zone_diningdoor = 0.389828222
490
498
  infiltration_diningdoor.setSchedule(add_schedule('RestaurantSitDown VESTIBULE_DOOR_INFIL_SCH'))
491
499
  end
492
- elsif building_vintage == '90.1-2010' or '90.1-2013'
500
+ elsif building_vintage == '90.1-2010' or '90.1-2013'
493
501
  case climate_zone
494
502
  when 'ASHRAE 169-2006-1A', 'ASHRAE 169-2006-2A', 'ASHRAE 169-2006-2B', 'ASHRAE 169-2006-3A', 'ASHRAE 169-2006-3B', 'ASHRAE 169-2006-3C'
495
503
  infiltration_per_zone_diningdoor = 0.614474994
@@ -617,14 +625,14 @@ class OpenStudio::Model::Model
617
625
  thermostat = self.getThermostatSetpointDualSetpointByName(thermostat_name).get
618
626
  case building_vintage
619
627
  when '90.1-2004', '90.1-2007', '90.1-2010'
620
- if climate_zone == 'ASHRAE 169-2006-2B' || climate_zone == 'ASHRAE 169-2006-1B' || climate_zone == 'ASHRAE 169-2006-3B'
621
- case space_name
622
- when 'Dining'
623
- thermostat.setCoolingSetpointTemperatureSchedule(add_schedule("RestaurantSitDown CLGSETP_SCH_NO_OPTIMUM"))
624
- when 'Kitchen'
625
- thermostat.setCoolingSetpointTemperatureSchedule(add_schedule("RestaurantSitDown CLGSETP_KITCHEN_SCH_NO_OPTIMUM"))
626
- end
627
- end
628
+ if climate_zone == 'ASHRAE 169-2006-2B' || climate_zone == 'ASHRAE 169-2006-1B' || climate_zone == 'ASHRAE 169-2006-3B'
629
+ case space_name
630
+ when 'Dining'
631
+ thermostat.setCoolingSetpointTemperatureSchedule(add_schedule("RestaurantSitDown CLGSETP_SCH_NO_OPTIMUM"))
632
+ when 'Kitchen'
633
+ thermostat.setCoolingSetpointTemperatureSchedule(add_schedule("RestaurantSitDown CLGSETP_KITCHEN_SCH_NO_OPTIMUM"))
634
+ end
635
+ end
628
636
  end
629
637
  end
630
638
  end
@@ -649,7 +657,7 @@ class OpenStudio::Model::Model
649
657
 
650
658
  def update_waterheater_loss_coefficient(building_vintage)
651
659
  case building_vintage
652
- when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
660
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
653
661
  self.getWaterHeaterMixeds.sort.each do |water_heater|
654
662
  if water_heater.name.to_s.include?("Booster")
655
663
  water_heater.setOffCycleLossCoefficienttoAmbientTemperature(1.053159296)