def test_check_all_air_walls_adjacent(): """Test the check_all_air_walls_adjacent method.""" room_south = Room.from_box('South Zone', 5, 5, 3, origin=Point3D(0, 0, 0)) room_north = Room.from_box('North Zone', 5, 5, 3, origin=Point3D(0, 5, 0)) room_south[3].apertures_by_ratio(0.4, 0.01) room_south[1].type = face_types.air_wall room_north[3].type = face_types.air_wall model = Model('Test House', [room_south, room_north]) assert not model.check_all_air_walls_adjacent(False) with pytest.raises(ValueError): model.check_all_air_walls_adjacent(True) Room.solve_adjcency([room_south, room_north], 0.01) assert model.check_all_air_walls_adjacent(False)
def test_check_duplicate_room_names(): """Test the check_duplicate_room_names method.""" room_south = Room.from_box('Zone1', 5, 5, 3, origin=Point3D(0, 0, 0)) room_north = Room.from_box('Zone1', 5, 5, 3, origin=Point3D(0, 5, 0)) room_south[3].apertures_by_ratio(0.4, 0.01) Room.solve_adjcency([room_south, room_north], 0.01) model_1 = Model('South House', [room_south]) model_2 = Model('North House', [room_north]) assert model_1.check_duplicate_room_names(False) model_1.add_model(model_2) assert not model_1.check_duplicate_room_names(False) with pytest.raises(ValueError): model_1.check_duplicate_room_names(True)
def test_solve_adjacency(): """Test the solve adjacency method.""" room_south = Room.from_box('South Zone', 5, 5, 3, origin=Point3D(0, 0, 0)) room_north = Room.from_box('North Zone', 5, 5, 3, origin=Point3D(0, 5, 0)) assert room_south[1].boundary_condition == boundary_conditions.outdoors assert room_north[3].boundary_condition == boundary_conditions.outdoors Room.solve_adjcency([room_south, room_north], 0.01) assert isinstance(room_south[1].boundary_condition, Surface) assert isinstance(room_north[3].boundary_condition, Surface) assert room_south[ 1].boundary_condition.boundary_condition_object == room_north[3].name assert room_north[ 3].boundary_condition.boundary_condition_object == room_south[1].name
def test_solve_adjacency_aperture(): """Test the solve adjacency method with an interior aperture.""" room_south = Room.from_box('South Zone', 5, 5, 3, origin=Point3D(0, 0, 0)) room_north = Room.from_box('North Zone', 5, 5, 3, origin=Point3D(0, 5, 0)) room_south[1].apertures_by_ratio(0.4, 0.01) room_north[3].apertures_by_ratio(0.4, 0.01) assert room_south[1].apertures[ 0].boundary_condition == boundary_conditions.outdoors assert room_north[3].apertures[ 0].boundary_condition == boundary_conditions.outdoors Room.solve_adjcency([room_south, room_north], 0.01) assert isinstance(room_south[1].apertures[0].boundary_condition, Surface) assert isinstance(room_north[3].apertures[0].boundary_condition, Surface) assert room_south[1].apertures[0].boundary_condition.boundary_condition_object == \ room_north[3].apertures[0].name assert room_north[3].apertures[0].boundary_condition.boundary_condition_object == \ room_south[1].apertures[0].name
def test_adjacent_zone_model(): """Test the solve adjacency method with an interior aperture.""" room_south = Room.from_box('South Zone', 5, 5, 3, origin=Point3D(0, 0, 0)) room_north = Room.from_box('North Zone', 5, 5, 3, origin=Point3D(0, 5, 0)) room_south[1].apertures_by_ratio(0.4, 0.01) room_north[3].apertures_by_ratio(0.4, 0.01) room_south[3].apertures_by_ratio(0.4, 0.01) room_south[3].apertures[0].overhang(0.5, indoor=False) room_south[3].apertures[0].overhang(0.5, indoor=True) room_south[3].apertures[0].move_shades(Vector3D(0, 0, -0.5)) door_verts = [Point3D(2, 10, 0.1), Point3D(1, 10, 0.1), Point3D(1, 10, 2.5), Point3D(2, 10, 2.5)] aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1), Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)] door = Door('Front Door', Face3D(door_verts)) room_north[1].add_door(door) aperture = Aperture('Front Aperture', Face3D(aperture_verts)) room_north[1].add_aperture(aperture) Room.solve_adjcency([room_south, room_north], 0.01) model = Model('Two Room House', [room_south, room_north]) assert len(model.rooms) == 2 assert len(model.faces) == 12 assert len(model.shades) == 2 assert len(model.apertures) == 4 assert len(model.doors) == 1 model_dict = model.to_dict() new_model = Model.from_dict(model_dict) assert isinstance(new_model.rooms[0][1].apertures[0].boundary_condition, Surface) assert isinstance(new_model.rooms[1][3].apertures[0].boundary_condition, Surface) assert new_model.rooms[0][1].apertures[0].boundary_condition.boundary_condition_object == \ new_model.rooms[1][3].apertures[0].name assert new_model.rooms[1][3].apertures[0].boundary_condition.boundary_condition_object == \ new_model.rooms[0][1].apertures[0].name
def test_check_missing_adjacencies(): """Test the check_missing_adjacencies method.""" room_south = Room.from_box('South Zone', 5, 5, 3, origin=Point3D(0, 0, 0)) room_north = Room.from_box('North Zone', 5, 5, 3, origin=Point3D(0, 5, 0)) room_south[1].apertures_by_ratio(0.4, 0.01) room_south[3].apertures_by_ratio(0.4, 0.01) room_north[3].apertures_by_ratio(0.4, 0.01) Room.solve_adjcency([room_south, room_north], 0.01) model_1 = Model('South House', [room_south]) model_2 = Model('North House', [room_north]) assert len(model_1.rooms) == 1 assert len(model_1.faces) == 6 assert len(model_1.apertures) == 2 assert not model_1.check_missing_adjacencies(False) with pytest.raises(ValueError): model_1.check_missing_adjacencies(True) model_1.add_model(model_2) assert len(model_1.rooms) == 2 assert len(model_1.faces) == 12 assert len(model_1.apertures) == 3 assert model_1.check_missing_adjacencies(True)
def test_check_duplicate_construction_set_names(): """Test the check_duplicate_construction_set_names method.""" first_floor = Room.from_box('First Floor', 10, 10, 3, origin=Point3D(0, 0, 0)) second_floor = Room.from_box('Second Floor', 10, 10, 3, origin=Point3D(0, 0, 3)) for face in first_floor[1:5]: face.apertures_by_ratio(0.2, 0.01) for face in second_floor[1:5]: face.apertures_by_ratio(0.2, 0.01) pts_1 = [ Point3D(0, 0, 6), Point3D(0, 10, 6), Point3D(10, 10, 6), Point3D(10, 0, 6) ] pts_2 = [ Point3D(0, 0, 6), Point3D(5, 0, 9), Point3D(5, 10, 9), Point3D(0, 10, 6) ] pts_3 = [ Point3D(10, 0, 6), Point3D(10, 10, 6), Point3D(5, 10, 9), Point3D(5, 0, 9) ] pts_4 = [Point3D(0, 0, 6), Point3D(10, 0, 6), Point3D(5, 0, 9)] pts_5 = [Point3D(10, 10, 6), Point3D(0, 10, 6), Point3D(5, 10, 9)] face_1 = Face('Attic Face 1', Face3D(pts_1)) face_2 = Face('Attic Face 2', Face3D(pts_2)) face_3 = Face('Attic Face 3', Face3D(pts_3)) face_4 = Face('Attic Face 4', Face3D(pts_4)) face_5 = Face('Attic Face 5', Face3D(pts_5)) attic = Room('Attic', [face_1, face_2, face_3, face_4, face_5], 0.01, 1) constr_set = ConstructionSet('Attic Construction Set') polyiso = EnergyMaterial('PolyIso', 0.2, 0.03, 43, 1210, 'MediumRough') roof_constr = OpaqueConstruction('Attic Roof Construction', [roof_membrane, polyiso, wood]) floor_constr = OpaqueConstruction('Attic Floor Construction', [wood, insulation, wood]) constr_set.floor_set.interior_construction = floor_constr constr_set.roof_ceiling_set.exterior_construction = roof_constr attic.properties.energy.construction_set = constr_set Room.solve_adjcency([first_floor, second_floor, attic], 0.01) model = Model('Multi Zone Single Family House', [first_floor, second_floor, attic]) assert model.properties.energy.check_duplicate_construction_set_names( False) constr_set.unlock() constr_set.name = 'Default Generic Construction Set' constr_set.lock() assert not model.properties.energy.check_duplicate_construction_set_names( False) with pytest.raises(ValueError): model.properties.energy.check_duplicate_construction_set_names(True)
def test_to_dict_multizone_house(): """Test the Model to_dict method with a multi-zone house.""" first_floor = Room.from_box('First Floor', 10, 10, 3, origin=Point3D(0, 0, 0)) second_floor = Room.from_box('Second Floor', 10, 10, 3, origin=Point3D(0, 0, 3)) first_floor.properties.energy.program_type = office_program second_floor.properties.energy.program_type = office_program first_floor.properties.energy.hvac = IdealAirSystem() second_floor.properties.energy.hvac = IdealAirSystem() for face in first_floor[1:5]: face.apertures_by_ratio(0.2, 0.01) for face in second_floor[1:5]: face.apertures_by_ratio(0.2, 0.01) pts_1 = [ Point3D(0, 0, 6), Point3D(0, 10, 6), Point3D(10, 10, 6), Point3D(10, 0, 6) ] pts_2 = [ Point3D(0, 0, 6), Point3D(5, 0, 9), Point3D(5, 10, 9), Point3D(0, 10, 6) ] pts_3 = [ Point3D(10, 0, 6), Point3D(10, 10, 6), Point3D(5, 10, 9), Point3D(5, 0, 9) ] pts_4 = [Point3D(0, 0, 6), Point3D(10, 0, 6), Point3D(5, 0, 9)] pts_5 = [Point3D(10, 10, 6), Point3D(0, 10, 6), Point3D(5, 10, 9)] face_1 = Face('Attic Face 1', Face3D(pts_1)) face_2 = Face('Attic Face 2', Face3D(pts_2)) face_3 = Face('Attic Face 3', Face3D(pts_3)) face_4 = Face('Attic Face 4', Face3D(pts_4)) face_5 = Face('Attic Face 5', Face3D(pts_5)) attic = Room('Attic', [face_1, face_2, face_3, face_4, face_5], 0.01, 1) constr_set = ConstructionSet('Attic Construction Set') polyiso = EnergyMaterial('PolyIso', 0.2, 0.03, 43, 1210, 'MediumRough') roof_constr = OpaqueConstruction('Attic Roof Construction', [roof_membrane, polyiso, wood]) floor_constr = OpaqueConstruction('Attic Floor Construction', [wood, insulation, wood]) constr_set.floor_set.interior_construction = floor_constr constr_set.roof_ceiling_set.exterior_construction = roof_constr attic.properties.energy.construction_set = constr_set Room.solve_adjcency([first_floor, second_floor, attic], 0.01) model = Model('Multi Zone Single Family House', [first_floor, second_floor, attic]) model_dict = model.to_dict() assert 'energy' in model_dict['properties'] assert 'materials' in model_dict['properties']['energy'] assert 'constructions' in model_dict['properties']['energy'] assert 'construction_sets' in model_dict['properties']['energy'] assert 'global_construction_set' in model_dict['properties']['energy'] assert len(model_dict['properties']['energy']['materials']) == 16 assert len(model_dict['properties']['energy']['constructions']) == 16 assert len(model_dict['properties']['energy']['construction_sets']) == 2 assert model_dict['rooms'][0]['faces'][5]['boundary_condition'][ 'type'] == 'Surface' assert model_dict['rooms'][1]['faces'][0]['boundary_condition'][ 'type'] == 'Surface' assert model_dict['rooms'][1]['faces'][5]['boundary_condition'][ 'type'] == 'Surface' assert model_dict['rooms'][2]['faces'][0]['boundary_condition'][ 'type'] == 'Surface' assert model_dict['rooms'][2]['properties']['energy']['construction_set'] == \ constr_set.name assert model_dict['rooms'][0]['properties']['energy']['program_type'] == \ model_dict['rooms'][1]['properties']['energy']['program_type'] == \ office_program.name assert model_dict['rooms'][0]['properties']['energy']['hvac'] == \ model_dict['rooms'][1]['properties']['energy']['hvac'] == \ IdealAirSystem().to_dict() """