Skip to content

Price every gas, coal and oil plant at the AEO fuel costs - #864

Merged
WeiAi-Energy merged 2 commits into
PyPSA:developfrom
WeiAi-Energy:issue-861
Oct 28, 2026
Merged

WeiAi-Energy merged 2 commits into
PyPSA:developfrom
WeiAi-Energy:issue-861

Conversation

@WeiAi-Energy

Copy link
Copy Markdown
Collaborator

Closes #861.

Builds on #863. Only the last commit, "Price every gas, coal and oil plant at the AEO fuel costs", is new; once #863 merges, it is the only one left here.

Changes proposed in this Pull Request

  • add_extra_components sets the marginal cost of every gas, coal and oil plant in each investment period, existing and new (apply_power_fuel_prices):
    • marginal cost = VOM + that period's AEO fuel cost / efficiency;
    • this replaces the plant level EIA-923 fuel costs;
    • it is skipped when conventional: dynamic_fuel_price is enabled.
  • Oil plants take the distillate fuel oil cost, which they lacked.
  • Sector runs are unchanged, because their plants buy fuel from the state fuel buses (End uses share one fuel bus, so they cannot pay sector-specific fuel prices #862).

Testing

  • 2 new tests in test_aeo_fuel_costs.py.
  • End to end on UT (simpl: 10, clusters: 2, periods 2030 and 2040), fuel price paid in 2023$/MMBtu:
develop this PR
existing CCGT and its copies 3.48 / 3.48 4.41 / 4.92
CCGT-95CCS 3.03 / 3.91 4.41 / 4.92
coal 3.38 to 3.67 (existing), 1.28 to 1.35 (CCS) 2.33 / 2.42
oil 16.87 20.37 / 21.58
  • pytest -m fast: 1002 passed, 11 skipped, 4 failed. The 4 failures also fail on develop: the three GoDEEEP CF registry tests and test_dag_dryrun.py::test_interface_limits_input_follows_config_key.

Checklist

  • I tested my contribution locally and it seems to work fine.
  • pre-commit and pytest -m fast pass locally.
  • Code and workflow changes are sufficiently documented.
  • Changed dependencies are added to workflow/envs/environment.yaml.
  • Changes in configuration options are added in workflow/repo_data/config/config.default.yaml.
  • Changes in configuration options are also documented in docs/source/configtables/*.csv.

🤖 Generated with Claude Code

WeiAi-Energy and others added 2 commits October 28, 2026 01:25
- build_cost_data read the electric sector fuel costs of AEO2023 from
  PUDL, in 2022 dollars it did not convert. It now reads the AEO2026
  Table 3 electric power prices of natural gas, steam coal and
  distillate fuel oil from the EIA API (eia.ProjectedFuelCost), and
  converts them from 2025$/MMBtu to 2023$/MWh_th. PUDL's AEO2026 table
  holds only nominal prices.
- costs: aeo: scenario takes the AEO2026 cases. AEO2026 has no
  Reference case, so reference is its Counterfactual Baseline, and
  existing configs keep validating.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Existing gas, coal and oil plants, and the new units copied from them
  in later periods, paid their plant level fuel cost of EIA-923 2025
  (PUDL), the same in every investment period. Only carriers without an
  existing plant used the AEO fuel costs of the cost data.
- add_extra_components now sets the marginal cost of every gas, coal and
  oil plant in each investment period to its VOM plus that period's AEO
  fuel cost over its efficiency, unless conventional: dynamic_fuel_price
  is enabled.
- Oil plants take the distillate fuel oil cost, which they lacked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@WeiAi-Energy
WeiAi-Energy merged commit e261323 into PyPSA:develop Oct 28, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants