Skip to content

Add h2 fuel cell technology to ReEDS main#111

Open
yijinli22 wants to merge 31 commits into
mainfrom
yl/fuel_cell_fy26
Open

Add h2 fuel cell technology to ReEDS main#111
yijinli22 wants to merge 31 commits into
mainfrom
yl/fuel_cell_fy26

Conversation

@yijinli22

@yijinli22 yijinli22 commented May 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds h2-fuel-cell (hydrogen-powered fuel cell) as a new technology option in ReEDS, complementing the existing ng-fuel-cell (natural gas fuel cell) already in the model. The H2 fuel cell consumes hydrogen (h2fuel, the same fuel as H2-CT/H2-CC), is gated by a new dedicated switch GSw_H2FuelCell, and offers three cost scenarios (conservative/moderate/advanced) based on Reznicek et al. (2026).

Technical details

Implementation notes

  • New tech subset: h2-fuel-cell is added to a new H2_FUEL_CELL subset in i_subtech.csv and flagged under both H2_COMBUSTION and H2_FUEL_CELL in tech-subset-table.csv. It is not merged into ng-fuel-cell's FUEL_CELL subset — the two fuel cells are toggled separately.
  • GAMS gating (b_inputs.gms): adds a new h2_fuel_cell(i) set; the ng-fuel-cell ban was refactored from a subset ban to an explicit ban('ng-fuel-cell') (under the existing Sw_FuelCell=0 block, behavior preserved), and a new block bans h2-fuel-cell when Sw_H2FuelCell=0. The h2_combustion set comment was updated to include fuel cells.
  • Fuel & classification: h2-fuel-cell uses h2fuel (fuel2tech.csv), is added to i.csv and techs_default.csv (region type p).
  • Cost data loaded via plantcostprep.py by adding h2fuelcell to the existing conv_techs loader loop, using switch plantchar_h2fuelcell. Dollar year 2022$ (dollaryear.csv), converted to 2004$ via the standard deflator.
  • Key parameters: unit size 100 MW; lifetime (max age) 40 years; financing/eval period 30 years (same as Gas-CT); construction time 3 years; min load 1% ; heat rate 8.461 MMBtu/MWh ; VOM 1.7054 $/MWh; FOM ~27 $/kW-yr (moderate, 2030); ramp 100%/min; 6% min CF; 5% forced & scheduled outage; 0 start cost; zero direct CO₂/SO₂.
  • Per-technology h2-fuel-cell rows were added across the plant-characteristic and financial input files (emitrate, cost_opres_default/_market, minCF, mttr, outage_forced_static, outage_scheduled_static, ramprate, startcost, unitsize_atb, heat_rate_adj, heat_rate_penalty_spin, degradation_annual_default, years_until_endogenous, construction_times_default, financials_tech_ATB2023/_CRP20/ATB2024, reg_cap_cost_diff_default, nat_gen_tech_frac, ivt_default/_small/_step, futurefiles, runfiles).

Additional changes

  • postprocessing/tech_aggregation.csv, tech_map.csv, tech_style.csv updated for h2-fuel-cell display: mapped to H2-Fuel-Cell, aggregated as "H2 Fuel Cell", color #87A21D. (A matching H2 Fuel Cell style key was added so the aggregated bar renders in compare_cases.py PPTs.)
  • cases_h2-fuelcell.csv added with 5 test scenarios: USA_defaults_fc_pr (runs without fc switch turning on), USA_defaults_fc_mid (moderate cost/deployment cost case), USA_defaults_fc_low (advanced/high deployment cost case), USA_defaults_fc_high (conservative/low deployment cost case), USA_defaults_fc_mid_w_ng_fc (moderate level + NG fuel cell switch turned on).
  • Documentation: new "Hydrogen fuel cells" subsection in docs/source/model_documentation.md, file entries in sources.md, and a Reznicek 2026 entry in references.bib.

Switches added/removed/changed

Switch Values Default Description
GSw_H2FuelCell 0, 1 0 New — enables h2-fuel-cell as a technology option
plantchar_h2fuelcell h2fuelcell_conservative, h2fuelcell_moderate, h2fuelcell_advanced h2fuelcell_moderate New — H2 fuel cell cost and performance scenario

