openstudio-standards 0.1.9 → 0.1.10

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  3. data/lib/openstudio-standards/btap/compliance.rb +17 -7
  4. data/lib/openstudio-standards/btap/hvac.rb +6 -5
  5. data/lib/openstudio-standards/btap/measures.rb +137 -102
  6. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +2 -2
  7. data/lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb +1 -1
  8. data/lib/openstudio-standards/prototypes/Prototype.Model.rb +96 -31
  9. data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +1 -1
  10. data/lib/openstudio-standards/prototypes/Prototype.building_specific_methods.rb +163 -0
  11. data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +54 -52
  12. data/lib/openstudio-standards/prototypes/Prototype.high_rise_apartment.rb +28 -26
  13. data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +41 -39
  14. data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +19 -17
  15. data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +16 -13
  16. data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +13 -11
  17. data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +33 -31
  18. data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +66 -64
  19. data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +8 -88
  20. data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +54 -52
  21. data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +13 -11
  22. data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +15 -13
  23. data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +11 -9
  24. data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +13 -11
  25. data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +7 -5
  26. data/lib/openstudio-standards/prototypes/Prototype.utilities.rb +18 -13
  27. data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +11 -9
  28. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +23 -12
  29. data/lib/openstudio-standards/standards/Standards.Fan.rb +7 -4
  30. data/lib/openstudio-standards/standards/Standards.Model.rb +4 -4
  31. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -4
  32. data/lib/openstudio-standards/utilities/simulation.rb +6 -1
  33. data/lib/openstudio-standards/version.rb +1 -1
  34. data/lib/openstudio-standards/weather/Weather.Model.rb +1 -1
  35. metadata +3 -2
@@ -59,7 +59,7 @@ class OpenStudio::Model::Model
59
59
 
60
60
  # A helper method to run a sizing run and pull any values calculated during
61
61
  # autosizing back into the self.
62
- def runSizingRun(sizing_run_dir = "#{Dir.pwd}/SizingRun")
62
+ def runSizingRun(sizing_run_dir = "#{Dir.pwd}/SR")
63
63
 
64
64
 
65
65
  # Change the simulation to only run the sizing days
@@ -102,7 +102,7 @@ class OpenStudio::Model::Model
102
102
 
103
103
  # A helper method to run a sizing run and pull any values calculated during
104
104
  # autosizing back into the self.
105
- def runSpaceSizingRun(sizing_run_dir = "#{Dir.pwd}/SpaceSizingRun")
105
+ def runSpaceSizingRun(sizing_run_dir = "#{Dir.pwd}/SpaceSR")
106
106
  puts "*************Runing sizing space Run ***************************"
107
107
  #Make copy of model
108
108
  model = BTAP::FileIO::deep_copy(self, true)
@@ -9,7 +9,7 @@ class OpenStudio::Model::FanVariableVolume
9
9
  def apply_prototype_fan_pressure_rise(building_type, template, climate_zone)
10
10
  # NECB
11
11
  if template == 'NECB 2011'
12
- pressure_rise_pa = 1000.0
12
+ pressure_rise_pa = 1458.33 # 1000 Pa for supply fan and 458.33 Pa for return fan (accounts for efficiency differences between two fans)
13
13
  setPressureRise(pressure_rise_pa)
14
14
  return true
15
15
  end
@@ -12,6 +12,7 @@ class OpenStudio::Model::Model
12
12
  require_relative 'Prototype.Model.hvac'
13
13
  require_relative 'Prototype.Model.swh'
14
14
  require_relative '../standards/Standards.Model'
15
+ require_relative 'Prototype.building_specific_methods'
15
16
 
16
17
  # Creates a DOE prototype building model and replaces
17
18
  # the current model with this model.
@@ -25,6 +26,7 @@ class OpenStudio::Model::Model
25
26
  # model.create_prototype_building('SmallOffice', '90.1-2010', 'ASHRAE 169-2006-5A')
26
27
 
27
28
  def create_prototype_building(building_type, template, climate_zone, epw_file, sizing_run_dir = Dir.pwd, debug = false)
