Coverage for teaser/logic/buildingobjects/calculation/three_element.py: 97%

434 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2025-04-29 16:01 +0000

1# created January 2017 

2 

3from __future__ import division 

4import math 

5import random 

6import warnings 

7 

8 

9class ThreeElement(object): 

10 """This class contains attributes and functions for three element model 

11 

12 This model adds one further element for the floor plate. Long-term effects 

13 dominate the excitation of the floor plate and thus the excitation 

14 differs from excitation of outer walls. Thus the model distinguishes 

15 between internal thermal masses and exterior walls divided into those 

16 who are exposed to the sun and ground plates. While exterior walls 

17 contribute to heat transfer to the ambient, adiabatic 

18 conditions apply to interior walls. This approach allows considering the 

19 dynamic behaviour induced by internal heat storage. This class calculates 

20 and holds all attributes given in documentation. 

21 

22 It treats Rooftops and OuterWalls as one type of outer 

23 walls and distinguishes GroundFloors as a separately resulting in two 

24 RC-combination for these types. 

25 

26 Depending on the chosen method it will consider an extra resistance for 

27 windows or merge all windows into the RC-Combination for outer walls. 

28 

29 Parameters 

30 ---------- 

31 thermal_zone: ThermalZone() 

32 TEASER instance of ThermalZone 

33 merge_windows : boolean 

34 True for merging windows into the outer wall's RC-combination, 

35 False for separate resistance for window, default is False. (Only 

36 supported for IBPSA) 

37 t_bt : float [d] 

38 Time constant according to VDI 6007 (default t_bt = 5) 

39 t_bt_layer : float [d] 

40 Time constant according to VDI 6007 for aggragation of layers (default t_bt = 7) 

41 

42 Attributes 

43 ---------- 

44 Interior Walls 

45 

46 area_iw : float [m2] 

47 Area of all interior walls. 

48 alpha_conv_inner_iw : float [W/(m2K)] 

49 Area-weighted convective coefficient of heat transfer of interior 

50 walls facing the inside of this thermal zone. 

51 alpha_rad_inner_iw : float [W/(m2K)] 

52 Area-weighted radiative coefficient of heat transfer of interior 

53 walls facing the inside of this thermal zone. 

54 alpha_comb_inner_iw : float [W/(m2K)] 

55 Area-weighted combined coefficient of heat transfer of interior walls 

56 facing the inside of this thermal zone. 

57 alpha_conv_outer_iw : float [W/(m2K)] 

58 Area-weighted convective coefficient of heat transfer of interior 

59 walls facing the adjacent thermal zone. (Currently not supported) 

60 alpha_rad_outer_iw : float [W/(m2K)] 

61 Area-weighted radiative coefficient of heat transfer of interior 

62 walls facing the adjacent thermal zone. (Currently not supported) 

63 alpha_comb_outer_iw : float [W/(m2K)] 

64 Area-weighted combined coefficient of heat transfer of interior walls 

65 facing the adjacent thermal zone. (Currently not supported) 

66 ua_value_iw : float [W/K] 

67 U-Value times interior wall area. (Does not take adjacent thermal 

68 zones into account) 

69 r_conv_inner_iw : float [K/W] 

70 Sum of convective resistances for all interior walls 

71 facing the inside of this thermal zone. 

72 r_rad_inner_iw : float [K/W] 

73 Sum of radiative resistances for all interior walls facing the 

74 inside of this thermal zone 

75 r_comb_inner_iw : float [K/W] 

76 Sum of combined resistances for all interior walls facing the 

77 inside of this thermal zone 

78 r1_iw : float [K/W] 

79 Lumped resistance of interior walls no heat transfer coefficients for 

80 convection and radiation are accounted in this resistance. 

81 c1_iw : float [J/K] 

82 Lumped capacity of interior walls 

83 

84 Outer Walls (OuterWall, Rooftop) 

85 

86 area_ow : float [m2] 

87 Area of all outer walls (OuterWall, Rooftop). 

88 alpha_conv_inner_ow : float [W/(m2K)] 

89 Area-weighted convective coefficient of heat transfer of outer walls 

90 facing the inside of this thermal zone (OuterWall, Rooftop). 

91 alpha_rad_inner_ow : float [W/(m2K)] 

92 Area-weighted radiative coefficient of heat transfer of outer walls 

93 facing the inside of this thermal zone (OuterWall, Rooftop). 

94 alpha_comb_inner_ow : float [W/(m2K)] 

95 Area-weighted combined coefficient of heat transfer of outer walls 

96 facing the inside of this thermal zone (OuterWall, Rooftop). 

97 alpha_conv_outer_ow : float [W/(m2K)] 

98 Area-weighted convective coefficient of heat transfer of outer walls 

99 facing the ambient (OuterWall, Rooftop). 

100 alpha_rad_outer_ow : float [W/(m2K)] 

101 Area-weighted radiative coefficient of heat transfer of outer walls 

102 facing the ambient (OuterWall, Rooftop). 

103 alpha_comb_outer_ow : float [W/(m2K)] 

104 Area-weighted combined coefficient of heat transfer of outer walls 

105 facing the ambient (OuterWall, Rooftop). 

106 ua_value_ow : float [W/K] 

107 U-Value times outer wall area (OuterWall, Rooftop). 

108 r_conv_inner_ow : float [K/W] 

109 Sum of convective resistances for all outer walls facing the 

110 inside of this thermal zone (OuterWall, Rooftop). 

111 r_rad_inner_ow : float [K/W] 

112 Sum of radiative resistances for all outer walls facing the 

113 inside of this thermal zone (OuterWall, Rooftop). 

114 r_comb_inner_ow : float [K/W] 

115 Sum of combined resistances for all outer walls facing the 

116 inside of this thermal zone (OuterWall, Rooftop). 

117 r_conv_outer_ow : float [K/W] 

118 Sum of convective resistances for all outer walls facing the 

119 ambient (OuterWall, Rooftop). 

120 r_rad_outer_ow : float [K/W] 

121 Sum of radiative resistances for all outer walls facing the 

122 ambient (OuterWall, Rooftop). 

123 r_comb_outer_ow : float [K/W] 

124 Sum of combined resistances for all outer walls facing the 

125 ambient (OuterWall, Rooftop). 

126 r1_ow : float [K/W] 

127 Lumped resistance of outer walls no heat transfer coefficients for 

128 convection and radiation are accounted in this resistance (OuterWall, 

129 Rooftop). 

130 r_rest_ow : float [K/W] 

131 Lumped remaining resistance of outer walls between r1_ow and c1_ow no 

132 heat transfer coefficients for convection and radiation are accounted 

133 in this resistance (OuterWall, Rooftop). 

134 c1_ow : float [J/K] 

135 Lumped capacity of outer walls (OuterWall, Rooftop). 

136 weightfactor_ow : list of floats 

137 Weightfactors of outer walls (UA-Value of walls with same orientation 

138 and tilt divided by ua_value_ow) (OuterWall, Rooftop) 

139 outer_wall_areas : list of floats [m2] 

140 Area of all outer walls in one list (OuterWall, Rooftop). 

141 ir_emissivity_outer_ow : float 

142 Area-weighted ir emissivity of outer wall facing the ambient (OuterWall, 

143 Rooftop). 

144 ir_emissivity_inner_ow : float 

145 Area-weighted ir emissivity of outer walls facing the thermal zone 

146 (OuterWall, Rooftop). 

147 solar_absorp_ow : float 

148 Area-weighted solar absorption of outer walls facing the ambient 

149 (OuterWall, Rooftop). 

150 

151 Ground Floors 

152 

153 area_gf : float [m2] 

154 Area of all ground floors. 

155 alpha_conv_inner_gf : float [W/(m2K)] 

156 Area-weighted convective coefficient of heat transfer of ground floors 

157 facing the inside of this thermal zone. 

158 alpha_rad_inner_gf : float [W/(m2K)] 

159 Area-weighted radiative coefficient of heat transfer of ground floors 

160 facing the inside of this thermal zone. 

161 alpha_comb_inner_gf : float [W/(m2K)] 

162 Area-weighted combined coefficient of heat transfer of ground floors 

163 facing the inside of this thermal zone. 

164 ua_value_gf : float [W/K] 

165 U-Value times ground floor area. 

166 r_conv_inner_gf : float [K/W] 

167 Sum of convective resistances for all ground floors facing the 

168 inside of this thermal zone. 

169 r_rad_inner_gf : float [K/W] 

170 Sum of radiative resistances for all ground floors facing the 

171 inside of this thermal zone. 

172 r_comb_inner_gf : float [K/W] 

173 Sum of combined resistances for all ground floors facing the 

174 inside of this thermal zone. 

175 r1_gf : float [K/W] 

176 Lumped resistance of ground floors no heat transfer coefficients for 

177 convection and radiation are accounted in this resistance. 

178 r_rest_gf : float [K/W] 

179 Lumped remaining resistance of ground floors between r1_gf and c1_gf no 

180 heat transfer coefficients for convection and radiation are accounted 

181 in this resistance. 

182 c1_gf : float [J/K] 

183 Lumped capacity of ground floors. 

184 weightfactor_gf : float 

185 Weightfactor of ground floors (UA-Value of walls with same orientation 

186 and tilt divided by ua_value_gf) 

187 ground_floor_area : float [m2] 

188 Area of all ground floors. 

189 r_rad_gf_iw : float [K/W] 

190 Resistance for radiative heat transfer between walls. 

191 TODO: needs to be checked 

192 ir_emissivity_inner_gf : float 

193 Area-weighted ir emissivity of ground floors facing the thermal zone. 

194 

195 Windows 

196 

197 area_win : float [m2] 

198 Area of all windows. 

199 alpha_conv_inner_win : float [W/(m2K)] 

200 Area-weighted convective coefficient of heat transfer of windows 

201 facing the inside of this thermal zone. 

202 alpha_rad_inner_win : float [W/(m2K)] 

203 Area-weighted radiative coefficient of heat transfer of windows 

204 facing the inside of this thermal zone. 

205 alpha_comb_inner_win : float [W/(m2K)] 

206 Area-weighted combined coefficient of heat transfer of windows facing 

207 the inside of this thermal zone. 

208 ratio_conv_rad_inner_win : float [-] 

209 Ratio for windows between convective and radiative heat emission, 

210 given in VDI 6007-3 

211 alpha_conv_outer_win : float [W/(m2K)] 

212 Area-weighted convective coefficient of heat transfer of windows 

213 facing the ambient. 

214 alpha_rad_outer_win : float [W/(m2K)] 

215 Area-weighted radiative coefficient of heat transfer of windows 

216 facing the ambient. 

217 alpha_comb_outer_win : float [W/(m2K)] 

218 Area-weighted combined coefficient of heat transfer of windows facing 

219 the ambient. 

220 ua_value_win : float [W/K] 

221 U-Value times outer wall area. 

222 u_value_win : float [W/(m2K)] 

223 Area weighted U-Value of windows. 

224 r_conv_inner_win : float [K/W] 

225 Sum of convective resistances for all windows facing the 

226 inside of this thermal zone. 

227 r_rad_inner_win : float [K/W] 

228 Sum of radiative resistances for all windows facing the 

229 inside of this thermal zone. 

230 r_comb_inner_win : float [K/W] 

231 Sum of combined resistances for all windows facing the 

232 inside of this thermal zone. 

233 r_conv_outer_win : float [K/W] 

234 Sum of convective resistances for all windows facing the 

235 ambient. 

236 r_rad_outer_win : float [K/W] 

237 Sum of radiative resistances for all windows facing the 

238 ambient. 

239 r_comb_outer_win : float [K/W] 

240 Sum of combined resistances for all windows facing the 

241 ambient. 

242 r1_win : float [K/W] 

243 Lumped resistance of windows, no heat transfer coefficients for 

244 convection and radiation are accounted in this resistance. 

245 weightfactor_win : list of floats 

246 Weightfactors of windows (UA-Value of windows with same orientation 

247 and tilt divided by ua_value_win or ua_value_win+ua_value_ow, 

248 depending if windows is lumped/merged into the walls or not) 

249 window_areas : list of floats [m2] 

250 Area of all windows in one list, if the windows are merged into the 

251 outer wall this list will be full of zeros 

252 transparent_areas : list of floats [m2] 

253 Area of all transparent elements (most likely windows) in one list, 

254 this list will be always filled with the areas, independent if 

255 windows are merged into walls or not. 

256 solar_absorp_win : float 

257 Area-weighted solar absorption for windows. (typically 0.0) 

258 ir_emissivity_win : float 

259 Area-weighted ir_emissivity for windows. Can be used for windows 

260 facing the thermal zone and the ambient. 

261 weighted_g_value : float 

262 Area-weighted g-Value of all windows. 

263 shading_max_irr : list of float [W/m2] 

264 Threshold value above which the sunblind becomes active for the whole zone. 

265 Threshold regards to the incoming irradiation level with the window direction. 

266 This value does not account for heat flux due to the outside temperature. 

267 shading_g_total : list of float 

268 Factor representing how much of the actual solar irradiation goes through 

269 the sunblind and enters the window element, for the case, that the sunblind is 

270 activated. Defaults to 1, i.e. no shading is active. 

271 

272 Misc values: 

273 

274 alpha_rad_inner_mean : float [W/(m2K)] 

275 Area-weighted radiative coefficient of all surfaces facing the 

276 inside of this thermal zone (OuterWalls, Windows, InnerWalls, ...). 

277 alpha_rad_outer_mean : float [W/(m2K)] 

278 Area-weighted radiative coefficient of all surfaces facing the 

279 ambient (OuterWalls, Windows, ...). 

280 heat_load : [W] 

281 Static heat load of the thermal zone. 

282 heat_load_outside_factor : float [W/K] 

283 Factor needed for recalculation of the heat load of the thermal zone. 

284 This can be used to recalculate the thermalzones heat load inside 

285 Modelica export for parametric studies. This works only together with 

286 heat_load_ground_factor. 

287 

288 heat_load = heat_load_outside_factor * (t_inside - t_outside) + 

289 heat_load_ground_factor * (t_inside - t_ground). 

290 heat_load_ground_factor : float [W/K] 

291 Factor needed for recalculation of the heat load of the thermal zone. 

292 This can be used to recalculate the thermalzones heat load inside 

293 Modelica export for parametric studies. See heat_load_outside_factor. 

294 facade_areas : list of floats [m2] 

295 List containing the area of each facade (with same tilt and 

296 orientation) this includes also roofs and ground floors and windows. 

297 n_outer : int 

298 Number of total facades with different combination of tilt and 

299 orientation, windows and outer walls rooftops 

300 tilt_facade : list of floats [degree] 

301 Tilt of facades against the horizontal. 

302 orientation_facade : list of floats [degree] 

303 Orientation of facades (Azimuth). 

304 0 - North 

305 90 - East 

306 180 - South 

307 270 - West 

308 

309 """ 

