Ejemplo n.º 1
0
def calc_cool_loads_radiator(bpr, t, tsd):
    """
    Procedure for hourly cooling system load calculation for a building with a radiative cooling system.

    Gabriel Happle, February 2018

    :param bpr: building properties row object
    :param t: time step / hour of year [0..8760]
    :param tsd: time series data dict
    :return:
    """

    # (1) The RC-model gives the sensible energy demand for the hour
    # calc rc model sensible demand
    qc_sen_rc_demand, rc_model_temperatures = calc_rc_cooling_demand(
        bpr, tsd, t)

    # (2) A radiative system does not act on humidity
    # no action on humidity
    tsd['g_hu_ld'][t] = 0.0  # no humidification or dehumidification
    tsd['g_dhu_ld'][t] = 0.0
    latent_loads.calc_moisture_content_in_zone_local(
        bpr, tsd, t)  # moisture balance for zone

    # (3) Results are passed to tsd
    # write sensible loads to tsd
    tsd['Qcs_sen_rc'][t] = qc_sen_rc_demand  # demand is load
    tsd['Qcs_sen_scu'][t] = qc_sen_rc_demand
    tsd['Qcs_sen_ahu'][t] = 0.0
    tsd['sys_status_ahu'][t] = 'no system'
    tsd['Qcs_sen_aru'][t] = 0.0
    tsd['sys_status_aru'][t] = 'no system'
    tsd['Qcs_sen_sys'][t] = qc_sen_rc_demand  # sum system loads
    # write temperatures to rc-model
    rc_temperatures_to_tsd(rc_model_temperatures, tsd, t)
    tsd['Qcs_lat_ahu'][t] = 0.0
    tsd['Qcs_lat_aru'][t] = 0.0
    tsd['Qcs_lat_sys'][t] = 0.0
    # mass flows to tsd
    tsd['ma_sup_cs_ahu'][t] = 0.0
    tsd['ta_sup_cs_ahu'][t] = np.nan
    tsd['ta_re_cs_ahu'][t] = np.nan
    tsd['ma_sup_cs_aru'][t] = 0.0
    tsd['ta_sup_cs_aru'][t] = np.nan
    tsd['ta_re_cs_aru'][t] = np.nan

    # (4) Calculate emission losses and pass to tsd
    # emission losses
    q_em_ls_cooling = space_emission_systems.calc_q_em_ls_cooling(bpr, tsd, t)
    tsd['Qcs_em_ls'][t] = q_em_ls_cooling

    # (5) System status to tsd
    if qc_sen_rc_demand < 0.0:
        tsd['sys_status_sen'][t] = 'On'
    else:
        tsd['sys_status_sen'][t] = 'Off'

    # the return is only for the input into the detailed thermal reverse calculations for the dashboard graphs
    return rc_model_temperatures
Ejemplo n.º 2
0
def calc_rc_no_loads(bpr, tsd, t):
    """
       Crank-Nicholson Procedure to calculate heating / cooling demand of buildings
       following the procedure in 2.3.2 in SIA 2044 / Korrigenda C1 zum Merkblatt SIA 2044:2011
       / Korrigenda C2 zum Mekblatt SIA 2044:2011

       Special procedures for updating ventilation air AC-heated and AC-cooled buildings

       Author: Gabriel Happle
       Date: 01/2017

       :param bpr: building properties row object
       :param tsd: time series data dict
       :param t: time step / hour of year [0..8760]
       :return: dict of rc_model_temperatures
       """

    # following the procedure in 2.3.2 in SIA 2044 / Korrigenda C1 zum Merkblatt SIA 2044:2011
    #  / Korrigenda C2 zum Mekblatt SIA 2044:2011

    # STEP 1
    # ******
    # calculate temperatures
    rc_model_temperatures = rc_model_SIA.calc_rc_model_temperatures_no_heating_cooling(
        bpr, tsd, t)

    # calculate humidity
    tsd['g_hu_ld'][t] = 0.0  # no humidification or dehumidification
    tsd['g_dhu_ld'][t] = 0.0
    latent_loads.calc_moisture_content_in_zone_local(bpr, tsd, t)

    # write to tsd
    tsd['T_int'][t] = rc_model_temperatures['T_int']
    tsd['theta_m'][t] = rc_model_temperatures['theta_m']
    tsd['theta_c'][t] = rc_model_temperatures['theta_c']
    tsd['theta_o'][t] = rc_model_temperatures['theta_o']
    update_tsd_no_cooling(tsd, t)
    update_tsd_no_heating(tsd, t)
    tsd['sys_status_ahu'][t] = 'system off'
    tsd['sys_status_aru'][t] = 'system off'
    tsd['sys_status_sen'][t] = 'system off'

    return rc_model_temperatures
