# ============================================================================
# 第十一章 その他
# 第五節 湿り空気
# ============================================================================

import numpy as np


# ============================================================================
# 5. 相対湿度
# ============================================================================

def get_h(Theta):
    """(1)

    Args:
      Theta: 空気温度（℃）

    Returns:
      相対湿度（%）

    """
    P_v = get_P_v()
    P_vs = get_P_vs(Theta)
    return (P_v / P_vs) * 100


# ============================================================================
# 6. 絶対湿度
# ============================================================================

def get_X(Theta):
    """(2)

    Args:
      Theta: 空気温度（℃）

    Returns:
      絶対湿度（kg/kg(DA)）

    """
    F = get_F()
    P_v = get_P_v()

    return 0.622 * (P_v / (F - P_v))


def get_X_s(Theta):
    """(3)

    Args:
      Theta: 空気温度（℃）

    Returns:
      飽和空気の絶対湿度（kg/kg(DA)）

    """
    F = get_F()
    P_vs = get_P_vs(Theta)

    return 0.622 * (P_vs / (F - P_vs))


# ============================================================================
# 7. 水蒸気圧
# ============================================================================

def get_P_v(Theta):
    """(4)

    Args:
      Theta: 空気温度（℃）

    Returns:
      水蒸気圧（Pa）

    """

    F = get_F()
    X = get_X(Theta)
    return F * (X / (0.622 + X))


# ============================================================================
# 8. 飽和水蒸気圧
# ============================================================================

def get_P_vs(Theta):
    """(5a)(5b)

    Args:
      Theta: 空気温度（℃）

    Returns:
      飽和水蒸気圧（Pa）

    """

    # 表1 式(5b)中の係数
    a1 = -6096.9385
    a2 = 21.2409642
    a3 = -0.02711193
    a4 = 0.00001673952
    a5 = 2.433502
    b1 = -6024.5282
    b2 = 29.32707
    b3 = 0.010613863
    b4 = -0.000013198825
    b5 = -0.49382577

    T = get_T(Theta)

    # (5b)
    if Theta > 0:
        k = a1 / T + a2 + a3 * T + a4 * T ** 2 + a5 * np.log(T)
    else:
        k = b1 / T + b2 + b3 * T + b4 * T ** 2 + b5 * np.log(T)

    # (5a)
    return np.exp(k)


# ============================================================================
# 9. 絶対温度
# ============================================================================

def get_T(Theta):
    """(6)

    Args:
      Theta: 空気温度（℃）

    Returns:
      絶対温度（K）

    """
    return Theta + 273.16


# ============================================================================
# 10. その他
# ============================================================================

# 大気圧 (Pa)
def get_F():
    """ """
    return 101325
# ============================================================================
# 第十一章 その他
# 第五節 湿り空気
# ============================================================================

import numpy as np


# ============================================================================
# 5. 相対湿度
# ============================================================================

def get_h(Theta):
    """(1)

    Args:
      Theta: 空気温度（℃）

    Returns:
      相対湿度（%）

    """
    P_v = get_P_v()
    P_vs = get_P_vs(Theta)
    return (P_v / P_vs) * 100


# ============================================================================
# 6. 絶対湿度
# ============================================================================

def get_X(Theta):
    """(2)

    Args:
      Theta: 空気温度（℃）

    Returns:
      絶対湿度（kg/kg(DA)）

    """
    F = get_F()
    P_v = get_P_v()

    return 0.622 * (P_v / (F - P_v))


def get_X_s(Theta):
    """(3)

    Args:
      Theta: 空気温度（℃）

    Returns:
      飽和空気の絶対湿度（kg/kg(DA)）

    """
    F = get_F()
    P_vs = get_P_vs(Theta)

    return 0.622 * (P_vs / (F - P_vs))


# ============================================================================
# 7. 水蒸気圧
# ============================================================================

def get_P_v(Theta):
    """(4)

    Args:
      Theta: 空気温度（℃）

    Returns:
      水蒸気圧（Pa）

    """

    F = get_F()
    X = get_X(Theta)
    return F * (X / (0.622 + X))


# ============================================================================
# 8. 飽和水蒸気圧
# ============================================================================

def get_P_vs(Theta):
    """(5a)(5b)

    Args:
      Theta: 空気温度（℃）

    Returns:
      飽和水蒸気圧（Pa）

    """

    # 表1 式(5b)中の係数
    a1 = -6096.9385
    a2 = 21.2409642
    a3 = -0.02711193
    a4 = 0.00001673952
    a5 = 2.433502
    b1 = -6024.5282
    b2 = 29.32707
    b3 = 0.010613863
    b4 = -0.000013198825
    b5 = -0.49382577

    T = get_T(Theta)

    # (5b)
    if Theta > 0:
        k = a1 / T + a2 + a3 * T + a4 * T ** 2 + a5 * np.log(T)
    else:
        k = b1 / T + b2 + b3 * T + b4 * T ** 2 + b5 * np.log(T)

    # (5a)
    return np.exp(k)


# ============================================================================
# 9. 絶対温度
# ============================================================================

def get_T(Theta):
    """(6)

    Args:
      Theta: 空気温度（℃）

    Returns:
      絶対温度（K）

    """
    return Theta + 273.16


# ============================================================================
# 10. その他
# ============================================================================

# 大気圧 (Pa)
def get_F():
    """ """
    return 101325
# ============================================================================ # 第十一章 その他 # 第五節 湿り空気 # ============================================================================ # ============================================================================ # 5. 相対湿度 # ============================================================================ (1)      Args:       Theta: 空気温度（℃）      Returns:       相対湿度（%） # ============================================================================ # 6. 絶対湿度 # ============================================================================ (2)      Args:       Theta: 空気温度（℃）      Returns:       絶対湿度（kg/kg(DA)） (3)      Args:       Theta: 空気温度（℃）      Returns:       飽和空気の絶対湿度（kg/kg(DA)） # ============================================================================ # 7. 水蒸気圧 # ============================================================================ (4)      Args:       Theta: 空気温度（℃）      Returns:       水蒸気圧（Pa） # ============================================================================ # 8. 飽和水蒸気圧 # ============================================================================ (5a)(5b)      Args:       Theta: 空気温度（℃）      Returns:       飽和水蒸気圧（Pa） # 表1 式(5b)中の係数 # (5b) # (5a) # ============================================================================ # 9. 絶対温度 # ============================================================================ (6)      Args:       Theta: 空気温度（℃）      Returns:       絶対温度（K） # ============================================================================ # 10. その他 # ============================================================================ # 大気圧 (Pa)