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

1# created April 2017 

2# by TEASER Development Team 

3 

4from teaser.logic.archetypebuildings.tabula.de.singlefamilyhouse import \ 

5 SingleFamilyHouse 

6 

7 

8class MultiFamilyHouse(SingleFamilyHouse): 

9 """Archetype for TABULA Multi Family House 

10 

11 Archetype according to TABULA building typology 

12 (http://webtool.building-typology.eu/#bm). 

13 

14 Description of: 

15 

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?) 

26 

27 Parameters 

28 ---------- 

29 

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: 

52 

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 

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 

75 

76 construction_data : str 

77 Construction type of used wall constructions default is "existing 

78 state" 

79 

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 

88 

89 """ 

90 

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): 

103 

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) 

115 

116 self.construction_data = construction_data 

117 self.number_of_floors = number_of_floors 

118 self.height_of_floors = height_of_floors 

119 

120 self._construction_data_1 = self.construction_data.value + '_1_MFH' 

121 self._construction_data_2 = self.construction_data.value + '_2_MFH' 

122 

123 self.zone_area_factors = {"SingleDwelling": [1, "Living"]} 

124 

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]} 

130 

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]} 

136 

137 self.roof_names_1 = {"Rooftop_1": [0, -1]} # [0, -1] 

138 

139 self.roof_names_2 = {"Rooftop_2": [0, -1]} 

140 

141 self.ground_floor_names_1 = { 

142 "GroundFloor_1": [0, -2]} # [0, -2] 

143 

144 self.ground_floor_names_2 = { 

145 "GroundFloor_2": [0, -2]} 

146 

147 self.door_names = {"Door": [90.0, 270]} 

148 

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]} 

159 

160 # [tilt, orientation] 

161 

162 self.inner_wall_names = {"InnerWall": [90.0, 0.0]} 

163 

164 self.ceiling_names = {"Ceiling": [0.0, -1]} 

165 

166 self.floor_names = {"Floor": [0.0, -2]} 

167 

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}} 

292 

293 self.building_age_group = None 

294 

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])