Exemplo n.º 1
0
def calc_temperatures_emission_systems(bpr, tsd):
    """
    Calculate temperature of emission systems.
    Using radiator function also for cooling ('radiators.calc_radiator')
    Modified from legacy

    Gabriel Happle, Feb. 2018

    :param bpr: Building Properties
    :type bpr: BuildingPropertiesRow
    :param tsd: Time series data of building
    :type tsd: dict
    :return: modifies tsd
    :rtype: None
    """

    from cea.technologies import radiators, heating_coils, tabs

    #
    # TEMPERATURES HEATING SYSTEMS
    #
    if not control_heating_cooling_systems.has_heating_system(
            bpr.hvac["class_hs"]):
        # if no heating system

        tsd['Ths_sys_sup_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_ahu'] = np.zeros(HOURS_IN_YEAR)
        tsd['Ths_sys_sup_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_aru'] = np.zeros(HOURS_IN_YEAR)
        tsd['Ths_sys_sup_shu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_shu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_shu'] = np.zeros(HOURS_IN_YEAR)

    elif control_heating_cooling_systems.has_radiator_heating_system(bpr):
        # if radiator heating system
        Ta_heating_0 = np.nanmax(tsd['ta_hs_set'])
        Qhs_sys_0 = np.nanmax(tsd['Qhs_sys'])  # in W

        tsd['Ths_sys_sup_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_ahu'] = np.zeros(HOURS_IN_YEAR)
        tsd['Ths_sys_sup_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_aru'] = np.zeros(HOURS_IN_YEAR)

        Ths_sup, Ths_re, mcphs = np.vectorize(radiators.calc_radiator)(
            tsd['Qhs_sys'], tsd['T_int'], Qhs_sys_0, Ta_heating_0,
            bpr.building_systems['Ths_sup_shu_0'],
            bpr.building_systems['Ths_re_shu_0'])

        tsd['Ths_sys_sup_shu'] = Ths_sup
        tsd['Ths_sys_re_shu'] = Ths_re
        tsd['mcphs_sys_shu'] = mcphs

    elif control_heating_cooling_systems.has_central_ac_heating_system(bpr):

        # ahu
        # consider losses according to loads of systems
        frac_ahu = [
            ahu / sys if sys > 0 else 0
            for ahu, sys in zip(tsd['Qhs_sen_ahu'], tsd['Qhs_sen_sys'])
        ]
        qhs_sys_ahu = tsd['Qhs_sen_ahu'] + (tsd['Qhs_em_ls'] +
                                            tsd['Qhs_dis_ls']) * frac_ahu

        Qhs_sys_ahu_0 = np.nanmax(qhs_sys_ahu)  # in W

        index = np.where(qhs_sys_ahu == Qhs_sys_ahu_0)
        ma_sup_0 = tsd['ma_sup_hs_ahu'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_hs_ahu'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_hs_ahu'][index[0][0]] + KELVIN_OFFSET
        Ths_sup, Ths_re, mcphs = np.vectorize(heating_coils.calc_heating_coil)(
            qhs_sys_ahu, Qhs_sys_ahu_0, tsd['ta_sup_hs_ahu'],
            tsd['ta_re_hs_ahu'], bpr.building_systems['Ths_sup_ahu_0'],
            bpr.building_systems['Ths_re_ahu_0'], tsd['ma_sup_hs_ahu'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Ths_sys_sup_ahu'] = Ths_sup  # in C
        tsd['Ths_sys_re_ahu'] = Ths_re  # in C
        tsd['mcphs_sys_ahu'] = mcphs

        # ARU
        # consider losses according to loads of systems
        frac_aru = [
            aru / sys if sys > 0 else 0
            for aru, sys in zip(tsd['Qhs_sen_aru'], tsd['Qhs_sen_sys'])
        ]
        qhs_sys_aru = tsd['Qhs_sen_aru'] + (tsd['Qhs_em_ls'] +
                                            tsd['Qhs_dis_ls']) * frac_aru

        Qhs_sys_aru_0 = np.nanmax(qhs_sys_aru)  # in W

        index = np.where(qhs_sys_aru == Qhs_sys_aru_0)
        ma_sup_0 = tsd['ma_sup_hs_aru'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_hs_aru'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_hs_aru'][index[0][0]] + KELVIN_OFFSET
        Ths_sup, Ths_re, mcphs = np.vectorize(heating_coils.calc_heating_coil)(
            qhs_sys_aru, Qhs_sys_aru_0, tsd['ta_sup_hs_aru'],
            tsd['ta_re_hs_aru'], bpr.building_systems['Ths_sup_aru_0'],
            bpr.building_systems['Ths_re_aru_0'], tsd['ma_sup_hs_aru'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Ths_sys_sup_aru'] = Ths_sup  # in C
        tsd['Ths_sys_re_aru'] = Ths_re  # in C
        tsd['mcphs_sys_aru'] = mcphs

        # SHU
        tsd['Ths_sup_shu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_shu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_shu'] = np.zeros(HOURS_IN_YEAR)

    elif control_heating_cooling_systems.has_floor_heating_system(bpr):

        Ta_heating_0 = np.nanmax(tsd['ta_hs_set'])
        Qhs_sys_0 = np.nanmax(tsd['Qhs_sys'])  # in W

        tsd['Ths_sys_sup_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_ahu'] = np.zeros(HOURS_IN_YEAR)
        tsd['Ths_sys_sup_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Ths_sys_re_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcphs_sys_aru'] = np.zeros(HOURS_IN_YEAR)

        Ths_sup, Ths_re, mcphs = np.vectorize(radiators.calc_radiator)(
            tsd['Qhs_sys'], tsd['T_int'], Qhs_sys_0, Ta_heating_0,
            bpr.building_systems['Ths_sup_shu_0'],
            bpr.building_systems['Ths_re_shu_0'])
        tsd['Ths_sys_sup_shu'] = Ths_sup
        tsd['Ths_sys_re_shu'] = Ths_re
        tsd['mcphs_sys_shu'] = mcphs

    else:
        raise Exception(
            'Heating system not defined in function: "calc_temperatures_emission_systems"'
        )

    #
    # TEMPERATURES COOLING SYSTEMS
    #
    if not control_heating_cooling_systems.has_cooling_system(
            bpr.hvac["class_cs"]):
        # if no cooling system

        tsd['Tcs_sys_sup_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_ahu'] = np.zeros(HOURS_IN_YEAR)
        tsd['Tcs_sys_sup_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_aru'] = np.zeros(HOURS_IN_YEAR)
        tsd['Tcs_sys_sup_scu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_scu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_scu'] = np.zeros(HOURS_IN_YEAR)

    elif control_heating_cooling_systems.has_central_ac_cooling_system(bpr):

        # AHU
        # consider losses according to loads of systems
        frac_ahu = [
            ahu / sys if sys < 0 else 0
            for ahu, sys in zip(tsd['Qcs_sen_ahu'], tsd['Qcs_sen_sys'])
        ]
        qcs_sys_ahu = tsd['Qcs_sen_ahu'] + tsd['Qcs_lat_ahu'] + (
            tsd['Qcs_em_ls'] + tsd['Qcs_dis_ls']) * frac_ahu

        Qcs_sys_ahu_0 = np.nanmin(qcs_sys_ahu)  # in W

        index = np.where(qcs_sys_ahu == Qcs_sys_ahu_0)
        ma_sup_0 = tsd['ma_sup_cs_ahu'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_cs_ahu'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_cs_ahu'][index[0][0]] + KELVIN_OFFSET
        Tcs_sup, Tcs_re, mcpcs = np.vectorize(heating_coils.calc_cooling_coil)(
            qcs_sys_ahu, Qcs_sys_ahu_0, tsd['ta_sup_cs_ahu'],
            tsd['ta_re_cs_ahu'], bpr.building_systems['Tcs_sup_ahu_0'],
            bpr.building_systems['Tcs_re_ahu_0'], tsd['ma_sup_cs_ahu'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Tcs_sys_sup_ahu'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_ahu'] = Tcs_re  # in C
        tsd['mcpcs_sys_ahu'] = mcpcs

        # ARU
        # consider losses according to loads of systems
        frac_aru = [
            aru / sys if sys < 0 else 0
            for aru, sys in zip(tsd['Qcs_sen_aru'], tsd['Qcs_sen_sys'])
        ]
        qcs_sys_aru = tsd['Qcs_sen_aru'] + tsd['Qcs_lat_aru'] + (
            tsd['Qcs_em_ls'] + tsd['Qcs_dis_ls']) * frac_aru

        Qcs_sys_aru_0 = np.nanmin(qcs_sys_aru)  # in W

        index = np.where(qcs_sys_aru == Qcs_sys_aru_0)
        ma_sup_0 = tsd['ma_sup_cs_aru'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_cs_aru'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_cs_aru'][index[0][0]] + KELVIN_OFFSET
        Tcs_sup, Tcs_re, mcpcs = np.vectorize(heating_coils.calc_cooling_coil)(
            qcs_sys_aru, Qcs_sys_aru_0, tsd['ta_sup_cs_aru'],
            tsd['ta_re_cs_aru'], bpr.building_systems['Tcs_sup_aru_0'],
            bpr.building_systems['Tcs_re_aru_0'], tsd['ma_sup_cs_aru'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Tcs_sys_sup_aru'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_aru'] = Tcs_re  # in C
        tsd['mcpcs_sys_aru'] = mcpcs

        # SCU
        tsd['Tcs_sys_sup_scu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_scu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_scu'] = np.zeros(HOURS_IN_YEAR)

    elif control_heating_cooling_systems.has_local_ac_cooling_system(bpr):

        # AHU
        tsd['Tcs_sys_sup_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_ahu'] = np.zeros(HOURS_IN_YEAR)

        # ARU
        # consider losses according to loads of systems
        qcs_sys_aru = tsd['Qcs_sen_aru'] + tsd['Qcs_lat_aru'] + (
            tsd['Qcs_em_ls'] + tsd['Qcs_dis_ls'])
        qcs_sys_aru = np.nan_to_num(qcs_sys_aru)

        # Calc nominal temperatures of systems
        Qcs_sys_aru_0 = np.nanmin(qcs_sys_aru)  # in W

        index = np.where(qcs_sys_aru == Qcs_sys_aru_0)
        ma_sup_0 = tsd['ma_sup_cs_aru'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_cs_aru'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_cs_aru'][index[0][0]] + KELVIN_OFFSET
        Tcs_sup, Tcs_re, mcpcs = np.vectorize(heating_coils.calc_cooling_coil)(
            qcs_sys_aru, Qcs_sys_aru_0, tsd['ta_sup_cs_aru'],
            tsd['ta_re_cs_aru'], bpr.building_systems['Tcs_sup_aru_0'],
            bpr.building_systems['Tcs_re_aru_0'], tsd['ma_sup_cs_aru'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Tcs_sys_sup_aru'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_aru'] = Tcs_re  # in C
        tsd['mcpcs_sys_aru'] = mcpcs

        # SCU
        tsd['Tcs_sys_sup_scu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_scu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_scu'] = np.zeros(HOURS_IN_YEAR)

    elif control_heating_cooling_systems.has_3for2_cooling_system(bpr):

        # AHU
        # consider losses according to loads of systems
        frac_ahu = [
            ahu / sys if sys < 0 else 0
            for ahu, sys in zip(tsd['Qcs_sen_ahu'], tsd['Qcs_sen_sys'])
        ]
        qcs_sys_ahu = tsd['Qcs_sen_ahu'] + tsd['Qcs_lat_ahu'] + (
            tsd['Qcs_em_ls'] + tsd['Qcs_dis_ls']) * frac_ahu
        qcs_sys_ahu = np.nan_to_num(qcs_sys_ahu)

        Qcs_sys_ahu_0 = np.nanmin(qcs_sys_ahu)  # in W

        index = np.where(qcs_sys_ahu == Qcs_sys_ahu_0)
        ma_sup_0 = tsd['ma_sup_cs_ahu'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_cs_ahu'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_cs_ahu'][index[0][0]] + KELVIN_OFFSET
        Tcs_sup, Tcs_re, mcpcs = np.vectorize(heating_coils.calc_cooling_coil)(
            qcs_sys_ahu, Qcs_sys_ahu_0, tsd['ta_sup_cs_ahu'],
            tsd['ta_re_cs_ahu'], bpr.building_systems['Tcs_sup_ahu_0'],
            bpr.building_systems['Tcs_re_ahu_0'], tsd['ma_sup_cs_ahu'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Tcs_sys_sup_ahu'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_ahu'] = Tcs_re  # in C
        tsd['mcpcs_sys_ahu'] = mcpcs

        # ARU
        # consider losses according to loads of systems
        frac_aru = [
            aru / sys if sys < 0 else 0
            for aru, sys in zip(tsd['Qcs_sen_aru'], tsd['Qcs_sen_sys'])
        ]
        qcs_sys_aru = tsd['Qcs_sen_aru'] + tsd['Qcs_lat_aru'] + (
            tsd['Qcs_em_ls'] + tsd['Qcs_dis_ls']) * frac_aru
        qcs_sys_aru = np.nan_to_num(qcs_sys_aru)

        # Calc nominal temperatures of systems
        Qcs_sys_aru_0 = np.nanmin(qcs_sys_aru)  # in W

        index = np.where(qcs_sys_aru == Qcs_sys_aru_0)
        ma_sup_0 = tsd['ma_sup_cs_aru'][index[0][0]]
        Ta_sup_0 = tsd['ta_sup_cs_aru'][index[0][0]] + KELVIN_OFFSET
        Ta_re_0 = tsd['ta_re_cs_aru'][index[0][0]] + KELVIN_OFFSET
        Tcs_sup, Tcs_re, mcpcs = np.vectorize(heating_coils.calc_cooling_coil)(
            qcs_sys_aru, Qcs_sys_aru_0, tsd['ta_sup_cs_aru'],
            tsd['ta_re_cs_aru'], bpr.building_systems['Tcs_sup_aru_0'],
            bpr.building_systems['Tcs_re_aru_0'], tsd['ma_sup_cs_aru'],
            ma_sup_0, Ta_sup_0, Ta_re_0)
        tsd['Tcs_sys_sup_aru'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_aru'] = Tcs_re  # in C
        tsd['mcpcs_sys_aru'] = mcpcs

        # SCU
        # consider losses according to loads of systems
        frac_scu = [
            scu / sys if sys < 0 else 0
            for scu, sys in zip(tsd['Qcs_sen_scu'], tsd['Qcs_sen_sys'])
        ]
        qcs_sys_scu = tsd['Qcs_sen_scu'] + (tsd['Qcs_em_ls'] +
                                            tsd['Qcs_dis_ls']) * frac_scu
        qcs_sys_scu = np.nan_to_num(qcs_sys_scu)

        Qcs_sys_scu_0 = np.nanmin(qcs_sys_scu)  # in W
        Ta_cooling_0 = np.nanmin(tsd['ta_cs_set'])

        Tcs_sup, Tcs_re, mcpcs = np.vectorize(radiators.calc_radiator)(
            qcs_sys_scu, tsd['T_int'], Qcs_sys_scu_0, Ta_cooling_0,
            bpr.building_systems['Tcs_sup_scu_0'],
            bpr.building_systems['Tcs_re_scu_0'])
        tsd['Tcs_sys_sup_scu'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_scu'] = Tcs_re  # in C
        tsd['mcpcs_sys_scu'] = mcpcs

    elif control_heating_cooling_systems.has_ceiling_cooling_system(bpr) or \
            control_heating_cooling_systems.has_floor_cooling_system(bpr):

        # SCU
        # consider losses according to loads of systems
        qcs_sys_scu = tsd['Qcs_sen_scu'] + (tsd['Qcs_em_ls'] +
                                            tsd['Qcs_dis_ls'])
        qcs_sys_scu = np.nan_to_num(qcs_sys_scu)

        Qcs_sys_scu_0 = np.nanmin(qcs_sys_scu)  # in W
        Ta_cooling_0 = np.nanmin(tsd['ta_cs_set'])

        # use radiator for ceiling cooling calculation
        Tcs_sup, Tcs_re, mcpcs = np.vectorize(radiators.calc_radiator)(
            qcs_sys_scu, tsd['T_int'], Qcs_sys_scu_0, Ta_cooling_0,
            bpr.building_systems['Tcs_sup_scu_0'],
            bpr.building_systems['Tcs_re_scu_0'])

        tsd['Tcs_sys_sup_scu'] = Tcs_sup  # in C
        tsd['Tcs_sys_re_scu'] = Tcs_re  # in C
        tsd['mcpcs_sys_scu'] = mcpcs

        # AHU
        tsd['Tcs_sys_sup_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_ahu'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_ahu'] = np.zeros(HOURS_IN_YEAR)

        # ARU
        tsd['Tcs_sys_sup_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['Tcs_sys_re_aru'] = np.zeros(
            HOURS_IN_YEAR
        ) * np.nan  # in C  #FIXME: I don't like that non-existing temperatures are 0
        tsd['mcpcs_sys_aru'] = np.zeros(HOURS_IN_YEAR)

    else:
        raise Exception(
            'Cooling system not defined in function: "calc_temperatures_emission_systems"'
        )

    return tsd
Exemplo n.º 2
0
def calc_heating_cooling_loads(bpr, tsd, t):
    """

    :param bpr:
    :param tsd:
    :param t:
    :return:
    """

    # first check for season
    if control_heating_cooling_systems.is_heating_season(t, bpr)\
            and not control_heating_cooling_systems.is_cooling_season(t, bpr):

        # +++++++++++++++++++++++++++++++++++++++++++
        # HEATING
        # +++++++++++++++++++++++++++++++++++++++++++

        # check system
        if not control_heating_cooling_systems.has_heating_system(bpr) \
                or not control_heating_cooling_systems.heating_system_is_active(tsd, t):

            # no system = no loads
            rc_model_temperatures = calc_rc_no_loads(bpr, tsd, t)

        elif control_heating_cooling_systems.has_radiator_heating_system(bpr)\
                or control_heating_cooling_systems.has_floor_heating_system(bpr):

            # radiator or floor heating
            rc_model_temperatures = calc_heat_loads_radiator(bpr, t, tsd)

            tsd['Ehs_lat_aux'][t] = 0  # TODO

        # elif has_local_ac_heating_system:
        # TODO: here could be a heating system using the mini-split unit ("T5")

        elif control_heating_cooling_systems.has_central_ac_heating_system(
                bpr):

            rc_model_temperatures = calc_heat_loads_central_ac(bpr, t, tsd)

        else:
            # message and no heating system
            warnings.warn(
                'Unknown heating system. Calculation without system.')

            # no system = no loads
            rc_model_temperatures = calc_rc_no_loads(bpr, tsd, t)

        # update tsd
        update_tsd_no_cooling(tsd, t)

        # for dashboard
        detailed_thermal_balance_to_tsd(tsd, bpr, t, rc_model_temperatures)

    elif control_heating_cooling_systems.is_cooling_season(t, bpr) \
            and not control_heating_cooling_systems.is_heating_season(t, bpr):

        # +++++++++++++++++++++++++++++++++++++++++++
        # COOLING
        # +++++++++++++++++++++++++++++++++++++++++++

        # check system
        if not control_heating_cooling_systems.has_cooling_system(bpr)\
                or not control_heating_cooling_systems.cooling_system_is_active(bpr, tsd, t):

            # no system = no loads
            rc_model_temperatures = calc_rc_no_loads(bpr, tsd, t)

        elif control_heating_cooling_systems.has_local_ac_cooling_system(bpr):

            rc_model_temperatures = calc_cool_loads_mini_split_ac(bpr, t, tsd)

        elif control_heating_cooling_systems.has_central_ac_cooling_system(
                bpr):

            rc_model_temperatures = calc_cool_loads_central_ac(bpr, t, tsd)

        elif control_heating_cooling_systems.has_3for2_cooling_system(bpr):

            rc_model_temperatures = calc_cool_loads_3for2(bpr, t, tsd)

        elif control_heating_cooling_systems.has_ceiling_cooling_system(bpr) or \
                control_heating_cooling_systems.has_floor_cooling_system(bpr):

            rc_model_temperatures = calc_cool_loads_radiator(bpr, t, tsd)

        else:
            # message and no cooling system
            warnings.warn(
                'Unknown cooling system. Calculation without system.')

            # no system = no loads
            rc_model_temperatures = calc_rc_no_loads(bpr, tsd, t)

        # update tsd
        update_tsd_no_heating(tsd, t)

        # for dashboard
        detailed_thermal_balance_to_tsd(tsd, bpr, t, rc_model_temperatures)

    else:
        warnings.warn('Timestep %s not in heating season nor cooling season' %
                      t)
        calc_rc_no_loads(bpr, tsd, t)

    return