TEASER
TEASER copied to clipboard
GroundFloor without OuterWalls or RoofTop
What is the problem?
Modeling a room with groundfloor and without outer walls or rooftop occurs an error in computing the twoelement.py (I guess the same will occur for the 3 elements as well).
All other combinations work
Why do we want to solve it?
If creating rooms and zones automatically such zones may occur and should be possible to model.
How do we want to solve it?
First option with ugly hard coding: Add an if statement to the twoelement.py to avoid running through the convective and radiative heat coefficient calculations. Hard code the now missing convective and radiative heat transfer coefficients to neglectable small values. Otherwise, the AixLib will run into an error due to dividing by zero.
Second option: Understand the IBPSA and AixLib calculations of the respective elements and avoid that it tries to calculate the convective and radiative share in this special case. Add the if statement to TEASER but without hardcoding.
For the models, the ROM avoids in all versions (one to four elements model) adding non existent elements such as interior walls. This is done by checking the elements area size. If it is zero, no respective element will be initialized. So you simply need to handle this in Teaser with if- statements and make sure, the area is set to zero. For quality reasons, it would be nice to have all other respective values of the element set to zero. And of course, best way would be to handle this bug for all versions (one to four elements) at one place.
Thank you for these information!
Regarding the calculation within the ROM, I do think the error occurs only with the two element thermal zone. In this particular case the area of outer walls is not zero due adding the ground floor to the outer walls element. For the calculation of the outer wall element the convective and radiative heat coefficient is needed, which is not provided by the ground floor. Hence, it divides by heat coefficients which are zero.
Nevertheless, I will have another look at it. I do agree with you that hard coding should, if somehow possible, be avoided. We should aim for a sustainable bug fix!
While trying to fix this I realized that the current implementation does not account for the heat transfer coefficients to the outside of the ground floor. Error occurs with 1 and 2 number_elements_calc.
E. g. if I calculate a zone that has 10.000 m² ground floor but only 1 m² outer wall, the current calculation would assume that the convective and radiative heat transfer, as well as the solar absorption and irradiative emissivity, of the outer wall would apply to the total "outer wall" area, which sums up to 10.001 m² in this case.
Same applies for the inner walls with the 1 number_elements_calc.
My suggestion:
- [ ] - At the ground floor ambient side assume low values for convective and radiative heat transfer, as well as the solar absorption and irradiative emissivity, per default.
- [ ] - Also include ground floor to the calculation of the mean outer convective and radiative heat transfer coefficient. (This would actually solve the original topic of this issue)
- [ ] - Same needs to be done with the inner walls at the 1 one_element.py and the outer heat transfer coefficients, solar absorptions etc.
Any comments about my thoughts? I am still not totally sure, whether my thoughts are correct. I might oversee something.
Here the respective code that ignores the ground floor while averaging the coefficients to the ambient:
# values facing the ambient
# ground floor does not have any coefficients on ambient side
_area_ow_rt = sum(
out_wall.area for out_wall in self.thermal_zone.outer_walls
) + sum(roof.area for roof in self.thermal_zone.rooftops)
self.r_conv_outer_ow = 1 / (
sum(1 / out_wall.r_outer_conv for out_wall in self.thermal_zone.outer_walls)
+ sum(1 / roof.r_outer_conv for roof in self.thermal_zone.rooftops)
)
self.r_rad_outer_ow = 1 / (
sum(1 / out_wall.r_outer_rad for out_wall in self.thermal_zone.outer_walls)
+ sum(1 / roof.r_outer_rad for roof in self.thermal_zone.rooftops)
)
self.r_comb_outer_ow = 1 / (
sum(1 / out_wall.r_outer_comb for out_wall in self.thermal_zone.outer_walls)
+ sum(1 / roof.r_outer_comb for roof in self.thermal_zone.rooftops)
)
self.ir_emissivity_outer_ow = (
sum(
out_wall.layer[-1].material.ir_emissivity * out_wall.area
for out_wall in self.thermal_zone.outer_walls
)
+ sum(
roof.layer[-1].material.ir_emissivity * roof.area
for roof in self.thermal_zone.rooftops
)
) / _area_ow_rt
self.solar_absorp_ow = (
sum(
out_wall.layer[-1].material.solar_absorp * out_wall.area
for out_wall in self.thermal_zone.outer_walls
)
+ sum(
roof.layer[-1].material.solar_absorp * roof.area
for roof in self.thermal_zone.rooftops
)
) / _area_ow_rt
self.alpha_conv_outer_ow = 1 / (self.r_conv_outer_ow * _area_ow_rt)
self.alpha_rad_outer_ow = 1 / (self.r_rad_outer_ow * _area_ow_rt)
self.alpha_comb_outer_ow = 1 / (self.r_comb_outer_ow * _area_ow_rt)
- [ ] Close https://github.com/RWTH-EBC/TEASER/issues/691 if this issue is solved.