Ejemplo n.º 3
0
def calc_cool_loads_3for2(bpr, t, tsd):
    """
    Calculation procedure for cooling system loads of AHU, ARU and SCU subsystems of 3for2 system

    Gabriel Happle, Feb. 2018

    :param bpr: building properties row object
    :param t: time step / hour of year [0..8760]
    :param tsd:  time series data dict
    :return: dict of rc_model_temperatures
    """

    # get values from tsd
    m_ve_mech = tsd['m_ve_mech'][t]
    t_ve_mech_after_hex = tsd['theta_ve_mech'][t]
    x_ve_mech = tsd['x_ve_mech'][t]
    t_int_prev = tsd['T_int'][t - 1]
    x_int_prev = tsd['x_int'][t - 1]

    # ***
    # RC MODEL
    # ***
    # calculate rc model demand
    qc_sen_rc_demand, rc_model_temperatures = calc_rc_cooling_demand(bpr=bpr,
                                                                     tsd=tsd,
                                                                     t=t)

    # ***
    # AHU
    # ***
    # calculate ahu loads
    ahu_loads = airconditioning_model.central_air_handling_unit_cooling(
        m_ve_mech, t_ve_mech_after_hex, x_ve_mech, bpr)
    qc_sen_ahu = ahu_loads['qc_sen_ahu']
    qc_lat_ahu = ahu_loads['qc_lat_ahu']
    tsd['x_ve_mech'][t] = ahu_loads['x_sup_c_ahu']
    # ***
    # ARU
    # ***
    # calculate recirculation unit dehumidification demand
    tsd['T_int'][t] = rc_model_temperatures[
        'T_int']  # dehumidification load needs zone temperature
    # NOTE: here we might make some error, as we calculate the moisture set point for the
    # uncorrected zone air temperature (i.e. no over cooling)
    g_dhu_demand_aru = latent_loads.calc_dehumidification_moisture_load(
        bpr, tsd, t)
    # no sensible demand that controls the ARU
    qc_sen_demand_aru = 0.0
    # calculate ARU system loads with T and x control activated
    aru_system_loads = airconditioning_model.local_air_recirculation_unit_cooling(
        qc_sen_demand_aru,
        g_dhu_demand_aru,
        t_int_prev,
        x_int_prev,
        bpr,
        t_control=False,
        x_control=True)
    g_dhu_aru = aru_system_loads['g_dhu_aru']
    qc_lat_aru = aru_system_loads['qc_lat_aru']
    qc_sen_aru = aru_system_loads['qc_sen_aru']
    # ***
    # SCU
    # ***
    # calculate remaining sensible cooling demand to be met by radiative cooling
    qc_sen_demand_scu = np.min(
        [0.0, qc_sen_rc_demand - qc_sen_ahu - qc_sen_aru])
    # demand is load
    qc_sen_scu = qc_sen_demand_scu
    # ***
    # ADJUST RC MODEL TEMPERATURE
    # ***
    # TODO: check, if it is smaller something went wrong in the calculation
    qc_sen_total = qc_sen_ahu + qc_sen_aru + qc_sen_scu
    # update rc model temperatures
    rc_model_temperatures = rc_model_SIA.calc_rc_model_temperatures_cooling(
        qc_sen_total, bpr, tsd, t)
    # ***
    # ZONE MOISTURE
    # ***
    # action on moisture
    tsd['g_hu_ld'][t] = 0.0  # no humidification
    tsd['g_dhu_ld'][t] = g_dhu_aru
    latent_loads.calc_moisture_content_in_zone_local(bpr, tsd, t)
    # ***
    # emission losses
    # ***
    # emission losses on total sensible load
    # TODO: check

    # write to tsd
    tsd['Qcs_sen_rc'][t] = qc_sen_rc_demand
    tsd['Qcs_sen_ahu'][t] = qc_sen_ahu
    tsd['Qcs_sen_aru'][t] = qc_sen_aru
    tsd['Qcs_sen_scu'][t] = qc_sen_scu
    tsd['Qcs_lat_ahu'][t] = qc_lat_ahu
    tsd['Qcs_lat_aru'][t] = qc_lat_aru
    rc_temperatures_to_tsd(rc_model_temperatures, tsd, t)
    tsd['Qcs_sen_sys'][
        t] = qc_sen_ahu + qc_sen_aru + qc_sen_scu  # sum system loads
    tsd['Qcs_lat_sys'][t] = qc_lat_ahu + qc_lat_aru

    # air flow
    tsd['m_ve_rec'][t] = aru_system_loads['ma_sup_cs_aru']

    # mass flows to tsd
    tsd['ma_sup_cs_ahu'][t] = ahu_loads['ma_sup_cs_ahu']
    tsd['ta_sup_cs_ahu'][t] = ahu_loads['ta_sup_cs_ahu']
    tsd['ta_re_cs_ahu'][t] = ahu_loads['ta_re_cs_ahu']
    tsd['ma_sup_cs_aru'][t] = aru_system_loads['ma_sup_cs_aru']
    tsd['ta_sup_cs_aru'][t] = aru_system_loads['ta_sup_cs_aru']
    tsd['ta_re_cs_aru'][t] = aru_system_loads['ta_re_cs_aru']

    q_em_ls_cooling = space_emission_systems.calc_q_em_ls_cooling(bpr, tsd, t)
    tsd['Qcs_em_ls'][t] = q_em_ls_cooling

    # system status
    tsd['sys_status_ahu'][t] = 'On'
    tsd['sys_status_aru'][t] = 'On:R'
    tsd['sys_status_sen'][t] = 'On'

    # the return is only for the input into the detailed thermal reverse calculations for the dashboard graphs
    return rc_model_temperatures
