Example 7: Generate single building

This module contains an example that shows to create a building not using the archetype approach but adding all information separately. In this example we import all needed modules and classes where we need it in the code. For you application we suggest to use PEP008 and import them at the beginning of the script. You can run this example using the jupyter-notebook

First step: Import the TEASER API (called Project) into your Python module

from teaser.project import Project
from teaser.data.utilities import ConstructionData
from teaser.data.dataclass import DataClass

To use the API, instantiate the Project class and rename the project.

prj = Project()
prj.name = "BuildingExample"
prj.data = DataClass(construction_data=ConstructionData.iwu_heavy)

Instantiate a Building class and set the Project API as a parent to this building. This will automatically add this building and all its future changes to the project. This is helpful as we can use the data base and API functions (like explained in e2 - e5). We also set some building parameters. Be careful: Dymola does not like whitespaces in names and filenames, thus we will delete them anyway in TEASER.

from teaser.logic.buildingobjects.building import Building

bldg = Building(parent=prj)
bldg.name = "SuperExampleBuilding"
bldg.street_name = "AwesomeAvenue42"
bldg.city = "46325FantasticTown"
bldg.year_of_construction = 2015
bldg.number_of_floors = 1
bldg.height_of_floors = 3.5

Instantiate a ThermalZone class and set the Building as a parent of it. Set some parameters of the thermal zone. Be careful: Dymola does not like whitespaces in names and filenames, thus we will delete them anyway in TEASER.

from teaser.logic.buildingobjects.thermalzone import ThermalZone

tz = ThermalZone(parent=bldg)
tz.name = "LivingRoom"
tz.area = 140.0
tz.volume = tz.area * bldg.number_of_floors * bldg.height_of_floors

Instantiate BoundaryConditions and load conditions for Living.

from teaser.logic.buildingobjects.useconditions \
    import UseConditions

tz.use_conditions = UseConditions(parent=tz)
tz.use_conditions.load_use_conditions("Living", prj.data)

Define two building elements reflecting a pitched roof (south = 180° and north = 0°). Setting the the ThermalZone as a parent will automatically assign this element to the thermal zone. We also set names, tilt and coefficients for heat transfer on the inner and outer side of the roofs. If the building has a flat roof, please use -1 as orientation. Please read the docs to get more information on these parameters.

from teaser.logic.buildingobjects.buildingphysics.rooftop import Rooftop

roof_south = Rooftop(parent=tz)
roof_south.name = "Roof_South"
roof_south.area = 75.0
roof_south.orientation = 180.0
roof_south.tilt = 55.0
roof_south.inner_convection = 1.7
roof_south.outer_convection = 20.0
roof_south.inner_radiation = 5.0
roof_south.outer_radiation = 5.0

roof_north = Rooftop(parent=tz)
roof_north.name = "Roof_North"
roof_north.area = 75.0
roof_north.orientation = 0.0
roof_north.tilt = 55.0
roof_north.inner_convection = 1.7
roof_north.outer_convection = 20.0
roof_north.inner_radiation = 5.0
roof_north.outer_radiation = 5.0

To define the wall constructions we need to instantiate Layer and Material objects and set attributes. id indicates the order of wall construction from inside to outside (so 0 is on the inner surface). You need to set this value!

from teaser.logic.buildingobjects.buildingphysics.layer import Layer

First layer south

layer_s1 = Layer(parent=roof_south, id=0)
layer_s1.thickness = 0.3

from teaser.logic.buildingobjects.buildingphysics.material import Material

material_s1 = Material(layer_s1)
material_s1.name = "Insulation"
material_s1.density = 120.0
material_s1.heat_capac = 0.04
material_s1.thermal_conduc = 1.0

Second layer south

layer_s2 = Layer(parent=roof_south, id=1)
layer_s2.thickness = 0.15

material_s2 = Material(layer_s2)
material_s2.name = "Tile"
material_s2.density = 1400.0
material_s2.heat_capac = 0.6
material_s2.thermal_conduc = 2.5

First layer north

layer_n1 = Layer(parent=roof_north, id=0)
layer_n1.thickness = 0.3

from teaser.logic.buildingobjects.buildingphysics.material import Material