(GSw_FuelCell is unchanged by this PR and continues to govern only ng-fuel-cell.)

Relevant sources or documentation

  • Reznicek, E., Berres, A., Li, Y., et al., Cost Analysis of Heavy-Duty Vehicle Proton Exchange Membrane Fuel Cell Stationary Power Plants (2026), https://doi.org/10.2172/3018256 — unit size and performance parameters
Screenshot 2026-06-30 at 12 44 08 PM

Validation, testing, and comparison report(s)

Ran 1/6 cases under main ReEDS branch, also ran the 5/6 cases under cases_h2-fuelcell.csv to test scenarios (fc_pr, fc_low, fc_mid, fc_high, fc_mid_w_ng_fc) and compared capacity, location, and dispatch with compare_cases.py. The new h2-fuel-cell technology builds, is selected over H2-CT as costs decline, and dispatches as expected.

Location & technology selection (2030)

In 2030 the H2 capacity lands in exactly two BAs : p10 (692 MW) and p31 (210 MW) = 902 MW total in every scenario. The location does not change; only the technology filling those two slots swaps between scenarios as the fuel-cell cost case improves:

Scenario p10 (692 MW) p31 (210 MW)
fc_pr H2-CT H2-CT
fc_low fuel cell fuel cell
fc_mid fuel cell fuel cell
fc_mid_w_ng_fc fuel cell fuel cell
fc_high fuel cell H2-CT

This 902 MW is prescribed build from inputs/capacity_exogenous/interconnection_queues.csv . It appears as a step in 2030 in p10 + p31, holds flat through 2035, then declines. The model fills that prescribed requirement with the cheapest available H2 technology, which is why fuel cell displaces H2-CT in the cheaper cost cases (low/mid), partially in high (p10 only), and not at all in pr (H2-CT baseline).

H2 fuel cell capacity build (MW)

Scenario 2025 2030 2035 2040 2045 2050
pr 0 0 0 0 0 0
low 0 902 902 847 389 140
mid 0 902 902 842 384 138
high 0 692 692 524 256 52

Dispatch / capacity factor

Annual CF is a flat 6.0% across every scenario and year. The 6% is the annual minimum CF requirement imposed in inputs/plant_characteristics/minCF.csv; peak hourly utilization reaches ~16% max when looking at the gen_h.csv file.

Screenshot 2026-06-30 at 1 54 18 PM Screenshot 2026-06-30 at 1 54 38 PM

Checklist for author

Details to double-check

  • References for all H2 fuel cell operational data (Reznicek et al. 2026, DOI 10.2172/3018256)
  • Charge code provided to reviewers
  • Included comparison reports for appropriate test cases
  • Documentation updated if necessary
  • If input data added/modified:
    • Dollar year recorded and converted to 2004$ for GAMS (dollaryear.csv updated for h2fuelcell_* scenarios, 2022$)
    • Units specified (MW capacity, $/kW capex, $/kW-yr FOM, $/MWh VOM, MMBtu/MWh heat rate)
    • No large data files — all inputs are small CSVs
  • No change to process flow (runreeds.py, solve.py)
  • No change to spatial/temporal resolution

General information to guide review

  • Zero impact on results of default case (GSw_H2FuelCell=0 by default — no change when switch is off)
  • No large data file(s) added/modified
  • No substantive impact on runtime
  • No change to process flow
  • No change to package requirements

Did you use LLM tools (chatbot or copilot) in the preparation of this PR? If so, describe how

Yes — Claude Code (Anthropic) assisted with documentation modification and writing this PR language.

Tag points of contact

@yijinli22

@yijinli22 yijinli22 requested a review from louisaserpe June 8, 2026 17:42
@yijinli22 yijinli22 self-assigned this Jun 8, 2026
@yijinli22 yijinli22 changed the title Add h2 fuel cell technology Add h2 fuel cell technology to ReEDS main Jun 29, 2026