310 

311 def __init__(self, thermal_zone, merge_windows, t_bt, t_bt_layer=7): 

312 """Constructor for ThreeElement""" 

313 

314 self.internal_id = random.random() 

315 

316 self.thermal_zone = thermal_zone 

317 self.merge_windows = merge_windows 

318 self.t_bt = t_bt 

319 self.t_bt_layer = t_bt_layer 

320 

321 # Attributes of inner walls 

322 self.area_iw = 0.0 

323 

324 # coefficient of heat transfer facing the inside of this thermal zone 

325 self.alpha_conv_inner_iw = 0.0 

326 self.alpha_rad_inner_iw = 0.0 

327 self.alpha_comb_inner_iw = 0.0 

328 # coefficient of heat transfer facing the adjacent thermal zone 

329 self.alpha_conv_outer_iw = 0.0 

330 self.alpha_rad_outer_iw = 0.0 

331 self.alpha_comb_outer_iw = 0.0 

332 

333 # UA-Value 

334 self.ua_value_iw = 0.0 

335 

336 # resistances for heat transfer facing the inside of this thermal zone 

337 self.r_conv_inner_iw = 0.0 

338 self.r_rad_inner_iw = 0.0 

339 self.r_comb_inner_iw = 0.0 

340 self.r_conv_outer_iw = 0.0 

