Coverage for teaser/logic/archetypebuildings/tabula/de/multifamilyhouse.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 MultiFamilyHouse(SingleFamilyHouse):
9 """Archetype for TABULA Multi Family House
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.
63 inner_wall_approximation_approach : str
64 'teaser_default' (default) sets length of inner walls = typical
65 length * height of floors + 2 * typical width * height of floors
66 'typical_minus_outer' sets length of inner walls = 2 * typical
67 length * height of floors + 2 * typical width * height of floors
68 - length of outer or interzonal walls
69 'typical_minus_outer_extended' like 'typical_minus_outer', but also
70 considers that
71 a) a non-complete "average room" reduces its circumference
72 proportional to the square root of the area
73 b) rooftops, windows and ground floors (= walls with border to
74 soil) may have a vertical share
76 construction_data : str
77 Construction type of used wall constructions default is "existing
78 state"
80 - existing state:
81 construction of walls according to existing state in TABULA
82 - usual refurbishment:
83 construction of walls according to usual refurbishment in
84 TABULA
85 - advanced refurbishment:
86 construction of walls according to advanced refurbishment in
87 TABULA
89 """
91 def __init__(
92 self,
93 parent,
94 name=None,
95 year_of_construction=None,
96 number_of_floors=None,
97 height_of_floors=None,
98 net_leased_area=None,
99 with_ahu=False,
100 internal_gains_mode=1,
101 inner_wall_approximation_approach='teaser_default',
102 construction_data=None):
104 super(MultiFamilyHouse, self).__init__(
105 parent,
106 name,
107 year_of_construction,
108 number_of_floors,
109 height_of_floors,
110 net_leased_area,
111 with_ahu,
112 internal_gains_mode,
113 inner_wall_approximation_approach,
114 construction_data)
116 self.construction_data = construction_data
117 self.number_of_floors = number_of_floors
118 self.height_of_floors = height_of_floors
120 self._construction_data_1 = self.construction_data.value + '_1_MFH'
121 self._construction_data_2 = self.construction_data.value + '_2_MFH'
123 self.zone_area_factors = {"SingleDwelling": [1, "Living"]}
125 self._outer_wall_names_1 = {
126 "ExteriorFacadeNorth_1": [90.0, 0.0],
127 "ExteriorFacadeEast_1": [90.0, 90.0],
128 "ExteriorFacadeSouth_1": [90.0, 180.0],
129 "ExteriorFacadeWest_1": [90.0, 270.0]}
131 self._outer_wall_names_2 = {
132 "ExteriorFacadeNorth_2": [90.0, 0.0],
133 "ExteriorFacadeEast_2": [90.0, 90.0],
134 "ExteriorFacadeSouth_2": [90.0, 180.0],
135 "ExteriorFacadeWest_2": [90.0, 270.0]}
137 self.roof_names_1 = {"Rooftop_1": [0, -1]} # [0, -1]
139 self.roof_names_2 = {"Rooftop_2": [0, -1]}
141 self.ground_floor_names_1 = {
142 "GroundFloor_1": [0, -2]} # [0, -2]
144 self.ground_floor_names_2 = {
145 "GroundFloor_2": [0, -2]}
147 self.door_names = {"Door": [90.0, 270]}
149 self.window_names_1 = {
150 "WindowFacadeNorth_1": [90.0, 0.0],
151 "WindowFacadeEast_1": [90.0, 90.0],
152 "WindowFacadeSouth_1": [90.0, 180.0],
153 "WindowFacadeWest_1": [90.0, 270.0]}
154 self.window_names_2 = {
155 "WindowFacadeNorth_2": [90.0, 0.0],
156 "WindowFacadeEast_2": [90.0, 90.0],
157 "WindowFacadeSouth_2": [90.0, 180.0],
158 "WindowFacadeWest_2": [90.0, 270.0]}
160 # [tilt, orientation]
162 self.inner_wall_names = {"InnerWall": [90.0, 0.0]}
164 self.ceiling_names = {"Ceiling": [0.0, -1]}
166 self.floor_names = {"Floor": [0.0, -2]}
168 # Rooftop1, Rooftop2, Wall1, Wall2, GroundFloor1, GroundFloor2,
169 # Window1, Window2, Door
170 # Area/ReferenceFloorArea
171 self.facade_estimation_factors = {
172 (0, 1859): {
173 'rt1': 0.41965,
174 'rt2': 0.0,
175 'ow1': 1.10679,
176 'ow2': 0.0,
177 'gf1': 0.18434,
178 'gf2': 0.07238,
179 'win1': 0.15805,
180 'win2': 0.0,
181 'door': 0.00295},
182 (1860, 1918): {
183 'rt1': 0.32949,
184 'rt2': 0.0,
185 'ow1': 0.46795,
186 'ow2': 0.0,
187 'gf1': 0.32949,
188 'gf2': 0.0,
189 'win1': 0.17340,
190 'win2': 0.0,
191 'door': 0.00641},
192 (1919, 1948): {
193 'rt1': 0.41169,
194 'rt2': 0.08078,
195 'ow1': 0.84545,
196 'ow2': 0.0,
197 'gf1': 0.33091,
198 'gf2': 0.08078,
199 'win1': 0.18494,
200 'win2': 0.0,
201 'door': 0.00519},
202 (1949, 1957): {
203 'rt1': 0.56171,
204 'rt2': 0.0,
205 'ow1': 0.73101,
206 'ow2': 0.0,
207 'gf1': 0.56171,
208 'gf2': 0.0,
209 'win1': 0.15617,
210 'win2': 0.0,
211 'door': 0.00316},
212 (1958, 1968): {
213 'rt1': 0.31035,
214 'rt2': 0.0,
215 'ow1': 0.65165,
216 'ow2': 0.0,
217 'gf1': 0.31035,
218 'gf2': 0.0,
219 'win1': 0.16219,
220 'win2': 0.0,
221 'door': 0.00064},
222 (1969, 1978): {
223 'rt1': 0.46205,
224 'rt2': 0.0,
225 'ow1': 0.71642,
226 'ow2': 0.0,
227 'gf1': 0.46205,
228 'gf2': 0.0,
229 'win1': 0.17335,
230 'win2': 0.0,
231 'door': 0.00426},
232 (1979, 1983): {
233 'rt1': 0.37966,
234 'rt2': 0.0,
235 'ow1': 0.68364,
236 'ow2': 0.0,
237 'gf1': 0.37966,
238 'gf2': 0.0,
239 'win1': 0.15199,
240 'win2': 0.0,
241 'door': 0.00306},
242 (1984, 1994): {
243 'rt1': 0.32057,
244 'rt2': 0.0,
245 'ow1': 0.99589,
246 'ow2': 0.0,
247 'gf1': 0.32057,
248 'gf2': 0.0,
249 'win1': 0.20694,
250 'win2': 0.0,
251 'door': 0.00257},
252 (1995, 2001): {
253 'rt1': 0.33976,
254 'rt2': 0.0,
255 'ow1': 0.83329,
256 'ow2': 0.0,
257 'gf1': 0.33976,
258 'gf2': 0.0,
259 'win1': 0.19497,
260 'win2': 0.0,
261 'door': 0.0024},
262 (2002, 2009): {
263 'rt1': 0.26849,
264 'rt2': 0.0,
265 'ow1': 0.77534,
266 'ow2': 0.0,
267 'gf1': 0.28288,
268 'gf2': 0.0,
269 'win1': 0.14096,
270 'win2': 0.0,
271 'door': 0.00091},
272 (2010, 2015): {
273 'rt1': 0.24605,
274 'rt2': 0.0,
275 'ow1': 0.91433,
276 'ow2': 0.0,
277 'gf1': 0.24605,
278 'gf2': 0.0,
279 'win1': 0.18667,
280 'win2': 0.0,
281 'door': 0.0367},
282 (2016, 2100): {
283 'rt1': 0.24605,
284 'rt2': 0.0,
285 'ow1': 0.91433,
286 'ow2': 0.0,
287 'gf1': 0.24605,
288 'gf2': 0.0,
289 'win1': 0.18667,
290 'win2': 0.0,
291 'door': 0.0367}}
293 self.building_age_group = None
295 if self.with_ahu is True:
296 self.central_ahu.temperature_profile = (
297 7 * [293.15] +
298 12 * [295.15] +
299 5 * [293.15])
300 self.central_ahu.min_relative_humidity_profile = (24 * [0.45])
301 self.central_ahu.max_relative_humidity_profile = (24 * [0.55])
302 self.central_ahu.v_flow_profile = (
303 7 * [0.0] + 12 * [1.0] + 5 * [0.0])