Coverage for teaser/logic/buildingobjects/calculation/two_element.py: 98%
385 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 December 2016
3from __future__ import division
4import math
5import random
6import warnings
9class TwoElement(object):
10 """This class contains attributes and functions for two element model
12 This model distinguishes between internal thermal masses and exterior walls.
13 While exterior walls contribute to heat transfer to the ambient, adiabatic
14 conditions apply to interior walls. This approach allows considering the
15 dynamic behaviour induced by internal heat storage. This class calculates
16 and holds all attributes given in documentation.
18 It treats Rooftops, GroundFloors and OuterWalls as one type of outer
19 walls and computes one RC-combination for these types.
21 Depending on the chosen method it will consider an extra resistance for
22 windows or merge all windows into the RC-Combination for outer walls.
24 Parameters
25 ----------
26 thermal_zone: ThermalZone()
27 TEASER instance of ThermalZone
28 merge_windows : boolean
29 True for merging the windows into the outer wall's RC-combination,
30 False for separate resistance for window, default is False. (Only
31 supported for IBPSA)
32 t_bt : float [d]
33 Time constant according to VDI 6007 (default t_bt = 5)
34 t_bt_layer : float [d]
35 Time constant according to VDI 6007 for aggragation of layers (default t_bt = 7)
37 Attributes
38 ----------
39 Interior Walls
41 area_iw : float [m2]
42 Area of all interior walls.
43 alpha_conv_inner_iw : float [W/(m2K)]
44 Area-weighted convective coefficient of heat transfer of interior
45 walls facing the inside of this thermal zone.
46 alpha_rad_inner_iw : float [W/(m2K)]
47 Area-weighted radiative coefficient of heat transfer of interior
48 walls facing the inside of this thermal zone.
49 alpha_comb_inner_iw : float [W/(m2K)]
50 Area-weighted combined coefficient of heat transfer of interior walls
51 facing the inside of this thermal zone.
52 alpha_conv_outer_iw : float [W/(m2K)]
53 Area-weighted convective coefficient of heat transfer of interior
54 walls facing the adjacent thermal zone. (Currently not supported)
55 alpha_rad_outer_iw : float [W/(m2K)]
56 Area-weighted radiative coefficient of heat transfer of interior
57 walls facing the adjacent thermal zone. (Currently not supported)
58 alpha_comb_outer_iw : float [W/(m2K)]
59 Area-weighted combined coefficient of heat transfer of interior walls
60 facing the adjacent thermal zone. (Currently not supported)
61 ua_value_iw : float [W/K]
62 U-Value times interior wall area. (Does not take adjacent thermal
63 zones into account)
64 r_conv_inner_iw : float [K/W]
65 Sum of convective resistances for all interior walls
66 facing the inside of this thermal zone.
67 r_rad_inner_iw : float [K/W]
68 Sum of radiative resistances for all interior walls facing the
69 inside of this thermal zone
70 r_comb_inner_iw : float [K/W]
71 Sum of combined resistances for all interior walls facing the
72 inside of this thermal zone
73 r1_iw : float [K/W]
74 Lumped resistance of interior walls no heat transfer coefficients for
75 convection and radiation are accounted in this resistance.
76 c1_iw : float [J/K]
77 Lumped capacity of interior walls
79 Outer Walls (OuterWall, Rooftop, GroundFloor)
81 area_ow : float [m2]
82 Area of all outer walls.
83 n_outer : int
84 Number of total outer walls with different combination of tilt and
85 orientation, including Rooftops and GroundFloors
86 alpha_conv_inner_ow : float [W/(m2K)]
87 Area-weighted convective coefficient of heat transfer of outer walls
88 facing the inside of this thermal zone.
89 alpha_rad_inner_ow : float [W/(m2K)]
90 Area-weighted radiative coefficient of heat transfer of outer walls
91 facing the inside of this thermal zone.
92 alpha_comb_inner_ow : float [W/(m2K)]
93 Area-weighted combined coefficient of heat transfer of outer walls
94 facing the inside of this thermal zone.
95 alpha_conv_outer_ow : float [W/(m2K)]
96 Area-weighted convective coefficient of heat transfer of outer walls
97 facing the ambient.
98 alpha_rad_outer_ow : float [W/(m2K)]
99 Area-weighted radiative coefficient of heat transfer of outer walls
100 facing the ambient.
101 alpha_comb_outer_ow : float [W/(m2K)]
102 Area-weighted combined coefficient of heat transfer of outer walls
103 facing the ambient.
104 ua_value_ow : float [W/K]
105 U-Value times outer wall area.
106 r_conv_inner_ow : float [K/W]
107 Sum of convective resistances for all outer walls facing the
108 inside of this thermal zone.
109 r_rad_inner_ow : float [K/W]
110 Sum of radiative resistances for all outer walls facing the
111 inside of this thermal zone.
112 r_comb_inner_ow : float [K/W]
113 Sum of combined resistances for all outer walls facing the
114 inside of this thermal zone.
115 r_conv_outer_ow : float [K/W]
116 Sum of convective resistances for all outer walls facing the
117 ambient.
118 r_rad_outer_ow : float [K/W]
119 Sum of radiative resistances for all outer walls facing the
120 ambient.
121 r_comb_outer_ow : float [K/W]
122 Sum of combined resistances for all outer walls facing the
123 ambient.
124 r1_ow : float [K/W]
125 Lumped resistance of outer walls no heat transfer coefficients for
126 convection and radiation are accounted in this resistance.
127 r_rest_ow : float [K/W]
128 Lumped remaining resistance of outer walls between r1_ow and c1_ow no
129 heat transfer coefficients for convection and radiation are accounted
130 in this resistance.
131 c1_ow : float [J/K]
132 Lumped capacity of outer walls.
133 weightfactor_ow : list of floats
134 Weightfactors of outer walls (UA-Value of walls with same orientation
135 and tilt divided by ua_value_ow)
136 weightfactor_ground : list of floats
137 Weightfactors of groundfloors (UA-Value of groundfloor divided by
138 ua_value_ow).
139 tilt_facade : list of floats [degree]
140 Tilt of outer walls against the horizontal.
141 orientation_facade : list of floats [degree]
142 Orientation of outer walls (Azimuth).
143 0 - North
144 90 - East
145 180 - South
146 270 - West
147 outer_wall_areas : list of floats [m2]
148 Area of all outer walls in one list.
149 ir_emissivity_outer_ow : float
150 Area-weighted ir emissivity of outer wall facing the ambient.
151 ir_emissivity_inner_ow : float
152 Area-weighted ir emissivity of outer walls facing the thermal zone.
153 solar_absorp_ow : float
154 Area-weighted solar absorption of outer walls facing the ambient.
156 Windows
158 area_win : float [m2]
159 Area of all windows.
160 alpha_conv_inner_win : float [W/(m2K)]
161 Area-weighted convective coefficient of heat transfer of windows
162 facing the inside of this thermal zone.
163 alpha_rad_inner_win : float [W/(m2K)]
164 Area-weighted radiative coefficient of heat transfer of windows
165 facing the inside of this thermal zone.
166 alpha_comb_inner_win : float [W/(m2K)]
167 Area-weighted combined coefficient of heat transfer of windows facing
168 the inside of this thermal zone.
169 ratio_conv_rad_inner_win : float [-]
170 Ratio for windows between convective and radiative heat emission,
171 given in VDI 6007-3
172 alpha_conv_outer_win : float [W/(m2K)]
173 Area-weighted convective coefficient of heat transfer of windows
174 facing the ambient.
175 alpha_rad_outer_win : float [W/(m2K)]
176 Area-weighted radiative coefficient of heat transfer of windows
177 facing the ambient.
178 alpha_comb_outer_win : float [W/(m2K)]
179 Area-weighted combined coefficient of heat transfer of windows facing
180 the ambient.
181 ua_value_win : float [W/K]
182 U-Value times window wall area.
183 u_value_win : float [W/(m2K)]
184 Area weighted U-Value of windows.
185 r_conv_inner_win : float [K/W]
186 Sum of convective resistances for all windows facing the
187 inside of this thermal zone.
188 r_rad_inner_win : float [K/W]
189 Sum of radiative resistances for all windows facing the
190 inside of this thermal zone.
191 r_comb_inner_win : float [K/W]
192 Sum of combined resistances for all windows facing the
193 inside of this thermal zone.
194 r_conv_outer_win : float [K/W]
195 Sum of convective resistances for all windows facing the
196 ambient.
197 r_rad_outer_win : float [K/W]
198 Sum of radiative resistances for all windows facing the
199 ambient.
200 r_comb_outer_win : float [K/W]
201 Sum of combined resistances for all windows facing the
202 ambient.
203 r1_win : float [K/W]
204 Lumped resistance of windows, no heat transfer coefficients for
205 convection and radiation are accounted in this resistance.
206 weightfactor_win : list of floats
207 Weightfactors of windows (UA-Value of windows with same orientation
208 and tilt divided by ua_value_win or ua_value_win+ua_value_ow,
209 depending if windows is lumped/merged into the walls or not)
210 window_areas : list of floats [m2]
211 Area of all windows in one list, if the windows are merged into the
212 outer wall this list will be full of zeros
213 transparent_areas : list of floats [m2]
214 Area of all transparent elements (most likely windows) in one list,
215 this list will be always filled with the areas, independent if
216 windows are merged into walls or not.
217 solar_absorp_win : float
218 Area-weighted solar absorption for windows. (typically 0.0)
219 ir_emissivity_win : float
220 Area-weighted ir_emissivity for windows. Can be used for windows
221 facing the thermal zone and the ambient.
222 weighted_g_value : float
223 Area-weighted g-Value of all windows.
224 shading_max_irr : list of float [W/m2]
225 Threshold value above which the sunblind becomes active for the whole zone.
226 Threshold regards to the incoming irradiation level with the window direction.
227 This value does not account for heat flux due to the outside temperature.
228 shading_g_total : list of float
229 Factor representing how much of the actual solar irradiation goes through
230 the sunblind and enters the window element, for the case, that the sunblind is
231 activated. Defaults to 1, i.e. no shading is active.
233 Misc values:
235 alpha_rad_inner_mean : float [W/(m2K)]
236 Area-weighted radiative coefficient of all surfaces facing the
237 inside of this thermal zone (OuterWalls, Windows, InnerWalls, ...).
238 alpha_rad_outer_mean : float [W/(m2K)]
239 Area-weighted radiative coefficient of all surfaces facing the
240 ambient (OuterWalls, Windows, ...).
241 heat_load : [W]
242 Static heat load of the thermal zone.
243 heat_load_outside_factor : float [W/K]
244 Factor needed for recalculation of the heat load of the thermal zone.
245 This can be used to recalculate the thermalzones heat load inside
246 Modelica export for parametric studies. This works only together with
247 heat_load_ground_factor.
249 heat_load = heat_load_outside_factor * (t_inside - t_outside) +
250 heat_load_ground_factor * (t_inside - t_ground).
251 heat_load_ground_factor : float [W/K]
252 Factor needed for recalculation of the heat load of the thermal zone.
253 This can be used to recalculate the thermalzones heat load inside
254 Modelica export for parametric studies. See heat_load_outside_factor.
255 facade_areas : list of floats [m2]
256 List containing the area of each facade (with same tilt and
257 orientation) this includes also roofs and ground floors and windows.
258 n_outer : int
259 Number of total facades with different combination of tilt and
260 orientation, including Rooftops and GroundFloors
261 tilt_facade : list of floats [degree]
262 Tilt of facades against the horizontal.
263 orientation_facade : list of floats [degree]
264 Orientation of facades (Azimuth).
265 0 - North
266 90 - East
267 180 - South
268 270 - West
270 """
272 def __init__(self, thermal_zone, merge_windows, t_bt, t_bt_layer=7):
273 """Constructor for TwoElement"""
275 self.internal_id = random.random()
277 self.thermal_zone = thermal_zone
278 self.merge_windows = merge_windows
279 self.t_bt = t_bt
280 self.t_bt_layer = t_bt_layer
282 # Attributes of inner walls
283 self.area_iw = 0.0
285 # coefficient of heat transfer facing the inside of this thermal zone
286 self.alpha_conv_inner_iw = 0.0
287 self.alpha_rad_inner_iw = 0.0
288 self.alpha_comb_inner_iw = 0.0
289 # coefficient of heat transfer facing the adjacent thermal zone
290 self.alpha_conv_outer_iw = 0.0
291 self.alpha_rad_outer_iw = 0.0
292 self.alpha_comb_outer_iw = 0.0
294 # UA-Value
295 self.ua_value_iw = 0.0
297 # resistances for heat transfer facing the inside of this thermal zone
298 self.r_conv_inner_iw = 0.0
299 self.r_rad_inner_iw = 0.0
300 self.r_comb_inner_iw = 0.0
301 self.r_conv_outer_iw = 0.0
302 self.r_rad_outer_iw = 0.0
303 self.r_comb_outer_iw = 0.0
305 # lumped resistance/capacity
306 self.r1_iw = 0.0
307 self.c1_iw = 0.0
309 # Attributes for outer walls (OuterWall, Rooftop, GroundFloor)
310 self.area_ow = 0.0
312 # coefficient of heat transfer facing the inside of this thermal zone
313 self.alpha_conv_inner_ow = 0.0
314 self.alpha_rad_inner_ow = 0.0
315 self.alpha_comb_inner_ow = 0.0
317 # coefficient of heat transfer facing the ambient
318 self.alpha_conv_outer_ow = 0.0
319 self.alpha_rad_outer_ow = 0.0
320 self.alpha_comb_outer_ow = 0.0
322 # UA-Value
323 self.ua_value_ow = 0.0
325 # resistances for heat transfer facing the inside of this thermal zone
326 self.r_conv_inner_ow = 0.0
327 self.r_rad_inner_ow = 0.0
328 self.r_comb_inner_ow = 0.0
330 # resistances for heat transfer facing the ambient
331 self.r_conv_outer_ow = 0.0
332 self.r_rad_outer_ow = 0.0
333 self.r_comb_outer_ow = 0.0
335 # lumped resistances/capacity
336 self.r1_ow = 0.0
337 self.r_rest_ow = 0.0
338 self.c1_ow = 0.0
339 self.r_total_ow = 0.0
341 # Optical properties
342 self.ir_emissivity_outer_ow = 0.0
343 self.ir_emissivity_inner_ow = 0.0
344 self.solar_absorp_ow = 0.0
346 # Additional attributes
347 self.weightfactor_ow = []
348 self.weightfactor_ground = 0.0
349 self.outer_wall_areas = []
351 # Attributes for windows
352 self.area_win = 0.0
354 # coefficient of heat transfer facing the inside of this thermal zone
355 self.alpha_conv_inner_win = 0.0
356 self.alpha_rad_inner_win = 0.0
357 self.alpha_comb_inner_win = 0.0
358 self.ratio_conv_rad_inner_win = 0.0
360 # coefficient of heat transfer facing the ambient
361 self.alpha_conv_outer_win = 0.0
362 self.alpha_rad_outer_win = 0.0
363 self.alpha_comb_outer_win = 0.0
365 # UA-Value
366 self.ua_value_win = 0.0
367 self.u_value_win = 0.0
369 # resistances for heat transfer facing the inside of this thermal zone
370 self.r_conv_inner_win = 0.0
371 self.r_rad_inner_win = 0.0
372 self.r_comb_inner_win = 0.0
374 # resistances for heat transfer facing the ambient
375 self.r_conv_outer_win = 0.0
376 self.r_rad_outer_win = 0.0
377 self.r_comb_outer_win = 0.0
379 # lumped resistances/capacity
380 self.r1_win = 0.0
382 # Optical properties
383 self.ir_emissivity_win = 0.0
384 self.ir_emissivity_inner_win = 0.0
385 self.solar_absorp_win = 0.0
387 # Additional attributes
388 self.weightfactor_win = []
389 self.window_areas = []
390 self.transparent_areas = []
391 self.shading_g_total = []
392 self.shading_max_irr = []
393 self.weighted_g_value = 0.0
395 # Misc values
397 self.alpha_rad_inner_mean = 0.0
398 self.alpha_rad_outer_mean = 0.0
399 self.n_outer = 0
400 self.facade_areas = []
401 self.tilt_facade = []
402 self.orientation_facade = []
403 self.heat_load = 0.0
404 self.cool_load = 0.0
405 self.heat_load_outside_factor = 0.0
406 self.heat_load_ground_factor = 0.0
408 def calc_attributes(self):
409 """Calls all necessary function to calculate model attributes"""
410 outer_walls = (
411 self.thermal_zone.outer_walls
412 + self.thermal_zone.ground_floors
413 + self.thermal_zone.rooftops
414 + self.thermal_zone.find_izes_outer()
415 )
417 for out_wall in outer_walls:
418 out_wall.calc_equivalent_res(t_bt=self.t_bt_layer)
419 out_wall.calc_ua_value()
420 for win in self.thermal_zone.windows:
421 win.calc_equivalent_res()
422 win.calc_ua_value()
423 for inner_wall in (
424 self.thermal_zone.inner_walls
425 + self.thermal_zone.floors
426 + self.thermal_zone.ceilings
427 + self.nzbs_for_iw
428 ):
429 inner_wall.calc_equivalent_res(t_bt=self.t_bt_layer)
430 inner_wall.calc_ua_value()
432 self.set_calc_default()
433 if len(outer_walls) < 1:
434 warnings.warn(
435 "No walls are defined as outer walls for thermal "
436 "zone "
437 + str(self.thermal_zone.name)
438 + " in building "
439 + str(self.thermal_zone.parent.name)
440 + ", please be careful with results. In addition "
441 + "this might lead to RunTimeErrors"
442 )
443 else:
444 self._sum_outer_wall_elements()
445 if (
446 len(
447 self.thermal_zone.inner_walls
448 + self.thermal_zone.floors
449 + self.thermal_zone.ceilings
450 + self.nzbs_for_iw
451 )
452 < 1
453 ):
454 warnings.warn(
455 "For thermal zone "
456 + self.thermal_zone.name
457 + " in building "
458 + self.thermal_zone.parent.name
459 + ", no inner walls have been defined."
460 )
461 else:
462 self._sum_inner_wall_elements()
463 self._calc_inner_elements()
464 if len(self.thermal_zone.windows) < 1:
465 warnings.warn(
466 "For thermal zone "
467 + self.thermal_zone.name
468 + " in building "
469 + self.thermal_zone.parent.name
470 + ", no windows have been defined."
471 )
472 else:
473 self._sum_window_elements()
474 if len(outer_walls) >= 1 or len(self.thermal_zone.windows) >= 1:
475 self._calc_outer_elements()
476 self._calc_wf()
477 self._calc_mean_values()
478 if len(self.thermal_zone.interzonal_elements) >= 1:
479 warnings.warn(
480 "For thermal zone "
481 + self.thermal_zone.name
482 + " in building "
483 + self.thermal_zone.parent.name
484 + ", interzonal elements have been defined. TwoElement export "
485 + "will treat them as outer walls or inner walls depending on "
486 + "the project parameter 'method_interzonal_export'. Consider "
487 + "using FiveElement instead."
488 )
489 self._calc_number_of_elements()
490 self._fill_zone_lists()
491 self._calc_heat_load()
492 self.cool_load = -self.heat_load
494 return True
496 @staticmethod
497 def _calc_parallel_connection(element_list, omega, mode='iw'):
498 """Parallel connection of walls according to VDI 6007
500 Calculates the parallel connection of wall elements according to VDI
501 6007, resulting in R1 and C1 (equation 23, 24).
503 Parameters
504 ----------
505 element_list : list
506 List of inner or outer walls
507 omega : float
508 VDI 6007 frequency
509 mode : str
510 'ow' uses r1 and c1_korr
511 'iw' uses r1 and c1 (function falls back here for other strings)
513 Returns
514 -------
515 r1 : float [K/W]
516 VDI 6007 resistance for all inner or outer walls
517 c1 : float [K/W]
518 VDI 6007 capacity all for inner or outer walls
519 """
521 for wall_count in range(len(element_list) - 1):
523 if wall_count == 0:
524 r1_before = element_list[wall_count].r1
525 if mode == 'ow':
526 c1_before = element_list[wall_count].c1_korr
527 else:
528 c1_before = element_list[wall_count].c1
529 else:
530 r1_before = r1
531 c1_before = c1
532 r1_add = element_list[wall_count + 1].r1
533 if mode == 'ow':
534 c1_add = element_list[wall_count + 1].c1_korr
535 else:
536 c1_add = element_list[wall_count + 1].c1
538 r1 = (
539 r1_before * c1_before ** 2 + r1_add * c1_add ** 2
540 + omega ** 2 * r1_before * r1_add * (r1_before + r1_add)
541 * c1_before ** 2 * c1_add ** 2
542 ) / (
543 (c1_before + c1_add) ** 2
544 + omega ** 2 * (r1_before + r1_add) ** 2 * c1_before ** 2
545 * c1_add ** 2
546 )
548 c1 = (
549 (c1_before + c1_add) ** 2
550 + omega ** 2 * (r1_before + r1_add) ** 2 * c1_before ** 2
551 * c1_add ** 2
552 ) / (
553 c1_before + c1_add
554 + omega ** 2
555 * (r1_before ** 2 * c1_before + r1_add ** 2 * c1_add)
556 * c1_before * c1_add
557 )
559 return r1, c1
561 def _sum_outer_wall_elements(self):
562 """Sum attributes for outer wall elements
564 This function sums and computes the area-weighted values,
565 where necessary (the class doc string) for coefficients of heat
566 transfer, resistances, areas and UA-Values.
568 For TwoElement model it treats rooftops, ground floor, outer walls
569 and zone borders to neighboured zones (if this zone is heated)
570 as one kind of wall type.
572 """
573 # treat all outer wall types identical
575 outer_walls = (
576 self.thermal_zone.outer_walls
577 + self.thermal_zone.ground_floors
578 + self.thermal_zone.rooftops
579 + self.thermal_zone.find_izes_outer()
580 )
582 self.area_ow = (
583 sum(out_wall.area for out_wall in outer_walls)
584 )
586 self.ua_value_ow = (
587 sum(out_wall.ua_value for out_wall in outer_walls)
588 )
590 self.r_total_ow = 1 / self.ua_value_ow
592 # values facing the inside of the thermal zone
594 self.r_conv_inner_ow = 1 / (
595 sum(1 / out_wall.r_inner_conv for out_wall in outer_walls)
596 )
598 self.r_rad_inner_ow = 1 / (
599 sum(1 / out_wall.r_inner_rad for out_wall in outer_walls)
600 )
602 self.r_comb_inner_ow = 1 / (
603 sum(1 / out_wall.r_inner_comb for out_wall in outer_walls)
604 )
606 self.ir_emissivity_inner_ow = (
607 sum(
608 out_wall.layer[0].material.ir_emissivity * out_wall.area
609 for out_wall in outer_walls
610 )
611 ) / self.area_ow
613 self.alpha_conv_inner_ow = 1 / (self.r_conv_inner_ow * self.area_ow)
614 self.alpha_rad_inner_ow = 1 / (self.r_rad_inner_ow * self.area_ow)
615 self.alpha_comb_inner_ow = 1 / (self.r_comb_inner_ow * self.area_ow)
617 # values facing the ambient
618 # ground floor does not have any coefficients on ambient side
620 _area_ow_rt = sum(
621 out_wall.area for out_wall in self.thermal_zone.outer_walls
622 ) + sum(
623 roof.area for roof in self.thermal_zone.rooftops
624 )
626 _area_ow_rt_nzb = _area_ow_rt + sum(
627 roof.area for roof in self.thermal_zone.find_izes_outer()
628 )
630 self.r_conv_outer_ow = 1 / (
631 sum(1 / out_wall.r_outer_conv for out_wall in self.thermal_zone.outer_walls)
632 + sum(1 / roof.r_outer_conv for roof in self.thermal_zone.rooftops)
633 + sum(1 / nzb.r_outer_conv for nzb in self.thermal_zone.find_izes_outer())
634 )
635 self.r_rad_outer_ow = 1 / (
636 sum(1 / out_wall.r_outer_rad for out_wall in self.thermal_zone.outer_walls)
637 + sum(1 / roof.r_outer_rad for roof in self.thermal_zone.rooftops)
638 + sum(1 / nzb.r_outer_rad for nzb in self.thermal_zone.find_izes_outer())
639 )
640 self.r_comb_outer_ow = 1 / (
641 sum(1 / out_wall.r_outer_comb for out_wall in self.thermal_zone.outer_walls)
642 + sum(1 / roof.r_outer_comb for roof in self.thermal_zone.rooftops)
643 + sum(1 / nzb.r_outer_comb for nzb in self.thermal_zone.find_izes_outer())
644 )
646 self.ir_emissivity_outer_ow = (
647 sum(
648 out_wall.layer[-1].material.ir_emissivity * out_wall.area
649 for out_wall in self.thermal_zone.outer_walls
650 )
651 + sum(
652 roof.layer[-1].material.ir_emissivity * roof.area
653 for roof in self.thermal_zone.rooftops
654 )
655 ) / _area_ow_rt
657 self.solar_absorp_ow = (
658 sum(
659 out_wall.layer[-1].material.solar_absorp * out_wall.area
660 for out_wall in self.thermal_zone.outer_walls
661 )
662 + sum(
663 roof.layer[-1].material.solar_absorp * roof.area
664 for roof in self.thermal_zone.rooftops
665 )
666 ) / _area_ow_rt
668 self.alpha_conv_outer_ow = 1 / (self.r_conv_outer_ow * _area_ow_rt_nzb)
669 self.alpha_rad_outer_ow = 1 / (self.r_rad_outer_ow * _area_ow_rt_nzb)
670 self.alpha_comb_outer_ow = 1 / (self.r_comb_outer_ow * _area_ow_rt_nzb)
672 def _sum_inner_wall_elements(self):
673 """Sum attributes for interior elements
675 This function sums and computes the area-weighted values,
676 where necessary (the class doc string) for coefficients of heat
677 transfer, resistances, areas and UA-Values.
679 It treats all inner walls identical.
681 Function is identical for TwoElement, ThreeElement and FourElement.
683 Calculation of adjacent thermal zones and thus these attributes are
684 currently not supported.
686 """
687 self.area_iw = (
688 sum(in_wall.area for in_wall in self.thermal_zone.inner_walls)
689 + sum(floor.area for floor in self.thermal_zone.floors)
690 + sum(ceiling.area for ceiling in self.thermal_zone.ceilings)
691 + sum(nzb.area for nzb in self.nzbs_for_iw)
692 )
694 self.ua_value_iw = (
695 sum(in_wall.ua_value for in_wall in self.thermal_zone.inner_walls)
696 + sum(floor.ua_value for floor in self.thermal_zone.floors)
697 + sum(ceiling.ua_value for ceiling in self.thermal_zone.ceilings)
698 + sum(nzb.ua_value for nzb in self.nzbs_for_iw)
699 )
701 # values facing the inside of the thermal zone
703 self.r_conv_inner_iw = 1 / (
704 sum(1 / in_wall.r_inner_conv for in_wall in self.thermal_zone.inner_walls)
705 + sum(1 / floor.r_inner_conv for floor in self.thermal_zone.floors)
706 + sum(1 / ceiling.r_inner_conv for ceiling in self.thermal_zone.ceilings)
707 + sum(1 / nzb.r_inner_conv for nzb in self.nzbs_for_iw)
708 )
710 self.r_rad_inner_iw = 1 / (
711 sum(1 / in_wall.r_inner_rad for in_wall in self.thermal_zone.inner_walls)
712 + sum(1 / floor.r_inner_rad for floor in self.thermal_zone.floors)
713 + sum(1 / ceiling.r_inner_rad for ceiling in self.thermal_zone.ceilings)
714 + sum(1 / nzb.r_inner_rad for nzb in self.nzbs_for_iw)
715 )
717 self.r_comb_inner_iw = 1 / (
718 sum(1 / in_wall.r_inner_comb for in_wall in self.thermal_zone.inner_walls)
719 + sum(1 / floor.r_inner_comb for floor in self.thermal_zone.floors)
720 + sum(1 / ceiling.r_inner_comb for ceiling in self.thermal_zone.ceilings)
721 + sum(1 / nzb.r_inner_comb for nzb in self.nzbs_for_iw)
722 )
724 self.ir_emissivity_inner_iw = (
725 sum(
726 in_wall.layer[0].material.ir_emissivity * in_wall.area
727 for in_wall in self.thermal_zone.inner_walls
728 )
729 + sum(
730 floor.layer[0].material.ir_emissivity * floor.area
731 for floor in self.thermal_zone.floors
732 )
733 + sum(
734 ceiling.layer[0].material.ir_emissivity * ceiling.area
735 for ceiling in self.thermal_zone.ceilings
736 )
737 + sum(
738 nzb.layer[0].material.ir_emissivity * nzb.area
739 for nzb in self.nzbs_for_iw
740 )
741 ) / self.area_iw
743 self.alpha_conv_inner_iw = 1 / (self.r_conv_inner_iw * self.area_iw)
744 self.alpha_rad_inner_iw = 1 / (self.r_rad_inner_iw * self.area_iw)
745 self.alpha_comb_inner_iw = 1 / (self.r_comb_inner_iw * self.area_iw)
747 # adjacent thermal zones are not supported!
749 def _sum_window_elements(self):
750 """Sum attributes for window elements
752 This function sums and computes the area-weighted values,
753 where necessary (the class doc string) for coefficients of heat
754 transfer, resistances, areas and UA-Values.
756 Function is identical for TwoElement, ThreeElement and FourElement.
757 """
759 self.area_win = sum(win.area for win in self.thermal_zone.windows)
760 self.ua_value_win = sum(win.ua_value for win in self.thermal_zone.windows)
761 self.u_value_win = self.ua_value_win / self.area_win
763 self.r_total_win = 1 / self.ua_value_win
764 # values facing the inside of the thermal zone
766 self.r_conv_inner_win = 1 / (
767 sum(1 / win.r_inner_conv for win in self.thermal_zone.windows)
768 )
770 self.r_rad_inner_win = 1 / (
771 sum(1 / win.r_inner_rad for win in self.thermal_zone.windows)
772 )
774 self.r_comb_inner_win = 1 / (
775 sum(1 / win.r_inner_comb for win in self.thermal_zone.windows)
776 )
778 self.ir_emissivity_inner_win = (
779 sum(
780 win.layer[0].material.ir_emissivity * win.area
781 for win in self.thermal_zone.windows
782 )
783 / self.area_win
784 )
786 self.alpha_conv_inner_win = 1 / (self.r_conv_inner_win * self.area_win)
787 self.alpha_rad_inner_win = 1 / (self.r_rad_inner_win * self.area_win)
788 self.alpha_comb_inner_win = 1 / (self.r_comb_inner_win * self.area_win)
789 self.ratio_conv_rad_inner_win = (
790 sum(win.a_conv * win.area for win in self.thermal_zone.windows)
791 / self.area_win
792 )
794 # values facing the ambient
796 self.r_conv_outer_win = 1 / (
797 sum(1 / win.r_outer_conv for win in self.thermal_zone.windows)
798 )
800 self.r_rad_outer_win = 1 / (
801 sum(1 / win.r_outer_rad for win in self.thermal_zone.windows)
802 )
804 self.r_comb_outer_win = 1 / (
805 sum(1 / win.r_outer_comb for win in self.thermal_zone.windows)
806 )
808 self.ir_emissivity_win = (
809 sum(
810 win.layer[-1].material.ir_emissivity * win.area
811 for win in self.thermal_zone.windows
812 )
813 / self.area_win
814 )
816 self.solar_absorp_win = (
817 sum(
818 win.layer[-1].material.solar_absorp * win.area
819 for win in self.thermal_zone.windows
820 )
821 / self.area_win
822 )
824 self.weighted_g_value = (
825 sum(win.g_value * win.area for win in self.thermal_zone.windows)
826 / self.area_win
827 )
829 self.alpha_conv_outer_win = 1 / (self.r_conv_outer_win * self.area_win)
830 self.alpha_rad_outer_win = 1 / (self.r_rad_outer_win * self.area_win)
831 self.alpha_comb_outer_win = 1 / (self.r_comb_outer_win * self.area_win)
833 def _calc_outer_elements(self):
834 """Lumped parameter for outer wall elements
836 Calculates all necessary parameters for outer walls. This includes
837 OuterWalls, GroundFloors and Rooftops.
838 Attributes
839 ----------
840 omega : float [1/s]
841 angular frequency with given time period.
842 outer_walls : list
843 List containing all TEASER Wall instances that are treated as same
844 outer wall type. In case of TwoElement model OuterWalls,
845 GroundFloors, Rooftops
846 """
848 omega = 2 * math.pi / 86400 / self.t_bt
850 outer_walls = (
851 self.thermal_zone.outer_walls
852 + self.thermal_zone.ground_floors
853 + self.thermal_zone.rooftops
854 + self.thermal_zone.find_izes_outer()
855 )
857 if 0 < len(outer_walls) <= 1:
858 # only one outer wall, no need to calculate chain matrix
859 self.r1_ow = outer_walls[0].r1
860 self.c1_ow = outer_walls[0].c1_korr
861 elif len(outer_walls) > 1:
862 # more than one outer wall, calculate chain matrix
863 self.r1_ow, self.c1_ow = self._calc_parallel_connection(
864 outer_walls, omega, mode='ow'
865 )
867 if self.merge_windows is False:
868 try:
870 if len(self.thermal_zone.windows) > 0:
871 self.r1_win = 1 / sum(
872 (1 / win.r1) for win in self.thermal_zone.windows
873 )
874 if len(outer_walls) > 0:
875 conduction = 1 / sum(
876 (1 / element.r_conduc) for element in outer_walls
877 )
879 self.r_rest_ow = conduction - self.r1_ow
881 except RuntimeError:
882 print(
883 "As no outer walls or no windows are defined lumped "
884 "parameter cannot be calculated"
885 )
887 if self.merge_windows is True:
889 try:
891 if (
892 len(self.thermal_zone.windows) > 0
893 and len(outer_walls) > 0
894 ):
895 self.r1_win = 1 / sum(
896 1 / (win.r1 / 6) for win in self.thermal_zone.windows
897 )
899 self.r1_ow = 1 / (1 / self.r1_ow + 1 / self.r1_win)
901 self.r_total_ow = 1 / (self.ua_value_ow + self.ua_value_win)
902 self.r_rest_ow = (
903 self.r_total_ow
904 - self.r1_ow
905 - 1
906 / (
907 (
908 (1 / self.r_conv_inner_ow)
909 + (1 / self.r_conv_inner_win)
910 + (1 / self.r_rad_inner_ow)
911 + (1 / self.r_rad_inner_win)
912 )
913 )
914 ) - 1 / (self.alpha_comb_outer_ow * self.area_ow)
916 self.ir_emissivity_inner_ow = (
917 self.ir_emissivity_inner_ow * self.area_ow
918 + self.ir_emissivity_inner_win * self.area_win
919 ) / (self.area_ow + self.area_win)
921 self.ir_emissivity_outer_ow = (
922 self.ir_emissivity_outer_ow * self.area_ow
923 + self.ir_emissivity_win * self.area_win
924 ) / (self.area_ow + self.area_win)
926 self.solar_absorp_ow = (
927 self.solar_absorp_ow * self.area_ow
928 + self.solar_absorp_win * self.area_win
929 ) / (self.area_ow + self.area_win)
931 except RuntimeError:
932 print(
933 "As no outer walls or no windows are defined lumped "
934 "parameter cannot be calculated"
935 )
937 def _calc_inner_elements(self):
938 """Lumped parameter for outer wall elements
940 Calculates all necessary parameters for inner walls. This includes
941 InnerWalls, Ceilings and Floors.
943 Attributes
944 ----------
945 omega : float [1/s]
946 angular frequency with given time period.
947 outer_walls : list
948 List containing all TEASER Wall instances that are treated as same
949 outer wall type. In case of TwoElement model OuterWalls,
950 GroundFloors, Rooftops
951 """
953 omega = 2 * math.pi / 86400 / self.t_bt
955 inner_walls = (
956 self.thermal_zone.inner_walls
957 + self.thermal_zone.floors
958 + self.thermal_zone.ceilings
959 + self.nzbs_for_iw
960 )
962 for in_wall in inner_walls:
963 in_wall.calc_equivalent_res()
964 in_wall.calc_ua_value()
966 if 0 < len(inner_walls) <= 1:
967 # only one outer wall, no need to calculate chain matrix
968 self.r1_iw = inner_walls[0].r1
969 self.c1_iw = inner_walls[0].c1_korr
970 elif len(inner_walls) > 1:
971 # more than one outer wall, calculate chain matrix
972 self.r1_iw, self.c1_iw = self._calc_parallel_connection(
973 inner_walls, omega, mode='iw'
974 )
976 def _calc_wf(self):
977 """Weightfactors for outer elements(walls, roof, ground floor, windows)
979 Calculates the weightfactors of the outer walls, including ground and
980 windows.
982 Parameters
983 ----------
984 outer_walls : list
985 List containing all TEASER Wall instances that are treated as same
986 outer wall type. In case of TwoElement model OuterWalls,
987 GroundFloors, Rooftops
988 """
990 outer_walls = (
991 self.thermal_zone.outer_walls
992 + self.thermal_zone.ground_floors
993 + self.thermal_zone.rooftops
994 + self.thermal_zone.find_izes_outer()
995 )
997 if self.merge_windows is True:
999 for wall in outer_walls:
1000 wall.wf_out = wall.ua_value / (self.ua_value_ow + self.ua_value_win)
1002 for win in self.thermal_zone.windows:
1003 win.wf_out = win.ua_value / (self.ua_value_ow + self.ua_value_win)
1005 self.weightfactor_ground = sum(
1006 gf.wf_out for gf in self.thermal_zone.ground_floors
1007 )
1009 elif self.merge_windows is False:
1011 for wall in outer_walls:
1012 wall.wf_out = wall.ua_value / self.ua_value_ow
1014 for win in self.thermal_zone.windows:
1015 win.wf_out = win.ua_value / self.ua_value_win
1017 self.weightfactor_ground = sum(
1018 gf.wf_out for gf in self.thermal_zone.ground_floors
1019 )
1021 else:
1022 raise ValueError("specify merge window method correctly")
1024 def _calc_mean_values(self):
1025 """Calculates mean values for inner and outer elements
1027 This function calculates mean values inside the thermal zone (e.g.
1028 the mean value for coefficient of radiative heat transfer between
1029 inner and outer walls
1030 """
1032 self.alpha_rad_inner_mean = (
1033 self.area_ow * self.alpha_rad_inner_ow
1034 + self.area_win * self.alpha_rad_inner_win
1035 + self.area_iw * self.alpha_rad_inner_iw
1036 ) / (self.area_ow + self.area_win + self.area_iw)
1037 self.alpha_rad_outer_mean = (
1038 self.area_ow * self.alpha_rad_outer_ow
1039 + self.area_win * self.alpha_rad_outer_win
1040 ) / (self.area_ow + self.area_win)
1042 def _calc_number_of_elements(self):
1043 """Calculates the number of outer elements with different tilt/orient
1045 This function calculates the number of outer elements with a
1046 different combination of orientation and tilt, this includes the
1047 rooftops, ground floors, and borders to unheated neighboured zones if
1048 this zone is heated.
1049 """
1051 outer_elements = (
1052 self.thermal_zone.outer_walls
1053 + self.thermal_zone.find_izes_outer()
1054 + self.thermal_zone.ground_floors
1055 + self.thermal_zone.rooftops
1056 + self.thermal_zone.windows
1057 )
1059 tilt_orient = []
1060 for element in outer_elements:
1061 tilt_orient.append((element.orientation, element.tilt))
1062 self.n_outer = len(list(set(tilt_orient)))
1064 def _fill_zone_lists(self):
1065 """Fills lists like weightfactors and tilt, orientation
1067 Fills the lists of a zone according to orientation and tilt of the
1068 zone. Therefore it compares orientation and tilt of all outer
1069 elements and then creates lists for zone weightfactors, orientation,
1070 tilt, ares and sunblinds."""
1072 outer_elements = (
1073 self.thermal_zone.outer_walls
1074 + self.thermal_zone.find_izes_outer()
1075 + self.thermal_zone.ground_floors
1076 + self.thermal_zone.rooftops
1077 + self.thermal_zone.windows
1078 )
1080 tilt_orient = []
1081 for element in outer_elements:
1082 tilt_orient.append((element.orientation, element.tilt))
1083 tilt_orient = list(set(tilt_orient))
1085 for i in tilt_orient:
1086 wall_rt_nzb = self.thermal_zone.find_walls(
1087 i[0], i[1]
1088 ) + self.thermal_zone.find_rts(
1089 i[0], i[1]
1090 ) + self.thermal_zone.find_izes_outer(
1091 i[0], i[1]
1092 )
1093 wins = self.thermal_zone.find_wins(i[0], i[1])
1094 gf = self.thermal_zone.find_gfs(i[0], i[1])
1096 if self.merge_windows is True:
1097 self.facade_areas.append(
1098 sum([element.area for element in (wall_rt_nzb + wins + gf)])
1099 )
1100 else:
1101 self.facade_areas.append(
1102 sum([element.area for element in (wall_rt_nzb + gf)])
1103 )
1105 self.orientation_facade.append(i[0])
1106 self.tilt_facade.append(i[1])
1108 if not wall_rt_nzb:
1110 if not gf:
1111 self.weightfactor_ow.append(0.0)
1112 self.outer_wall_areas.append(0.0)
1113 else:
1114 self.weightfactor_ow.append(0.0)
1115 self.outer_wall_areas.append(
1116 (sum([element.area for element in gf]))
1117 )
1118 else:
1119 self.weightfactor_ow.append(sum([wall.wf_out
1120 for wall in wall_rt_nzb]))
1121 self.outer_wall_areas.append(sum([wall.area
1122 for wall in wall_rt_nzb]))
1124 if not wins:
1125 self.weightfactor_win.append(0.0)
1126 self.shading_g_total.append(1.0)
1127 self.window_areas.append(0.0)
1128 self.transparent_areas.append(0.0)
1129 self.shading_max_irr.append(9999.9)
1131 else:
1132 self.weightfactor_win.append(sum([win.wf_out for win in wins]))
1134 if self.merge_windows is False:
1135 self.window_areas.append(sum([win.area for win in wins]))
1136 self.transparent_areas.append(sum([win.area for win in wins]))
1138 else:
1139 self.window_areas.append(0)
1140 self.transparent_areas.append(sum([win.area for win in wins]))
1142 self.shading_g_total.append(
1143 sum(
1144 [
1145 win.shading_g_total * win.area / sum([w.area for w in wins])
1146 for win in wins
1147 ]
1148 )
1149 )
1150 self.shading_max_irr.append(
1151 sum(
1152 [
1153 win.shading_max_irr * win.area / sum([w.area for w in wins])
1154 for win in wins
1155 ]
1156 )
1157 )
1159 def _calc_heat_load(self):
1160 """Static heat load calculation
1162 This function calculates the static heat load of the thermal zone by
1163 multiplying the UA-Value of the elements with the given Temperature
1164 difference of t_inside and t_outside. And takes heat losses through
1165 infiltration into account.
1167 Attributes
1168 ----------
1169 ua_value_ow_temp : float [W/(m2*K)]
1170 UA Value without GroundFloors
1171 ua_value_gf_temp : float [W/(m2*K)]
1172 UA Value of all GroundFloors
1173 """
1174 if self.thermal_zone.use_conditions.base_infiltration > 0.5:
1175 warnings.warn("The base_infiltration is larger than 0.5, "
1176 "which could lead to ideal heaters being too small.")
1178 self.heat_load = 0.0
1180 if self.thermal_zone.parent.parent.t_soil_mode == 2:
1181 t_ground = self.thermal_zone.t_ground \
1182 - self.thermal_zone.t_ground_amplitude
1183 else:
1184 t_ground = self.thermal_zone.t_ground
1186 ua_value_gf_temp = sum(
1187 ground.ua_value for ground in self.thermal_zone.ground_floors
1188 )
1189 ua_value_ow_temp = self.ua_value_ow - ua_value_gf_temp
1190 self.heat_load_outside_factor = (
1191 (ua_value_ow_temp + self.ua_value_win)
1192 + self.thermal_zone.volume
1193 * self.thermal_zone.use_conditions.normative_infiltration
1194 * 1
1195 / 3600
1196 * self.thermal_zone.heat_capac_air
1197 * self.thermal_zone.density_air
1198 )
1199 self.heat_load_ground_factor = ua_value_gf_temp
1200 self.heat_load = \
1201 self.heat_load_outside_factor \
1202 * (self.thermal_zone.t_inside - self.thermal_zone.t_outside) \
1203 + self.heat_load_ground_factor \
1204 * (self.thermal_zone.t_inside - t_ground)
1206 def set_calc_default(self):
1207 """sets default calculation parameters
1208 """
1210 # Attributes of inner walls
1211 self.area_iw = 0.0
1213 # coefficient of heat transfer facing the inside of this thermal zone
1214 self.alpha_conv_inner_iw = 0.0
1215 self.alpha_rad_inner_iw = 0.0
1216 self.alpha_comb_inner_iw = 0.0
1217 # coefficient of heat transfer facing the adjacent thermal zone
1218 self.alpha_conv_outer_iw = 0.0
1219 self.alpha_rad_outer_iw = 0.0
1220 self.alpha_comb_outer_iw = 0.0
1222 # UA-Value
1223 self.ua_value_iw = 0.0
1225 # resistances for heat transfer facing the inside of this thermal zone
1226 self.r_conv_inner_iw = 0.0
1227 self.r_rad_inner_iw = 0.0
1228 self.r_comb_inner_iw = 0.0
1229 self.r_conv_outer_iw = 0.0
1230 self.r_rad_outer_iw = 0.0
1231 self.r_comb_outer_iw = 0.0
1233 # lumped resistance/capacity
1234 self.r1_iw = 0.0
1235 self.c1_iw = 0.0
1237 # Attributes for outer walls (OuterWall, Rooftop, GroundFloor)
1238 self.area_ow = 0.0
1240 # coefficient of heat transfer facing the inside of this thermal zone
1241 self.alpha_conv_inner_ow = 0.0
1242 self.alpha_rad_inner_ow = 0.0
1243 self.alpha_comb_inner_ow = 0.0
1245 # coefficient of heat transfer facing the ambient
1246 self.alpha_conv_outer_ow = 0.0
1247 self.alpha_rad_outer_ow = 0.0
1248 self.alpha_comb_outer_ow = 0.0
1250 # UA-Value
1251 self.ua_value_ow = 0.0
1253 # resistances for heat transfer facing the inside of this thermal zone
1254 self.r_conv_inner_ow = 0.0
1255 self.r_rad_inner_ow = 0.0
1256 self.r_comb_inner_ow = 0.0
1258 # resistances for heat transfer facing the ambient
1259 self.r_conv_outer_ow = 0.0
1260 self.r_rad_outer_ow = 0.0
1261 self.r_comb_outer_ow = 0.0
1263 # lumped resistances/capacity
1264 self.r1_ow = 0.0
1265 self.r_rest_ow = 0.0
1266 self.c1_ow = 0.0
1267 self.r_total_ow = 0.0
1269 # Optical properties
1270 self.ir_emissivity_outer_ow = 0.0
1271 self.ir_emissivity_inner_ow = 0.0
1272 self.solar_absorp_ow = 0.0
1274 # Additional attributes
1275 self.weightfactor_ow = []
1276 self.weightfactor_ground = 0.0
1277 self.outer_wall_areas = []
1279 # Attributes for windows
1280 self.area_win = 0.0
1282 # coefficient of heat transfer facing the inside of this thermal zone
1283 self.alpha_conv_inner_win = 0.0
1284 self.alpha_rad_inner_win = 0.0
1285 self.alpha_comb_inner_win = 0.0
1286 self.ratio_conv_rad_inner_win = 0.0
1288 # coefficient of heat transfer facing the ambient
1289 self.alpha_conv_outer_win = 0.0
1290 self.alpha_rad_outer_win = 0.0
1291 self.alpha_comb_outer_win = 0.0
1293 # UA-Value
1294 self.ua_value_win = 0.0
1295 self.u_value_win = 0.0
1297 # resistances for heat transfer facing the inside of this thermal zone
1298 self.r_conv_inner_win = 0.0
1299 self.r_rad_inner_win = 0.0
1300 self.r_comb_inner_win = 0.0
1302 # resistances for heat transfer facing the ambient
1303 self.r_conv_outer_win = 0.0
1304 self.r_rad_outer_win = 0.0
1305 self.r_comb_outer_win = 0.0
1307 # lumped resistances/capacity
1308 self.r1_win = 0.0
1310 # Optical properties
1311 self.ir_emissivity_win = 0.0
1312 self.solar_absorp_win = 0.0
1314 # Additional attributes
1315 self.weightfactor_win = []
1316 self.window_areas = []
1317 self.transparent_areas = []
1318 self.shading_g_total = []
1319 self.shading_max_irr = []
1320 self.weighted_g_value = 0.0
1322 # Misc values
1324 self.alpha_rad_inner_mean = 0.0
1325 self.n_outer = 0
1326 self.facade_areas = []
1327 self.tilt_facade = []
1328 self.orientation_facade = []
1329 self.heat_load = 0.0
1330 self.cool_load = 0.0
1332 @property
1333 def nzbs_for_iw(self):
1334 """returns borders to neighboured zones to be considered as inner walls
1336 Returns
1337 -------
1338 value : list
1339 list of those interzonal elements that are NOT to be treated as
1340 'outer_ordered' depending on their 'interzonal_type_export'
1341 attribute
1343 """
1344 elements = []
1345 for i in self.thermal_zone.interzonal_elements:
1346 if not i.interzonal_type_export == 'outer_ordered':
1347 elements.append(i)
1348 else:
1349 pass
1350 return elements