341 self.r_rad_outer_iw = 0.0 

342 self.r_comb_outer_iw = 0.0 

343 

344 # lumped resistance/capacity 

345 self.r1_iw = 0.0 

346 self.c1_iw = 0.0 

347 

348 # Attributes for outer walls (OuterWall, Rooftop) 

349 self.area_ow = 0.0 

350 

351 # coefficient of heat transfer facing the inside of this thermal zone 

352 self.alpha_conv_inner_ow = 0.0 

353 self.alpha_rad_inner_ow = 0.0 

354 self.alpha_comb_inner_ow = 0.0 

355 

356 # coefficient of heat transfer facing the ambient 

357 self.alpha_conv_outer_ow = 0.0 

358 self.alpha_rad_outer_ow = 0.0 

359 self.alpha_comb_outer_ow = 0.0 

360 

361 # UA-Value 

362 self.ua_value_ow = 0.0 

363 

364 # resistances for heat transfer facing the inside of this thermal zone 

365 self.r_conv_inner_ow = 0.0 

366 self.r_rad_inner_ow = 0.0 

367 self.r_comb_inner_ow = 0.0 

368 

369 # resistances for heat transfer facing the ambient 

370 self.r_conv_outer_ow = 0.0 

371 self.r_rad_outer_ow = 0.0 

372 self.r_comb_outer_ow = 0.0 

373 

374 # lumped resistances/capacity 

375 self.r1_ow = 0.0 

376 self.r_rest_ow = 0.0 

377 self.c1_ow = 0.0 

378 self.r_total_ow = 0.0 

379 

380 # Optical properties 

381 self.ir_emissivity_outer_ow = 0.0 

382 self.ir_emissivity_inner_ow = 0.0 

383 self.solar_absorp_ow = 0.0 

384 

385 # Additional attributes 

386 self.weightfactor_ow = [] 

387 self.weightfactor_ground = 0.0 

388 self.outer_wall_areas = [] 

389 

390 # Attributes for outer walls (OuterWall, Rooftop, GroundFloor) 

391 self.area_gf = 0.0 

392 

393 # coefficient of heat transfer facing the inside of this thermal zone 

394 self.alpha_conv_inner_gf = 0.0 

395 self.alpha_rad_inner_gf = 0.0 

396 self.alpha_comb_inner_gf = 0.0 

397 

398 # UA-Value 

399 self.ua_value_gf = 0.0 

400 

401 # resistances for heat transfer facing the inside of this thermal zone 

402 self.r_conv_inner_gf = 0.0 

403 self.r_rad_inner_gf = 0.0 

404 self.r_comb_inner_gf = 0.0 

405 

406 # lumped resistances/capacity 

407 self.r1_gf = 0.0 

408 self.r_rest_gf = 0.0 

409 self.c1_gf = 0.0 

410 self.r_total_gf = 0.0 

411 

412 # Optical properties 

413 self.ir_emissivity_inner_gf = 0.0 

414 

415 # Additional attributes 

416 

417 self.weightfactor_ground = 0.0 

418 

419 # Attributes for windows 

420 self.area_win = 0.0 

421 

422 # coefficient of heat transfer facing the inside of this thermal zone 

423 self.alpha_conv_inner_win = 0.0 

424 self.alpha_rad_inner_win = 0.0 

425 self.alpha_comb_inner_win = 0.0 

426 self.ratio_conv_rad_inner_win = 0.0 

427 

428 # coefficient of heat transfer facing the ambient 

429 self.alpha_conv_outer_win = 0.0 

430 self.alpha_rad_outer_win = 0.0 

431 self.alpha_comb_outer_win = 0.0 

432 

433 # UA-Value 

434 self.ua_value_win = 0.0 

435 self.u_value_win = 0.0 

436 

437 # resistances for heat transfer facing the inside of this thermal zone 

438 self.r_conv_inner_win = 0.0 

439 self.r_rad_inner_win = 0.0 

440 self.r_comb_inner_win = 0.0 

441 

442 # resistances for heat transfer facing the ambient 

443 self.r_conv_outer_win = 0.0 

444 self.r_rad_outer_win = 0.0 

445 self.r_comb_outer_win = 0.0 

446 

447 # lumped resistances/capacity 

448 self.r1_win = 0.0 

449 

450 # Optical properties 

451 self.ir_emissivity_win = 0.0 

452 self.ir_emissivity_inner_win = 0.0 

453 self.solar_absorp_win = 0.0 

454 

455 # Additional attributes 

456 self.weightfactor_win = [] 

457 self.window_areas = [] 

458 self.transparent_areas = [] 

459 self.shading_g_total = [] 

460 self.shading_max_irr = [] 

461 self.weighted_g_value = 0.0 

462 

463 # Misc values 

464 

465 self.alpha_rad_inner_mean = 0.0 

466 self.alpha_rad_outer_mean = 0.0 

467 self.n_outer = 0 

468 self.facade_areas = [] 

469 self.tilt_facade = [] 

470 self.orientation_facade = [] 

471 self.heat_load = 0.0 

472 self.cool_load = 0.0 

473 self.heat_load_outside_factor = 0.0 

474 self.heat_load_ground_factor = 0.0 

475 

476 def calc_attributes(self): 

477 """Calls all necessary function to calculate model attributes""" 

478 outer_walls = ( 

479 self.thermal_zone.outer_walls 

480 + self.thermal_zone.rooftops 

481 + self.thermal_zone.find_izes_outer() 

482 ) 

483 

484 for out_wall in outer_walls: 

485 out_wall.calc_equivalent_res(t_bt=self.t_bt_layer) 

486 out_wall.calc_ua_value() 

487 for gf in self.thermal_zone.ground_floors: 

488 gf.calc_equivalent_res(t_bt=self.t_bt_layer) 

489 gf.calc_ua_value() 

490 for win in self.thermal_zone.windows: 

491 win.calc_equivalent_res() 

492 win.calc_ua_value() 

493 for inner_wall in ( 

494 self.thermal_zone.inner_walls 

495 + self.thermal_zone.floors 

496 + self.thermal_zone.ceilings 

497 + self.nzbs_for_iw 

498 ): 

499 inner_wall.calc_equivalent_res(t_bt=self.t_bt_layer) 

500 inner_wall.calc_ua_value() 

501 

502 self.set_calc_default() 

503 if len(outer_walls) < 1: 

504 warnings.warn( 

505 "No walls are defined as outer walls for thermal " 

506 + "zone " 

507 + self.thermal_zone.name 

508 + " in building " 

509 + self.thermal_zone.parent.name 

510 + ", please be careful with results. In addition " 

511 + "this might lead to RunTimeErrors" 

512 ) 

513 else: 

514 self._sum_outer_wall_elements() 

515 if ( 

516 len( 

517 self.thermal_zone.inner_walls 

518 + self.thermal_zone.floors 

519 + self.thermal_zone.ceilings 

520 + self.nzbs_for_iw 

521 ) 

522 < 1 

523 ): 

524 warnings.warn( 

525 "For thermal zone " 

526 + self.thermal_zone.name 

527 + " in building " 

528 + self.thermal_zone.parent.name 

529 + ", no inner walls have been defined." 

530 ) 

531 else: 

532 self._sum_inner_wall_elements() 

533 self._calc_inner_elements() 

534 if len(self.thermal_zone.windows) < 1: 

535 warnings.warn( 

536 "For thermal zone " 

537 + self.thermal_zone.name 

538 + " in building " 

539 + self.thermal_zone.parent.name 

540 + ", no windows have been defined." 

541 ) 

542 else: 

543 self._sum_window_elements() 

544 if len(self.thermal_zone.ground_floors) < 1: 

545 warnings.warn( 

546 "For thermal zone " 

547 + self.thermal_zone.name 

548 + " in building " 

549 + self.thermal_zone.parent.name 

550 + ", no ground floors have been defined." 

551 ) 

552 else: 

553 self._sum_ground_floor_elements() 

554 self._calc_ground_floor_elements() 

555 if len(outer_walls) >= 1 or len(self.thermal_zone.windows) >= 1: 

556 self._calc_outer_elements() 

557 self._calc_wf() 

558 self._calc_mean_values() 

559 if len(self.thermal_zone.interzonal_elements) >= 1: 

560 warnings.warn( 

561 "For thermal zone " 

562 + self.thermal_zone.name 

563 + " in building " 

564 + self.thermal_zone.parent.name 

565 + ", interzonal elements have been defined. ThreeElement export" 

566 + " will treat them as outer walls or inner walls depending on " 

567 + "the project parameter 'method_interzonal_export'. Consider " 

568 + "using FiveElement instead." 

569 ) 

570 self._calc_number_of_elements() 

571 self._fill_zone_lists() 

572 self._calc_heat_load() 

573 self.cool_load = -self.heat_load 

574 

575 return True 

576 

577 @staticmethod 

578 def _calc_parallel_connection(element_list, omega, mode='iw'): 

579 """Parallel connection of walls according to VDI 6007 

580 

581 Calculates the parallel connection of wall elements according to VDI 

582 6007, resulting in R1 and C1 (equation 23, 24). 

583 

584 Parameters 

585 ---------- 

586 element_list : list 

587 List of inner or outer walls 

588 omega : float 

589 VDI 6007 frequency 

590 mode : str 

591 'ow' uses r1 and c1_korr 

592 'iw' uses r1 and c1 (function falls back here for other strings) 

593 

594 Returns 

595 ------- 

596 r1 : float [K/W] 

597 VDI 6007 resistance for all inner or outer walls 

598 c1 : float [K/W] 

599 VDI 6007 capacity all for inner or outer walls 

600 """ 

601 

602 for wall_count in range(len(element_list) - 1): 

603 

604 if wall_count == 0: 

605 r1_before = element_list[wall_count].r1 

606 if mode == 'ow': 

607 c1_before = element_list[wall_count].c1_korr 

608 else: 

609 c1_before = element_list[wall_count].c1 

610 else: 

611 r1_before = r1 

612 c1_before = c1 

613 r1_add = element_list[wall_count + 1].r1 

614 if mode == 'ow': 

615 c1_add = element_list[wall_count + 1].c1_korr 

616 else: 

617 c1_add = element_list[wall_count + 1].c1 

618 

619 r1 = ( 

620 r1_before * c1_before ** 2 + r1_add * c1_add ** 2 

621 + omega ** 2 * r1_before * r1_add * (r1_before + r1_add) 

622 * c1_before ** 2 * c1_add ** 2 

623 ) / ( 

624 (c1_before + c1_add) ** 2 

625 + omega ** 2 * (r1_before + r1_add) ** 2 * c1_before ** 2 

626 * c1_add ** 2 

627 ) 

628 

629 c1 = ( 

630 (c1_before + c1_add) ** 2 

631 + omega ** 2 * (r1_before + r1_add) ** 2 * c1_before ** 2 

632 * c1_add ** 2 

633 ) / ( 

634 c1_before + c1_add 

635 + omega ** 2 

636 * (r1_before ** 2 * c1_before + r1_add ** 2 * c1_add) 

637 * c1_before * c1_add 

638 ) 

639 

640 return r1, c1 

641 

642 def _sum_outer_wall_elements(self): 

643 """Sum attributes for outer wall elements 

644 

645 This function sums and computes the area-weighted values, 

646 where necessary for coefficients of heat 

647 transfer, resistances, areas and UA-Values. 

648 

649 For ThreeElement model it treats rooftops, outer walls and zone borders 

650 to neighboured zones (if this zone is heated) 

651 as one kind of wall type. 

652 

653 """ 

654 outer_walls = ( 

655 self.thermal_zone.outer_walls 

656 + self.thermal_zone.rooftops 

657 + self.thermal_zone.find_izes_outer() 

658 ) 

659 

660 self.area_ow = sum(out_wall.area for out_wall in outer_walls) 

661 

662 self.ua_value_ow = sum(out_wall.ua_value for out_wall in outer_walls) 

663 

664 self.r_total_ow = 1 / self.ua_value_ow 

665 

666 # values facing the inside of the thermal zone 

667 

668 self.r_conv_inner_ow = 1 / ( 

669 sum(1 / out_wall.r_inner_conv for out_wall in outer_walls) 

670 ) 

671 

672 self.r_rad_inner_ow = 1 / ( 

673 sum(1 / out_wall.r_inner_rad for out_wall in outer_walls) 

674 ) 

675 

676 self.r_comb_inner_ow = 1 / ( 

677 sum(1 / out_wall.r_inner_comb for out_wall in outer_walls) 

678 ) 

679 

680 self.ir_emissivity_inner_ow = ( 

681 sum( 

682 out_wall.layer[0].material.ir_emissivity * out_wall.area 

683 for out_wall in outer_walls 

684 ) 

685 ) / self.area_ow 

686 

687 self.alpha_conv_inner_ow = 1 / (self.r_conv_inner_ow * self.area_ow) 

688 self.alpha_rad_inner_ow = 1 / (self.r_rad_inner_ow * self.area_ow) 

689 self.alpha_comb_inner_ow = 1 / (self.r_comb_inner_ow * self.area_ow) 

690 

691 # values facing the ambient 

692 # ground floor does not have any coefficients on ambient side 

693 

694 self.r_conv_outer_ow = 1 / ( 

695 sum(1 / out_wall.r_outer_conv for out_wall in outer_walls) 

696 ) 

697 self.r_rad_outer_ow = 1 / ( 

698 sum(1 / out_wall.r_outer_rad for out_wall in outer_walls) 

699 ) 

700 self.r_comb_outer_ow = 1 / ( 

701 sum(1 / out_wall.r_outer_comb for out_wall in outer_walls) 

702 ) 

703 

704 self.ir_emissivity_outer_ow = ( 

705 sum( 

706 out_wall.layer[-1].material.ir_emissivity * out_wall.area 

707 for out_wall in outer_walls 

708 ) 

709 ) / self.area_ow 

710 

711 self.solar_absorp_ow = ( 

712 sum( 

713 out_wall.layer[-1].material.solar_absorp * out_wall.area 

714 for out_wall in outer_walls 

715 ) 

716 ) / self.area_ow 

717 

718 self.alpha_conv_outer_ow = 1 / (self.r_conv_outer_ow * self.area_ow) 

719 self.alpha_rad_outer_ow = 1 / (self.r_rad_outer_ow * self.area_ow) 

720 self.alpha_comb_outer_ow = 1 / (self.r_comb_outer_ow * self.area_ow) 

721 

722 def _sum_ground_floor_elements(self): 

