Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
88dd5ef
chor: integrate lake heat into existing structure
amos-schledorn Dec 22, 2025
24526ee
feat: update workflow
amos-schledorn Dec 22, 2025
9e9d3dc
remove obsolete comment
amos-schledorn Dec 23, 2025
26f3877
fix lake heat computations
amos-schledorn Dec 23, 2025
3d84902
update docs
amos-schledorn Dec 23, 2025
cd58ff8
feat: include lake water in supply limited heat sources
amos-schledorn Dec 23, 2025
3932368
feat: add lake water heat source colors to plotting configuration
amos-schledorn Dec 23, 2025
28085a4
doc: update docs and release notes
amos-schledorn Dec 23, 2025
b48210f
feat: add lake-water HPs to test configs
amos-schledorn Dec 23, 2025
767371b
integrate HydroLAKES data into new data structure
amos-schledorn Jan 6, 2026
aa8bcee
Update config/config.default.yaml
amos-schledorn Jan 6, 2026
18656fb
feat: add rule to retrieve lake data from HydroLAKES for Belgium
amos-schledorn Jan 6, 2026
0a89f7c
fall back to Europe lake data as archive
amos-schledorn Jan 7, 2026
9a97adc
Merge remote-tracking branch 'origin/master' into lake-heat-pumps
amos-schledorn Jan 7, 2026
9f061d3
Merge branch 'feat-improve-ptx-excess-heat' into lake-heat-pumps
amos-schledorn Jan 7, 2026
e3132d6
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jan 7, 2026
f700376
fix: clarify preheating logic in get_sink_inlet_temperature function
amos-schledorn Jan 7, 2026
d85ff3a
Merge branch 'feat-improve-ptx-excess-heat' into lake-heat-pumps
amos-schledorn Jan 7, 2026
deefe90
Merge branch 'feat-improve-ptx-excess-heat' into lake-heat-pumps
amos-schledorn Feb 3, 2026
1ccf297
feat: add lake data source configuration and heat source temperature …
amos-schledorn Feb 3, 2026
863cfb0
Merge branch 'feat-improve-ptx-excess-heat' into lake-heat-pumps
amos-schledorn Feb 18, 2026
31ed0ea
Merge branch 'feat-improve-ptx-excess-heat' into lake-heat-pumps
amos-schledorn Mar 20, 2026
16450e4
fix lake data retrieval destination folder
amos-schledorn Mar 23, 2026
f7af50f
update lake data retrieval
amos-schledorn Mar 24, 2026
cec3d78
fix: correct lake data output path in retrieval script
amos-schledorn Mar 24, 2026
638cd58
fix handling of small regions for lake heat potentials
amos-schledorn Mar 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions config/config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1455,6 +1455,9 @@ data:
bidding_zones_entsoepy:
source: archive
version: latest
lake_data:
source: primary
version: latest

# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#overpass_api
overpass_api:
Expand Down
4 changes: 4 additions & 0 deletions config/plotting.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,10 @@ plotting:
river_water heat preheater: '#4bb9f2'
river_water heat utilisation: '#4bb9f2'
river_water heat pump: '#4bb9f2'
lake_water heat: '#8db2f7'
lake_water heat preheater: '#8db2f7'
lake_water heat utilisation: '#8db2f7'
lake_water heat pump: '#b1c8f2'
sea_water heat: '#0b222e'
sea_water heat pump: '#0b222e'
ground heat pump: '#2fb537'
Expand Down
1 change: 1 addition & 0 deletions config/test/config.myopic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ sector:
- air
- geothermal
- river_water
- lake_water
Comment thread
amos-schledorn marked this conversation as resolved.
- sea_water
- ptes
urban decentral:
Expand Down
1 change: 1 addition & 0 deletions config/test/config.overnight.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ sector:
- air
- geothermal
- river_water
- lake_water
- sea_water
- ptes
urban decentral:
Expand Down
1 change: 1 addition & 0 deletions config/test/config.perfect.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ sector:
- ptes
- river_water
- sea_water
- lake_water
- geothermal
- ptes
urban decentral:
Expand Down
2 changes: 2 additions & 0 deletions data/versions.csv
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,5 @@ worldbank_commodity_prices,jan-2026,primary,latest supported,2026-02-03,,https:/
worldbank_commodity_prices,jan-2026,archive,latest supported,2026-02-12,,https://data.pypsa.org/workflows/eur/worldbank_commodity_prices/jan-2026/CMO-Historical-Data-Monthly.xlsx
worldbank_urban_population,unknown,primary,latest might-work,2025-12-02,"This is the original World Bank API link, which is sometimes updated; it is not guaranteed to work with the current codebase and data changes without notice.",https://api.worldbank.org/v2/en/indicator/SP.URB.TOTL.IN.ZS?downloadformat=csv
worldbank_urban_population,2025-08-14,archive,latest supported,2026-01-13,,https://data.pypsa.org/workflows/eur/worldbank_urban_population/2025-08-14/API_SP.URB.TOTL.IN.ZS_DS2_en_csv_v2_22447.zip
lake_data,v10,primary,latest supported,2025-12-02,,https://data.hydrosheds.org/file/hydrolakes/HydroLAKES_polys_v10.gdb.zip
lake_data,v10,archive,latest supported,2026-01-13,,https://zenodo.org/records/18164492/files/HydroLAKES_polys_v10_europe.gdb.zip?download=1
1 change: 1 addition & 0 deletions doc/data_inventory.csv
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,4 @@
"ons_lad","UK Local Authority Districts May 2024 Boundaries","Contains shapefiles of local authorities in the United Kingdom.","UK Office for National Statistics","https://geoportal.statistics.gov.uk/datasets/ons::local-authority-districts-may-2024-boundaries-uk-bsc-2/about","Open Government Licence v.3.0"
"bidding_zones_electricitymaps","Electricity Maps Bidding Zones","Geospatial data defining bidding zones for electricity markets in Europe","Electricity Maps","https://github.com/electricitymaps/electricitymaps-contrib","AGPL-3.0"
"bidding_zones_entsoepy","ENTSOE-PY Bidding Zones","Geospatial data defining bidding zones for electricity markets in Europe","EnergieID","https://github.com/EnergieID/entsoe-py","MIT"
"lake_data","HydroLakes database","Shapes, volumes and further data on global lakes","Messager, M.L., Lehner, B., Grill, G., Nedeva, I., Schmitt, O. (2016)","https://www.hydrosheds.org/products/hydrolakes","CC-BY-4.0"
5 changes: 5 additions & 0 deletions doc/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ Release Notes
<<<<<<< HEAD
Upcoming Release
================

