RWTH-EBC / TEASER

TEASER - Tool for Energy Analysis and Simulation for Efficient Retrofit
Other
112 stars 66 forks source link

GroundFloor without OuterWalls or RoofTop #637

Open MartinRaetz opened 4 years ago

MartinRaetz commented 4 years ago

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.

-

mlauster commented 4 years ago

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.

MartinRaetz commented 4 years ago

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!

MartinRaetz commented 3 years ago

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:

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)
MartinRaetz commented 2 years ago