723 """Sum attributes for ground floor elements 

724 

725 This function sums and computes the area-weighted values, 

726 where necessary (the class doc string) for coefficients of heat 

727 transfer, resistances, areas and UA-Values. 

728 

729 

730 """ 

731 

732 self.area_gf = sum(ground.area for ground in self.thermal_zone.ground_floors) 

733 

734 self.ua_value_gf = sum( 

735 ground.ua_value for ground in self.thermal_zone.ground_floors 

736 ) 

737 

738 self.r_total_gf = 1 / self.ua_value_gf 

739 

740 # values facing the inside of the thermal zone 

741 

742 self.r_conv_inner_gf = 1 / sum( 

743 1 / ground.r_inner_conv for ground in self.thermal_zone.ground_floors 

744 ) 

745 

746 self.r_rad_inner_gf = 1 / sum( 

747 1 / ground.r_inner_rad for ground in self.thermal_zone.ground_floors 

748 ) 

749 

750 self.r_comb_inner_gf = 1 / sum( 

751 1 / ground.r_inner_comb for ground in self.thermal_zone.ground_floors 

752 ) 

753 

754 self.ir_emissivity_inner_gf = ( 

755 sum( 

756 ground.layer[0].material.ir_emissivity * ground.area 

757 for ground in self.thermal_zone.ground_floors 

758 ) 

759 / self.area_gf 

760 ) 

761 

762 self.alpha_conv_inner_gf = 1 / (self.r_conv_inner_gf * self.area_gf) 

763 self.alpha_rad_inner_gf = 1 / (self.r_rad_inner_gf * self.area_gf) 

764 self.alpha_comb_inner_gf = 1 / (self.r_comb_inner_gf * self.area_gf) 

765 

766 def _sum_inner_wall_elements(self): 

767 """Sum attributes for interior elements 

768 

769 This function sums and computes the area-weighted values, 

770 where necessary (the class doc string) for coefficients of heat 

771 transfer, resistances, areas and UA-Values. 

772 

773 It treats all inner walls identical. 

774 

775 Function is identical for TwoElement, ThreeElement and FourElement. 

776 

777 Calculation of adjacent thermal zones and thus these attributes are 

778 currently not supported. 

779 

780 """ 

781 self.area_iw = ( 

782 sum(in_wall.area for in_wall in self.thermal_zone.inner_walls) 

783 + sum(floor.area for floor in self.thermal_zone.floors) 

784 + sum(ceiling.area for ceiling in self.thermal_zone.ceilings) 

785 + sum(nzb.area for nzb in self.nzbs_for_iw) 

786 ) 

787 

788 self.ua_value_iw = ( 

789 sum(in_wall.ua_value for in_wall in self.thermal_zone.inner_walls) 

790 + sum(floor.ua_value for floor in self.thermal_zone.floors) 

791 + sum(ceiling.ua_value for ceiling in self.thermal_zone.ceilings) 

792 + sum(nzb.ua_value for nzb in self.nzbs_for_iw) 

793 ) 

794 

795 # values facing the inside of the thermal zone 

796 

797 self.r_conv_inner_iw = 1 / ( 

798 sum(1 / in_wall.r_inner_conv for in_wall in self.thermal_zone.inner_walls) 

799 + sum(1 / floor.r_inner_conv for floor in self.thermal_zone.floors) 

800 + sum(1 / ceiling.r_inner_conv for ceiling in self.thermal_zone.ceilings) 

801 + sum(1 / nzb.r_inner_conv for nzb in self.nzbs_for_iw) 

802 ) 

803 

804 self.r_rad_inner_iw = 1 / ( 

805 sum(1 / in_wall.r_inner_rad for in_wall in self.thermal_zone.inner_walls) 

806 + sum(1 / floor.r_inner_rad for floor in self.thermal_zone.floors) 

807 + sum(1 / ceiling.r_inner_rad for ceiling in self.thermal_zone.ceilings) 

808 + sum(1 / nzb.r_inner_rad for nzb in self.nzbs_for_iw) 

809 ) 

810 

811 self.r_comb_inner_iw = 1 / ( 

812 sum(1 / in_wall.r_inner_comb for in_wall in self.thermal_zone.inner_walls) 

813 + sum(1 / floor.r_inner_comb for floor in self.thermal_zone.floors) 

814 + sum(1 / ceiling.r_inner_comb for ceiling in self.thermal_zone.ceilings) 

815 + sum(1 / nzb.r_inner_comb for nzb in self.nzbs_for_iw) 

816 ) 

817 

818 self.ir_emissivity_inner_iw = ( 

819 sum( 

820 in_wall.layer[0].material.ir_emissivity * in_wall.area 

821 for in_wall in self.thermal_zone.inner_walls 

822 ) 

823 + sum( 

824 floor.layer[0].material.ir_emissivity * floor.area 

825 for floor in self.thermal_zone.floors 

826 ) 

827 + sum( 

828 ceiling.layer[0].material.ir_emissivity * ceiling.area 

829 for ceiling in self.thermal_zone.ceilings 

830 ) 

831 + sum( 

832 nzb.layer[0].material.ir_emissivity * nzb.area 

833 for nzb in self.nzbs_for_iw 

834 ) 

835 ) / self.area_iw 

836 

837 self.alpha_conv_inner_iw = 1 / (self.r_conv_inner_iw * self.area_iw) 

838 self.alpha_rad_inner_iw = 1 / (self.r_rad_inner_iw * self.area_iw) 

839 self.alpha_comb_inner_iw = 1 / (self.r_comb_inner_iw * self.area_iw) 

840 

841 # adjacent thermal zones are not supported! 

842 

843 def _sum_window_elements(self): 

844 """Sum attributes for window elements 

845 

846 This function sums and computes the area-weighted values, 

847 where necessary (the class doc string) for coefficients of heat 

848 transfer, resistances, areas and UA-Values. 

849 

850 Function is identical for TwoElement, ThreeElement and FourElement. 

851 """ 

852 

853 self.area_win = sum(win.area for win in self.thermal_zone.windows) 

854 self.ua_value_win = sum(win.ua_value for win in self.thermal_zone.windows) 

855 self.u_value_win = self.ua_value_win / self.area_win 

856 

857 # values facing the inside of the thermal zone 

858 

859 self.r_conv_inner_win = 1 / ( 

860 sum(1 / win.r_inner_conv for win in self.thermal_zone.windows) 

861 ) 

862 

863 self.r_rad_inner_win = 1 / ( 

864 sum(1 / win.r_inner_rad for win in self.thermal_zone.windows) 

865 ) 

866 

867 self.r_comb_inner_win = 1 / ( 

868 sum(1 / win.r_inner_comb for win in self.thermal_zone.windows) 

869 ) 

870 

871 self.ir_emissivity_inner_win = ( 

872 sum( 

873 win.layer[0].material.ir_emissivity * win.area 

874 for win in self.thermal_zone.windows 

875 ) 

876 / self.area_win 

877 ) 

878 

879 self.alpha_conv_inner_win = 1 / (self.r_conv_inner_win * self.area_win) 

880 self.alpha_rad_inner_win = 1 / (self.r_rad_inner_win * self.area_win) 

881 self.alpha_comb_inner_win = 1 / (self.r_comb_inner_win * self.area_win) 

882 self.ratio_conv_rad_inner_win = ( 

883 sum(win.a_conv * win.area for win in self.thermal_zone.windows) 

884 / self.area_win 

885 ) 

886 

887 # values facing the ambient 

888 

889 self.r_conv_outer_win = 1 / ( 

890 sum(1 / win.r_outer_conv for win in self.thermal_zone.windows) 

891 ) 

892 

893 self.r_rad_outer_win = 1 / ( 

894 sum(1 / win.r_outer_rad for win in self.thermal_zone.windows) 

895 ) 

896 