Ejemplo n.º 4
0
def calc_cool_loads_mini_split_ac(bpr, t, tsd):
    """
    Calculation procedure for cooling system loads of an ARU subsystem of a mini-split AC system

    :param bpr: building properties row object
    :param t: time step / hour of year [0..8760]
    :param tsd:  time series data dict
    :return:
    """

    # (0) Extract values from tsd
    # get values from tsd
    t_int_prev = tsd['T_int'][t - 1]
    x_int_prev = tsd['x_int'][t - 1]

    # (1) The RC-model gives the sensible energy demand for the hour
    # calculate rc model demand
    qc_sen_rc_demand, rc_model_temperatures = calc_rc_cooling_demand(
        bpr, tsd, t)

    # (2) The demand is system load of air recirculation unit (ARU)
    qc_sen_aru = qc_sen_rc_demand
    # "uncontrolled" dehumidification by air recirculation unit
    g_dhu_demand_aru = 0.0  # no demand that controls the unit
    aru_system_loads = airconditioning_model.local_air_recirculation_unit_cooling(
        qc_sen_aru,
        g_dhu_demand_aru,
        t_int_prev,
        x_int_prev,
        bpr,
        t_control=True,
        x_control=False)
    g_dhu_aru = aru_system_loads['g_dhu_aru']
    qc_lat_aru = aru_system_loads['qc_lat_aru']
    # action on moisture
    tsd['g_hu_ld'][t] = 0.0  # no humidification
    tsd['g_dhu_ld'][t] = g_dhu_aru
    latent_loads.calc_moisture_content_in_zone_local(bpr, tsd, t)

    # () Values to tsd
    tsd['Qcs_sen_rc'][t] = qc_sen_rc_demand
    tsd['Qcs_sen_ahu'][t] = 0.0
    tsd['Qcs_sen_aru'][t] = qc_sen_aru
    tsd['Qcs_sen_scu'][t] = 0.0  # not present in this system
    tsd['Qcs_lat_ahu'][t] = 0.0
    tsd['Qcs_lat_aru'][t] = qc_lat_aru
    tsd['Qcs_sen_sys'][t] = qc_sen_aru  # sum system loads
    tsd['Qcs_lat_sys'][t] = qc_lat_aru
    rc_temperatures_to_tsd(rc_model_temperatures, tsd, t)

    # air flow
    tsd['m_ve_rec'][t] = aru_system_loads['ma_sup_cs_aru']

    # mass flows to tsd
    tsd['ma_sup_cs_ahu'][t] = 0.0
    tsd['ta_sup_cs_ahu'][t] = np.nan
    tsd['ta_re_cs_ahu'][t] = np.nan
    tsd['ma_sup_cs_aru'][t] = aru_system_loads['ma_sup_cs_aru']
    tsd['ta_sup_cs_aru'][t] = aru_system_loads['ta_sup_cs_aru']
    tsd['ta_re_cs_aru'][t] = aru_system_loads['ta_re_cs_aru']

    # () emission losses
    q_em_ls_cooling = space_emission_systems.calc_q_em_ls_cooling(bpr, tsd, t)
    tsd['Qcs_em_ls'][t] = q_em_ls_cooling

    # system status
    tsd['sys_status_aru'][t] = 'On:T'
    tsd['sys_status_ahu'][t] = 'no system'
    tsd['sys_status_sen'][t] = 'no system'

    # the return is only for the input into the detailed thermal reverse calculations for the dashboard graphs
    return rc_model_temperatures
