Electrolyzer is a controls-oriented engineering model for hydrogen production systems. It simulates multi-stack electrolyzer operation, supports PEM and alkaline cell models, tracks degradation, and includes levelized cost of hydrogen (LCOH) analysis utilities.
- Time-series simulation of one or more stacks with supervisory control logic.
- PEM and alkaline electrochemical cell models with polarization curve fitting.
- Degradation tracking (steady, fatigue, and on/off cycling) with optional penalty modes.
- Cost and LCOH analysis tools tied to simulation outputs.
- YAML-based modeling configuration with a JSON schema for validation and defaults.
- Core simulation: electrolyzer/simulation
- Cell models: electrolyzer/simulation/cell_models
- Validation/schema: electrolyzer/tools/validation.py, electrolyzer/tools/modeling_schema.yaml
- LCOH analysis: electrolyzer/tools/analysis
- Examples: examples
- Documentation: docs
Python 3.11+ is required.
pip install .Optional extras:
pip install ".[examples]" # notebooks + example dependencies
pip install -e ".[develop]" # dev + docs tooling
pip install -e ".[all]" # everythingMore detail is in docs/installing.md.
Run a simulation from a YAML configuration and a power signal:
import numpy as np
from electrolyzer.simulation.bert import run_electrolyzer
power_signal = np.ones(3600) * 1e6 # 1 MW for 1 hour, in Watts
elec_sys, results = run_electrolyzer("examples/example_02_electrolyzer/modeling_options.yaml", power_signal)
print(results.head())Compute LCOH using the same signal:
import numpy as np
from electrolyzer.tools.analysis.run_lcoh import run_lcoh
power_signal = np.ones(3600) * 1e6
lcoe = 0.04418 # $/kWh
lcoh_breakdown, lcoh_value = run_lcoh(
"examples/example_04_lcoh/cost_modeling_options.yaml",
power_signal,
lcoe,
)
print(lcoh_value)Models are configured with YAML files validated against a JSON schema. The schema defines defaults and accepted ranges for parameters like stack rating, cell geometry, degradation rates, and control policy settings.
- Schema: electrolyzer/tools/modeling_schema.yaml
- Example PEM configuration: examples/example_02_electrolyzer/modeling_options.yaml
- Example alkaline configuration: examples/example_06_alkaline/default_alkaline.yaml
Key configuration blocks:
electrolyzer.supervisor: system rating and number of stacks.electrolyzer.controller: control strategy and decision policy flags.electrolyzer.stack: stack sizing, cell type, and operational settings.electrolyzer.degradation: degradation rates and end-of-life parameters.electrolyzer.cell_params: PEM or alkaline cell model parameters.electrolyzer.costs: LCOH input data for capex, opex, feedstock, and finance.
The supervisor supports multiple control modes for stack scheduling and power distribution:
PowerSharingRotation,SequentialRotationEvenSplitEagerDeg,EvenSplitHesitantDegSequentialEvenWearDeg,SequentialSingleWearDegBaselineDegDecisionControl(composed from policy flags in the YAML)
See electrolyzer/simulation/supervisor.py for logic.
Each stack tracks voltage degradation from steady operation, fatigue, and on/off cycling. You can choose whether degradation penalizes hydrogen production or increases power draw. The end-of-life voltage delta drives replacement calculations in the LCOH workflow.
run_electrolyzer returns a supervisor object and a pandas.DataFrame of time-series results.
The frame includes overall power and curtailment plus per-stack columns for degradation, cycles,
uptime, hydrogen production rate, and current density.
- Basic simulation: examples/example_02_electrolyzer/example_run.py
- Polarization curve fitting: examples/example_01_polarization/example_run.py
- Controller behavior: examples/example_05_controller/example_05_controller_options.py
- Alkaline configuration: examples/example_06_alkaline/alkaline_example_run.py
- LCOH calculation: examples/example_04_lcoh/cost_example_run.py
Docs are in docs. The landing page is docs/intro.md. If you build the Jupyter Book locally, the generated site lands in docs/_build/html.
pytest