897 self.r_comb_outer_win = 1 / ( 

898 sum(1 / win.r_outer_comb for win in self.thermal_zone.windows) 

899 ) 

900 

901 self.ir_emissivity_win = ( 

902 sum( 

903 win.layer[-1].material.ir_emissivity * win.area 

904 for win in self.thermal_zone.windows 

905 ) 

906 / self.area_win 

907 ) 

908 

909 self.solar_absorp_win = ( 

910 sum( 

911 win.layer[-1].material.solar_absorp * win.area 

912 for win in self.thermal_zone.windows 

913 ) 

914 / self.area_win 

915 ) 

916 

917 self.weighted_g_value = ( 

918 sum(win.g_value * win.area for win in self.thermal_zone.windows) 

919 / self.area_win 

920 ) 

921 

922 self.alpha_conv_outer_win = 1 / (self.r_conv_outer_win * self.area_win) 

923 self.alpha_rad_outer_win = 1 / (self.r_rad_outer_win * self.area_win) 

924 self.alpha_comb_outer_win = 1 / (self.r_comb_outer_win * self.area_win) 

925 

926 def _calc_outer_elements(self): 

927 """Lumped parameter for outer wall elements 

928 

929 Calculates all necessary parameters for outer walls. This includes 

930 OuterWalls and Rooftops. 

931 

932 Attributes 

933 ---------- 

934 omega : float [1/s] 

935 angular frequency with given time period. 

936 outer_walls : list 

937 List containing all TEASER Wall instances that are treated as same 

938 outer wall type. In case of TwoElement model OuterWalls, Rooftops 

939 """ 

940 

941 omega = 2 * math.pi / 86400 / self.t_bt 

942 

943 outer_walls = ( 

944 self.thermal_zone.outer_walls 

945 + self.thermal_zone.rooftops 

946 + self.thermal_zone.find_izes_outer() 

947 ) 

948 

949 if 0 < len(outer_walls) <= 1: 

950 # only one outer wall, no need to calculate chain matrix 

951 self.r1_ow = outer_walls[0].r1 

952 self.c1_ow = outer_walls[0].c1_korr 

953 elif len(outer_walls) > 1: 

954 # more than one outer wall, calculate chain matrix 

955 self.r1_ow, self.c1_ow = self._calc_parallel_connection( 

956 outer_walls, omega, mode='ow' 

957 ) 

958 

959 if self.merge_windows is False: 

960 try: 

961 

962 if len(self.thermal_zone.windows) > 0: 

963 self.r1_win = 1 / sum( 

964 (1 / win.r1) for win in self.thermal_zone.windows 

965 ) 

966 if len(outer_walls) > 0: 

967 conduction = 1 / sum( 

968 (1 / element.r_conduc) for element in outer_walls 

969 ) 

970 

971 self.r_rest_ow = conduction - self.r1_ow 

972 

973 except RuntimeError: 

974 print( 

975 "As no outer walls or no windows are defined lumped " 

976 "parameter cannot be calculated" 

977 ) 

978 

979 if self.merge_windows is True: 

980 

981 try: 

982 if ( 

983 len(self.thermal_zone.windows) > 0 

984 and len(outer_walls) > 0 

985 ): 

986 self.r1_win = 1 / sum( 

987 1 / (win.r1 / 6) for win in self.thermal_zone.windows 

988 ) 

989 

990 self.r1_ow = 1 / (1 / self.r1_ow + 1 / self.r1_win) 

991 

992 self.r_total_ow = 1 / (self.ua_value_ow + self.ua_value_win) 

993 self.r_rest_ow = ( 

994 self.r_total_ow 

995 - self.r1_ow 

996 - 1 

997 / ( 

998 ( 

999 (1 / self.r_conv_inner_ow) 

1000 + (1 / self.r_conv_inner_win) 

1001 + (1 / self.r_rad_inner_ow) 

1002 + (1 / self.r_rad_inner_win) 

1003 ) 

1004 ) 

1005 ) - 1 / (self.alpha_comb_outer_ow * self.area_ow) 

1006 

1007 self.ir_emissivity_inner_ow = ( 

1008 self.ir_emissivity_inner_ow * self.area_ow 

1009 + self.ir_emissivity_inner_win * self.area_win 

1010 ) / (self.area_ow + self.area_win) 

1011 

1012 self.ir_emissivity_outer_ow = ( 

1013 self.ir_emissivity_outer_ow * self.area_ow 

1014 + self.ir_emissivity_win * self.area_win 

1015 ) / (self.area_ow + self.area_win) 

1016 

1017 self.solar_absorp_ow = ( 

1018 self.solar_absorp_ow * self.area_ow 

1019 + self.solar_absorp_win * self.area_win 

1020 ) / (self.area_ow + self.area_win) 

1021 

1022 except RuntimeError: 

1023 print( 

1024 "As no outer walls or no windows are defined lumped " 

1025 "parameter cannot be calculated" 

1026 ) 

1027 

1028 def _calc_ground_floor_elements(self): 

1029 """Lumped parameter for ground floor elements 

1030 

1031 Calculates all necessary parameters for ground floors. 

1032 

1033 Attributes 

1034 ---------- 

1035 omega : float [1/s] 

1036 angular frequency with given time period. 

1037 """ 

1038 

1039 omega = 2 * math.pi / 86400 / self.t_bt 

1040 

1041 if 0 < len(self.thermal_zone.ground_floors) <= 1: 

1042 # only one outer wall, no need to calculate chain matrix 

1043 self.r1_gf = self.thermal_zone.ground_floors[0].r1 

1044 self.c1_gf = self.thermal_zone.ground_floors[0].c1_korr 

1045 elif len(self.thermal_zone.ground_floors) > 1: 

1046 # more than one outer wall, calculate chain matrix 

1047 self.r1_gf, self.c1_gf = self._calc_parallel_connection( 

1048 self.thermal_zone.ground_floors, omega, mode='ow' 

1049 ) 

1050 try: 

1051 conduction = 1 / sum( 

1052 (1 / element.r_conduc) for element in self.thermal_zone.ground_floors 

1053 ) 

1054 

1055 self.r_rest_gf = conduction - self.r1_gf 

1056 except RuntimeError: 

1057 print( 

1058 "As no ground floors are defined lumped " 

1059 "parameter cannot be calculated" 

1060 ) 

1061 

1062 def _calc_inner_elements(self): 

1063 """Lumped parameter for outer wall elements 

1064 

1065 Calculates all necessary parameters for inner walls. This includes 

1066 InnerWalls, Ceilings and Floors. 

1067 

1068 Attributes 

1069 ---------- 

1070 omega : float [1/s] 

1071 angular frequency with given time period. 

1072 outer_walls : list 

1073 List containing all TEASER Wall instances that are treated as same 

1074 outer wall type. In case of TwoElement model OuterWalls, 

1075 GroundFloors, Rooftops 

1076 """ 

1077 

1078 omega = 2 * math.pi / 86400 / self.t_bt 

1079 

1080 inner_walls = ( 

1081 self.thermal_zone.inner_walls 

1082 + self.thermal_zone.floors 

1083 + self.thermal_zone.ceilings 

1084 + self.nzbs_for_iw 

1085 ) 

1086 

1087 for in_wall in inner_walls: 

1088 in_wall.calc_equivalent_res() 

1089 in_wall.calc_ua_value() 

1090 

1091 if 0 < len(inner_walls) <= 1: 

1092 # only one outer wall, no need to calculate chain matrix 

1093 self.r1_iw = inner_walls[0].r1 

1094 self.c1_iw = inner_walls[0].c1_korr 

1095 elif len(inner_walls) > 1: 

1096 # more than one outer wall, calculate chain matrix 

1097 self.r1_iw, self.c1_iw = self._calc_parallel_connection( 

1098 inner_walls, omega, mode='iw' 

1099 ) 

1100 

1101 def _calc_wf(self): 

1102 """Weightfactors for outer elements(walls, roof, ground floor, windows) 

1103 

1104 Calculates the weightfactors of the outer walls, including ground and 

1105 windows. 

1106 

1107 Parameters 

1108 ---------- 

1109 outer_walls : list 

1110 List containing all TEASER Wall instances that are treated as same 

1111 outer wall type. In case of TwoElement model OuterWalls, 

1112 GroundFloors, Rooftops 

1113 """ 

1114 

1115 outer_walls = ( 

1116 self.thermal_zone.outer_walls 

1117 + self.thermal_zone.rooftops 

1118 + self.thermal_zone.find_izes_outer() 

1119 ) 

1120 self.weightfactor_ground = 0.0 

1121 

1122 if self.merge_windows is True: 

1123 

1124 for wall in outer_walls: 

1125 wall.wf_out = wall.ua_value / (self.ua_value_ow + self.ua_value_win) 

1126 

1127 for win in self.thermal_zone.windows: 

1128 win.wf_out = win.ua_value / (self.ua_value_ow + self.ua_value_win) 

1129 

1130 elif self.merge_windows is False: 

1131 

1132 for wall in outer_walls: 

1133 wall.wf_out = wall.ua_value / self.ua_value_ow 

1134 

1135 for win in self.thermal_zone.windows: 

1136 win.wf_out = win.ua_value / self.ua_value_win 

1137 

1138 else: 

1139 raise ValueError("specify merge window method correctly") 

1140 

1141 def _calc_mean_values(self): 

1142 """Calculates mean values for inner and outer elements 

1143 

1144 This function calculates mean values inside the thermal zone (e.g. 

1145 the mean value for coefficient of radiative heat transfer between 

1146 inner and outer walls 

1147 """ 

1148 

1149 self.alpha_rad_inner_mean = ( 

1150 self.area_ow * self.alpha_rad_inner_ow 

1151 + self.area_win * self.alpha_rad_inner_win 

1152 + self.area_gf * self.alpha_rad_inner_gf 

1153 + self.area_iw * self.alpha_rad_inner_iw 

1154 ) / (self.area_ow + self.area_win + self.area_iw + self.area_gf) 

1155 self.alpha_rad_outer_mean = ( 

1156 self.area_ow * self.alpha_rad_outer_ow 

1157 + self.area_win * self.alpha_rad_outer_win 

1158 ) / (self.area_ow + self.area_win) 

1159 

1160 def _calc_number_of_elements(self): 

1161 """Calculates the number of facade elements with different tilt/orient 

1162 

1163 This function calculates the number of outer elements with a 

1164 different combination of orientation and tilt, this includes the 

1165 rooftops and borders to unheated neighboured zones if 

1166 this zone is heated. 

1167 """ 

1168 

1169 outer_elements = ( 

1170 self.thermal_zone.outer_walls 

1171 + self.thermal_zone.find_izes_outer() 

1172 + self.thermal_zone.rooftops 

1173 + self.thermal_zone.windows 

1174 ) 

1175 

1176 tilt_orient = [] 

1177 for element in outer_elements: 

1178 tilt_orient.append((element.orientation, element.tilt)) 

1179 self.n_outer = len(list(set(tilt_orient))) 

1180 

1181 def _fill_zone_lists(self): 

1182 """Fills lists like weightfactors and tilt, orientation 

1183 

1184 Fills the lists of a zone according to orientation and tilt of the 

1185 zone. Therefore it compares orientation and tilt of all outer 

1186 elements and then creates lists for zone weightfactors, orientation, 

1187 tilt, ares and sunblinds.""" 

1188 

1189 outer_elements = ( 

1190 self.thermal_zone.outer_walls 

1191 + self.thermal_zone.find_izes_outer() 

1192 + self.thermal_zone.rooftops 

1193 + self.thermal_zone.windows 

1194 ) 

1195 

1196 tilt_orient = [] 

1197 for element in outer_elements: 

1198 tilt_orient.append((element.orientation, element.tilt)) 

1199 tilt_orient = list(set(tilt_orient)) 

1200 

1201 for i in tilt_orient: 

1202 wall_rt_nzb = self.thermal_zone.find_walls( 

1203 i[0], i[1] 

1204 ) + self.thermal_zone.find_rts( 

1205 i[0], i[1] 

1206 ) + self.thermal_zone.find_izes_outer( 

1207 i[0], i[1] 

1208 ) 

1209 wins = self.thermal_zone.find_wins(i[0], i[1]) 

1210 

1211 if self.merge_windows is True: 

1212 self.facade_areas.append( 

1213 sum([element.area for element in (wall_rt_nzb + wins)]) 

1214 ) 

1215 else: 

1216 self.facade_areas.append(sum([element.area 

1217 for element in (wall_rt_nzb)])) 

1218 

1219 self.orientation_facade.append(i[0]) 

1220 self.tilt_facade.append(i[1]) 

1221 

1222 if not wall_rt_nzb: 

1223 self.weightfactor_ow.append(0.0) 

1224 self.outer_wall_areas.append(0.0) 

1225 else: 

1226 self.weightfactor_ow.append(sum([wall.wf_out 

1227 for wall in wall_rt_nzb])) 

1228 self.outer_wall_areas.append(sum([wall.area 

1229 for wall in wall_rt_nzb])) 

1230 

1231 if not wins: 

1232 self.weightfactor_win.append(0.0) 

1233 self.shading_g_total.append(1.0) 

1234 self.window_areas.append(0.0) 

1235 self.transparent_areas.append(0.0) 

1236 self.shading_max_irr.append(9999.9) 

1237 else: 

1238 self.weightfactor_win.append(sum([win.wf_out for win in wins])) 

1239 

1240 if self.merge_windows is False: 

1241 self.window_areas.append(sum([win.area for win in wins])) 

1242 self.transparent_areas.append(sum([win.area for win in wins])) 

1243 

1244 else: 

1245 self.window_areas.append(0) 

1246 self.transparent_areas.append(sum([win.area for win in wins])) 

1247 self.shading_g_total.append( 

1248 sum( 

1249 [ 

1250 win.shading_g_total * win.area / sum([w.area for w in wins]) 

1251 for win in wins 

1252 ] 

1253 ) 

1254 ) 

1255 self.shading_max_irr.append( 

1256 sum( 

1257 [ 

1258 win.shading_max_irr * win.area / sum([w.area for w in wins]) 

1259 for win in wins 

1260 ] 

1261 ) 

1262 ) 

1263 

1264 def _calc_heat_load(self): 

1265 """Static heat load calculation 

1266 

1267 This function calculates the static heat load of the thermal zone by 

1268 multiplying the UA-Value of the elements with the given Temperature 

1269 difference of t_inside and t_outside. And takes heat losses through 

1270 infiltration into account. 

1271 

1272 Keep in mind that this is a rough approximation of the DIN Heat Demand 

1273 

1274 Attributes 

1275 ---------- 

1276 ua_value_ow_temp : float [W/(m2*K)] 

1277 UA Value without GroundFloors 

1278 ua_value_gf_temp : float [W/(m2*K)] 

1279 UA Value of all GroundFloors 

1280 """ 

1281 if self.thermal_zone.use_conditions.base_infiltration > 0.5: 

1282 warnings.warn("The base_infiltration is larger than 0.5, " 

1283 "which could lead to ideal heaters being too small.") 

1284 

1285 self.heat_load = 0.0 

1286 

1287 if self.thermal_zone.parent.parent.t_soil_mode == 2: 

1288 t_ground = self.thermal_zone.t_ground \ 

1289 - self.thermal_zone.t_ground_amplitude 

1290 else: 

1291 t_ground = self.thermal_zone.t_ground 