29
+ osm_file_increment = 0
28
30
  # There are no reference models for HighriseApartment at vintages Pre-1980 and 1980-2004, nor for NECB 2011. This is a quick check.
29
31
  if building_type == 'HighriseApartment'
30
32
  if template == 'DOE Ref Pre-1980' || template == 'DOE Ref 1980-2004'
@@ -53,23 +55,77 @@ class OpenStudio::Model::Model
53
55
 
54
56
  case template
55
57
  when 'NECB 2011'
58
+
59
+
60
+
61
+ debug_incremental_changes = false
56
62
  load_building_type_methods(building_type, template, climate_zone)
63
+ osm_file_increment += 1
64
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_load_building_type_methods.osm") if debug_incremental_changes
65
+
57
66
  load_geometry(building_type, template, climate_zone)
67
+ osm_file_increment += 1
68
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_load_geometry.osm") if debug_incremental_changes
69
+
58
70
  getBuilding.setName("#{template}-#{building_type}-#{climate_zone}-#{epw_file} created: #{Time.new}")
71
+ osm_file_increment += 1
72
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_set_name.osm") if debug_incremental_changes
73
+
59
74
  space_type_map = define_space_type_map(building_type, template, climate_zone)
75
+ File.open("#{sizing_run_dir}/space_type_map.json", 'w') {|f| f.write(JSON.pretty_generate(space_type_map)) }
76
+
60
77
  assign_space_type_stubs('Space Function', template, space_type_map) # TO DO: add support for defining NECB 2011 archetype by building type (versus space function)
78
+ osm_file_increment += 1
79
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_assign_space_type_stubs.osm") if debug_incremental_changes
80
+
61
81
  add_loads(template, climate_zone)
82
+ osm_file_increment += 1
83
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_add_loads.osm") if debug_incremental_changes
84
+
62
85
  apply_infiltration_standard(template)
86
+ osm_file_increment += 1
87
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_apply_infiltration.osm") if debug_incremental_changes
88
+
63
89
  modify_infiltration_coefficients(building_type, template, climate_zone) # does not apply to NECB 2011 but left here for consistency
90
+ osm_file_increment += 1
91
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_modify_infiltation_coefficients.osm") if debug_incremental_changes
92
+
64
93
  modify_surface_convection_algorithm(template)
65
- add_constructions(lookup_building_type, template, climate_zone)
94
+ osm_file_increment += 1
95
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_modify_surface_convection_algorithm.osm") if debug_incremental_changes
96
+
97
+ add_constructions(building_type, template, climate_zone)
98
+ osm_file_increment += 1
99
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_add_constructions.osm") if debug_incremental_changes
100
+
66
101
  create_thermal_zones(building_type, template, climate_zone)
102
+ osm_file_increment += 1
103
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_create_thermal_zones.osm") if debug_incremental_changes
104
+
67
105
  add_design_days_and_weather_file(building_type, template, climate_zone, epw_file)
68
- return false if runSizingRun("#{sizing_run_dir}/SizingRun0") == false
106
+ osm_file_increment += 1
107
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_add_design_days_and_weather_file.osm") if debug_incremental_changes
108
+
109
+ return false if runSizingRun("#{sizing_run_dir}/SR0") == false
110
+ osm_file_increment += 1
111
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_sizing_run_0.osm") if debug_incremental_changes
112
+
69
113
  add_hvac(building_type, template, climate_zone, prototype_input, epw_file)
114
+ osm_file_increment += 1
115
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_add_hvac.osm") if debug_incremental_changes
116
+
117
+ osm_file_increment += 1
70
118
  add_swh(building_type, template, climate_zone, prototype_input)
119
+ osm_file_increment += 1
120
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_swh.osm") if debug_incremental_changes
121
+
71
122
  apply_sizing_parameters(building_type, template)
123
+ osm_file_increment += 1
124
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_apply_sizing_paramaters.osm") if debug_incremental_changes
125
+
72
126
  yearDescription.get.setDayofWeekforStartDay('Sunday')