Ejemplo n.º 5
0
def calc_heat_loads_central_ac(bpr, t, tsd):
    """
    Procedure for hourly heating system load calculation for a building with a central AC heating system.

    Gabriel Happle, February 2018

    :param bpr: building properties row object
    :param t: time step / hour of year [0..8760]
    :param tsd: time series data dict
    :return:
    """

    # (0) Extract values from tsd
    # get values from tsd
    m_ve_mech = tsd['m_ve_mech'][t]
    t_ve_mech_after_hex = tsd['theta_ve_mech'][t]
    x_ve_mech = tsd['x_ve_mech'][t]
    t_int_prev = tsd['T_int'][t - 1]
    ta_hs_set = tsd['ta_hs_set'][t]

    # (1) The RC-model gives the sensible energy demand for the hour
    # calc rc model sensible demand
    qh_sen_rc_demand, rc_model_temperatures = calc_rc_heating_demand(
        bpr, tsd, t)

    # (2) The load of the central AC unit is determined by the air mass flows and fixed supply temperature
    # calc central ac unit load
    system_loads_ahu = airconditioning_model.central_air_handling_unit_heating(
        m_ve_mech, t_ve_mech_after_hex, x_ve_mech, ta_hs_set, t_int_prev, bpr)
    qh_sen_central_ac_load = system_loads_ahu['qh_sen_ahu']

    # (3) Check demand vs. central AC heating load
    # check for over heating
    if qh_sen_central_ac_load > qh_sen_rc_demand >= 0.0:

        # case: over heating
        qh_sen_aru = 0.0  # no additional heating via air recirculation unit

        # update rc model temperatures
        rc_model_temperatures = rc_model_SIA.calc_rc_model_temperatures_heating(
            qh_sen_central_ac_load, bpr, tsd, t)

        # ARU values to tsd
        ma_sup_hs_aru = 0.0
        ta_sup_hs_aru = np.nan
        ta_re_hs_aru = np.nan
        tsd['sys_status_aru'][t] = 'Off'
        tsd['sys_status_ahu'][t] = 'On:over heating'

    elif 0.0 <= qh_sen_central_ac_load < qh_sen_rc_demand:

        # case: additional heating by air recirculation unit
        qh_sen_aru = qh_sen_rc_demand - qh_sen_central_ac_load

        # calc recirculation air mass flows
        system_loads_aru = airconditioning_model.local_air_recirculation_unit_heating(
            qh_sen_aru, t_int_prev, bpr)

        # update of rc model not necessary

        ma_sup_hs_aru = system_loads_aru['ma_sup_hs_aru']
        ta_sup_hs_aru = system_loads_aru['ta_sup_hs_aru']
        ta_re_hs_aru = system_loads_aru['ta_re_hs_aru']
        tsd['sys_status_aru'][t] = 'On'

        # check status of ahu
        if qh_sen_central_ac_load > 0.0:
            tsd['sys_status_ahu'][t] = 'On'
        elif qh_sen_central_ac_load == 0.0:
            tsd['sys_status_ahu'][t] = 'Off'
            # this state happens during sensible demand but zero mechanical ventilation air flow
            #  (= sufficient infiltration)

    elif 0.0 == qh_sen_central_ac_load == qh_sen_rc_demand:

        # everything off
        qh_sen_aru = 0.0
        ma_sup_hs_aru = 0.0
        ta_sup_hs_aru = np.nan
        ta_re_hs_aru = np.nan
        tsd['sys_status_aru'][t] = 'Off'
        tsd['sys_status_ahu'][t] = 'Off'

    else:
        raise Exception(
            "Something went wrong in the central AC heating load calculation.")

    # act on humidity
    tsd['T_int'][t] = rc_model_temperatures[
        'T_int']  # humidification load needs zone temperature
    g_hu_ld = latent_loads.calc_humidification_moisture_load(
        bpr, tsd, t)  # calc local humidification load
    tsd['Ehs_lat_aux'][t] = airconditioning_model.electric_humidification_unit(
        g_hu_ld, m_ve_mech)  # calc electricity of humidification unit
    tsd['g_hu_ld'][t] = g_hu_ld  # humidification
    tsd['g_dhu_ld'][t] = 0.0  # no dehumidification
    latent_loads.calc_moisture_content_in_zone_local(
        bpr, tsd, t)  # calculate moisture in zone

    # write sensible loads to tsd
    tsd['Qhs_sen_rc'][t] = qh_sen_rc_demand
    tsd['Qhs_sen_shu'][t] = 0.0
    tsd['sys_status_sen'][t] = 'no system'
    tsd['Qhs_sen_ahu'][t] = qh_sen_central_ac_load
    tsd['Qhs_sen_aru'][t] = qh_sen_aru
    rc_temperatures_to_tsd(rc_model_temperatures, tsd, t)
    tsd['Qhs_sen_sys'][
        t] = qh_sen_central_ac_load + qh_sen_aru  # sum system loads
    tsd['Qhs_lat_sys'][t] = 0.0

    # mass flows to tsd
    tsd['ma_sup_hs_ahu'][t] = system_loads_ahu['ma_sup_hs_ahu']
    tsd['ta_sup_hs_ahu'][t] = system_loads_ahu['ta_sup_hs_ahu']
    tsd['ta_re_hs_ahu'][t] = system_loads_ahu['ta_re_hs_ahu']
    tsd['ma_sup_hs_aru'][t] = ma_sup_hs_aru
    tsd['ta_sup_hs_aru'][t] = ta_sup_hs_aru
    tsd['ta_re_hs_aru'][t] = ta_re_hs_aru

    # emission losses
    q_em_ls_heating = space_emission_systems.calc_q_em_ls_heating(bpr, tsd, t)
    tsd['Qhs_em_ls'][t] = q_em_ls_heating

    # the return is only for the input into the detailed thermal reverse calculations for the dashboard graphs
    return rc_model_temperatures