Heat Transfer

This file represents all the heat transfers occuring inside the fuel cell system. It is a component of the fuel cell model.

calculate_heat_transfers(sv, i_fc, parameters, S_abs_acl, S_abs_ccl, Sl_agdl, Sl_ampl, Sl_acl, Sl_ccl, Sl_cmpl, Sl_cgdl, **kwargs)

This function calculates the heat transfers occurring inside the fuel cell system.

Parameters:
  • sv (dict) –

    Variables calculated by the solver. They correspond to the fuel cell internal states. sv is a contraction of solver_variables for enhanced readability.

  • i_fc (float) –

    Fuel cell current density at time t (A.m-2).

  • parameters (dict) –

    Parameters of the fuel cell model.

  • S_abs_acl (float) –

    Water absorption in the ACL (mol.m-3.s-1).

  • S_abs_ccl (float) –

    Water absorption in the CCL (mol.m-3.s-1).

  • Sl_agdl (list) –

    Liquid water generated through vapor water liquefaction in the AGDL (mol.m-3.s-1).

  • Sl_ampl (list) –

    Liquid water generated through vapor water liquefaction in the AMPL (mol.m-3.s-1).

  • Sl_acl (float) –

    Liquid water generated through vapor water liquefaction in the ACL (mol.m-3.s-1).

  • Sl_ccl (float) –

    Liquid water generated through vapor water liquefaction in the CCL (mol.m-3.s-1).

  • Sl_cmpl (list) –

    Liquid water generated through vapor water liquefaction in the CMPL (mol.m-3.s-1).

  • Sl_cgdl (list) –

    Liquid water generated through vapor water liquefaction in the CGDL (mol.m-3.s-1).

Returns:
  • dict

    Heat transfers occuring inside the fuel cell system.