127
+ osm_file_increment += 1
128
+ BTAP::FileIO::save_osm(self,"#{sizing_run_dir}/post_#{osm_file_increment}_setDayofWeekforStartDay.osm") if debug_incremental_changes
73
129
  else
74
130
 
75
131
  load_building_type_methods(building_type, template, climate_zone)
@@ -81,12 +137,12 @@ class OpenStudio::Model::Model
81
137
  apply_infiltration_standard(template)
82
138
  modify_infiltration_coefficients(building_type, template, climate_zone)
83
139
  modify_surface_convection_algorithm(template)
84
- add_constructions(lookup_building_type, template, climate_zone)
140
+ add_constructions(building_type, template, climate_zone)
85
141
  create_thermal_zones(building_type, template, climate_zone)
86
142
  add_hvac(building_type, template, climate_zone, prototype_input, epw_file)
87
- custom_hvac_tweaks(building_type, template, climate_zone, prototype_input)
143
+ custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, self)
88
144
  add_swh(building_type, template, climate_zone, prototype_input)
89
- custom_swh_tweaks(building_type, template, climate_zone, prototype_input)
145
+ custom_swh_tweaks(building_type, template, climate_zone, prototype_input, self)
90
146
  add_exterior_lights(building_type, template, climate_zone, prototype_input)
91
147
  add_occupancy_sensors(building_type, template, climate_zone)
92
148
  add_design_days_and_weather_file(building_type, template, climate_zone, epw_file)
@@ -102,7 +158,7 @@ class OpenStudio::Model::Model
102
158
 
103
159
  # For some building types, stories are defined explicitly
104
160
  if building_type == 'SmallHotel'
105
- building_story_map = define_building_story_map(building_type, template, climate_zone)
161
+ building_story_map = PrototypeBuilding::SmallHotel.define_building_story_map(building_type, template, climate_zone)
106
162
  assign_building_story(building_type, template, climate_zone, building_story_map)
107
163
  end
108
164
 
@@ -111,7 +167,7 @@ class OpenStudio::Model::Model
111
167
  assign_spaces_to_stories
112
168
 
113
169
  # Perform a sizing run
114
- if runSizingRun("#{sizing_run_dir}/SizingRun1") == false
170
+ if runSizingRun("#{sizing_run_dir}/SR1") == false
115
171
  return false
116
172
  end
117
173
 
@@ -128,13 +184,13 @@ class OpenStudio::Model::Model
128
184
  # for 90.1-2010 Outpatient, AHU2 set minimum outdoor air flow rate as 0
129
185
  # AHU1 doesn't have economizer
130
186
  if building_type == 'Outpatient'
131
- modify_oa_controller(template)
187
+ PrototypeBuilding::Outpatient.modify_oa_controller(template, self)
132
188
  # For operating room 1&2 in 2010 and 2013, VAV minimum air flow is set by schedule
133
- reset_or_room_vav_minimum_damper(prototype_input, template)
189
+ PrototypeBuilding::Outpatient.reset_or_room_vav_minimum_damper(prototype_input, template, self)
134
190
  end
135
191
 
136
192
  if building_type == 'Hospital'
137
- modify_hospital_oa_controller(template)
193
+ PrototypeBuilding::Hospital.modify_hospital_oa_controller(template, self)
138
194
  end
139
195
 
140
196
  # Apply the HVAC efficiency standard
@@ -144,28 +200,23 @@ class OpenStudio::Model::Model
144
200
  # only four zones in large hotel have daylighting controls
145
201
  # todo: YXC to merge to the main function
146
202
  if building_type == 'LargeHotel'
147
- large_hotel_add_daylighting_controls(template)
203
+ PrototypeBuilding::LargeHotel.large_hotel_add_daylighting_controls(template, self)
148
204
  elsif building_type == 'Hospital'
149
- hospital_add_daylighting_controls(template)
205
+ PrototypeBuilding::Hospital.hospital_add_daylighting_controls(template, self)
150
206
  else
151
207
  add_daylighting_controls(template)
152
208
  end
153
209
 
154
- if building_type == 'QuickServiceRestaurant' || building_type == 'FullServiceRestaurant' || building_type == 'Outpatient'
155
- update_exhaust_fan_efficiency(template)
210
+ if building_type == 'QuickServiceRestaurant'
211
+ PrototypeBuilding::QuickServiceRestaurant.update_exhaust_fan_efficiency(template, self)
212
+ elsif building_type == 'FullServiceRestaurant'
213
+ PrototypeBuilding::FullServiceRestaurant.update_exhaust_fan_efficiency(template, self)
214
+ elsif building_type == 'Outpatient'
215
+ PrototypeBuilding::Outpatient.update_exhaust_fan_efficiency(template, self)
156
216
  end
157
217
 
158
218
  if building_type == 'HighriseApartment'
159
- update_fan_efficiency
160
- end
161
-
162
- # Add output variables for debugging
163
- # AHU1 doesn't have economizer
164
- if building_type == 'Outpatient'
165
- # remove the controller:mechanical ventilation for AHU1 OA
166
- modify_oa_controller(template)
167
- # For operating room 1&2 in 2010 and 2013, VAV minimum air flow is set by schedule
168
- reset_or_room_vav_minimum_damper(prototype_input, template)
219
+ PrototypeBuilding::HighriseApartment.update_fan_efficiency(self)
169
220
  end
170
221
 
171
222
  # Add output variables for debugging
@@ -183,7 +234,6 @@ class OpenStudio::Model::Model
183
234
  # Get the name of the building type used in lookups
184
235
  #
185
236
  # @param building_type [String] the building type
186
- # a .osm file in the /resources directory
187
237
  # @return [String] returns the lookup name as a string
188
238
  # @todo Unify the lookup names and eliminate this method
189
239
  def get_lookup_name(building_type)
@@ -535,6 +585,10 @@ class OpenStudio::Model::Model
535
585
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started applying constructions')
536
586
  is_residential = 'No' # default is nonresidential for building level
537
587
 
588
+ # The constructions lookup table uses a slightly different list of
589
+ # building types.
590
+ lookup_building_type = get_lookup_name(building_type)
591
+
538
592
  # Assign construction to adiabatic construction
539
593
  # Assign a material to all internal mass objects
540
594
  cp02_carpet_pad = OpenStudio::Model::MasslessOpaqueMaterial.new(self)
@@ -628,7 +682,7 @@ class OpenStudio::Model::Model
628
682
  end
629
683
 
630
684
  # Make the default construction set for the building
631
- bldg_def_const_set = add_construction_set(template, climate_zone, building_type, nil, is_residential)
685
+ bldg_def_const_set = add_construction_set(template, climate_zone, lookup_building_type, nil, is_residential)
632
686
 
633
687
  if bldg_def_const_set.is_initialized
634
688
  getBuilding.setDefaultConstructionSet(bldg_def_const_set.get)
@@ -670,7 +724,7 @@ class OpenStudio::Model::Model
670
724
  end
671
725
 
672
726
  # Add construction from story level, especially for the case when there are residential and nonresidential construction in the same building
673
- if building_type == 'SmallHotel'
727
+ if lookup_building_type == 'SmallHotel'
674
728
  getBuildingStorys.each do |story|
675
729
  next if story.name.get == 'AtticStory'
676
730
  puts "story = #{story.name}"
@@ -685,7 +739,7 @@ class OpenStudio::Model::Model
685
739
  if space_type.standardsSpaceType.is_initialized
686
740
  space_type_name = space_type.standardsSpaceType.get
687
741
  end
688
- data = find_object($os_standards['space_types'], 'template' => template, 'building_type' => building_type, 'space_type' => space_type_name)
742
+ data = find_object($os_standards['space_types'], 'template' => template, 'building_type' => lookup_building_type, 'space_type' => space_type_name)
689
743
  exterior_spaces_area += space.floorArea
690
744
  story_exterior_residential_area += space.floorArea if data['is_residential'] == 'Yes' # "Yes" is residential, "No" or nil is nonresidential
