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
@@ -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)