material_n1 = Material(layer_n1)
material_n1.name = "Insulation"
material_n1.density = 120.0
material_n1.heat_capac = 0.04
material_n1.thermal_conduc = 1.0

Second layer north

layer_n2 = Layer(parent=roof_north, id=1)
layer_n2.thickness = 0.15

material_n2 = Material(layer_n2)
material_n2.name = "Tile"
material_n2.density = 1400.0
material_n2.heat_capac = 0.6
material_n2.thermal_conduc = 2.5

Another option is to use the database for typical wall constructions, but set area, tilt, orientation individually. To simplify code, we save individual information for exterior walls, interior walls into dictionaries. outer walls {‘name_of_wall’: [area, tilt, orientation]} interior walls {‘name_of_wall’: [area, tilt, orientation]}

from teaser.logic.buildingobjects.buildingphysics.outerwall import OuterWall

out_wall_dict = {"OuterWall_north": [10.0, 90.0, 0.0],
                 "OuterWall_east": [14.0, 90.0, 90.0],
                 "OuterWall_south": [10.0, 90.0, 180.0],
                 "OuterWall_west": [14.0, 90.0, 270.0]}

For ground floors the orientation is always -2

ground_floor_dict = {"GroundFloor": [100.0, 0.0, -2]}

from teaser.logic.buildingobjects.buildingphysics.innerwall import InnerWall

in_wall_dict = {"InnerWall1": [10.0],
                "InnerWall2": [14.0],
                "InnerWall3": [10.0]}

for key, value in out_wall_dict.items():
    # Instantiate class, key is the name
    out_wall = OuterWall(parent=tz)
    out_wall.name = key
    # Use load_type_element() function of the building element, and pass
    # over the year of construction of the building and the type of
    # construction (in this case `heavy`).

    out_wall.load_type_element(
        year=bldg.year_of_construction,
        construction='iwu_heavy')

    # area, tilt and orientation need to be set individually.

    out_wall.area = value[0]
    out_wall.tilt = value[1]
    out_wall.orientation = value[2]

Repeat the procedure for inner walls and ground floors

for key, value in in_wall_dict.items():

    in_wall = InnerWall(parent=tz)
    in_wall.name = key
    in_wall.load_type_element(
        year=bldg.year_of_construction,
        construction='iwu_heavy')
    in_wall.area = value[0]

from teaser.logic.buildingobjects.buildingphysics.groundfloor import \
    GroundFloor

for key, value in ground_floor_dict.items():

    ground = GroundFloor(parent=tz)
    ground.name = key
    ground.load_type_element(
        year=bldg.year_of_construction,
        construction='iwu_heavy')
    ground.area = value[0]
    ground.tilt = value[1]
    ground.orientation = value[2]

from teaser.logic.buildingobjects.buildingphysics.window import Window

win_dict = {"Window_east": [5.0, 90.0, 90.0],
            "Window_south": [8.0, 90.0, 180.0],
            "Window_west": [5.0, 90.0, 270.0]}

for key, value in win_dict.items():

    win = Window(parent=tz)
    win.name = key
    win.area = value[0]
    win.tilt = value[1]
    win.orientation = value[2]

    # Additional to the already known attributes the window has
    # additional attributes. Window.g_value describes the solar gain
    # through windows, a_conv the convective heat transmission due to
    # absorption of the window on the inner side. shading_g_total and
    # shading_max_irr refers to the shading (solar gain reduction of the
    # shading and shading_max_irr the threshold of irradiance to
    # automatically apply shading).

    win.inner_convection = 1.7
    win.inner_radiation = 5.0
    win.outer_convection = 20.0
    win.outer_radiation = 5.0
    win.g_value = 0.789
    win.a_conv = 0.03
    win.shading_g_total = 0.0
    win.shading_max_irr = 180.0

    # One equivalent layer for windows

    win_layer = Layer(parent=win)
    win_layer.id = 1
    win_layer.thickness = 0.024

    # Material for glass

    win_material = Material(win_layer)
    win_material.name = "GlasWindow"
    win_material.thermal_conduc = 0.067
    win_material.transmittance = 0.9