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.
- checksums.yaml +4 -4
 - data/data/standards/OpenStudio_Standards.xlsx +0 -0
 - data/lib/openstudio-standards/btap/compliance.rb +17 -7
 - data/lib/openstudio-standards/btap/hvac.rb +6 -5
 - data/lib/openstudio-standards/btap/measures.rb +137 -102
 - data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +2 -2
 - data/lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb +1 -1
 - data/lib/openstudio-standards/prototypes/Prototype.Model.rb +96 -31
 - data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +1 -1
 - data/lib/openstudio-standards/prototypes/Prototype.building_specific_methods.rb +163 -0
 - data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +54 -52
 - data/lib/openstudio-standards/prototypes/Prototype.high_rise_apartment.rb +28 -26
 - data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +41 -39
 - data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +19 -17
 - data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +16 -13
 - data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +13 -11
 - data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +33 -31
 - data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +66 -64
 - data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +8 -88
 - data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +54 -52
 - data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +13 -11
 - data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +15 -13
 - data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +11 -9
 - data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +13 -11
 - data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +7 -5
 - data/lib/openstudio-standards/prototypes/Prototype.utilities.rb +18 -13
 - data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +11 -9
 - data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +23 -12
 - data/lib/openstudio-standards/standards/Standards.Fan.rb +7 -4
 - data/lib/openstudio-standards/standards/Standards.Model.rb +4 -4
 - data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -4
 - data/lib/openstudio-standards/utilities/simulation.rb +6 -1
 - data/lib/openstudio-standards/version.rb +1 -1
 - data/lib/openstudio-standards/weather/Weather.Model.rb +1 -1
 - 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}/ 
     | 
| 
      
 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}/ 
     | 
| 
      
 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. 
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
      
 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( 
     | 
| 
      
 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}/ 
     | 
| 
      
 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' 
     | 
| 
       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,  
     | 
| 
      
 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  
     | 
| 
      
 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' =>  
     | 
| 
      
 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,  
     | 
| 
      
 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' 
     | 
| 
       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
         
     |