@louisaserpe louisaserpe left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Yijin! Let me know if you have any questions or need help with any of these changes.

@@ -0,0 +1,42 @@
i,t,capcost,fom,vom,heatrate
h2-fuel-cell,2010,1342.191177,30.81961856,1.7054,8.461

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you round to 3 decimal places?

@@ -0,0 +1,42 @@
i,t,capcost,fom,vom,heatrate

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you round to 3 decimals?

@@ -0,0 +1,42 @@
i,t,capcost,fom,vom,heatrate
h2-fuel-cell,2010,1352.084006,30.97866356,1.7054,8.461

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you point me to where these fom and vom numbers are coming from? The paper says we assume the same vom and fom as NG CTs but these values don't match the ATB/gas_ATB_2024_moderate

@@ -0,0 +1,42 @@
i,t,capcost,fom,vom,heatrate
h2-fuel-cell,2010,1342.191177,30.81961856,1.7054,8.461
h2-fuel-cell,2011,1342.191177,30.81961856,1.7054,8.461

@louisaserpe louisaserpe Jul 2, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just documenting that I checked that this is HHV

H2-CT_Upgrade,#66C238,>
H2-CT,#A8C839,>
NG-Fuel-Cell,#AD50E2,<
H2-Fuel-Cell,#87A21D,<

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need both here?

canada,Canadian Imports,Remove,Remove,Canadian Imports
h2-ct,H2-CT,Hydrogen Combustion,Thermal,H2-CT
h2-cc,H2-CC,Hydrogen Combustion,Thermal,H2-CC
h2-fuel-cell,H2-Fuel-Cell,H2 Fuel Cell,Thermal,H2-Fuel-Cell

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
h2-fuel-cell,H2-Fuel-Cell,H2 Fuel Cell,Thermal,H2-Fuel-Cell
h2-fuel-cell,H2-Fuel-Cell,Hydrogen Combustion,Remove,H2-Fuel-Cell

Comment thread cases.csv
GSw_H2_Transport,Indicate whether to allow interregional H2 transport via pipelines (only has an effect if GSw_H2=2),0; 1,0,
GSw_H2_TransportLevel,hierarchy level within which to allow H2 pipelines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,cendiv,
GSw_H2_TransportUniform,"Option to override H2 storage/transport costs. Value of 0 (default) defers to default tech-specific, time-varying cost settings specified via H2 inputs when GSw_H2=1 or the H2 nework costs when GSw_H2=2. Specify in $2004 per metric ton.",N/A,0,
GSw_H2Combustion,Switch to turn on/off H2CT and H2CC techs,0; 1,1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
GSw_H2Combustion,Switch to turn on/off H2CT , H2CC, H2 FUEL CELL techs,0; 1,1,

Comment thread cases.csv
GSw_H2,Turn on/off the representation of hydrogen supply/demand balance at a national level without storage (1) or at a regional level with storage (2),0; 1; 2,2,
GSw_H2_CompressorLoad,Turn on/off the accounting of electric loads from compressors used to operate the hydrogen transport network, 0; 1,0,
GSw_H2_Demand_Case,H2 demand case as indicated by the column headers in inputs/consume/h2_exogenous_demand.csv,none; BAU; Aggressive; Decarb; Decarb_with_BAU; LTS,none,
GSw_H2FuelCell,Turn on/off H2 fuel cell (h2-fuel-cell) as a technology option,0; 1,0,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since h2-fuel-cell is marked as YES under H2_COMBUSTION in tech-subset-table, fuel cells will be listed as a banned technology if GSw_H2Combustion is not also turned on. I would add a check in the runreeds.py check_compatibility function to ensure a user has both turned on when trying to include H2 fuel cells as an option

Comment thread cases_h2-fuelcell.csv
@@ -0,0 +1,67 @@
,Default Value,USA_defaults_fc_pr,USA_defaults_fc_mid,USA_defaults_fc_low,USA_defaults_fc_high,USA_defaults_fc_mid_w_ng_fc

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's delete this file before merging into main. I'd suggest adding a small fuel cell case to either the cases_example.csv or cases_test.csv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants