Open Source PEM Cell Simulation Tool
Project description
Table of contents
- What is PEM?
- Overview
- Installation
- Usage
- Issues & Bug Reports
- Contribution
- Todo
- Outputs
- Dependencies
- Thanks
- Reference
- Cite
- Authors
- License
- Donate
- Changelog
- Code of Conduct
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.
Fig1. OPEM Block Diagram
Open Hub | |
PyPI Counter | |
Github Stars |
Branch | master | develop |
Travis | ||
AppVeyor |
Code Quality |
Usage
Executable
-
Open
CMD
(Windows) orTerminal
(UNIX) -
Run
python -m opem
orpython3 -m opem
(or runOPEM.exe
) -
Enter PEM cell parameters (or run standard test vectors)
-
Amphlett Static Model
Input Description Unit 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 A 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 -- R(*Optional) R-Electronic ohm JMax Maximum current density A/(cm^2) N Number of single cells -- -
Larminie-Dicks Static Model
Input Description Unit E0 Fuel cell reversible no loss voltage V A The slope of the Tafel line V T Cell operation temperature K i-start Cell operating current start point A i-step Cell operating current step A i-stop Cell operating current end point A i_n Internal current A i_0 Exchange current at which the overvoltage begins to move from zero A i_L Limiting current A RM The membrane and contact resistances ohm N Number of single cells -- -
Chamberline-Kim Static Model
Input Description Unit E0 Open circuit voltage V b Tafel's parameter for the oxygen reduction V R Resistance ohm.cm^2 i-start Cell operating current start point A i-step Cell operating current step A i-stop Cell operating current end point A A Active area cm^2 m Diffusion's parameters V n Diffusion's parameters (A^-1)(cm^2) N Number of single cells -- -
Padulles Dynamic Model I
Input Description Unit 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 B Activation voltage constant V C Activation constant parameter A^(-1) Rint Fuel cell internal resistance ohm rho Hydrogen-Oxygen flow ratio -- qH2 Molar flow of hydrogen kmol/s N0 Number of cells -- i-start Cell operating current start point A i-step Cell operating current step A i-stop Cell operating current end point A -
Padulles Dynamic Model II
Input Description Unit E0 No load voltage V T Fuel cell temperature K KH2 Hydrogen valve constant kmol.s^(-1).atm^(-1) KH2O Water valve constant kmol.s^(-1).atm^(-1) KO2 Oxygen valve constant kmol.s^(-1).atm^(-1) tH2 Hydrogen time constant s tH2O Water time constant s tO2 Oxygen time constant s B Activation voltage constant V C Activation constant parameter A^(-1) Rint Fuel cell internal resistance ohm rho Hydrogen-Oxygen flow ratio -- qH2 Molar flow of hydrogen kmol/s N0 Number of cells -- i-start Cell operating current start point A i-step Cell operating current step A i-stop Cell operating current end point A -
Padulles-Hauer Dynamic Model
Input Description Unit E0 No load voltage V T Fuel cell temperature K KH2 Hydrogen valve constant kmol.s^(-1).atm^(-1) KH2O Water valve constant kmol.s^(-1).atm^(-1) KO2 Oxygen valve constant kmol.s^(-1).atm^(-1) tH2 Hydrogen time constant s tH2O Water time constant s tO2 Oxygen time constant s t1 Reformer time constant s t2 Reformer time constant s B Activation voltage constant V C Activation constant parameter A^(-1) CV Conversion factor -- Rint Fuel cell internal resistance ohm rho Hydrogen-Oxygen flow ratio -- qMethanol Molar flow of methanol kmol/s N0 Number of cells -- i-start Cell operating current start point A i-step Cell operating current step A i-stop Cell operating current end point A -
Padulles-Amphlett Dynamic Model
Input Description Unit E0 No load voltage V T Fuel cell temperature K KH2 Hydrogen valve constant kmol.s^(-1).atm^(-1) KH2O Water valve constant kmol.s^(-1).atm^(-1) KO2 Oxygen valve constant kmol.s^(-1).atm^(-1) tH2 Hydrogen time constant s tH2O Water time constant s tO2 Oxygen time constant s t1 Reformer time constant s t2 Reformer time constant s A Active area cm^2 l Membrane thickness cm lambda An adjustable parameter with a min value of 14 and max value of 23 -- R(*Optional) R-Electronic ohm B An empirical constant depending on the cell and its operation state (Tafel slope) V JMax Maximum current density A/(cm^2) CV Conversion factor -- rho Hydrogen-Oxygen flow ratio -- qMethanol Molar flow of methanol kmol/s N0 Number of cells -- i-start Cell operating current start point A i-step Cell operating current step A i-stop Cell operating current end point A
- Find your reports in
Model_Name
folder
Screen Record
-
Library
-
Amphlett Static Model
>>> from opem.Static.Amphlett import Static_Analysis >>> Test_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,"B": 0.016,"Name": "Amphlett_Test"} >>> data=Static_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float Eta_Active Eta activation List Eta_Conc Eta concentration List Eta_Ohmic Eta ohmic List VE Estimated FC voltage List - For more information about this model visit here
-
Larminie-Dicks Static Model
>>> from opem.Static.Larminie_Dicks import Static_Analysis >>> Test_Vector = {"A": 0.0587,"E0": 1.178,"B": 0.0517,"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"} >>> data=Static_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float VE Estimated FC voltage List - For more information about this model visit here
-
Chamberline-Kim Static Model
>>> from opem.Static.Chamberline_Kim import Static_Analysis >>> Test_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"} >>> data=Static_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float VE Estimated FC voltage List - For more information about this model visit here
-
Padulles Dynamic Model I
>>> from opem.Dynamic.Padulles1 import Dynamic_Analysis >>> Test_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"} >>> data=Dynamic_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List PO2 Partial pressure List PH2 Partial pressure List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float VE Estimated FC voltage List - For more information about this model visit here
-
Padulles Dynamic Model II
>>> from opem.Dynamic.Padulles2 import Dynamic_Analysis >>> Test_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"} >>> data=Dynamic_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List PO2 Partial pressure List PH2 Partial pressure List PH2O Partial pressure List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float VE Estimated FC voltage List - For more information about this model visit here
-
Padulles-Hauer Dynamic Model
>>> from opem.Dynamic.Padulles_Hauer import Dynamic_Analysis >>> Test_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"} >>> data=Dynamic_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List PO2 Partial pressure List PH2 Partial pressure List PH2O Partial pressure List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float VE Estimated FC voltage List - For more information about this model visit here
-
Padulles-Amphlett Dynamic Model
>>> from opem.Dynamic.Padulles_Amphlett import Dynamic_Analysis >>> Test_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"} >>> data=Dynamic_Analysis(InputMethod=Test_Vector,TestMode=True,PrintMode=False,ReportMode=False)
Key Description Type Status Simulation status Bool P Power List I Cell operating current List V FC voltage List EFF Efficiency List PO2 Partial pressure List PH2 Partial pressure List PH2O Partial pressure List Ph Thermal power List V0 Linear-Apx intercept Float K Linear-Apx slope Float Eta_Active Eta activation List Eta_Conc Eta concentration List Eta_Ohmic Eta ohmic List VE Estimated FC voltage List - For more information about this model visit here
Modes
TestMode
: Active test mode and get/return data asdict
, (Default :False
)ReportMode
: Generate reports(.csv
,.opem
,.html
) and print result in console, (Default :True
)PrintMode
: Control printing in console, (Default :True
)
Note
- Return type :
dict
Telegram Bot
- Send
/start
command to OPEM BOT - Choose models from menu
- Send your test vector according to the template
- Download your results
Try OPEM in Your Browser!
OPEM can be used online in interactive Jupyter Notebooks via the Binder service! Try it out now! :
- Check
.ipynb
files inDocuments
folder - Edit and execute each part of the notes, step by step from the top panel by run button
- For executing a complete simulation, you can edit
Test_Vector
inFull Run
section
Issues & Bug Reports
Just fill an issue and describe it. We'll check it ASAP! or send an email to opem@ecsim.ir.
Gitter is another option :
Todo
- Static Analysis
- Amphlett Static Model
- Nernst Voltage
- PEMFC losses model
- Power of PEMFC
- Efficiency of PEMFC
- Larminie-Dicks Static Model
- PEMFC losses model
- Power of PEMFC
- Efficiency of PEMFC
- Chamberline-Kim Static Model
- PEMFC losses model
- Power of PEMFC
- Efficiency of PEMFC
- Amphlett Static Model
- Flat Output
- Simulation Result
- CSV File
- HTML
- GUI
- Plot Graphs
- Input/Output
- Dynamic Analysis
- Padulles Dynamic Model I
- Nernst Voltage
- Voltage of PEMFC
- Power of PEMFC
- Efficiency of PEMFC
- Padulles Dynamic Model II
- Nernst Voltage
- Voltage of PEMFC
- Power of PEMFC
- Efficiency of PEMFC
- Padulles-Hauer Dynamic Model
- Nernst Voltage
- Voltage of PEMFC
- Power of PEMFC
- Efficiency of PEMFC
- Padulles-Amphlett Dynamic Model
- Nernst Voltage
- Voltage of PEMFC
- Power of PEMFC
- Efficiency of PEMFC
- Padulles Dynamic Model I
- MATLAB
Outputs
Dependencies
master | develop |
Thanks
Reference
1- J. C. Amphlett, R. M. Baumert, R. F. Mann, B. A. Peppley, and P. R. Roberge. 1995. "Performance Modeling of the Ballard Mark IV Solid Polymer Electrolyte Fuel Cell." J. Electrochem. Soc. (The Electrochemical Society, Inc.) 142 (1): 9-15. doi: 10.1149/1.2043959.
2- Jeferson M. Correa, Felix A. Farret, Vladimir A. Popov, Marcelo G. Simoes. 2005. "Sensitivity Analysis of the Modeling Parameters Used in Simulation of Proton Exchange Membrane Fuel Cells." IEEE Transactions on Energy Conversion (IEEE) 20 (1): 211-218. doi:10.1109/TEC.2004.842382.
3- Junbom Kim, Seong-Min Lee, Supramaniam Srinivasan, Charles E. Chamberlin. 1995. "Modeling of Proton Exchange Membrane Fuel Cell Performance with an Empirical Equation." Journal of The Electrochemical Society (The Electrochemical Society) 142 (8): 2670-2674. doi:10.1149/1.2050072.
4- I. Sadli, P. Thounthong, J.-P. Martin, S. Rael, B. Davat. 2006. "Behaviour of a PEMFC supplying a low voltage static converter." Journal of Power Sources (Elsevier) 156: 119–125. doi:10.1016/j.jpowsour.2005.08.021.
5- J. Padulles, G.W. Ault, J.R. McDonald. 2000. "An integrated SOFC plant dynamic model for power systems simulation." Journal of Power Sources (Elsevier) 86 (1-2): 495-500. doi:10.1016/S0378-7753(99)00430-9.
6- Hauer, K.-H. 2001. "Analysis tool for fuel cell vehicle hardware and software (controls) with an application to fuel economy comparisons of alternative system designs." Ph.D. dissertation, Transportation Technology and Policy, University of California Davis.
7- A. Saadi, M. Becherif, A. Aboubou, M.Y. Ayad. 2013. "Comparison of proton exchange membrane fuel cell static models." Renewable Energy (Elsevier) 56: 64-71. doi:dx.doi.org/10.1016/j.renene.2012.10.012.
8- Diego Feroldi, Marta Basualdo. 2012. "Description of PEM Fuel Cells System." Green Energy and Technology (Springer) 49-72. doi:10.1007/978-1-84996-184-4_2
9- Gottesfeld, Shimshon. n.d. The Polymer Electrolyte Fuel Cell: Materials Issues in a Hydrogen Fueled Power Source. http://physics.oregonstate.edu/~hetheriw/energy/topics/doc/electrochemistry/fc/basic/The_Polymer_Electrolyte_Fuel_Cell.htm
10- Mohamed Becherif, Aïcha Saadi, Daniel Hissel, Abdennacer Aboubou, Mohamed Yacine Ayad. 2011. "Static and dynamic proton exchange membrane fuel cell models." Journal of Hydrocarbons Mines and Environmental Research 2 (1)
11- Larminie, J., Dicks, A., & McDonald, M. S. 2003. Fuel cell systems explained (Vol. 2, pp. 207-225). Chichester, UK: J. Wiley. doi: 10.1002/9781118706992.
12- Rho, Y. W., Srinivasan, S., & Kho, Y. T. 1994. ''Mass transport phenomena in proton exchange membrane fuel cells using o 2/he, o 2/ar, and o 2/n 2 mixtures ii. Theoretical analysis.'' Journal of the Electrochemical Society, 141(8), 2089-2096. doi: 10.1149/1.2055066.
Cite
If you use OPEM in your research , please cite this paper :
@article{Haghighi2018, doi = {10.21105/joss.00676}, url = {https://doi.org/10.21105/joss.00676}, year = {2018}, month = {jul}, publisher = {The Open Journal}, volume = {3}, number = {27}, pages = {676}, author = {Sepand Haghighi and Kasra Askari and Sarmin Hamidi and Mohammad Mahdi Rahimi}, title = {{OPEM} : Open Source {PEM} Cell Simulation Tool}, journal = {Journal of Open Source Software} }
Download OPEM.bib(BibTeX Format)
JOSS | |
Zenodo | |
Researchgate |
License
Donate to our project
If you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-) .
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased
1.2 - 2020-03-12
Added
__version__
variablecodecov.yml
file
Changed
- Icon updated
AUTHORS.md
updatedCONTRIBUTING.md
updated- Test system modified
INSTALL.md
modified- CLI menu modified
- Amphlett static model modified
- Chamberline-Kim static model modified
- Larminie-Dicks static model modified
- Current range bug fixed
1.1 - 2019-07-05
Added
- MATLAB examples
Changed
- Menu updated
- Test system modified
- Docstrings modified
- Drop Python 3.4 support
description_control
function modifiedversion_check.py
modifiedREADME.md
modified- Padulles-Amphlett model import bug fixed
dev-requirements.txt
modified- Website switched to HTTPS
1.0 - 2019-03-01
Added
- Interactive notebooks section
version_check.py
CODE_OF_CONDUCT.md
ISSUE_TEMPLATE.md
PULL_REQUEST_TEMPLATE.md
build_exe.bat
build_unix.sh
- Anaconda cloud package
Changed
- Document modified
- Test system modified
README.md
modifieddev-requirements.txt
modifiedrequirements.txt
modifiedCONTRIBUTING.md
modifiedlinear_plot
function bug fixedINSTALL.md
modified
0.9 - 2018-07-14
Added
- JOSS paper
Changed
- Test system updated
setup.py
file modified- Exceptions modified
Removed
PEM.md
0.8 - 2018-04-10
Added
- Overall parameters
- Linear approximation
- Thermal power parameter
- Efficiency vs I plot
- PH2 vs I plot
- PO2 vs I plot
- Power vs Efficiency plot
- Loss vs I plot
- Power-Thermal vs I plot
- macOS version
Changed
- Simulation error response
0.7 - 2018-03-17
Added
- Standard test vectors
- Model description
- Help page
- Warning system
- System block diagram
Changed
- HTML report layout
0.6 - 2018-03-1
Added
- Padulles-Amphlett dynamic model
check_update
function- Webpage document section
Changed
Get_Input
function default params- Exe-File incompatibility fixed
0.5 - 2018-02-16
Added
- Padulles-Hauer dynamic model
- Simulation name
- Interactive HTML report
Changed
- qH2O and qH2 in Padulles dynamic model 2 merged
Static_Analysis
function outputDynamic_Analysis
function outputReportMode
&PrintMode
flags
0.4 - 2018-02-06
Added
- Test case of Padulles model 2
- Padulles dynamic model 2
Changed
- Travis and Appveyor configs
- Jupyter notebook documentation
Removed
- RHO in Larmninee model
0.3 - 2018-01-31
Added
- Padulles dynamic model 1
- GUI folder
Changed
- Test cases for static models
- Padulles refactored
- Jupyter notebook Padulles
0.2 - 2018-01-05
Added
- Test case and CI
- Jupyter notebook and documentation
- Exe-Version
- Badges
- Larminie-Dicks static model
- Chamberline-Kim static model
- pyqt5 to requirments
Removed
- python2.7 setup for pyqt
Changed
- Style to PEP8
- Stack power
0.1 - 2017-12-25
Added
Static_Analyze
prototype- Amphlett analyze
- CSV output files
- Documents and
README.md
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.