1292 

1293 ua_value_ow_temp = self.ua_value_ow 

1294 self.heat_load_outside_factor = ( 

1295 (ua_value_ow_temp + self.ua_value_win) 

1296 + self.thermal_zone.volume 

1297 * self.thermal_zone.use_conditions.normative_infiltration 

1298 * 1 

1299 / 3600 

1300 * self.thermal_zone.heat_capac_air 

1301 * self.thermal_zone.density_air 

1302 ) 

1303 self.heat_load_ground_factor = self.ua_value_gf 

1304 self.heat_load = \ 

1305 self.heat_load_outside_factor \ 

1306 * (self.thermal_zone.t_inside - self.thermal_zone.t_outside) \ 

1307 + self.heat_load_ground_factor \ 

1308 * (self.thermal_zone.t_inside - t_ground) 

1309 

1310 def set_calc_default(self): 

1311 """sets default calculation parameters 

1312 """ 

1313 

1314 # Attributes of inner walls 

1315 self.area_iw = 0.0 

1316 

1317 # coefficient of heat transfer facing the inside of this thermal zone 

1318 self.alpha_conv_inner_iw = 0.0 

1319 self.alpha_rad_inner_iw = 0.0 

1320 self.alpha_comb_inner_iw = 0.0 

1321 # coefficient of heat transfer facing the adjacent thermal zone 

1322 self.alpha_conv_outer_iw = 0.0 

1323 self.alpha_rad_outer_iw = 0.0 

1324 self.alpha_comb_outer_iw = 0.0 

1325 

1326 # UA-Value 

1327 self.ua_value_iw = 0.0 

1328 

1329 # resistances for heat transfer facing the inside of this thermal zone 

1330 self.r_conv_inner_iw = 0.0 

1331 self.r_rad_inner_iw = 0.0 

1332 self.r_comb_inner_iw = 0.0 

1333 self.r_conv_outer_iw = 0.0 

1334 self.r_rad_outer_iw = 0.0 

1335 self.r_comb_outer_iw = 0.0 

1336 

1337 # lumped resistance/capacity 

1338 self.r1_iw = 0.0 

1339 self.c1_iw = 0.0 

1340 

1341 # Attributes for outer walls (OuterWall, Rooftop) 

1342 self.area_ow = 0.0 

1343 

1344 # coefficient of heat transfer facing the inside of this thermal zone 

1345 self.alpha_conv_inner_ow = 0.0 

1346 self.alpha_rad_inner_ow = 0.0 

1347 self.alpha_comb_inner_ow = 0.0 

1348 

1349 # coefficient of heat transfer facing the ambient 

1350 self.alpha_conv_outer_ow = 0.0 

1351 self.alpha_rad_outer_ow = 0.0 

1352 self.alpha_comb_outer_ow = 0.0 

1353 

1354 # UA-Value 

1355 self.ua_value_ow = 0.0 

1356 

1357 # resistances for heat transfer facing the inside of this thermal zone 

1358 self.r_conv_inner_ow = 0.0 

1359 self.r_rad_inner_ow = 0.0 

1360 self.r_comb_inner_ow = 0.0 

1361 

1362 # resistances for heat transfer facing the ambient 

1363 self.r_conv_outer_ow = 0.0 

1364 self.r_rad_outer_ow = 0.0 

1365 self.r_comb_outer_ow = 0.0 

1366 

1367 # lumped resistances/capacity 

1368 self.r1_ow = 0.0 

1369 self.r_rest_ow = 0.0 

1370 self.c1_ow = 0.0 

1371 self.r_total_ow = 0.0 

1372 

1373 # Optical properties 

1374 self.ir_emissivity_outer_ow = 0.0 

1375 self.ir_emissivity_inner_ow = 0.0 

1376 self.solar_absorp_ow = 0.0 

1377 

1378 # Additional attributes 

1379 self.weightfactor_ow = [] 

1380 self.weightfactor_ground = 0.0 

1381 self.outer_wall_areas = [] 

1382 

1383 # Attributes for outer walls (OuterWall, Rooftop, GroundFloor) 

1384 self.area_gf = 0.0 

1385 

1386 # coefficient of heat transfer facing the inside of this thermal zone 

1387 self.alpha_conv_inner_gf = 0.0 

1388 self.alpha_rad_inner_gf = 0.0 

1389 self.alpha_comb_inner_gf = 0.0 

1390 

1391 # UA-Value 

1392 self.ua_value_gf = 0.0 

1393 

1394 # resistances for heat transfer facing the inside of this thermal zone 

1395 self.r_conv_inner_gf = 0.0 

1396 self.r_rad_inner_gf = 0.0 

1397 self.r_comb_inner_gf = 0.0 

1398 

1399 # lumped resistances/capacity 

1400 self.r1_gf = 0.0 

1401 self.r_rest_gf = 0.0 

1402 self.c1_gf = 0.0 

1403 self.r_total_gf = 0.0 

1404 

1405 # Optical properties 

1406 self.ir_emissivity_inner_gf = 0.0 

1407 

1408 # Additional attributes 

1409 

1410 self.weightfactor_ground = 0.0 

1411 

1412 # Attributes for windows 

1413 self.area_win = 0.0 

1414 

1415 # coefficient of heat transfer facing the inside of this thermal zone 

1416 self.alpha_conv_inner_win = 0.0 

1417 self.alpha_rad_inner_win = 0.0 

1418 self.alpha_comb_inner_win = 0.0 

1419 self.ratio_conv_rad_inner_win = 0.0 

1420 

1421 # coefficient of heat transfer facing the ambient 

1422 self.alpha_conv_outer_win = 0.0 

1423 self.alpha_rad_outer_win = 0.0 

1424 self.alpha_comb_outer_win = 0.0 

1425 

1426 # UA-Value 

1427 self.ua_value_win = 0.0 

1428 self.u_value_win = 0.0 

1429 

1430 # resistances for heat transfer facing the inside of this thermal zone 

1431 self.r_conv_inner_win = 0.0 

1432 self.r_rad_inner_win = 0.0 

1433 self.r_comb_inner_win = 0.0 

1434 

1435 # resistances for heat transfer facing the ambient 

1436 self.r_conv_outer_win = 0.0 

1437 self.r_rad_outer_win = 0.0 

1438 self.r_comb_outer_win = 0.0 

1439 

1440 # lumped resistances/capacity 

1441 self.r1_win = 0.0 

1442 

1443 # Optical properties 

1444 self.ir_emissivity_win = 0.0 

1445 self.solar_absorp_win = 0.0 

1446 

1447 # Additional attributes 

1448 self.weightfactor_win = [] 

1449 self.window_areas = [] 

1450 self.transparent_areas = [] 

1451 self.shading_g_total = [] 

1452 self.shading_max_irr = [] 

1453 self.weighted_g_value = 0.0 

1454 

1455 # Misc values 

1456 

1457 self.alpha_rad_inner_mean = 0.0 

1458 self.n_outer = 0 

1459 self.facade_areas = [] 

1460 self.tilt_facade = [] 

1461 self.orientation_facade = [] 

1462 self.heat_load = 0.0 

1463 self.cool_load = 0.0 

1464 

1465 @property 

1466 def nzbs_for_iw(self): 

1467 """returns borders to neighboured zones to be considered as inner walls 

1468 

1469 Returns 

1470 ------- 

1471 value : list 

1472 list of those interzonal elements that are NOT to be treated as 

1473 'outer_ordered' depending on their 'interzonal_type_export' 

1474 attribute 

1475 

1476 """ 

1477 elements = [] 

1478 for i in self.thermal_zone.interzonal_elements: 

1479 if not i.interzonal_type_export == 'outer_ordered': 

1480 elements.append(i) 

1481 else: 

1482 pass 

1483 return elements