Add h2 fuel cell technology to ReEDS main - #111
Conversation
There was a problem hiding this comment.
Small comment: I'm not sure if I'm a representative sample, but at first glance I would expect GSw_FuelCell to control H2 fuel cells rather than methane fuel cells. The comment on GSw_FuelCell also doesn't reflect its operation; it says it controls both H2 and methane, but only controls methane.
To try to avoid confusion, my suggestion would be to rename GSw_FuelCell to GSw_GasFuelCell, in keeping with the other non-default gas techs (GSw_GasCC_H_1x1, GSw_GasCC_H_2x1, GSw_GasCT_Aero). Its functionality can stay the same, but the switch comment should be modified to remove the reference to H2.
|
|
||
| if int(sw['GSw_H2FuelCell']) == 1 and int(sw['GSw_H2Combustion']) == 0: | ||
| raise ValueError( | ||
| 'H2 fuel cells technology belong to the H2_COMBUSTION tech subset, so they are ' |
There was a problem hiding this comment.
Because fuel cells don't involve combustion, including H2 fuel cells in H2_COMBUSTION seems confusing to me. I would suggest keeping these separate. If you need a new category to refer to H2-CT, H2-CC, and H2-FuelCells together, I'd suggest adding a column to tech-subset-table.csv and calling it something like H2_GEN.
Relatedly, I think it'd be best to allow the user to turn on H2 fuel cells and turn off H2-CT/H2-CC if they want to. So if H2 fuel cells are removed from H2_COMBUSTION, you can remove this compatibility check.
louisaserpe
left a comment
There was a problem hiding this comment.
Can you update the PR text to mention the changes to the NG fuel cell switch?
|
Can you add a comparison report against the main branch for the USA_defaults case? |
|
Let's add a link to the comparison report in the body of the PR: comparison with main |
Summary
Adds
h2-fuel-cell(hydrogen-powered fuel cell) as a new technology option in ReEDS, complementing the existingng-fuel-cell(natural gas fuel cell) already in the model. The H2 fuel cell consumes hydrogen (h2fuel, the same fuel asH2-CT/H2-CC), is gated by a new dedicated switchGSw_H2FuelCell, and offers three cost scenarios (conservative/moderate/advanced) based on Reznicek et al. (2026).Technical details
Implementation notes
ng-fuel-cellswitchGSw_FuelCellwas renamed toGSw_GasFuelCell(and the GAMS setfuel_cell(i)→ng_fuel_cell(i); theFUEL_CELLsubset column →NG_FUEL_CELLintech-subset-table.csvandi_subtech.csv) so its scope is unambiguously natural-gas-only.h2-fuel-cellis governed by the newGSw_H2FuelCell. The two fuel cells are fully independent — any on/off combination is valid.H2_GENsubset, decoupled fromH2_COMBUSTION.h2-fuel-cellis added to a newH2_FUEL_CELLsubset and to a newH2_GENsubset (= {H2-CT, H2-CC, h2-fuel-cell}).H2_COMBUSTIONwas narrowed to combustion only ({H2-CT, H2-CC}), soGSw_H2Combustion/GSw_H2Combustionupgradenow affect only the turbines.H2_GENdrives the hydrogen fuel/emissions/accounting (H2 supply-demand balance, fuel cost, leakage emissions, retirement eligibility,tg_i('h2')group, first-year, and reporting), so a fuel cell built with the turbines off still consumes and pays for hydrogen.h2-fuel-cellis also flaggedGENTECHandRE, matching H2-CT/H2-CC.b_inputs.gms): addsh2_fuel_cell(i),h2_gen(i), andng_fuel_cell(i)sets. Bans are now per-technology:Sw_GasFuelCell=0bansng-fuel-cell,Sw_H2FuelCell=0bansh2-fuel-cell,Sw_H2Combustion=0bansH2_COMBUSTION(turbines only).h2-fuel-cellusesh2fuel(fuel2tech.csv), is added toi.csvandtechs_default.csv(region typep).h2-fuel-cellrows were added across the plant-characteristic and financial input files (emitrate,h2_leakage_rate,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.csvupdated forh2-fuel-celldisplay: mapped toH2-Fuel-Cell(color#87A21D) and aggregated with H2-CT/H2-CC. The aggregation label was renamedHydrogen Combustion→Hydrogen Generation(in bothtech_aggregation.csvand the matchingtech_style.csvcolor key) so it accurately covers the fuel cell alongside the turbines.GSw_MGA_SubObjectivegained anh2_genoption (in addition to the existingh2_combustion).cases_h2-fuelcell.csvadded 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).docs/source/model_documentation.md, file entries insources.md, and Reznicek 2026 + Schmitt (NETL) 2022 entries inreferences.bib.Switches added/removed/changed
GSw_GasFuelCell0,10GSw_FuelCell— enablesng-fuel-cell(natural gas fuel cell) onlyGSw_H2FuelCell0,10h2-fuel-cell(independent ofGSw_GasFuelCellandGSw_H2Combustion)plantchar_h2fuelcellh2fuelcell_conservative,h2fuelcell_moderate,h2fuelcell_advancedh2fuelcell_moderateGSw_H2Combustion0,11H2_COMBUSTION)GSw_MGA_SubObjectiveh2_combustion,h2_gen…gentechh2_gen(H2-CT + H2-CC + fuel cell)Relevant sources or documentation
Validation, testing, and comparison report(s)
Ran 1/7 cases under the main ReEDS branch and the remaining cases under
cases_h2-fuelcell.csvto test the H2 fuel-cell scenarios (prbaseline,fc_low,fc_mid,fc_high) plus three sensitivities (fc_mid_ngfc,fc_mid_no_h2cc,fc_mid_no_h2combust), and compared capacity, location, and dispatch withcompare_cases.py. The newh2-fuel-celltechnology builds, is selected overH2-CTas costs decline, and dispatches as expected. (This run uses 3-year solve steps: 2029, 2032, 2035, 2038, 2041, 2044, 2047, 2050.)Location & technology selection (2029, first build year)
The H2 capacity lands in CA_LA (461 MW) in every scenario; only
fc_lowadds a second, economic build of 127 MW in NM_W. The location is fixed and only the technology filling the CA_LA slot swaps between scenarios as the fuel-cell cost case improves:prfc_lowfc_midfc_mid_ngfcfc_mid_no_h2ccfc_highThis CA_LA capacity is a prescribed build from
inputs/capacity_exogenous/interconnection_queues.csv. It appears as a step in 2029, holds flat through 2038, then declines. The model fills that prescribed requirement with the cheapest available H2 technology — fuel cell in the cheaper cost cases (low/mid), H2-CT inpr(baseline) andhighwhere the fuel cell is too expensive.H2 fuel cell capacity build (MW)
prlowmidhighH2-CT capacity build (MW)
prhighlow/midSensitivities: NG fuel cell and H2-CC
fc_mid_ngfcis identical tofc_mid(fuel-cell capacity and generation match exactly across all years; only second-order solver noise elsewhere). Enabling NG fuel cells added zero capacity.fc_mid_no_h2ccis identical tofc_mid, so removing the H2-CC option changes nothing. There is no distincth2-cctechnology in the output (H2-CC would begas-ccon hydrogen fuel), so a verified zero requires the fuel-consumption output.fc_mid_no_h2combust(H2-CT and H2-CC both prohibited): H2-CT generation is 0 and the fuel-cell build is unchanged fromfc_mid. Prohibiting all H2 combustion has no effect on the mid case because the fuel cell was already the selected H2 technology — H2 combustion only builds when the fuel cell is prohibited or too expensive (pr,high).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 in thegen_h.csvoutput. H2-CT and fuel cell dispatch identically (same CF, same hourly shape).comparison reports
comparison with main
Checklist for author
Details to double-check
dollaryear.csvupdated forh2fuelcell_*scenarios, 2022$)runreeds.py,solve.py)General information to guide review
GSw_H2FuelCell=0by default — no change when switch is off)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