-
-
Notifications
You must be signed in to change notification settings - Fork 57
/
Params.py
472 lines (448 loc) · 18.6 KB
/
Params.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
# -*- coding: utf-8 -*-
"""OPEM parameters."""
Version = 1.2
Website = "http://www.ecsim.ir/opem"
UpdateUrl = "http://www.ecsim.ir/opem/update"
Overview = '''
Modeling and simulation of proton-exchange membrane fuel cells (PEMFC) may work as a
powerful tool in the research & development of renewable energy sources. The Open-Source
PEMFC Simulation Tool (OPEM) is a modeling tool for evaluating the performance of proton
exchange membrane fuel cells. This package is a combination of models (static/dynamic)
that predict the optimum operating parameters of PEMFC. OPEM contained generic models that
will accept as input, not only values of the operating variables such as anode and cathode
feed gas, pressure and compositions, cell temperature and current density, but also cell
parameters including the active area and membrane thickness. In addition, some of the different
models of PEMFC that have been proposed in the OPEM, just focus on one particular FC stack,
and some others take into account a part or all auxiliaries such as reformers. OPEM is
a platform for collaborative development of PEMFC models.'''
Links = '''
Website : http://www.ecsim.ir/opem
Repository : https://github.com/ECSIM/opem
Document : http://www.ecsim.ir/opem/doc/
Paper : https://doi.org/10.21105/joss.00676
* If you use OPEM in your research, please cite our paper
* OPEM GUI is available here : https://github.com/ECSIM/gopem
'''
Warning_Message_1 = "Warning : The value of I(>{}) leads to minus amount of V, please check your inputs"
Warning_Message_2 = "Warning : There are errors in the simulations in some of I amounts; please refer to the .opem file" \
" for review. If you are confident about this parameters, ignore this warning."
Report_Message = "Report is generating ..."
HHV = 1.482
uF = 0.95
n = 8 * (10 ** -3)
m = 3 * (10 ** -5)
xi1 = -0.948
xi3 = 7.6 * (10 ** -5)
xi4 = -1.93 * (10 ** -4)
# F=96500
# R1=8.314
R = 8314.47
F = 96484600
Eth = 1.23
Amphlett_InputParams = {
"T": "Cell operation temperature [K]",
"PH2": "Partial pressure [atm]",
"PO2": "Partial pressure [atm]",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]",
"A": "Active area [cm^2]",
"l": "Membrane thickness [cm]",
"lambda": "An adjustable parameter with a min value of 14 and max value of 23",
"N": "Number of single cells",
"R": "R-Electronic [ohm] (*Optional)",
"JMax": "Maximum current density [A/(cm^2)]"}
Amphlett_OutputParams = {
"Enernst": "V",
"Eta Activation": "V",
"Eta Ohmic": "V",
"Eta Concentration": "V",
"Loss": "V",
"Vcell": "V",
"PEM Efficiency": "",
"Power": "W",
"VStack": "V",
"Power-Stack": "W",
"Power-Thermal": "W"}
Amphlett_Params_Default = {"R": 0}
Amphlett_Description = '''
Amphlett static model is a parametric model that predicting the performance of a solid polymer electrolyte,
proton exchange membrane (PEM) fuel cell. Main concepts in the Amphlett model includes Nernst voltage, PEMFC losses
(activation polarization loss, ohmic polarization loss and concentration polarization loss), power and efficiency
of fuel cell. This parametric model of PEMFC using a combination of mechanistic and empirical approach. The ideal
standard potential (Nernst potential) of an H2/O2 FC is 1.229 V with liquid water product. The actual cell potential
is decreased from its reference potential because of irreversible losses.
'''
Amphlett_Standard_Vector = {
"T": 343.15,
"PH2": 1,
"PO2": 1,
"i-start": 0,
"i-stop": 75,
"i-step": 0.1,
"A": 50.6,
"l": 0.0178,
"lambda": 23,
"N": 1,
"R": 0,
"JMax": 1.5,
"Name": "Amphlett_Test"}
Larminiee_InputParams = {
"T": "Cell operation temperature [K]",
"E0": "Fuel cell reversible no loss voltage [V]",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]",
"RM": "The membrane and contact resistances [ohm]",
"i_n": "Internal current [A]",
"i_0": "Exchange current at which the overvoltage begins to move from zero [A]",
"i_L": "Limiting current [A]",
"A": "The slope of the Tafel line [V]",
"N": "Number of single cells"}
Larminiee_OutputParams = {
"Vcell": "V",
"PEM Efficiency": "",
"Power": "W",
"VStack": "V",
"Power-Stack": "W",
"Power-Thermal": "W"}
Larminiee_Description = '''
Larminie-Dicks model is obtained for large variation of the load parameters. In this model, the fuel cell is represented
by means of its voltage-current characteristic obtained in static operating mode. In fact, Larminie-Dicks static model
presents the fuel cell voltage as a function of the current magnitude. The obtained polarization curve is composed of
three main regions corresponding to the predominance of electrochemical activation phenomena (region I), a linear
part (region II) where the voltage drop is mainly due to electronic and ionic internal resistances and the last
region where the diffusion kinetics of gases through the electrodes becomes the limiting factor (region III). This
last zone is characterized by a rapid voltage fall.
'''
Larminiee_Standard_Vector = {
"A": 0.06,
"E0": 1.178,
"T": 328.15,
"RM": 0.0018,
"i_0": 0.00654,
"i_L": 100.0,
"i_n": 0.23,
"N": 23,
"i-start": 0.1,
"i-stop": 98,
"i-step": 0.1,
"Name": "Larminiee_Test"}
Chamberline_InputParams = {
"E0": "Open circuit voltage [V]",
"b": "Tafel's parameter for the oxygen reduction [V]",
"R": "Resistance [ohm.cm^2]",
"m": "Diffusion's parameters [V] (*Optional)",
"n": "Diffusion's parameters [(A^-1)(cm^2)] (*Optional)",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]",
"A": "Active area [cm^2]",
"N": "Number of single cells"}
Chamberline_OutputParams = {
"Vcell": "V",
"PEM Efficiency": "",
"Power": "W",
"VStack": "V",
"Power-Stack": "W",
"Power-Thermal": "W"}
Chamberline_Params_Default = {"m": 3 * (10 ** -8),"n":8}
Chamberline_Description = '''
Chamberlin-Kim static model is an empirical equation which was developed to fit the experimental cell potential (E) vs.
current density (J) data for proton exchange membrane fuel cells (PEMFCs), at several temperatures, pressures, and
oxygen compositions in the cathode gas mixture. The exponential term compensates for the mass-transport regions of the
V vs. i plot; i.e., the increase in slope of the pseudolinear region and the subsequent rapid fall-off of the cell
potential with increasing current density. The terms E0 and b yield the electrode kinetic parameters for oxygen
reduction in the PEMFC and R represents the resistance, predominantly ohmic and, to a small extent, the charge
transfer resistance of the electro-oxidation of hydrogen. The exponential term characterizes the mass-transport
region of the V vs. i plot. The parameter n has more pronounced effects than the parameter m in this region. In
Chamberline Kim's model, the values of the parameters(five parameters: E0, b, R, m, n) vary depending on many
variables, including the composition of the Membrane Electrode Assemblies(MEA), the fuel and oxidant used, besides
the local temperature, pressure, and humidity of the MEA. They also depend on the stack itself, so that it can not
be transposed to another fuel cell without new parameter identification.
'''
Chamberline_Standard_Vector = {
"A": 50.0,
"E0": 0.982,
"b": 0.0689,
"R": 0.328,
"m": 0.000125,
"n": 9.45,
"N": 1,
"i-start": 1,
"i-stop": 42.5,
"i-step": 0.1,
"Name": "Chamberline_Test"}
Padulles_InputParams = {
"N0": "Number of cells",
"E0": "No load voltage [V]",
"T": "Fuel cell temperature [K]",
"KH2": "Hydrogen valve constant [kmol.s^(-1).atm^(-1)]",
"KO2": "Oxygen valve constant [kmol.s^(-1).atm^(-1)]",
"tH2": "Hydrogen time constant [s]",
"tO2": "Oxygen time constant [s]",
"qH2": "Molar flow of hydrogen [kmol.s^(-1)]",
"rho": "Hydrogen-Oxygen flow rate",
"Rint": "Fuel cell internal resistance [ohm]",
"B": "Activation voltage constant [V]",
"C": "Activation constant parameter [A^(-1)]",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]"}
Padulles_Outparams = {
"FC Voltage": "V",
"FC Power": "W",
"FC Efficiency": "",
"PO2": "atm",
"PH2": "atm",
"E": "V",
"Power-Thermal": "W"}
Padulles_Description = '''
In this model, Nernst and fuel cell potential were modeled as a function of oxygen and hydrogen gases partial pressure
that can be calculated from independent variables or constants. The partial pressure of gases is proportional to
the molar flow of each gas.
'''
Padulles_Standard_Vector = {
"T": 343,
"E0": 0.6,
"N0": 88,
"KO2": 0.0000211,
"KH2": 0.0000422,
"tH2": 3.37,
"tO2": 6.74,
"B": 0.04777,
"C": 0.0136,
"Rint": 0.00303,
"rho": 1.168,
"qH2": 0.0004,
"i-start": 0,
"i-stop": 100,
"i-step": 0.1,
"Name": "PadullesI_Test"}
Padulles2_InputParams = {
"N0": "Number of cells",
"E0": "No load voltage [V]",
"T": "Fuel cell temperature [K]",
"KH2": "Hydrogen valve constant [kmol.s^(-1).atm^(-1)]",
"KO2": "Oxygen valve constant [kmol.s^(-1).atm^(-1)]",
"tH2": "Hydrogen time constant [s]",
"tO2": "Oxygen time constant [s]",
"qH2": "Molar flow of hydrogen [kmol.s^(-1)]",
"rho": "Hydrogen-Oxygen flow rate",
"Rint": "Fuel cell internal resistance [ohm]",
"B": "Activation voltage constant [V]",
"C": "Activation constant parameter [A^(-1)]",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]",
"KH2O": "Water Valve Constant [kmol.s^(-1).atm^(-1)]",
"tH2O": "Water time constant [s]"}
Padulles2_Outparams = {
"FC Voltage": "V",
"FC Power": "W",
"FC Efficiency": "",
"PO2": "atm",
"PH2": "atm",
"PH2O": "atm",
"E": "V",
"Power-Thermal": "W"}
Padulles2_Description = '''
In this model, Nernst and fuel cell potential were modeled as a function of water, oxygen and hydrogen gases partial
pressure that can be calculated from independent variables or constants. The partial pressure of gases is proportional
to the molar flow of each gas.
'''
Padulles2_Standard_Vector = {
"T": 343,
"E0": 0.6,
"N0": 5,
"KO2": 0.0000211,
"KH2": 0.0000422,
"KH2O": 0.000007716,
"tH2": 3.37,
"tO2": 6.74,
"tH2O": 18.418,
"B": 0.04777,
"C": 0.0136,
"Rint": 0.00303,
"rho": 1.168,
"qH2": 0.0004,
"i-start": 0.1,
"i-stop": 100,
"i-step": 0.1,
"Name": "Padulles2_Test"}
Padulles_Hauer_InputParams = {
"N0": "Number of cells",
"E0": "No load voltage [V]",
"T": "Fuel cell temperature [K]",
"KH2": "Hydrogen valve constant [kmol.s^(-1).atm^(-1)]",
"KO2": "Oxygen valve constant [kmol.s^(-1).atm^(-1)]",
"tH2": "Hydrogen time constant [s]",
"tO2": "Oxygen time constant [s]",
"t1": "Reformer time constant [s]",
"t2": "Reformer time constant [s]",
"rho": "Hydrogen-Oxygen flow rate",
"Rint": "Fuel cell internal resistance [ohm]",
"B": "Activation voltage constant [V]",
"C": "Activation constant parameter [A^(-1)]",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]",
"KH2O": "Water valve constant [kmol.s^(-1).atm^(-1)]",
"tH2O": "Water time constant [s]",
"qMethanol": "Molar flow of methanol [kmol.s^(-1)]",
"CV": "Conversion factor"}
Padulles_Hauer_Outparams = {
"FC Voltage": "V",
"FC Power": "W",
"FC Efficiency": "",
"PO2": "atm",
"PH2": "atm",
"PH2O": "atm",
"E": "V",
"Power-Thermal": "W"}
Padulles_Hauer_Description = '''
Padulles-Hauer Dynamic Model is a dynamic electrochemical simulation model of a grid independent proton exchange
membrane (PEM) fuel cell. This model includes a methanol reformer to generate hydrogen from methanol and the PEM stack.
The model is used to predict the output voltage and power of a PEMFC. It has to be noted that the reformer model is a
second order transfer function.
'''
Padulles_Hauer_Standard_Vector = {
"T": 343,
"E0": 0.6,
"N0": 5,
"KO2": 0.0000211,
"KH2": 0.0000422,
"KH2O": 0.000007716,
"tH2": 3.37,
"tO2": 6.74,
"t1": 2,
"t2": 2,
"tH2O": 18.418,
"B": 0.04777,
"C": 0.0136,
"Rint": 0.00303,
"rho": 1.168,
"qMethanol": 0.0002,
"CV": 2,
"i-start": 0.1,
"i-stop": 100,
"i-step": 0.1,
"Name": "Padulles_Hauer_Test"}
Padulles_Amphlett_Params_Default = {"R": 0, "E0": 1.229}
Padulles_Amphlett_InputParams = {
"N0": "Number of cells",
"E0": "No load voltage [V], Default Value:" + str(
Padulles_Amphlett_Params_Default["E0"]),
"T": "Fuel cell temperature [K]",
"KH2": "Hydrogen valve constant [kmol.s^(-1).atm^(-1)]",
"KO2": "Oxygen valve constant [kmol.s^(-1).atm^(-1)]",
"tH2": "Hydrogen time constant [s]",
"tO2": "Oxygen time constant [s]",
"t1": "Reformer time constant [s]",
"t2": "Reformer time constant [s]",
"rho": "Hydrogen-Oxygen flow rate",
"R": "R-Electronic [ohm] (*Optional)",
"i-start": "Cell operating current start point [A]",
"i-step": "Cell operating current step",
"i-stop": "Cell operating current end point [A]",
"KH2O": "Water valve constant [kmol.s^(-1).atm^(-1)]",
"tH2O": "Water time constant [s]",
"qMethanol": "Molar flow of methanol [kmol.s^(-1)]",
"CV": "Conversion factor",
"A": "Active area [cm^2]",
"l": "Membrane thickness [cm]",
"lambda": "An adjustable parameter with a min value of 14 and max value of 23",
"B": "An empirical constant depending on the cell and its operation state (Tafel slope) [V]",
"JMax": "Maximum current density [A/(cm^2)]"}
Padulles_Amphlett_Outparams = {
"FC Voltage": "V",
"FC Power": "W",
"FC Efficiency": "",
"PO2": "atm",
"PH2": "atm",
"PH2O": "atm",
"E": "V",
"Eta Activation": "V",
"Eta Ohmic": "V",
"Eta Concentration": "V",
"Loss": "V",
"Power-Thermal": "W"}
Padulles_Amphlett_Description = '''
This model is an integration of Padulles-Hauer dynamic model with Amphlett static model. The advantage of this dynamic
model is using Amphlett equation for simulating the polarization values. Amphlett model as the most complicated and
preferable static model, but the most precise. Based on this model, the obtained polarization voltage is identical to
the experimental results.
'''
Padulles_Amphlett_Standard_Vector = {
"A": 50.6,
"l": 0.0178,
"lambda": 23,
"JMax": 1.5,
"T": 343,
"N0": 5,
"KO2": 0.0000211,
"KH2": 0.0000422,
"KH2O": 0.000007716,
"tH2": 3.37,
"tO2": 6.74,
"t1": 2,
"t2": 2,
"tH2O": 18.418,
"B": 0.016,
"rho": 1.168,
"qMethanol": 0.0002,
"CV": 2,
"i-start": 0.1,
"i-stop": 75,
"i-step": 0.1,
"Name": "Padulles_Amphlett_Test"}
General_Padulles_Description = '''
The Padulles dynamic model can predict the transient response of cell voltage, temperature of the cell, hydrogen/oxygen
out flow rates and cathode and anode channel temperatures/pressures under sudden change in load current. Hence, a
dynamic fuel cell simulation is developed in this model, which incorporates the dynamics of flow and pressure in the
anode and cathode channels and mass/ heat transfer transient features in the fuel cell body. This model based on some
assumption such; the gases are ideal, the stack is fed with hydrogen and air, temperature is stable at all times, the
ratio of pressures between the interior and exterior of the channel is large, The channels that transport gases along
the electrodes have a fixed volume, only source of losses is ohmic and Nernst equation can be applied too.
'''
Description_Menu = {
"Amphlett_Analysis (Static)": Amphlett_Description,
"Larminiee_Analysis (Static)": Larminiee_Description,
"Chamberline_Kim_Analysis (Static)": Chamberline_Description,
"Padulles_Analysis I (Dynamic)": Padulles_Description,
"Padulles_Analysis II (Dynamic)": Padulles2_Description,
"Padulles_Hauer Analysis (Dynamic)": Padulles_Hauer_Description,
"Padulles_Amphlett Analysis (Dynamic)": Padulles_Amphlett_Description,
"General Padulles": General_Padulles_Description,
"Overview": Overview,
"Links": Links}
Mode_Menu = "\n\n[M]: More information\n\n[T]: Run standard test vector\n\n[P]: Enter your parameters (*default)\n\nPlease select a mode : "
Description_Links = {
"Amphlett_Analysis (Static)": "http://www.ecsim.ir/opem/doc/Static/Amphlett.html",
"Larminiee_Analysis (Static)": "http://www.ecsim.ir/opem/doc/Static/Larminie_Dicks.html",
"Chamberline_Kim_Analysis (Static)": "http://www.ecsim.ir/opem/doc/Static/Chamberline_Kim.html",
"Padulles_Analysis I (Dynamic)": "http://www.ecsim.ir/opem/doc/Dynamic/Padulles1.html",
"Padulles_Analysis II (Dynamic)": "http://www.ecsim.ir/opem/doc/Dynamic/Padulles2.html",
"Padulles_Hauer Analysis (Dynamic)": "http://www.ecsim.ir/opem/doc/Dynamic/Padulles_Hauer.html",
"Padulles_Amphlett Analysis (Dynamic)": "http://www.ecsim.ir/opem/doc/Dynamic/Padulles_Amphlett.html"}
Vectors = {
"Amphlett_Analysis (Static)": Amphlett_Standard_Vector,
"Larminiee_Analysis (Static)": Larminiee_Standard_Vector,
"Chamberline_Kim_Analysis (Static)": Chamberline_Standard_Vector,
"Padulles_Analysis I (Dynamic)": Padulles_Standard_Vector,
"Padulles_Analysis II (Dynamic)": Padulles2_Standard_Vector,
"Padulles_Hauer Analysis (Dynamic)": Padulles_Hauer_Standard_Vector,
"Padulles_Amphlett Analysis (Dynamic)": Padulles_Amphlett_Standard_Vector}
Overall_Params_Max_Description = {
"Pmax": "Maximum power [W]",
"VFC|Pmax": "Cell voltage at maximum power [V]",
"Efficiency|Pmax": "Cell efficiency at maximum power",
"Ptotal(Elec)": "Total electrical power [W]",
"Ptotal(Thermal)": "Total thermal power [W]"}
Overall_Params_Linear_Description = {
"V0": "Intercept of the curve obtained by linear approximation [V]",
"K": "Slope of the curve obtained by linear approximation [A^(-1)]",
"Pmax(L-Approx)": "Maximum power obtained by linear approximation [W]",
"VFC|Pmax(L-Approx)": "Cell voltage at maximum power obtained by linear approximation [V]",
}
Test_List = ['test_Amphlett.py', 'test_Chamberline_Kim.py', 'test_Functions.py', 'test_Larminie_Dicks.py', 'test_Padulles1.py', 'test_Padulles2.py', 'test_Padulles_Amphlett.py', 'test_Padulles_Hauer.py']