691
745
  end
@@ -693,7 +747,7 @@ class OpenStudio::Model::Model
693
747
  next if is_residential == 'No'
694
748
 
695
749
  # if the story is identified as residential, assign residential construction set to the spaces on this story.
696
- building_story_const_set = add_construction_set(template, climate_zone, building_type, nil, is_residential)
750
+ building_story_const_set = add_construction_set(template, climate_zone, lookup_building_type, nil, is_residential)
697
751
  if building_story_const_set.is_initialized
698
752
  story.spaces.each do |space|
699
753
  space.setDefaultConstructionSet(building_story_const_set.get)
@@ -796,8 +850,14 @@ class OpenStudio::Model::Model
796
850
 
797
851
  # This map define the multipliers for spaces with multipliers not equals to 1
798
852
  case building_type
799
- when 'LargeHotel', 'MidriseApartment', 'LargeOffice', 'Hospital'
800
- space_multiplier_map = define_space_multiplier
853
+ when 'LargeHotel'
854
+ space_multiplier_map = PrototypeBuilding::LargeHotel.define_space_multiplier
855
+ when 'MidriseApartment'
856
+ space_multiplier_map = PrototypeBuilding::MidriseApartment.define_space_multiplier
857
+ when 'LargeOffice'
858
+ space_multiplier_map = PrototypeBuilding::LargeOffice.define_space_multiplier
859
+ when 'Hospital'
860
+ space_multiplier_map = PrototypeBuilding::Hospital.define_space_multiplier
801
861
  else
802
862
  space_multiplier_map = {}
803
863
  end
@@ -823,6 +883,11 @@ class OpenStudio::Model::Model
823
883
  else
824
884
  thermostat_clone = thermostat.get.clone(self).to_ThermostatSetpointDualSetpoint.get
825
885
  zone.setThermostatSetpointDualSetpoint(thermostat_clone)
886
+ if template == 'NECB 2011'
887
+ #Set Ideal loads to thermal zone for sizing for NECB needs. We need this for sizing.
888
+ ideal_loads = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(self)
889
+ ideal_loads.addToThermalZone(zone)
890
+ end
826
891
  end
827
892
  end
828
893
 
@@ -183,12 +183,12 @@ class OpenStudio::Model::Model
183
183
  else
184
184
 
185
185
  # Attaches the end uses if specified by space type
186
+ space_type_map = define_space_type_map(building_type, template, climate_zone)
186
187
 
187
188
  if template == 'NECB 2011'
188
189
  building_type = 'Space Function'
189
190
  end
190
191
 
191
- space_type_map = define_space_type_map(building_type, template, climate_zone)
192
192
  space_type_map.each do |space_type_name, space_names|
