def test_type_bldg_institute4_with_calc(self): ''' Verification of the type building generation of an office building. Values are compared with TEASER3 values. ''' from teaser.logic.archetypebuildings.bmvbs.custom.institute4 import \ Institute4 prj.set_default() test_institute4 = Institute4(parent=prj, name="TestBuilding", year_of_construction=1988, number_of_floors=3, height_of_floors=3, net_leased_area=2500, office_layout=0, window_layout=0, construction_type="heavy") test_institute4.generate_archetype() #general parameters assert len(test_institute4.thermal_zones) == 7 #zone specific parameters for zone in test_institute4.thermal_zones: if zone.name == "Meeting": assert zone.area == 100 if zone.name == "Storage": assert zone.area == 250 if zone.name == "Office": assert zone.area == 937.5 if zone.name == "Restroom": assert zone.area == 100 if zone.name == "ICT": assert zone.area == 50 if zone.name == "Floor": assert zone.area == 562.5 if zone.name == "Laboratory": assert zone.area == 500 #facade specific parameters assert round(test_institute4.get_outer_wall_area(-2), 0) == 958 assert round(test_institute4.get_outer_wall_area(-1), 0) == 958 assert round(test_institute4.get_outer_wall_area(0), 0) == 437 assert round(test_institute4.get_outer_wall_area(180), 0) == 437 assert round(test_institute4.get_outer_wall_area(90), 0) == 77 assert round(test_institute4.get_outer_wall_area(270), 0) == 77 assert round(test_institute4.get_window_area(0), 0) == 158 assert round(test_institute4.get_window_area(180), 0) == 158 assert round(test_institute4.get_window_area(90), 0) == 28 assert round(test_institute4.get_window_area(270), 0) == 28
def type_bldg_institute4( self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu=True, office_layout=None, window_layout=None, construction_type=None): """Old function, consider rewriting your code This is an old function for archetype generation, consider rewriting your code to use Project.add_non_residential(). This function will be eliminated within the next versions """ warnings.warn("You are using an old function for archetype " "generation, consider rewriting you code to use " "Project.add_non_residential(). This function will be " "eliminated within the next versions") type_bldg = Institute4( self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu, office_layout, window_layout, construction_type) type_bldg.generate_archetype() type_bldg.calc_building_parameter( number_of_elements=self._number_of_elements_calc, merge_windows=self._merge_windows_calc, used_library=self._used_library_calc) return type_bldg
def _load_building(prj, pyxb_bld, type, project_bind): if type == "Building": bldg = Building(prj) elif type == "Office": bldg = Office(prj) elif type == "Institute": bldg = Institute(prj) elif type == "Institute4": bldg = Institute4(prj) elif type == "Institute8": bldg = Institute8(prj) elif type == "Residential": bldg = SingleFamilyDwelling(prj) bldg.name = pyxb_bld.name bldg.street_name = pyxb_bld.street_name bldg.city = pyxb_bld.city bldg.type_of_building = pyxb_bld.type_of_building bldg.year_of_construction = pyxb_bld.year_of_construction bldg.year_of_retrofit = pyxb_bld.year_of_retrofit bldg.number_of_floors = pyxb_bld.number_of_floors bldg.height_of_floors = pyxb_bld.height_of_floors if not pyxb_bld.ThermalZone: bldg.net_leased_area = pyxb_bld.net_leased_area if pyxb_bld.CentralAHU: pyxb_ahu = pyxb_bld.CentralAHU bldg.central_ahu = BuildingAHU(bldg) bldg.central_ahu.heating = pyxb_ahu.heating bldg.central_ahu.cooling = pyxb_ahu.cooling bldg.central_ahu.dehumidification = pyxb_ahu.dehumidification bldg.central_ahu.humidification = pyxb_ahu.humidification bldg.central_ahu.heat_recovery = pyxb_ahu.heat_recovery bldg.central_ahu.by_pass_dehumidification = \ pyxb_ahu.by_pass_dehumidification bldg.central_ahu.efficiency_recovery = pyxb_ahu.efficiency_recovery try: if float(project_bind.version) >= 0.5: bldg.central_ahu.efficiency_recovery_false = \ pyxb_ahu.efficiency_recovery_false else: bldg.central_ahu.efficiency_recovery_false = \ pyxb_ahu.efficiency_revocery_false except AttributeError: bldg.central_ahu.efficiency_recovery_false = \ pyxb_ahu.efficiency_revocery_false bldg.central_ahu.profile_min_relative_humidity = \ pyxb_ahu.profile_min_relative_humidity bldg.central_ahu.profile_max_relative_humidity = \ pyxb_ahu.profile_max_relative_humidity bldg.central_ahu.profile_v_flow = \ pyxb_ahu.profile_v_flow bldg.central_ahu.profile_temperature = \ pyxb_ahu.profile_temperature for pyxb_zone in pyxb_bld.ThermalZone: zone = ThermalZone(bldg) zone.name = pyxb_zone.name zone.area = pyxb_zone.area zone.volume = pyxb_zone.volume zone.infiltration_rate = pyxb_zone.infiltration_rate zone.use_conditions = BoundaryConditions(zone) pyxb_use = pyxb_zone.UseCondition.BoundaryConditions zone.use_conditions.typical_length = pyxb_zone.typical_length zone.use_conditions.typical_width = pyxb_zone.typical_width zone.use_conditions.usage = \ pyxb_use.usage zone.use_conditions.usage_time = \ pyxb_use.UsageOperationTime.usage_time zone.use_conditions.daily_usage_hours = \ pyxb_use.UsageOperationTime.daily_usage_hours zone.use_conditions.yearly_usage_days = \ pyxb_use.UsageOperationTime.yearly_usage_days zone.use_conditions.yearly_usage_hours_day = \ pyxb_use.UsageOperationTime.yearly_usage_hours_day zone.use_conditions.yearly_usage_hours_night = \ pyxb_use.UsageOperationTime.yearly_usage_hours_night zone.use_conditions.daily_operation_ahu_cooling = \ pyxb_use.UsageOperationTime.daily_operation_ahu_cooling zone.use_conditions.yearly_heating_days = \ pyxb_use.UsageOperationTime.yearly_heating_days zone.use_conditions.yearly_ahu_days = \ pyxb_use.UsageOperationTime.yearly_ahu_days zone.use_conditions.yearly_cooling_days = \ pyxb_use.UsageOperationTime.yearly_cooling_days zone.use_conditions.daily_operation_heating = \ pyxb_use.UsageOperationTime.daily_operation_heating try: if float(project_bind.version) >= 0.4: zone.use_conditions.maintained_illuminance = \ pyxb_use.Lighting.maintained_illuminance else: zone.use_conditions.maintained_illuminance = \ pyxb_use.Lighting.maintained_illuminace except AttributeError: zone.use_conditions.maintained_illuminance = \ pyxb_use.Lighting.maintained_illuminace zone.use_conditions.usage_level_height = \ pyxb_use.Lighting.usage_level_height zone.use_conditions.red_factor_visual = \ pyxb_use.Lighting.red_factor_visual zone.use_conditions.rel_absence = \ pyxb_use.Lighting.rel_absence zone.use_conditions.room_index = \ pyxb_use.Lighting.room_index zone.use_conditions.part_load_factor_lighting = \ pyxb_use.Lighting.part_load_factor_lighting zone.use_conditions.ratio_conv_rad_lighting = \ pyxb_use.Lighting.ratio_conv_rad_lighting zone.use_conditions.set_temp_heat = \ pyxb_use.RoomClimate.set_temp_heat zone.use_conditions.set_temp_cool = \ pyxb_use.RoomClimate.set_temp_cool zone.use_conditions.temp_set_back = \ pyxb_use.RoomClimate.temp_set_back zone.use_conditions.min_temp_heat = \ pyxb_use.RoomClimate.min_temp_heat zone.use_conditions.max_temp_cool = \ pyxb_use.RoomClimate.max_temp_cool zone.use_conditions.rel_humidity = \ pyxb_use.RoomClimate.rel_humidity zone.use_conditions.cooling_time = \ pyxb_use.RoomClimate.cooling_time zone.use_conditions.heating_time = \ pyxb_use.RoomClimate.heating_time zone.use_conditions.min_air_exchange = \ pyxb_use.RoomClimate.min_air_exchange zone.use_conditions.rel_absence_ahu = \ pyxb_use.RoomClimate.rel_absence_ahu zone.use_conditions.part_load_factor_ahu = \ pyxb_use.RoomClimate.part_load_factor_ahu zone.use_conditions.persons = \ pyxb_use.InternalGains.persons zone.use_conditions.profile_persons = \ pyxb_use.InternalGains.profile_persons zone.use_conditions.machines = \ pyxb_use.InternalGains.machines zone.use_conditions.profile_machines = \ pyxb_use.InternalGains.profile_machines zone.use_conditions.lighting_power = \ pyxb_use.InternalGains.lighting_power zone.use_conditions.profile_lighting = \ pyxb_use.InternalGains.profile_lighting zone.use_conditions.min_ahu = \ pyxb_use.AHU.min_ahu zone.use_conditions.max_ahu = \ pyxb_use.AHU.max_ahu zone.use_conditions.with_ahu = \ pyxb_use.AHU.with_ahu zone.use_constant_ach_rate = \ pyxb_use.AHU.use_constant_ach_rate zone.base_ach = \ pyxb_use.AHU.base_ach zone.max_user_ach = \ pyxb_use.AHU.max_user_ach zone.max_overheating_ach = \ pyxb_use.AHU.max_overheating_ach zone.max_summer_ach = \ pyxb_use.AHU.max_summer_ach zone.winter_reduction = \ pyxb_use.AHU.winter_reduction for pyxb_wall in pyxb_zone.OuterWall: out_wall = OuterWall(zone) set_basic_data_teaser(pyxb_wall, out_wall) set_layer_data_teaser(pyxb_wall, out_wall) try: if float(project_bind.version) >= 0.6: for pyxb_wall in pyxb_zone.Door: out_wall = Door(zone) set_basic_data_teaser(pyxb_wall, out_wall) set_layer_data_teaser(pyxb_wall, out_wall) except AttributeError: pass for pyxb_wall in pyxb_zone.Rooftop: roof = Rooftop(zone) set_basic_data_teaser(pyxb_wall, roof) set_layer_data_teaser(pyxb_wall, roof) # zone.outer_walls.append(roof) for pyxb_wall in pyxb_zone.GroundFloor: gr_floor = GroundFloor(zone) set_basic_data_teaser(pyxb_wall, gr_floor) set_layer_data_teaser(pyxb_wall, gr_floor) # zone.outer_walls.append(gr_floor) for pyxb_wall in pyxb_zone.InnerWall: in_wall = InnerWall(zone) set_basic_data_teaser(pyxb_wall, in_wall) set_layer_data_teaser(pyxb_wall, in_wall) # zone.inner_walls.append(in_wall) for pyxb_wall in pyxb_zone.Ceiling: ceiling = Ceiling(zone) set_basic_data_teaser(pyxb_wall, ceiling) set_layer_data_teaser(pyxb_wall, ceiling) # zone.inner_walls.append(ceiling) for pyxb_wall in pyxb_zone.Floor: floor = Floor(zone) set_basic_data_teaser(pyxb_wall, floor) set_layer_data_teaser(pyxb_wall, floor) # zone.inner_walls.append(floor) for pyxb_win in pyxb_zone.Window: win = Window(zone) set_basic_data_teaser(pyxb_win, win) set_layer_data_teaser(pyxb_win, win)
def add_non_residential( self, method, usage, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu=True, office_layout=None, window_layout=None, construction_type=None): """Adds a non-residential building to the TEASER project This function adds a non-residential archetype building to the TEASER project. You need to specify the method of the archetype generation. Currently TEASER supports only method according to Lichtmess and BMVBS for non-residential buildings. Further the type of usage needs to be specified. Currently TEASER supports four different types of non-residential buildings ('office', 'institute', 'institute4', 'institute8'). For more information on specific archetype buildings and methods, please read the docs of archetype classes. This function also calculates the parameters of the buildings directly with the settings set in the project (e.g. used_library_calc or number_of_elements_calc). Parameters ---------- method : str Used archetype method, currenlty only 'bmvbs' is supported usage : str Main usage of the obtained building, currently only 'office', 'institute', 'institute4', institute8' are supported name : str Individual name year_of_construction : int Year of first construction height_of_floors : float [m] Average height of the buildings' floors number_of_floors : int Number of building's floors above ground net_leased_area : float [m2] Total net leased area of building. This is area is NOT the footprint of a building with_ahu : Boolean If set to True, an empty instance of BuildingAHU is instantiated and assigned to attribute central_ahu. This instance holds information for central Air Handling units. Default is False. office_layout : int Structure of the floor plan of office buildings, default is 1, which is representative for one elongated floor. 1: elongated 1 floor 2: elongated 2 floors 3: compact (e.g. for a square base building) window_layout : int Structure of the window facade type, default is 1, which is representative for a punctuated facade. 1: punctuated facade (individual windows) 2: banner facade (continuous windows) 3: full glazing construction_type : str Construction type of used wall constructions default is "heavy") heavy: heavy construction light: light construction Returns ---------- type_bldg : Instance of Office() """ ass_error_method = "only 'bmvbs' is a valid method for " \ "non-residential archetype generation" assert method in ['bmvbs'], ass_error_method ass_error_usage = "only 'office', 'institute', 'institute4', " \ "'institute8' are valid usagesfor archetype " \ "generation" assert usage in ['office', 'institute', 'institute4', 'institute8'], ass_error_usage if usage == 'office': type_bldg = Office( self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu, office_layout, window_layout, construction_type) elif usage == 'institute': type_bldg = Institute( self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu, office_layout, window_layout, construction_type) elif usage == 'institute4': type_bldg = Institute4( self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu, office_layout, window_layout, construction_type) elif usage == 'institute8': type_bldg = Institute8( self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu, office_layout, window_layout, construction_type) type_bldg.generate_archetype() type_bldg.calc_building_parameter( number_of_elements=self._number_of_elements_calc, merge_windows=self._merge_windows_calc, used_library=self._used_library_calc) return type_bldg
def type_bldg_institute4(self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu=True, office_layout=None, window_layout=None, construction_type=None): '''Create and calculate an institute4 building Parameters ---------- name : str individual name year_of_construction : int year of first construction number_of_floors : int number of floors above ground height_of_floors : float average height of the floors net_leased_area : float total net leased area of building with_ahu : boolean if building has a central AHU or not office_layout : int type of floor plan (default = 0) 0: use default values 1: elongated 1 floor 2: elongated 2 floors 3: compact window_layout : int type of window layout (default = 0) 0: use default values 1: punctuated facade 2: banner facade 3: full glazing construction_type : str (default = "heavy") construction type heavy: heavy construction light: light construction Returns ---------- type_bldg : Instance of Institute4() ''' type_bldg = Institute4(self, name, year_of_construction, number_of_floors, height_of_floors, net_leased_area, with_ahu, office_layout, window_layout, construction_type) type_bldg.generate_archetype() type_bldg.calc_building_parameter( number_of_elements=self._number_of_elements_calc, merge_windows=self._merge_windows_calc, used_library=self._used_library_calc) return type_bldg