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}
|