Source code in model/heat_transfer.py
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
def calculate_heat_transfers(sv, i_fc, parameters, S_abs_acl, S_abs_ccl, Sl_agdl, Sl_ampl, Sl_acl, Sl_ccl, Sl_cmpl,
                             Sl_cgdl, **kwargs):
    """This function calculates the heat transfers occurring inside the fuel cell system.

    Parameters
    ----------
    sv : dict
        Variables calculated by the solver. They correspond to the fuel cell internal states.
        sv is a contraction of solver_variables for enhanced readability.
    i_fc : float
        Fuel cell current density at time t (A.m-2).
    parameters : dict
        Parameters of the fuel cell model.
    S_abs_acl : float
        Water absorption in the ACL (mol.m-3.s-1).
    S_abs_ccl : float
        Water absorption in the CCL (mol.m-3.s-1).
    Sl_agdl : list
        Liquid water generated through vapor water liquefaction in the AGDL (mol.m-3.s-1).
    Sl_ampl : list
        Liquid water generated through vapor water liquefaction in the AMPL (mol.m-3.s-1).
    Sl_acl : float
        Liquid water generated through vapor water liquefaction in the ACL (mol.m-3.s-1).
    Sl_ccl : float
        Liquid water generated through vapor water liquefaction in the CCL (mol.m-3.s-1).
    Sl_cmpl : list
        Liquid water generated through vapor water liquefaction in the CMPL (mol.m-3.s-1).
    Sl_cgdl : list
        Liquid water generated through vapor water liquefaction in the CGDL (mol.m-3.s-1).

    Returns
    -------
    dict
        Heat transfers occuring inside the fuel cell system.
    """

    # ___________________________________________________Preliminaries__________________________________________________

    # Extraction of the variables
    T_agc, T_ampl, T_acl, T_mem = sv['T_agc'], sv['T_ampl'], sv['T_acl'], sv['T_mem']
    T_ccl, T_cmpl, T_cgc  = sv['T_ccl'], sv['T_cmpl'], sv['T_cgc']
    lambda_acl, lambda_mem, lambda_ccl = sv['lambda_acl'], sv['lambda_mem'], sv['lambda_ccl']
    s_acl, s_ccl, eta_c = sv['s_acl'], sv['s_ccl'], sv['eta_c']

    # Extraction of the operating inputs and parameters
    epsilon_mc, epsilon_gdl, epsilon_cl = parameters['epsilon_mc'], parameters['epsilon_gdl'], parameters['epsilon_cl']
    epsilon_mpl, epsilon_c, n_gdl = parameters['epsilon_mpl'], parameters['epsilon_c'], parameters['n_gdl']
    Hmem, Hgdl, Hmpl = parameters['Hmem'], parameters['Hgdl'], parameters['Hmpl']
    Hacl, Hccl = parameters['Hacl'], parameters['Hccl']

    # Intermediate values
    (k_th_eff_agc_agdl, k_th_eff_agdl_agdl, k_th_eff_agdl_ampl, k_th_eff_ampl_acl, k_th_eff_acl_mem,
            k_th_eff_mem_ccl, k_th_eff_ccl_cmpl, k_th_eff_cmpl_cgdl, k_th_eff_cgdl_cgdl, k_th_eff_cgdl_cgc) \
            =  heat_transfer_int_values(sv, parameters)

    # ______________________________________________Heat flows (J.m-2.s-1)______________________________________________

    # Anode side
    Jt_agc_agdl = - 2 * k_th_eff_agc_agdl * (sv['T_agdl_1'] - T_agc) / (Hgdl / n_gdl)
    Jt_agdl_agdl = {f'agdl_agdl_{i}': -k_th_eff_agdl_agdl[i] * (sv[f'T_agdl_{i+1}'] - sv[f'T_agdl_{i}']) / (Hgdl/n_gdl)
                    for i in range(1, n_gdl)}

    Jt_agdl_ampl = - 2 * k_th_eff_agdl_ampl * (T_ampl - sv[f'T_agdl_{n_gdl}']) / (Hgdl / n_gdl + Hmpl)
    Jt_ampl_acl = - 2 * k_th_eff_ampl_acl * (T_acl - T_ampl) / (Hmpl + Hacl)

    # Membrane side
    Jt_acl_mem = - 2 * k_th_eff_acl_mem * (T_mem - T_acl) / (Hacl + Hmem)
    Jt_mem_ccl = - 2 * k_th_eff_mem_ccl * (T_ccl - T_mem) / (Hccl + Hmem)

    # Cathode side
    Jt_ccl_cmpl = - 2 * k_th_eff_ccl_cmpl * (T_cmpl - T_ccl) / (Hmpl + Hccl)
    Jt_cmpl_cgdl = - 2 * k_th_eff_cmpl_cgdl * (sv['T_cgdl_1'] - T_cmpl) / (Hgdl / n_gdl + Hmpl)
    Jt_cgdl_cgdl = {f'cgdl_cgdl_{i}': -k_th_eff_cgdl_cgdl[i] * (sv[f'T_cgdl_{i+1}'] - sv[f'T_cgdl_{i}']) / (Hgdl/n_gdl)
                    for i in range(1, n_gdl)}

    Jt_cgdl_cgc = - 2 * k_th_eff_cgdl_cgc * (T_cgc - sv[f'T_cgdl_{n_gdl}']) / (Hgdl / n_gdl)

    Jt = {'agc_agdl': Jt_agc_agdl, **Jt_agdl_agdl, 'agdl_ampl': Jt_agdl_ampl, 'ampl_acl': Jt_ampl_acl,
          'acl_mem': Jt_acl_mem, 'mem_ccl': Jt_mem_ccl, 'ccl_cmpl': Jt_ccl_cmpl, 'cmpl_cgdl': Jt_cmpl_cgdl,
          **Jt_cgdl_cgdl, 'cgdl_cgc': Jt_cgdl_cgc}

    # ____________________________________________Heat generated (J.m-3.s-1)____________________________________________

    # The heat dissipated by the electrochemical reaction 2*H2 + O2 -> 2*H2O, in J.m-3.s-1.
    #    It is given by the sum of Peltier and activation heats [vetterFreeOpenReference2019].
    S_r_acl = i_fc / (2 * F * Hacl) # mol.m-3.s-1. It is the amount of hydrogen consumed at the ACL.
    S_r_ccl = i_fc / (4 * F * Hccl) # mol.m-3.s-1. It is the amount of oxygen consumed at the CCL.
    Q_r = {'acl': S_r_acl * T_acl * (-delta_s_HOR),
           'ccl': S_r_ccl * T_ccl * (-delta_s_ORR) + i_fc * eta_c / Hccl}

    # The heat dissipated by the absorption of water from the CL to the membrane, in J.m-3.s-1.
    Q_sorp = {'acl': S_abs_acl * (-delta_h_abs(T_acl)),
              'ccl': S_abs_ccl * (-delta_h_abs(T_ccl))}

    # The heat dissipated by the liquefaction of vapor water, in J.m-3.s-1.
    Q_liq = {**{f'agdl_{i}': Sl_agdl[i] * (- delta_h_liq(sv[f'T_agdl_{i}'])) for i in range(1, n_gdl + 1)},
            **{f'cgdl_{i}': Sl_cgdl[i] * (- delta_h_liq(sv[f'T_cgdl_{i}'])) for i in range(1, n_gdl + 1)},
            'ampl': Sl_ampl * (-delta_h_liq(T_ampl)),
            'cmpl': Sl_cmpl * (-delta_h_liq(T_cmpl)),
            'acl': Sl_acl * (-delta_h_liq(T_acl)),
            'ccl': Sl_ccl * (-delta_h_liq(T_ccl))             }

    # The heat dissipated by the ionic currents (Joule heating + Ohm's law), in J.m-3.s-1.
    Q_p = {'mem': i_fc ** 2 / sigma_p_eff('mem', lambda_mem, T_mem),
           'ccl': i_fc ** 2 / (3 * sigma_p_eff('ccl', lambda_ccl, T_ccl, epsilon_mc))}

    # The heat dissipated by the electric currents (Joule heating + Ohm's law), in J.m-3.s-1.
    Q_e = {**{f'agdl_{i}': i_fc ** 2 / sigma_e_eff('gdl', epsilon_gdl, epsilon_c=epsilon_c) for i in range(1, n_gdl + 1)},
           'acl': i_fc ** 2 / sigma_e_eff('cl', epsilon_cl, epsilon_mc=epsilon_mc),
           'ampl': i_fc ** 2 / sigma_e_eff('mpl', epsilon_mpl),
           'ccl': i_fc ** 2 / (3 * sigma_e_eff('cl', epsilon_cl, epsilon_mc=epsilon_mc)),
           'cmpl': i_fc ** 2 / (3 * sigma_e_eff('mpl', epsilon_mpl)),
           **{f'cgdl_{i}': i_fc ** 2 / sigma_e_eff('gdl', epsilon_gdl, epsilon_c=epsilon_c) for i in range(1, n_gdl + 1)}}

    return {'Jt': Jt, 'Q_r': Q_r, 'Q_sorp': Q_sorp, 'Q_liq': Q_liq, 'Q_p': Q_p, 'Q_e': Q_e}