pypsa-eur
pypsa-eur copied to clipboard
refactor: allocate heat pump CAPEX on heat bus
Changes proposed in this Pull Request
This PR builds on #1711 and refines how heat pump investment costs are calculated:
- Remove the nominal-efficiency factor and compute investment costs directly on the heat bus.
- Define the booster heat-pump capital cost using:
The capital cost for the booster heat pump of the ptes have been defined as:
capital_cost = (
costs.at[costs_name_heat_pump, "capital_cost"]
* overdim_factor
* (ptes_temperature_boost_ratio / (1 + ptes_temperature_boost_ratio)).max()
)
Explanation
The formula above ensures we only charge for the additional heat provided by boosting, rather than the total stream through the link. Since the model’s heat output for the booster reflects only the added energy, the ratio term appropriately scales the capital cost.
Testing
scenario:
clusters:
- 8
planning_horizons:
- 2030
foresight: overnight
countries: ['DE', 'PL']
clustering:
temporal:
resolution_sector: 12h
Results
- System costs:
- Master: 140.982 Trillion
- With PR changes: 141.069 Trillion
Heat Balances for each Sector:
Urban Central
- Ground heat pump capacity decreases by a factor of nine compared to master
- Contribution from resistive heaters increases (including for PTES boosting)
- Gas boiler capacity increases slightly
Urban decentral
- Air source heat pumps now contribute modestly to the energy mix
Rural
- Gas-boiler output falls by 1 × 10⁸ MWh; ground-source heat pumps supply the balance
- From a cost efficiency standpoint, ground-source heat pumps dominate: their annualized cost is roughly 150 k€/MWh versus about 100 k€/MWh for air-source units, while offering a higher average COP. See figure below.
- Regeneration concern: ground source heat pumps now run as baseload, but operating as baseload would prevent soil recharge. Guidelines for Berlin advise limiting to about 2 000 full-load hours per year to allow proper thermal recovery as stated in this document: leitfaden_geothermie.pdf. Should we handle this in a follow-up PR or include it here, @cpschau and @amos-schledorn?
Checklist
- [x] I tested my contribution locally and it works as intended.
- [x] Code and workflow changes are sufficiently documented.
- [x] Changed dependencies are added to
envs/environment.yaml. - [x] Changes in configuration options are added in
config/config.default.yaml. - [x] Changes in configuration options are documented in
doc/configtables/*.csv. - [x] Sources of newly added data are documented in
doc/data_sources.rst. - [x] A release note
doc/release_notes.rstis added.