Coverage for teaser/logic/archetypebuildings/tabula/dk/terracedhouse.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 TerracedHouse(SingleFamilyHouse):
9 """Archetype for TABULA Single 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 orientation?)
18 - how we calculate facade and window area
19 - calculate u-values
20 - zones (one zone)
21 - differences between TABULA und our approach (net floor area, height
22 and number of storeys)
23 - how to proceed with rooftops (keep them as flat roofs or pitched
24 roofs? what orientation?)
26 Parameters
27 ----------
29 parent: Project()
30 The parent class of this object, the Project the Building belongs to.
31 Allows for better control of hierarchical structures. If not None it
32 adds this Building instance to Project.buildings.
33 (default: None)
34 name : str
35 Individual name
36 year_of_construction : int
37 Year of first construction
38 height_of_floors : float [m]
39 Average height of the buildings' floors
40 number_of_floors : int
41 Number of building's floors above ground
42 net_leased_area : float [m2]
43 Total net leased area of building. This is area is NOT the footprint
44 of a building
45 with_ahu : Boolean
46 If set to True, an empty instance of BuildingAHU is instantiated and
47 assigned to attribute central_ahu. This instance holds information for
48 central Air Handling units. Default is False.
49 internal_gains_mode: int [1, 2, 3]
50 mode for the internal gains calculation done in AixLib:
52 1. Temperature and activity degree dependent heat flux calculation for persons. The
53 calculation is based on SIA 2024 (default)
54 2. Temperature and activity degree independent heat flux calculation for persons, the max.
55 heatflowrate is prescribed by the parameter
56 fixed_heat_flow_rate_persons.
57 3. Temperature and activity degree dependent calculation with
58 consideration of moisture and co2. The moisture calculation is
59 based on SIA 2024 (2015) and regards persons and non-persons, the co2 calculation is based on
60 Engineering ToolBox (2004) and regards only persons.
61 inner_wall_approximation_approach : str
62 'teaser_default' (default) sets length of inner walls = typical
63 length * height of floors + 2 * typical width * height of floors
64 'typical_minus_outer' sets length of inner walls = 2 * typical
65 length * height of floors + 2 * typical width * height of floors
66 - length of outer or interzonal walls
67 'typical_minus_outer_extended' like 'typical_minus_outer', but also
68 considers that
69 a) a non-complete "average room" reduces its circumference
70 proportional to the square root of the area
71 b) rooftops, windows and ground floors (= walls with border to
72 soil) may have a vertical share
73 construction_data : str
74 Construction type of used wall constructions default is "existing
75 state"
77 - existing state:
78 construction of walls according to existing state in TABULA
79 - usual refurbishment:
80 construction of walls according to usual refurbishment in
81 TABULA
82 - advanced refurbishment:
83 construction of walls according to advanced refurbishment in
84 TABULA
86 """
88 def __init__(
89 self,
90 parent,
91 name=None,
92 year_of_construction=None,
93 number_of_floors=None,
94 height_of_floors=None,
95 net_leased_area=None,
96 with_ahu=False,
97 internal_gains_mode=1,
98 inner_wall_approximation_approach='teaser_default',
99 construction_data=None):
101 super(TerracedHouse, self).__init__(
102 parent,
103 name,
104 year_of_construction,
105 number_of_floors,
106 height_of_floors,
107 net_leased_area,
108 with_ahu,
109 internal_gains_mode,
110 inner_wall_approximation_approach,
111 construction_data)
113 self.construction_data = construction_data
114 self.number_of_floors = number_of_floors
115 self.height_of_floors = height_of_floors
117 self._construction_data_1 = self.construction_data.value + '_1_TH'
118 self._construction_data_2 = self.construction_data.value + '_2_TH'
120 self.zone_area_factors = {"SingleDwelling": [1, "Living"]}
122 self._outer_wall_names_1 = {
123 "ExteriorFacadeNorth_1": [90.0, 0.0],
124 "ExteriorFacadeSouth_1": [90.0, 180.0]}
126 self._outer_wall_names_2 = {
127 "ExteriorFacadeNorth_2": [90.0, 0.0],
128 "ExteriorFacadeSouth_2": [90.0, 180.0]}
130 self.roof_names_1 = {"Rooftop_1": [0, -1]} # [0, -1]
132 self.roof_names_2 = {"Rooftop_2": [0, -1]}
134 self.ground_floor_names_1 = {
135 "GroundFloor_1": [0, -2]} # [0, -2]
137 self.ground_floor_names_2 = {
138 "GroundFloor_2": [0, -2]}
140 self.door_names = {"Door": [90.0, 270]}
142 self.window_names_1 = {
143 "WindowFacadeNorth_1": [90.0, 0.0],
144 "WindowFacadeSouth_1": [90.0, 180.0]}
145 self.window_names_2 = {
146 "WindowFacadeNorth_2": [90.0, 0.0],
147 "WindowFacadeSouth_2": [90.0, 180.0]}
149 # [tilt, orientation]
151 self.inner_wall_names = {"InnerWall": [90.0, 0.0]}
153 self.ceiling_names = {"Ceiling": [0.0, -1]}
155 self.floor_names = {"Floor": [0.0, -2]}
157 # Rooftop1, Rooftop2, Wall1, Wall2, GroundFloor1, GroundFloor2,
158 # Window1, Window2, Door
159 # Area/ReferenceFloorArea
160 self.facade_estimation_factors = {
161 (2007, 2010): {
162 'rt1': 1.1712,
163 'rt2': 0.0,
164 'ow1': 0.5405,
165 'ow2': 0.0,
166 'gf1': 1.0631,
167 'gf2': 0.0,
168 'win1': 0.2739,
169 'win2': 0.0,
170 'door': 0.009},
171 (1999, 2006): {
172 'rt1': 0.5248,
173 'rt2': 0.0,
174 'ow1': 0.3762,
175 'ow2': 0.0,
176 'gf1': 0.3366,
177 'gf2': 0.0,
178 'win1': 0.1950,
179 'win2': 0.0,
180 'door': 0.009},
181 (1979, 1998): {
182 'rt1': 0.6235,
183 'rt2': 0.0,
184 'ow1': 0.3529,
185 'ow2': 0.0,
186 'gf1': 0.5059,
187 'gf2': 0.0,
188 'win1': 0.1518,
189 'win2': 0.0,
190 'door': 0.009},
191 (1973, 1978): {
192 'rt1': 0.8559,
193 'rt2': 0.0,
194 'ow1': 0.1982,
195 'ow2': 0.0,
196 'gf1': 0.5856,
197 'gf2': 0.0,
198 'win1': 0.1523,
199 'win2': 0.0,
200 'door': 0.009},
201 (1961, 1972): {
202 'rt1': 0.8488,
203 'rt2': 0.0,
204 'ow1': 0.4302,
205 'ow2': 0.0,
206 'gf1': 0.5814,
207 'gf2': 0.0,
208 'win1': 0.4337,
209 'win2': 0.0,
210 'door': 0.009},
211 (1951, 1960): {
212 'rt1': 1.0345,
213 'rt2': 0.0,
214 'ow1': 0.4368,
215 'ow2': 0.0,
216 'gf1': 0.6667,
217 'gf2': 0.0,
218 'win1': 0.1920,
219 'win2': 0.0,
220 'door': 0.009},
221 (1931, 1950): {
222 'rt1': 0.7895,
223 'rt2': 0.0,
224 'ow1': 0.3158,
225 'ow2': 0.0,
226 'gf1': 0.6526,
227 'gf2': 0.0,
228 'win1': 0.1389,
229 'win2': 0.0,
230 'door': 0.009},
231 (1851, 1930): {
232 'rt1': 0.5573,
233 'rt2': 0.0,
234 'ow1': 0.5043,
235 'ow2': 0.0,
236 'gf1': 0.4171,
237 'gf2': 0.0,
238 'win1': 0.1299,
239 'win2': 0.0,
240 'door': 0.009},
241 (0, 1850): {
242 'rt1': 0.9462,
243 'rt2': 0.0,
244 'ow1': 0.1613,
245 'ow2': 0.1935, # note that there is actually a ow2
246 'gf1': 0.7097,
247 'gf2': 0.0,
248 'win1': 0.1054,
249 'win2': 0.0,
250 'door': 0.00}}
252 self.building_age_group = None
254 if self.with_ahu is True:
255 self.central_ahu.profile_temperature = (
256 7 * [293.15] +
257 12 * [295.15] +
258 5 * [293.15])
259 self.central_ahu.profile_min_relative_humidity = (24 * [0.45])
260 self.central_ahu.profile_max_relative_humidity = (24 * [0.55])
261 self.central_ahu.profile_v_flow = (
262 7 * [0.0] + 12 * [1.0] + 5 * [0.0])