class ASHRAE9012004_Prototype < ASHRAE9012004 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical ASHRAE9012004 FullServiceRestaurant. class ASHRAE9012004FullServiceRestaurant < ASHRAE9012004 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 Hospital. class ASHRAE9012004Hospital < ASHRAE9012004 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 HighriseApartment. class ASHRAE9012004HighriseApartment < ASHRAE9012004 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 LargeHotel. class ASHRAE9012004LargeHotel < ASHRAE9012004 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 LargeOffice. class ASHRAE9012004LargeOffice < ASHRAE9012004 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 MediumOffice. class ASHRAE9012004MediumOffice < ASHRAE9012004 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 MidriseApartment. class ASHRAE9012004MidriseApartment < ASHRAE9012004 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 Outpatient. class ASHRAE9012004Outpatient < ASHRAE9012004 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 PrimarySchool. class ASHRAE9012004PrimarySchool < ASHRAE9012004 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 QuickServiceRestaurant. class ASHRAE9012004QuickServiceRestaurant < ASHRAE9012004 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 RetailStandalone. class ASHRAE9012004RetailStandalone < ASHRAE9012004 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 SecondarySchool. class ASHRAE9012004SecondarySchool < ASHRAE9012004 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 SmallHotel. class ASHRAE9012004SmallHotel < ASHRAE9012004 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 SmallOffice. class ASHRAE9012004SmallOffice < ASHRAE9012004 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 RetailStripmall. class ASHRAE9012004RetailStripmall < ASHRAE9012004 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 Warehouse. class ASHRAE9012004Warehouse < ASHRAE9012004 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012004 SuperMarket. class ASHRAE9012004SuperMarket < ASHRAE9012004 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012004SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class ASHRAE9012007_Prototype < ASHRAE9012007 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical ASHRAE9012007 FullServiceRestaurant. class ASHRAE9012007FullServiceRestaurant < ASHRAE9012007 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 Hospital. class ASHRAE9012007Hospital < ASHRAE9012007 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 HighriseApartment. class ASHRAE9012007HighriseApartment < ASHRAE9012007 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 LargeHotel. class ASHRAE9012007LargeHotel < ASHRAE9012007 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 LargeOffice. class ASHRAE9012007LargeOffice < ASHRAE9012007 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 MediumOffice. class ASHRAE9012007MediumOffice < ASHRAE9012007 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 MidriseApartment. class ASHRAE9012007MidriseApartment < ASHRAE9012007 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 Outpatient. class ASHRAE9012007Outpatient < ASHRAE9012007 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 PrimarySchool. class ASHRAE9012007PrimarySchool < ASHRAE9012007 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 QuickServiceRestaurant. class ASHRAE9012007QuickServiceRestaurant < ASHRAE9012007 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 RetailStandalone. class ASHRAE9012007RetailStandalone < ASHRAE9012007 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 SecondarySchool. class ASHRAE9012007SecondarySchool < ASHRAE9012007 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 SmallHotel. class ASHRAE9012007SmallHotel < ASHRAE9012007 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 SmallOffice. class ASHRAE9012007SmallOffice < ASHRAE9012007 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 RetailStripmall. class ASHRAE9012007RetailStripmall < ASHRAE9012007 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 Warehouse. class ASHRAE9012007Warehouse < ASHRAE9012007 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012007 SuperMarket. class ASHRAE9012007SuperMarket < ASHRAE9012007 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012007SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class ASHRAE9012010_Prototype < ASHRAE9012010 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical ASHRAE9012010 FullServiceRestaurant. class ASHRAE9012010FullServiceRestaurant < ASHRAE9012010 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 Hospital. class ASHRAE9012010Hospital < ASHRAE9012010 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 HighriseApartment. class ASHRAE9012010HighriseApartment < ASHRAE9012010 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 LargeHotel. class ASHRAE9012010LargeHotel < ASHRAE9012010 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 LargeOffice. class ASHRAE9012010LargeOffice < ASHRAE9012010 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 MediumOffice. class ASHRAE9012010MediumOffice < ASHRAE9012010 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 MidriseApartment. class ASHRAE9012010MidriseApartment < ASHRAE9012010 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 Outpatient. class ASHRAE9012010Outpatient < ASHRAE9012010 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 PrimarySchool. class ASHRAE9012010PrimarySchool < ASHRAE9012010 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 QuickServiceRestaurant. class ASHRAE9012010QuickServiceRestaurant < ASHRAE9012010 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 RetailStandalone. class ASHRAE9012010RetailStandalone < ASHRAE9012010 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 SecondarySchool. class ASHRAE9012010SecondarySchool < ASHRAE9012010 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 SmallHotel. class ASHRAE9012010SmallHotel < ASHRAE9012010 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 SmallOffice. class ASHRAE9012010SmallOffice < ASHRAE9012010 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 RetailStripmall. class ASHRAE9012010RetailStripmall < ASHRAE9012010 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 Warehouse. class ASHRAE9012010Warehouse < ASHRAE9012010 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012010 SuperMarket. class ASHRAE9012010SuperMarket < ASHRAE9012010 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012010SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class ASHRAE9012013_Prototype < ASHRAE9012013 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical ASHRAE9012013 FullServiceRestaurant. class ASHRAE9012013FullServiceRestaurant < ASHRAE9012013 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 Hospital. class ASHRAE9012013Hospital < ASHRAE9012013 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 HighriseApartment. class ASHRAE9012013HighriseApartment < ASHRAE9012013 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 LargeHotel. class ASHRAE9012013LargeHotel < ASHRAE9012013 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 LargeOffice. class ASHRAE9012013LargeOffice < ASHRAE9012013 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 MediumOffice. class ASHRAE9012013MediumOffice < ASHRAE9012013 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 MidriseApartment. class ASHRAE9012013MidriseApartment < ASHRAE9012013 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 Outpatient. class ASHRAE9012013Outpatient < ASHRAE9012013 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 PrimarySchool. class ASHRAE9012013PrimarySchool < ASHRAE9012013 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 QuickServiceRestaurant. class ASHRAE9012013QuickServiceRestaurant < ASHRAE9012013 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 RetailStandalone. class ASHRAE9012013RetailStandalone < ASHRAE9012013 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 SecondarySchool. class ASHRAE9012013SecondarySchool < ASHRAE9012013 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 SmallHotel. class ASHRAE9012013SmallHotel < ASHRAE9012013 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 SmallOffice. class ASHRAE9012013SmallOffice < ASHRAE9012013 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 RetailStripmall. class ASHRAE9012013RetailStripmall < ASHRAE9012013 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 Warehouse. class ASHRAE9012013Warehouse < ASHRAE9012013 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical ASHRAE9012013 SuperMarket. class ASHRAE9012013SuperMarket < ASHRAE9012013 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for ASHRAE9012013SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class DOERef1980to2004_Prototype < DOERef1980to2004 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical DOERef1980to2004 FullServiceRestaurant. class DOERef1980to2004FullServiceRestaurant < DOERef1980to2004 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 Hospital. class DOERef1980to2004Hospital < DOERef1980to2004 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 HighriseApartment. class DOERef1980to2004HighriseApartment < DOERef1980to2004 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 LargeHotel. class DOERef1980to2004LargeHotel < DOERef1980to2004 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 LargeOffice. class DOERef1980to2004LargeOffice < DOERef1980to2004 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 MediumOffice. class DOERef1980to2004MediumOffice < DOERef1980to2004 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 MidriseApartment. class DOERef1980to2004MidriseApartment < DOERef1980to2004 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 Outpatient. class DOERef1980to2004Outpatient < DOERef1980to2004 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 PrimarySchool. class DOERef1980to2004PrimarySchool < DOERef1980to2004 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 QuickServiceRestaurant. class DOERef1980to2004QuickServiceRestaurant < DOERef1980to2004 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 RetailStandalone. class DOERef1980to2004RetailStandalone < DOERef1980to2004 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 SecondarySchool. class DOERef1980to2004SecondarySchool < DOERef1980to2004 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 SmallHotel. class DOERef1980to2004SmallHotel < DOERef1980to2004 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 SmallOffice. class DOERef1980to2004SmallOffice < DOERef1980to2004 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 RetailStripmall. class DOERef1980to2004RetailStripmall < DOERef1980to2004 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 Warehouse. class DOERef1980to2004Warehouse < DOERef1980to2004 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERef1980to2004 SuperMarket. class DOERef1980to2004SuperMarket < DOERef1980to2004 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERef1980to2004SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class DOERefPre1980_Prototype < DOERefPre1980 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical DOERefPre1980 FullServiceRestaurant. class DOERefPre1980FullServiceRestaurant < DOERefPre1980 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 Hospital. class DOERefPre1980Hospital < DOERefPre1980 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 HighriseApartment. class DOERefPre1980HighriseApartment < DOERefPre1980 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 LargeHotel. class DOERefPre1980LargeHotel < DOERefPre1980 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 LargeOffice. class DOERefPre1980LargeOffice < DOERefPre1980 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 MediumOffice. class DOERefPre1980MediumOffice < DOERefPre1980 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 MidriseApartment. class DOERefPre1980MidriseApartment < DOERefPre1980 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 Outpatient. class DOERefPre1980Outpatient < DOERefPre1980 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 PrimarySchool. class DOERefPre1980PrimarySchool < DOERefPre1980 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 QuickServiceRestaurant. class DOERefPre1980QuickServiceRestaurant < DOERefPre1980 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 RetailStandalone. class DOERefPre1980RetailStandalone < DOERefPre1980 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 SecondarySchool. class DOERefPre1980SecondarySchool < DOERefPre1980 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 SmallHotel. class DOERefPre1980SmallHotel < DOERefPre1980 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 SmallOffice. class DOERefPre1980SmallOffice < DOERefPre1980 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 RetailStripmall. class DOERefPre1980RetailStripmall < DOERefPre1980 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 Warehouse. class DOERefPre1980Warehouse < DOERefPre1980 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical DOERefPre1980 SuperMarket. class DOERefPre1980SuperMarket < DOERefPre1980 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for DOERefPre1980SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class NRELZNEReady2017_Prototype < NRELZNEReady2017 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical NRELZNEReady2017 FullServiceRestaurant. class NRELZNEReady2017FullServiceRestaurant < NRELZNEReady2017 @@building_type = "FullServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(FullServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 Hospital. class NRELZNEReady2017Hospital < NRELZNEReady2017 @@building_type = "Hospital" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Hospital) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 HighriseApartment. class NRELZNEReady2017HighriseApartment < NRELZNEReady2017 @@building_type = "HighriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(HighriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 LargeHotel. class NRELZNEReady2017LargeHotel < NRELZNEReady2017 @@building_type = "LargeHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 LargeOffice. class NRELZNEReady2017LargeOffice < NRELZNEReady2017 @@building_type = "LargeOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(LargeOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 MediumOffice. class NRELZNEReady2017MediumOffice < NRELZNEReady2017 @@building_type = "MediumOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MediumOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 MidriseApartment. class NRELZNEReady2017MidriseApartment < NRELZNEReady2017 @@building_type = "MidriseApartment" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(MidriseApartment) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 Outpatient. class NRELZNEReady2017Outpatient < NRELZNEReady2017 @@building_type = "Outpatient" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Outpatient) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 PrimarySchool. class NRELZNEReady2017PrimarySchool < NRELZNEReady2017 @@building_type = "PrimarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(PrimarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 QuickServiceRestaurant. class NRELZNEReady2017QuickServiceRestaurant < NRELZNEReady2017 @@building_type = "QuickServiceRestaurant" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(QuickServiceRestaurant) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 RetailStandalone. class NRELZNEReady2017RetailStandalone < NRELZNEReady2017 @@building_type = "RetailStandalone" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStandalone) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 SecondarySchool. class NRELZNEReady2017SecondarySchool < NRELZNEReady2017 @@building_type = "SecondarySchool" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SecondarySchool) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 SmallHotel. class NRELZNEReady2017SmallHotel < NRELZNEReady2017 @@building_type = "SmallHotel" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallHotel) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 SmallOffice. class NRELZNEReady2017SmallOffice < NRELZNEReady2017 @@building_type = "SmallOffice" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SmallOffice) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 RetailStripmall. class NRELZNEReady2017RetailStripmall < NRELZNEReady2017 @@building_type = "RetailStripmall" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(RetailStripmall) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 Warehouse. class NRELZNEReady2017Warehouse < NRELZNEReady2017 @@building_type = "Warehouse" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(Warehouse) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end # This class represents a prototypical NRELZNEReady2017 SuperMarket. class NRELZNEReady2017SuperMarket < NRELZNEReady2017 @@building_type = "SuperMarket" register_standard ("#{@@template}_#{@@building_type}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @instvarbuilding_type = @@building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => @template,'building_type' => @@building_type }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.") raise("Could not find prototype inputs for NRELZNEReady2017SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() # Will be overwritten in class reopen file. # add all building methods for now. self.extend(SuperMarket) unless @template == 'NECB 2011' end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end # Get the name of the building type used in lookups # # @param building_type [String] the building type # @return [String] returns the lookup name as a string # @todo Unify the lookup names and eliminate this method def model_get_lookup_name(building_type) lookup_name = building_type case building_type when 'SmallOffice' lookup_name = 'Office' when 'MediumOffice' lookup_name = 'Office' when 'LargeOffice' lookup_name = 'Office' when 'LargeOfficeDetail' lookup_name = 'Office' when 'RetailStandalone' lookup_name = 'Retail' when 'RetailStripmall' lookup_name = 'StripMall' when 'Office' lookup_name = 'Office' end return lookup_name end end class NECB2011_Prototype < NECB2011 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical NECB2011 FullServiceRestaurant. class NECB2011FullServiceRestaurant < NECB2011 BUILDING_TYPE = "FullServiceRestaurant" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "FullServiceRestaurant" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "FullServiceRestaurant" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 Hospital. class NECB2011Hospital < NECB2011 BUILDING_TYPE = "Hospital" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "Hospital" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "Hospital" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 HighriseApartment. class NECB2011HighriseApartment < NECB2011 BUILDING_TYPE = "HighriseApartment" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "HighriseApartment" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "HighriseApartment" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 LargeHotel. class NECB2011LargeHotel < NECB2011 BUILDING_TYPE = "LargeHotel" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "LargeHotel" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "LargeHotel" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 LargeOffice. class NECB2011LargeOffice < NECB2011 BUILDING_TYPE = "LargeOffice" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "LargeOffice" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "LargeOffice" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 MediumOffice. class NECB2011MediumOffice < NECB2011 BUILDING_TYPE = "MediumOffice" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "MediumOffice" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "MediumOffice" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 MidriseApartment. class NECB2011MidriseApartment < NECB2011 BUILDING_TYPE = "MidriseApartment" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "MidriseApartment" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "MidriseApartment" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 Outpatient. class NECB2011Outpatient < NECB2011 BUILDING_TYPE = "Outpatient" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "Outpatient" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "Outpatient" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 PrimarySchool. class NECB2011PrimarySchool < NECB2011 BUILDING_TYPE = "PrimarySchool" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "PrimarySchool" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "PrimarySchool" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 QuickServiceRestaurant. class NECB2011QuickServiceRestaurant < NECB2011 BUILDING_TYPE = "QuickServiceRestaurant" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "QuickServiceRestaurant" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "QuickServiceRestaurant" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 RetailStandalone. class NECB2011RetailStandalone < NECB2011 BUILDING_TYPE = "RetailStandalone" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "RetailStandalone" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "RetailStandalone" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 SecondarySchool. class NECB2011SecondarySchool < NECB2011 BUILDING_TYPE = "SecondarySchool" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "SecondarySchool" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "SecondarySchool" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 SmallHotel. class NECB2011SmallHotel < NECB2011 BUILDING_TYPE = "SmallHotel" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "SmallHotel" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "SmallHotel" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 SmallOffice. class NECB2011SmallOffice < NECB2011 BUILDING_TYPE = "SmallOffice" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "SmallOffice" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "SmallOffice" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 RetailStripmall. class NECB2011RetailStripmall < NECB2011 BUILDING_TYPE = "RetailStripmall" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "RetailStripmall" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "RetailStripmall" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 Warehouse. class NECB2011Warehouse < NECB2011 BUILDING_TYPE = "Warehouse" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "Warehouse" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "Warehouse" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2011 SuperMarket. class NECB2011SuperMarket < NECB2011 BUILDING_TYPE = "SuperMarket" TEMPLATE = "NECB2011" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2011",'building_type' => "SuperMarket" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "SuperMarket" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2011 SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end class NECB2015_Prototype < NECB2015 attr_reader :instvarbuilding_type def initialize super() end end # This class represents a prototypical NECB2015 FullServiceRestaurant. class NECB2015FullServiceRestaurant < NECB2015 BUILDING_TYPE = "FullServiceRestaurant" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "FullServiceRestaurant" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "FullServiceRestaurant" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 FullServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 Hospital. class NECB2015Hospital < NECB2015 BUILDING_TYPE = "Hospital" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "Hospital" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "Hospital" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 Hospital, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 HighriseApartment. class NECB2015HighriseApartment < NECB2015 BUILDING_TYPE = "HighriseApartment" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "HighriseApartment" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "HighriseApartment" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 HighriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 LargeHotel. class NECB2015LargeHotel < NECB2015 BUILDING_TYPE = "LargeHotel" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "LargeHotel" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "LargeHotel" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 LargeHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 LargeOffice. class NECB2015LargeOffice < NECB2015 BUILDING_TYPE = "LargeOffice" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "LargeOffice" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "LargeOffice" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 LargeOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 MediumOffice. class NECB2015MediumOffice < NECB2015 BUILDING_TYPE = "MediumOffice" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "MediumOffice" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "MediumOffice" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 MediumOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 MidriseApartment. class NECB2015MidriseApartment < NECB2015 BUILDING_TYPE = "MidriseApartment" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "MidriseApartment" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "MidriseApartment" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 MidriseApartment, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 Outpatient. class NECB2015Outpatient < NECB2015 BUILDING_TYPE = "Outpatient" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "Outpatient" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "Outpatient" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 Outpatient, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 PrimarySchool. class NECB2015PrimarySchool < NECB2015 BUILDING_TYPE = "PrimarySchool" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "PrimarySchool" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "PrimarySchool" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 PrimarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 QuickServiceRestaurant. class NECB2015QuickServiceRestaurant < NECB2015 BUILDING_TYPE = "QuickServiceRestaurant" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "QuickServiceRestaurant" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "QuickServiceRestaurant" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 QuickServiceRestaurant, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 RetailStandalone. class NECB2015RetailStandalone < NECB2015 BUILDING_TYPE = "RetailStandalone" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "RetailStandalone" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "RetailStandalone" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 RetailStandalone, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 SecondarySchool. class NECB2015SecondarySchool < NECB2015 BUILDING_TYPE = "SecondarySchool" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "SecondarySchool" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "SecondarySchool" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 SecondarySchool, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 SmallHotel. class NECB2015SmallHotel < NECB2015 BUILDING_TYPE = "SmallHotel" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "SmallHotel" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "SmallHotel" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 SmallHotel, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 SmallOffice. class NECB2015SmallOffice < NECB2015 BUILDING_TYPE = "SmallOffice" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "SmallOffice" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "SmallOffice" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 SmallOffice, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 RetailStripmall. class NECB2015RetailStripmall < NECB2015 BUILDING_TYPE = "RetailStripmall" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "RetailStripmall" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "RetailStripmall" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 RetailStripmall, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 Warehouse. class NECB2015Warehouse < NECB2015 BUILDING_TYPE = "Warehouse" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "Warehouse" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "Warehouse" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 Warehouse, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end # This class represents a prototypical NECB2015 SuperMarket. class NECB2015SuperMarket < NECB2015 BUILDING_TYPE = "SuperMarket" TEMPLATE = "NECB2015" register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}") attr_accessor :prototype_database attr_accessor :prototype_input attr_accessor :lookup_building_type attr_accessor :space_type_map attr_accessor :geometry_file attr_accessor :building_story_map attr_accessor :system_to_space_map def initialize super() @building_type = BUILDING_TYPE @template = TEMPLATE @instvarbuilding_type = @building_type @prototype_input = self.model_find_object(@standards_data['prototype_inputs'], {'template' => "NECB2015",'building_type' => "SuperMarket" }, nil) if @prototype_input.nil? OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "SuperMarket" }}, cannot create model.") #puts JSON.pretty_generate(standards_data['prototype_inputs']) raise("Could not find prototype inputs for NECB2015 SuperMarket, cannot create model.") return false end @lookup_building_type = self.model_get_lookup_name(@building_type) #ideally we should map the data required to a instance variable. @geometry_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.osm' hvac_map_file = Folders.instance.data_geometry_folder + '/' + self.class.name + '.hvac_map.json' @system_to_space_map = JSON.parse(File.read(hvac_map_file))if File.exist?(hvac_map_file) self.set_variables() end # This method is used to extend the class with building-type-specific # methods, as defined in Prototype.SomeBuildingType.rb. Each building type # has its own set of methods that change things which are not # common across all prototype buildings, even within a given Standard. def set_variables() end # Returns the mapping between the names of the spaces # in the geometry .osm file and the space types # available for this particular Standard. def define_space_type_map(building_type, climate_zone) return @space_type_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the HVAC system that will # be applied to those spaces. def define_hvac_system_map(building_type, climate_zone) return @system_to_space_map end # Returns the mapping between the names of the spaces # in the geometry .osm file and the building story # that they are located on. def define_building_story_map(building_type, climate_zone) return @building_story_map end # Does nothing unless implmented by the specific standard def model_modify_oa_controller(model) end # Does nothing unless implmented by the specific standard def model_reset_or_room_vav_minimum_damper(prototype_input, model) end # Does nothing unless implmented by the specific standard def model_update_exhaust_fan_efficiency(model) end # Does nothing unless implmented by the specific standard def model_update_fan_efficiency(model) end end