193
193
  search_criteria = {
194
194
  'template' => template,
@@ -0,0 +1,163 @@
1
+
2
+ # Extend the class to add Medium Office specific stuff
3
+ class OpenStudio::Model::Model
4
+ def define_space_type_map(building_type, template, climate_zone)
5
+ case building_type
6
+ when 'SecondarySchool'
7
+ return PrototypeBuilding::SecondarySchool.define_space_type_map(building_type, template, climate_zone)
8
+ when 'PrimarySchool'
9
+ return PrototypeBuilding::PrimarySchool.define_space_type_map(building_type, template, climate_zone)
10
+ when 'SmallOffice'
11
+ return PrototypeBuilding::SmallOffice.define_space_type_map(building_type, template, climate_zone)
12
+ when 'MediumOffice'
13
+ return PrototypeBuilding::MediumOffice.define_space_type_map(building_type, template, climate_zone)
14
+ when 'LargeOffice'
15
+ return PrototypeBuilding::LargeOffice.define_space_type_map(building_type, template, climate_zone)
16
+ when 'SmallHotel'
17
+ return PrototypeBuilding::SmallHotel.define_space_type_map(building_type, template, climate_zone)
18
+ when 'LargeHotel'
19
+ return PrototypeBuilding::LargeHotel.define_space_type_map(building_type, template, climate_zone)
20
+ when 'Warehouse'
21
+ return PrototypeBuilding::Warehouse.define_space_type_map(building_type, template, climate_zone)
22
+ when 'RetailStandalone'
23
+ return PrototypeBuilding::RetailStandalone.define_space_type_map(building_type, template, climate_zone)
24
+ when 'RetailStripmall'
25
+ return PrototypeBuilding::RetailStripmall.define_space_type_map(building_type, template, climate_zone)
26
+ when 'QuickServiceRestaurant'
27
+ return PrototypeBuilding::QuickServiceRestaurant.define_space_type_map(building_type, template, climate_zone)
28
+ when 'FullServiceRestaurant'
29
+ return PrototypeBuilding::FullServiceRestaurant.define_space_type_map(building_type, template, climate_zone)
30
+ when 'Hospital'
31
+ return PrototypeBuilding::Hospital.define_space_type_map(building_type, template, climate_zone)
32
+ when 'Outpatient'
33
+ return PrototypeBuilding::Outpatient.define_space_type_map(building_type, template, climate_zone)
34
+ when 'MidriseApartment'
35
+ return PrototypeBuilding::MidriseApartment.define_space_type_map(building_type, template, climate_zone)
36
+ when 'HighriseApartment'
37
+ return PrototypeBuilding::HighriseApartment.define_space_type_map(building_type, template, climate_zone)
38
+ else
39
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model.define_space_type_map', "Building Type = #{building_type} not recognized")
40
+ return false
41
+ end
42
+ end
43
+
44
+ def define_hvac_system_map(building_type, template, climate_zone)
45
+ case building_type
46
+ when 'SecondarySchool'
47
+ return PrototypeBuilding::SecondarySchool.define_hvac_system_map(building_type, template, climate_zone)
48
+ when 'PrimarySchool'
49
+ return PrototypeBuilding::PrimarySchool.define_hvac_system_map(building_type, template, climate_zone)
50
+ when 'SmallOffice'
51
+ return PrototypeBuilding::SmallOffice.define_hvac_system_map(building_type, template, climate_zone)
52
+ when 'MediumOffice'
53
+ return PrototypeBuilding::MediumOffice.define_hvac_system_map(building_type, template, climate_zone)
54
+ when 'LargeOffice'
55
+ return PrototypeBuilding::LargeOffice.define_hvac_system_map(building_type, template, climate_zone)
56
+ when 'SmallHotel'
57
+ return PrototypeBuilding::SmallHotel.define_hvac_system_map(building_type, template, climate_zone)
58
+ when 'LargeHotel'
59
+ return PrototypeBuilding::LargeHotel.define_hvac_system_map(building_type, template, climate_zone)
60
+ when 'Warehouse'
61
+ return PrototypeBuilding::Warehouse.define_hvac_system_map(building_type, template, climate_zone)
62
+ when 'RetailStandalone'
63
+ return PrototypeBuilding::RetailStandalone.define_hvac_system_map(building_type, template, climate_zone)
64
+ when 'RetailStripmall'
65
+ return PrototypeBuilding::RetailStripmall.define_hvac_system_map(building_type, template, climate_zone)
66
+ when 'QuickServiceRestaurant'
67
+ return PrototypeBuilding::QuickServiceRestaurant.define_hvac_system_map(building_type, template, climate_zone)
68
+ when 'FullServiceRestaurant'
69
+ return PrototypeBuilding::FullServiceRestaurant.define_hvac_system_map(building_type, template, climate_zone)
70
+ when 'Hospital'
71
+ return PrototypeBuilding::Hospital.define_hvac_system_map(building_type, template, climate_zone)
72
+ when 'Outpatient'
73
+ return PrototypeBuilding::Outpatient.define_hvac_system_map(building_type, template, climate_zone)
74
+ when 'MidriseApartment'
75
+ return PrototypeBuilding::MidriseApartment.define_hvac_system_map(building_type, template, climate_zone)
76
+ when 'HighriseApartment'
77
+ return PrototypeBuilding::HighriseApartment.define_hvac_system_map(building_type, template, climate_zone)
78
+ else
79
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model.define_hvac_system_map', "Building Type = #{building_type} not recognized")
80
+ return false
81
+ end
82
+ end
83
+
84
+ def custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
85
+ case building_type
86
+ when 'SecondarySchool'
87
+ return PrototypeBuilding::SecondarySchool.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
88
+ when 'PrimarySchool'
89
+ return PrototypeBuilding::PrimarySchool.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
90
+ when 'SmallOffice'
91
+ return PrototypeBuilding::SmallOffice.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
92
+ when 'MediumOffice'
93
+ return PrototypeBuilding::MediumOffice.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
94
+ when 'LargeOffice'
95
+ return PrototypeBuilding::LargeOffice.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
96
+ when 'SmallHotel'
97
+ return PrototypeBuilding::SmallHotel.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
98
+ when 'LargeHotel'
99
+ return PrototypeBuilding::LargeHotel.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
100
+ when 'Warehouse'
101
+ return PrototypeBuilding::Warehouse.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
102
+ when 'RetailStandalone'
103
+ return PrototypeBuilding::RetailStandalone.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
104
+ when 'RetailStripmall'
105
+ return PrototypeBuilding::RetailStripmall.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
106
+ when 'QuickServiceRestaurant'
107
+ return PrototypeBuilding::QuickServiceRestaurant.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
108
+ when 'FullServiceRestaurant'
109
+ return PrototypeBuilding::FullServiceRestaurant.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
110
+ when 'Hospital'
111
+ return PrototypeBuilding::Hospital.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
112
+ when 'Outpatient'
113
+ return PrototypeBuilding::Outpatient.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
114
+ when 'MidriseApartment'
115
+ return PrototypeBuilding::MidriseApartment.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
116
+ when 'HighriseApartment'
117
+ return PrototypeBuilding::HighriseApartment.custom_hvac_tweaks(building_type, template, climate_zone, prototype_input, model)
118
+ else
119
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model.custom_hvac_tweaks', "Building Type = #{building_type} not recognized")
120
+ return false
121
+ end
122
+ end
123
+
124
+ def custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
125
+ case building_type
126
+ when 'SecondarySchool'
127
+ return PrototypeBuilding::SecondarySchool.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
128
+ when 'PrimarySchool'
129
+ return PrototypeBuilding::PrimarySchool.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
130
+ when 'SmallOffice'
131
+ return PrototypeBuilding::SmallOffice.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
132
+ when 'MediumOffice'
133
+ return PrototypeBuilding::MediumOffice.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
134
+ when 'LargeOffice'
135
+ return PrototypeBuilding::LargeOffice.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
136
+ when 'SmallHotel'
137
+ return PrototypeBuilding::SmallHotel.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
138
+ when 'LargeHotel'
139
+ return PrototypeBuilding::LargeHotel.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
140
+ when 'Warehouse'
141
+ return PrototypeBuilding::Warehouse.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
142
+ when 'RetailStandalone'
143
+ return PrototypeBuilding::RetailStandalone.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
144
+ when 'RetailStripmall'
145
+ return PrototypeBuilding::RetailStripmall.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
146
+ when 'QuickServiceRestaurant'
147
+ return PrototypeBuilding::QuickServiceRestaurant.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
148
+ when 'FullServiceRestaurant'
149
+ return PrototypeBuilding::FullServiceRestaurant.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
150
+ when 'Hospital'
151
+ return PrototypeBuilding::Hospital.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
152
+ when 'Outpatient'
153
+ return PrototypeBuilding::Outpatient.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
154
+ when 'MidriseApartment'
155
+ return PrototypeBuilding::MidriseApartment.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
156
+ when 'HighriseApartment'
157
+ return PrototypeBuilding::HighriseApartment.custom_swh_tweaks(building_type, template, climate_zone, prototype_input, model)
158
+ else
159
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model.custom_swh_tweaks', "Building Type = #{building_type} not recognized")
160
+ return false
161
+ end
162
+ end
163
+ end