Coverage for teaser/logic/archetypebuildings/tabula/de/apartmentblock.py: 86%
29 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-04-29 16:01 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2025-04-29 16:01 +0000
1# created April 2017
2# by TEASER Development Team
4from teaser.logic.archetypebuildings.tabula.de.singlefamilyhouse import \
5 SingleFamilyHouse
8class ApartmentBlock(SingleFamilyHouse):
9 """Archetype for TABULA Apartment Block
11 Archetype according to TABULA building typology
12 (http://webtool.building-typology.eu/#bm).
14 Description of:
16 - estimation factors
17 - always 4 walls, 1 roof, 1 floor, 4 windows, one door (default
18 orientation?)
19 - how we calculate facade and window area
20 - calculate u-values
21 - zones (one zone)
22 - differences between TABULA und our approach (net floor area, height
23 and number of storeys)
24 - how to proceed with rooftops (keep them as flat roofs or pitched
25 roofs? what orientation?)
27 Parameters
28 ----------
30 parent: Project()
31 The parent class of this object, the Project the Building belongs to.
32 Allows for better control of hierarchical structures. If not None it
33 adds this Building instance to Project.buildings.
34 (default: None)
35 name : str
36 Individual name
37 year_of_construction : int
38 Year of first construction
39 height_of_floors : float [m]
40 Average height of the buildings' floors
41 number_of_floors : int
42 Number of building's floors above ground
43 net_leased_area : float [m2]
44 Total net leased area of building. This is area is NOT the footprint
45 of a building
46 with_ahu : Boolean
47 If set to True, an empty instance of BuildingAHU is instantiated and
48 assigned to attribute central_ahu. This instance holds information for
49 central Air Handling units. Default is False.
50 internal_gains_mode: int [1, 2, 3]
51 mode for the internal gains calculation done in AixLib:
53 1. Temperature and activity degree dependent heat flux calculation for persons. The
54 calculation is based on SIA 2024 (default)
55 2. Temperature and activity degree independent heat flux calculation for persons, the max.
56 heatflowrate is prescribed by the parameter
57 fixed_heat_flow_rate_persons.
58 3. Temperature and activity degree dependent calculation with
59 consideration of moisture and co2. The moisture calculation is
60 based on SIA 2024 (2015) and regards persons and non-persons, the co2 calculation is based on
61 Engineering ToolBox (2004) and regards only persons.
62 inner_wall_approximation_approach : str
63 'teaser_default' (default) sets length of inner walls = typical
64 length * height of floors + 2 * typical width * height of floors
65 'typical_minus_outer' sets length of inner walls = 2 * typical
66 length * height of floors + 2 * typical width * height of floors
67 - length of outer or interzonal walls
68 'typical_minus_outer_extended' like 'typical_minus_outer', but also
69 considers that
70 a) a non-complete "average room" reduces its circumference
71 proportional to the square root of the area
72 b) rooftops, windows and ground floors (= walls with border to
73 soil) may have a vertical share
75 construction_data : str
76 Construction type of used wall constructions default is "existing state"
78 * existing state:
79 construction of walls according to existing state in TABULA
80 * usual refurbishment:
81 construction of walls according to usual refurbishment in
82 TABULA
83 * advanced refurbishment:
84 construction of walls according to advanced refurbishment in
85 TABULA
87 """
89 def __init__(
90 self,
91 parent,
92 name=None,
93 year_of_construction=None,
94 number_of_floors=None,
95 height_of_floors=None,
96 net_leased_area=None,
97 with_ahu=False,
98 internal_gains_mode=1,
99 inner_wall_approximation_approach='teaser_default',
100 construction_data=None):
102 super(ApartmentBlock, self).__init__(
103 parent,
104 name,
105 year_of_construction,
106 number_of_floors,
107 height_of_floors,
108 net_leased_area,
109 with_ahu,
110 internal_gains_mode,
111 inner_wall_approximation_approach,
112 construction_data)
114 self.construction_data = construction_data
115 self.number_of_floors = number_of_floors
116 self.height_of_floors = height_of_floors
118 self._construction_data_1 = self.construction_data.value + '_1_AB'
119 self._construction_data_2 = self.construction_data.value + '_2_AB'
121 self.zone_area_factors = {"SingleDwelling": [1, "Living"]}
123 self._outer_wall_names_1 = {
124 "ExteriorFacadeNorth_1": [90.0, 0.0],
125 "ExteriorFacadeEast_1": [90.0, 90.0],
126 "ExteriorFacadeSouth_1": [90.0, 180.0],
127 "ExteriorFacadeWest_1": [90.0, 270.0]}
129 self._outer_wall_names_2 = {
130 "ExteriorFacadeNorth_2": [90.0, 0.0],
131 "ExteriorFacadeEast_2": [90.0, 90.0],
132 "ExteriorFacadeSouth_2": [90.0, 180.0],
133 "ExteriorFacadeWest_2": [90.0, 270.0]}
135 self.roof_names_1 = {"Rooftop_1": [0, -1]} # [0, -1]
137 self.roof_names_2 = {"Rooftop_2": [0, -1]}
139 self.ground_floor_names_1 = {
140 "GroundFloor_1": [0, -2]} # [0, -2]
142 self.ground_floor_names_2 = {
143 "GroundFloor_2": [0, -2]}
145 self.door_names = {"Door": [90.0, 270]}
147 self.window_names_1 = {
148 "WindowFacadeNorth_1": [90.0, 0.0],
149 "WindowFacadeEast_1": [90.0, 90.0],
150 "WindowFacadeSouth_1": [90.0, 180.0],
151 "WindowFacadeWest_1": [90.0, 270.0]}
152 self.window_names_2 = {
153 "WindowFacadeNorth_2": [90.0, 0.0],
154 "WindowFacadeEast_2": [90.0, 90.0],
155 "WindowFacadeSouth_2": [90.0, 180.0],
156 "WindowFacadeWest_2": [90.0, 270.0]}
158 # [tilt, orientation]
160 self.inner_wall_names = {"InnerWall": [90.0, 0.0]}
162 self.ceiling_names = {"Ceiling": [0.0, -1]}
164 self.floor_names = {"Floor": [0.0, -2]}
166 # Rooftop1, Rooftop2, Wall1, Wall2, GroundFloor1, GroundFloor2,
167 # Window1, Window2, Door
168 # Area/ReferenceFloorArea
169 self.facade_estimation_factors = {
170 (1860, 1918): {
171 'rt1': 0.27961,
172 'rt2': 0.0,
173 'ow1': 0.36840,
174 'ow2': 0.0,
175 'gf1': 0.19747,
176 'gf2': 0.0,
177 'win1': 0.16429,
178 'win2': 0.0,
179 'door': 0.00241},
180 (1919, 1948): {
181 'rt1': 0.25889,
182 'rt2': 0.0,
183 'ow1': 0.83827,
184 'ow2': 0.0,
185 'gf1': 0.26658,
186 'gf2': 0.0,
187 'win1': 0.18767,
188 'win2': 0.0,
189 'door': 0.00135},
190 (1949, 1957): {
191 'rt1': 0.22052,
192 'rt2': 0.0,
193 'ow1': 0.85839,
194 'ow2': 0.0,
195 'gf1': 0.22052,
196 'gf2': 0.0,
197 'win1': 0.18397,
198 'win2': 0.0,
199 'door': 0.00125},
200 (1958, 1968): {
201 'rt1': 0.12339,
202 'rt2': 0.0,
203 'ow1': 0.83555,
204 'ow2': 0.0,
205 'gf1': 0.11814,
206 'gf2': 0.0,
207 'win1': 0.17674,
208 'win2': 0.0,
209 'door': 0.00051},
210 (1969, 1978): {
211 'rt1': 0.16255,
212 'rt2': 0.0,
213 'ow1': 0.64118,
214 'ow2': 0.0,
215 'gf1': 0.16255,
216 'gf2': 0.0,
217 'win1': 0.16406,
218 'win2': 0.0,
219 'door': 0.0006}}
221 self.building_age_group = None
223 if self.with_ahu is True:
224 self.central_ahu.temperature_profile = (
225 7 * [293.15] +
226 12 * [295.15] +
227 5 * [293.15])
228 self.central_ahu.min_relative_humidity_profile = (24 * [0.45])
229 self.central_ahu.max_relative_humidity_profile = (24 * [0.55])
230 self.central_ahu.v_flow_profile = (
231 7 * [0.0] + 12 * [1.0] + 5 * [0.0])