def get_heat_flow_exhaust(matrix_temp: np.ndarray, param: Parameters,
                          theta_as_in: float, h_cv: float) -> float:
    """
    通気層からの排気熱量の計算

    :param matrix_temp: 各部温度計算結果 (5,1), degC
    :param param:       計算条件パラメータ群
    :param theta_as_in: 通気層への流入温度=外気温度, degC
    :param h_cv:        通気層の対流熱伝達率, W/m2K
    :return:            通気層の排気熱量, W/m2
    """

    if param.v_a > 0.0:

        # 通気風量の計算
        v_vent = param.v_a * param.l_d * param.l_w

        ec = math.exp(
            -2.0 * h_cv * param.l_w * param.l_h /
            (get_c_air(matrix_temp[4]) * get_rho_air(matrix_temp[4]) * v_vent))

        # 出口温度の計算
        theta_out = (1.0 - ec) * (matrix_temp[1] +
                                  matrix_temp[2]) / 2.0 + ec * theta_as_in

        # 通気層の排気熱量
        return get_c_air(matrix_temp[4]) * get_rho_air(
            matrix_temp[4]) * v_vent * (theta_out - theta_as_in) / (param.l_w *
                                                                    param.l_h)

    else:
        return 0.0
示例#2
0
def get_vent_wall_temperature_by_simplified_calculation_no_02(
        parm: vw.Parameters, h_out: float):
    """
    簡易計算法案No.2:簡易式により通気層の平均温度を求める関数

    :param parm:    計算条件パラメータ群
    :param h_out:   室外側総合熱伝達率[W/(m2・K)]
    :return:        通気層の平均温度[degC], 室外側から通気層までの熱貫流率[W/(m2・K)], 室内側から通気層までの熱貫流率[W/(m2・K)]
    """

    # 相当外気温度を計算
    theta_sat = epf.get_theta_SAT(theta_e=parm.theta_e,
                                  a_surf=parm.a_surf,
                                  j_surf=parm.J_surf,
                                  h_out=h_out)

    # 有効放射率の計算
    effective_emissivity = htc.effective_emissivity_parallel(
        parm.emissivity_1, parm.emissivity_2)

    # 対流熱伝達率、放射熱伝達率の計算
    if parm.theta_r == 20.0:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_winter(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_winter(
            effective_emissivity=effective_emissivity)
    else:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_summer(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_summer(
            effective_emissivity=effective_emissivity)

    # 室外側から通気層までの熱貫流率、室内側から通気層までの熱貫流率を計算
    u_o = epf.get_u_o(parm.C_1, h_cv, h_rv)
    u_i = epf.get_u_i(parm.C_2, h_cv, h_rv)

    # theta_weを計算
    theta_we = (u_o * theta_sat + u_i * parm.theta_r) / (u_o + u_i)

    # 通気風量の計算
    v_vent = parm.v_a * parm.l_d * parm.l_w

    # 通気層の平均空気温度の計算用の値を設定
    if parm.v_a > 0.0:
        w_h = (u_o + u_i) / (get_c_air(parm.theta_e) *
                             get_rho_air(parm.theta_e) * v_vent)
        epc = 1.0 - math.exp(-w_h * parm.l_h)
        x = 1.0 - epc / (w_h * parm.l_h)
    else:
        w_h = 0.0
        epc = 0.0
        x = 1.0

    theta_as_ave = (1.0 - x) * parm.theta_e + x * theta_we

    return theta_as_ave, u_o, u_i
def get_nusselt_number(theta_1: float, theta_2: float, angle: float,
                       l_h: float, l_d: float) -> float:
    """
    ヌセルト数の計算

    :param theta_1:     通気層に面する面1の表面温度, degC
    :param theta_2:     通気層に面する面2の表面温度, degC
    :param angle:       通気層の傾斜角, degree
    :param l_h:         通気層の長さ, m
    :param l_d:         通気層の厚さ, m
    :return:            ヌセルト数
    """

    # 表面温度の平均値
    theta_ave = (theta_1 + theta_2) / 2.0

    # プラントル数の計算
    pr = get_pr_air(theta_ave)

    # レーリー数の計算
    rayleigh_number = (get_g() * get_beta_air(theta_ave) *
                       abs(theta_1 - theta_2) * (l_d**3) *
                       (get_rho_air(theta_ave)**2) * get_c_air(theta_ave)) / (
                           get_mu_air(theta_ave) * get_lambda_air(theta_ave))

    # ヌセルト数の計算
    nusselt_number = 0
    nu_ct = (1.0 + ((0.104 * rayleigh_number**0.293) /
                    (1.0 + (6310.0 / rayleigh_number)**1.36))**3)**(1 / 3)
    nu_u1 = 0.242 * (rayleigh_number * l_d / l_h)**0.273
    nu_ut = 0.0605 * rayleigh_number**(1 / 3)

    # 傾斜角が0°(水平)のとき
    if angle == 0.0:
        if rayleigh_number > 5830.0:
            nusselt_number = 1.44 * (1.0 - 1708.0 / rayleigh_number) + (
                rayleigh_number / 5830.0)**(1 / 3)
        elif 1708.0 < rayleigh_number <= 5830.0:
            nusselt_number = 1.0 + 1.44 * (1.0 - 1708.0 / rayleigh_number)
        elif rayleigh_number <= 1708.0:
            nusselt_number = 1.0

    # 傾斜角が90°(鉛直)のとき
    elif angle == 90.0:
        nusselt_number = max(nu_ct, nu_u1, nu_ut)

    # 傾斜角が0°<γ≤60°のとき
    elif 0.0 < angle <= 60.0:
        buff = rayleigh_number * math.cos(math.radians(angle))
        if buff >= 5830.0:
            nusselt_number = 1.44 * (1.0 - 1708.0 / buff) * (
                1.0 - (1708.0 *
                       (math.sin(1.8 * math.radians(angle))**1.6)) / buff) + (
                           buff / 5830.0)**(1 / 3)
        elif 1708.0 <= buff < 5830.0:
            nusselt_number = 1.44 * (1.0 - 1708.0 / buff) * (
                1.0 - (1708.0 *
                       (math.sin(1.8 * math.radians(angle))**1.6)) / buff)
        elif buff < 1708.0:
            nusselt_number = 1.0

    # 傾斜角が60°<γ<90°のとき
    elif 60.0 < angle < 90.0:
        buff_g = 0.5 / (1.0 + (rayleigh_number / 3165.0)**20.6)**0.1
        nu_60_1 = (1.0 + ((0.0936 * rayleigh_number**0.314)**7) /
                   (1.0 + buff_g))**(1 / 7)
        nu_60_2 = (0.1044 + 0.1759 * l_d / l_h) * rayleigh_number**0.283
        nu_60 = max(nu_60_1, nu_60_2)
        nu_v = max(nu_ct, nu_u1, nu_ut)
        nusselt_number = nu_60 * (90.0 - angle) / 30.0 + nu_v * (angle -
                                                                 60.0) / 30.0

    else:
        raise ValueError("指定された傾斜角は計算対象外です")

    return nusselt_number
示例#4
0
def get_vent_wall_temperature_by_simplified_calculation_no_01(
        parm: vw.Parameters, h_out: float) -> np.zeros(3):
    """
    簡易計算法案No.1:簡易版の行列式により各部位の温度を求める関数

    :param parm:    計算条件パラメータ群
    :param h_out:   室外側総合熱伝達率[W/(m2・K)]
    :return:        各部位の温度(3×1の行列)[degC], 対流熱伝達率[W/(m2・K)], 放射熱伝達率[W/(m2・K)], 室内側から通気層表面までの熱抵抗[(m2・K)/W]
    """

    # 相当外気温度を計算
    theta_SAT = epf.get_theta_SAT(theta_e=parm.theta_e,
                                  a_surf=parm.a_surf,
                                  j_surf=parm.J_surf,
                                  h_out=h_out)

    # 行列の初期化
    matrix_coeff = np.zeros(shape=(3, 3))
    matrix_const = np.zeros(3)

    # 有効放射率の計算
    effective_emissivity = htc.effective_emissivity_parallel(
        parm.emissivity_1, parm.emissivity_2)

    # 対流熱伝達率、放射熱伝達率の計算
    if parm.theta_r == 20.0:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_winter(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_winter(
            effective_emissivity=effective_emissivity)
    else:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_summer(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_summer(
            effective_emissivity=effective_emissivity)

    # 通気風量の計算
    v_vent = parm.v_a * parm.l_d * parm.l_w

    # 通気層の平均空気温度の計算用の値を設定
    epc_s = 0.0
    if parm.v_a > 0.0:
        beta = (2 * h_cv * parm.l_w) / (get_c_air(parm.theta_e) *
                                        get_rho_air(parm.theta_e) * v_vent)
        epc_s = 1.0 / parm.l_h * 1.0 / beta * (math.exp(-beta * parm.l_h) - 1)

    # 熱抵抗を設定
    R_o = epf.get_r_o(parm.C_1)
    R_i = epf.get_r_i(parm.C_2)

    # 行列に値を設定
    matrix_coeff[0][0] = 1.0 / R_o + h_cv + h_rv
    matrix_coeff[0][1] = -h_cv
    matrix_coeff[0][2] = -h_rv
    matrix_coeff[1][0] = (1.0 + epc_s) / 2.0
    matrix_coeff[1][1] = -1.0
    matrix_coeff[1][2] = (1.0 + epc_s) / 2.0
    matrix_coeff[2][0] = -h_rv
    matrix_coeff[2][1] = -h_cv
    matrix_coeff[2][2] = 1.0 / R_i + h_cv + h_rv

    matrix_const[0] = (1.0 / R_o) * theta_SAT
    matrix_const[1] = epc_s * parm.theta_e
    matrix_const[2] = (1.0 / R_i) * parm.theta_r

    # 逆行列を計算
    matrix_coeff_inv = np.linalg.inv(matrix_coeff)

    # 各部位の温度を計算
    matrix_temp = np.matmul(matrix_coeff_inv, matrix_const)

    return matrix_temp, h_cv, h_rv, R_i
示例#5
0
def get_vent_wall_performance_factor_by_simplified_calculation_no_04(
        parm: vw.Parameters, h_out: float):
    """
    簡易計算法案No.4:簡易計算法案No.3をさらに簡略化

    :param parm:    計算条件パラメータ群
    :param h_out:   室外側総合熱伝達率[W/(m2・K)]
    :return:        修正熱貫流率[W/(m2・K)], 修正日射熱取得率[-], 室内表面熱流[W/m2]
    """

    # 有効放射率の計算
    effective_emissivity = htc.effective_emissivity_parallel(
        parm.emissivity_1, parm.emissivity_2)

    # 対流熱伝達率、放射熱伝達率の計算
    if parm.theta_r == 20.0:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_winter(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_winter(
            effective_emissivity=effective_emissivity)
    else:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_summer(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_summer(
            effective_emissivity=effective_emissivity)

    # 通気風量の計算
    v_vent = parm.v_a * parm.l_d * parm.l_w

    # 熱抵抗を設定
    u_o_s = 1.0 / epf.get_r_o(parm.C_1)
    u_i_s = 1.0 / epf.get_r_i(parm.C_2)

    # 通気層の平均空気温度の計算用の値を設定
    if parm.v_a > 0.0:
        beta = (2 * h_cv * parm.l_w) / (get_c_air(parm.theta_e) *
                                        get_rho_air(parm.theta_e) * v_vent)
        epc_s = 1.0 / parm.l_h * 1.0 / beta * (math.exp(-beta * parm.l_h) - 1)
        epc_s_dash = -((2.0 * h_cv) * epc_s) / (1 + epc_s)
        r_u = 1.0 / ((1.0 / (1.0 / u_o_s + 1.0 / h_rv)) +
                     (1.0 / (1.0 / epc_s_dash + 1.0 / h_cv))) + 1.0 / u_i_s
        r_eta = 1.0 / ((1.0 / (1.0 / u_i_s + 1.0 / h_rv)) +
                       (1.0 / (1.0 / epc_s_dash + 1.0 / h_cv))) + 1.0 / u_o_s
    else:
        r_u = 1.0 / ((1.0 / (1.0 / u_o_s + 1.0 / h_rv)) +
                     (1.0 / (1.0 / h_cv))) + 1.0 / u_i_s
        r_eta = 1.0 / ((1.0 / (1.0 / u_i_s + 1.0 / h_rv)) +
                       (1.0 / (1.0 / h_cv))) + 1.0 / u_o_s

    # 修正U値を計算
    u_dash = 1.0 / r_u

    # 修正η値を計算
    eta_dash = 1.0 / r_eta

    # 室内表面熱流を計算
    q_room_side = u_dash * (parm.theta_e -
                            parm.theta_r) + eta_dash * parm.J_surf

    return h_cv, h_rv, u_dash, eta_dash, q_room_side


# デバッグ用
# parm_1: vw.Parameters = vw.Parameters(10, 20, 500, 1.0, 50.25, 2.55, 3.0, 0.05, 0.05, 45.0, 0.5, 0.45, 0.9, 0.9)
# temps = get_vent_wall_temperature(parm_1, h_out=25.0, h_in=9.0)
# print(temps)
示例#6
0
def get_vent_wall_performance_factor_by_simplified_calculation_no_03(
        parm: vw.Parameters, h_out: float):
    """
    簡易計算法案No.3:通気層を有する壁体の修正熱貫流率、修正日射熱取得率、室内表面熱流を求める関数

    :param parm:    計算条件パラメータ群
    :param h_out:   室外側総合熱伝達率[W/(m2・K)]
    :return:        修正熱貫流率[W/(m2・K)], 修正日射熱取得率[-], 室内表面熱流[W/m2]
    """

    # 有効放射率の計算
    effective_emissivity = htc.effective_emissivity_parallel(
        parm.emissivity_1, parm.emissivity_2)

    # 対流熱伝達率、放射熱伝達率の計算
    if parm.theta_r == 20.0:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_winter(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_winter(
            effective_emissivity=effective_emissivity)
    else:
        h_cv = htc.convective_heat_transfer_coefficient_simplified_summer(
            v_a=parm.v_a)
        h_rv = htc.radiative_heat_transfer_coefficient_simplified_summer(
            effective_emissivity=effective_emissivity)

    # 熱伝達率の計算
    h_v = 2.0 * h_rv + h_cv

    # 通気風量の計算
    v_vent = parm.v_a * parm.l_d * parm.l_w

    # 通気層の熱抵抗の値を設定
    if parm.v_a > 0.0:
        beta = (2 * h_cv * parm.l_w) / (get_c_air(parm.theta_e) *
                                        get_rho_air(parm.theta_e) * v_vent)
        epc_s = 1.0 / parm.l_h * 1.0 / beta * (math.exp(-beta * parm.l_h) -
                                               1.0)
        epc_s_dash = -((2.0 * h_cv) * epc_s) / (1.0 + epc_s)
        h_v_dash = h_v + 1.0 / ((1.0 / epc_s_dash) + h_rv / (h_v * h_cv))
    else:
        h_v_dash = h_v

    # 熱抵抗を設定
    u_o_s = 1.0 / epf.get_r_o(parm.C_1)
    u_i_s = 1.0 / epf.get_r_i(parm.C_2)

    # 修正U値を計算
    buf_x = h_v_dash - (h_v**2 / (u_o_s + h_v))
    u_dash = 1.0 / (1.0 / buf_x + 1.0 / h_v + 1.0 / u_i_s)

    # 修正η値を計算
    r_l = 1.0 / u_o_s + 1.0 / h_v
    r_r1 = 1.0 / u_i_s + 1.0 / h_v
    if parm.v_a > 0.0:
        r_r2 = 1.0 / epc_s_dash + h_rv / (h_v * h_cv)
        eta_dash = r_r2 / (r_l * r_r1 + r_l * r_r2 +
                           r_r1 * r_r2) * (parm.a_surf / h_out)
    else:
        eta_dash = 1.0 / (r_l + r_r1) * (parm.a_surf / h_out)

    # 室内表面熱流を計算
    q_room_side = u_dash * (parm.theta_e -
                            parm.theta_r) + eta_dash * parm.J_surf

    return h_cv, h_rv, u_dash, eta_dash, q_room_side
def get_heat_balance(matrix_temp: np.zeros(5), parm: Parameters,
                     calc_mode_h_cv: str, calc_mode_h_rv: str, h_out: float,
                     h_in: float) -> np.zeros(5):
    """
    熱収支式を解く関数

    :param matrix_temp: 各部温度計算結果 (5,1), degC
    :param parm:        計算条件パラメータ群
    :param calc_mode_h_cv:   対流熱伝達率の計算モード
    :param calc_mode_h_rv:   放射熱伝達率の計算モード
    :param h_out:       室外側総合熱伝達率, W/(m2・K)
    :param h_in:        室内側総合熱伝達率, W/(m2・K)
    :return:           各層の熱収支, W/m2
    """

    # 相当外気温度を計算
    theta_SAT = parm.theta_e + (parm.a_surf * parm.J_surf) / h_out

    # 行列の初期化
    matrix_coeff = np.zeros(shape=(5, 5))
    matrix_const = np.zeros(5)

    # 通気層内の表面温度を設定
    theta_1 = matrix_temp[1]
    theta_2 = matrix_temp[2]

    # 対流熱伝達率の計算
    h_cv = heat_transfer_coefficient.get_convective_heat_transfer_coefficient(
        calc_mode_h_cv, parm.v_a, theta_1, theta_2, parm.angle, parm.l_h,
        parm.l_d)

    # 有効放射率の計算
    effective_emissivity = heat_transfer_coefficient.effective_emissivity_parallel(
        parm.emissivity_1, parm.emissivity_2)

    # 放射熱伝達率の計算
    h_rv = heat_transfer_coefficient.get_radiative_heat_transfer_coefficient(
        calc_mode_h_rv, theta_1, theta_2, effective_emissivity)

    # 通気風量の計算
    v_vent = parm.v_a * parm.l_d * parm.l_w

    # 通気層の平均空気温度の計算用の値を設定
    beta = 0.0
    if parm.v_a > 0.0:
        beta = (2 * h_cv * parm.l_w) / (get_c_air(matrix_temp[4]) *
                                        get_rho_air(matrix_temp[4]) * v_vent)

    # 行列に値を設定
    matrix_coeff[0][0] = h_out + parm.C_1
    matrix_coeff[0][1] = -parm.C_1
    matrix_coeff[1][0] = parm.C_1
    matrix_coeff[1][1] = -(h_cv + h_rv + parm.C_1)
    matrix_coeff[1][2] = h_rv
    matrix_coeff[1][4] = h_cv
    matrix_coeff[2][1] = h_rv
    matrix_coeff[2][2] = -(h_cv + h_rv + parm.C_2)
    matrix_coeff[2][3] = parm.C_2
    matrix_coeff[2][4] = h_cv
    matrix_coeff[3][2] = parm.C_2
    matrix_coeff[3][3] = -(h_in + parm.C_2)
    matrix_coeff[4][4] = -1.0
    matrix_const[0] = h_out * theta_SAT
    matrix_const[3] = -h_in * parm.theta_r

    if parm.v_a > 0.0:
        matrix_coeff[4][1] = (1.0 + 1.0 / parm.l_h * 1.0 / beta *
                              (math.exp(-beta * parm.l_h) - 1)) / 2
        matrix_coeff[4][2] = (1.0 + 1.0 / parm.l_h * 1.0 / beta *
                              (math.exp(-beta * parm.l_h) - 1)) / 2
        matrix_const[4] = 1.0 / parm.l_h * 1.0 / beta * (
            math.exp(-beta * parm.l_h) - 1) * parm.theta_e
    else:
        matrix_coeff[4][1] = 0.5
        matrix_coeff[4][2] = 0.5
        matrix_const[4] = 0.0

    # 熱収支を計算
    q_balance = np.matmul(matrix_coeff, matrix_temp) - matrix_const

    return q_balance