* Feat: added support for lake-water sourced heat pumps in district heating, based on data from HydroLakes and a methods from Triebs (https://github.com/PyPSA/pypsa-eur/pull/1951)

* Refactor: Integrated excess heat from Power-to-X processes into the new heat-source structure and moved some code from `scripts/prepare_sector_network.py` to `scripts/def/heat_source.py`. Also updated PtX excess heat efficiencies (https://github.com/PyPSA/pypsa-eur/pull/1944).

* Update heat source handling in `prepare_sector_network` and introduce preheating of heat sources for more realistic system integrations (https://github.com/PyPSA/pypsa-eur/pull/1893).
=======
.. Upcoming Release
Expand Down
35 changes: 35 additions & 0 deletions rules/build_sector.smk
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,41 @@ rule build_river_heat_potential:
)


rule build_lake_heat_potential:
params:
drop_leap_day=config_provider("enable", "drop_leap_day"),
snapshots=config_provider("snapshots"),
dh_area_buffer=config_provider(
"sector", "district_heating", "dh_areas", "buffer"
),
enable_heat_source_maps=config_provider("plotting", "enable_heat_source_maps"),
input:
unpack(input_hera_data),
lake_data=rules.retrieve_lake_data.output["lake_data"],
regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"),
dh_areas=resources("dh_areas_base_s_{clusters}.geojson"),
output:
heat_source_power=resources(
"heat_source_power_lake_water_base_s_{clusters}.csv"
),
heat_source_temperature=resources("temp_lake_water_base_s_{clusters}.nc"),
heat_source_temperature_temporal_aggregate=resources(
"temp_lake_water_base_s_{clusters}_temporal_aggregate.nc"
),
heat_source_energy_temporal_aggregate=resources(
"heat_source_energy_lake_water_base_s_{clusters}_temporal_aggregate.nc"
),
resources:
mem_mb=20000,
log:
logs("build_lake_water_heat_potential_base_s_{clusters}.log"),
benchmark:
benchmarks("build_lake_water_heat_potential_base_s_{clusters}")
threads: 1
script:
"../scripts/build_surface_water_heat_potentials/build_lake_water_heat_potential.py"


def input_heat_source_temperature(
w,
replace_names: dict[str, str] = {
Expand Down
21 changes: 21 additions & 0 deletions rules/retrieve.smk
Original file line number Diff line number Diff line change
Expand Up @@ -1689,3 +1689,24 @@ if (MOBILITY_PROFILES_DATASET := dataset_version("mobility_profiles"))["source"]
run:
copy2(input["kfz"], output["kfz"])
copy2(input["pkw"], output["pkw"])


if (LAKE_DATA_DATASET := dataset_version("lake_data"))["source"] in [
"primary",
"archive",
]:
Comment thread
amos-schledorn marked this conversation as resolved.

rule retrieve_lake_data:
input:
zip_file=storage(LAKE_DATA_DATASET["url"]),
output:
zip_file=f"{LAKE_DATA_DATASET['folder']}/HydroLAKES_polys_v10.gdb.zip",
lake_data=directory(
f"{LAKE_DATA_DATASET['folder']}/HydroLAKES_polys_v10.gdb/HydroLAKES_polys_v10.gdb"
),
run:
copy2(input["zip_file"], output["zip_file"])
unpack_archive(
output["zip_file"],
output["lake_data"],
)
Loading