Skip to content

Commit

Permalink
Merge branch 'master' into config-deprecations
Browse files Browse the repository at this point in the history
FabianHofmann authored Jan 26, 2025
2 parents d32c591 + c61f1a3 commit 88fc4b5
Showing 111 changed files with 2,646 additions and 2,759 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/push-images.yaml
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ jobs:
echo "hash_last_changed=$hash_last_changed" >> $GITHUB_ENV
- name: 'Login to GitHub Container Registry'
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
4 changes: 2 additions & 2 deletions .github/workflows/validate.yaml
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ jobs:
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: self-hosted
steps:
- uses: lkstrp/pypsa-validator@v0.2.4
- uses: lkstrp/pypsa-validator@v0.2.5
with:
step: run-self-hosted-validation
env_file: envs/environment.yaml
@@ -29,7 +29,7 @@ jobs:
needs: run-validation
runs-on: ubuntu-latest
steps:
- uses: lkstrp/pypsa-validator@v0.2.4
- uses: lkstrp/pypsa-validator@v0.2.5
with:
step: create-comment
snakemake_config: config/test/config.validator.yaml
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ cff-version: 1.1.0
message: "If you use this package, please cite it in the following way."
title: "PyPSA-Eur: An open sector-coupled optimisation model of the European energy system"
repository: https://github.com/pypsa/pypsa-eur
version: 0.13.0
version: v2025.01.0
license: MIT
authors:
- family-names: Brown
3 changes: 2 additions & 1 deletion Snakefile
Original file line number Diff line number Diff line change
@@ -53,6 +53,7 @@ wildcard_constraints:
ll=r"(v|c)([0-9\.]+|opt)",
opts=r"[-+a-zA-Z0-9\.]*",
sector_opts=r"[-+a-zA-Z0-9\.\s]*",
planning_horizons=r"[0-9]{4}",


include: "rules/common.smk"
@@ -91,7 +92,7 @@ rule create_scenarios:
output:
config["run"]["scenarios"]["file"],
conda:
"envs/retrieve.yaml"
"envs/environment.yaml"
script:
"config/create_scenarios.py"

24 changes: 12 additions & 12 deletions config/config.default.yaml
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@
# SPDX-License-Identifier: CC0-1.0

# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#top-level-configuration
version: 0.13.0
version: v2025.01.0
tutorial: false

logging:
@@ -37,8 +37,6 @@ foresight: overnight
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#scenario
# Wildcard docs in https://pypsa-eur.readthedocs.io/en/latest/wildcards.html
scenario:
ll:
- vopt
clusters:
- 39
- 128
@@ -74,13 +72,13 @@ enable:

# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#co2-budget
co2_budget:
2020: 0.701
2025: 0.524
2030: 0.297
2035: 0.150
2040: 0.071
2045: 0.032
2050: 0.000
2020: 0.720 # average emissions of 2019 to 2021 relative to 1990, CO2 excl LULUCF, EEA data, European Environment Agency. (2023a). Annual European Union greenhouse gas inventory 1990–2021 and inventory report 2023 - CRF Table. https://unfccc.int/documents/627830
2025: 0.648 # With additional measures (WAM) projection, CO2 excl LULUCF, European Environment Agency. (2023e). Member States’ greenhouse gas (GHG) emission projections 2023. https://www.eea.europa.eu/en/datahub/datahubitem-view/4b8d94a4-aed7-4e67-a54c-0623a50f48e8
2030: 0.450 # 55% reduction by 2030 (Ff55)
2035: 0.250
2040: 0.100 # 90% by 2040
2045: 0.050
2050: 0.000 # climate-neutral by 2050

# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#electricity
electricity:
@@ -109,7 +107,7 @@ electricity:
Store: [battery, H2]
Link: [] # H2 pipeline

powerplants_filter: (DateOut >= 2023 or DateOut != DateOut) and not (Country == 'Germany' and Fueltype == 'Nuclear')
powerplants_filter: (DateOut >= 2024 or DateOut != DateOut) and not (Country == 'Germany' and Fueltype == 'Nuclear')
custom_powerplants: false
everywhere_powerplants: []

@@ -130,6 +128,8 @@ electricity:
enable: false
by_country: false

transmission_limit: vopt

# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#atlite
atlite:
default_cutout: europe-2013-sarah3-era5
@@ -839,7 +839,7 @@ industry:
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#costs
costs:
year: 2030
version: v0.10.0
version: v0.10.1
social_discountrate: 0.02
fill_values:
FOM: 0
2 changes: 1 addition & 1 deletion config/test/config.electricity.yaml
Original file line number Diff line number Diff line change
@@ -83,7 +83,7 @@ solving:
options: highs-default

check_objective:
enable: true
enable: false
expected_value: 3.8120188094e+07

plotting:
2 changes: 0 additions & 2 deletions config/test/config.myopic.yaml
Original file line number Diff line number Diff line change
@@ -14,8 +14,6 @@ run:
foresight: myopic

scenario:
ll:
- v1.5
clusters:
- 5
sector_opts:
4 changes: 1 addition & 3 deletions config/test/config.overnight.yaml
Original file line number Diff line number Diff line change
@@ -13,8 +13,6 @@ run:


scenario:
ll:
- v1.5
clusters:
- 5
sector_opts:
@@ -85,7 +83,7 @@ solving:
mem: 4000

check_objective:
enable: true
enable: false
expected_value: 7.0847670388e+08

plotting:
4 changes: 1 addition & 3 deletions config/test/config.perfect.yaml
Original file line number Diff line number Diff line change
@@ -14,8 +14,6 @@ run:
foresight: perfect

scenario:
ll:
- v1.0
clusters:
- 5
sector_opts:
@@ -90,7 +88,7 @@ solving:
mem: 4000

check_objective:
enable: true
enable: false
expected_value: 1.4427662256e+10

plotting:
41 changes: 20 additions & 21 deletions data/transmission_projects/manual/new_links.csv
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
,bus0,bus1,length,p_nom,project_status,tags,x0,y0,x1,y1
TYNDP2018_154,Exeter (UK),Menuel (FR),220,1400,in_permitting,"{name:France-Alderney-Britain, url:https://tyndp.entsoe.eu/tyndp2018/projects/projects/153}",-3.533899,50.718412,-1.469216,49.509594
TYNDP2018_25,Tourbe (FR),Chilling (GB),247.2,1000,under_construction,"{name:IFA2, url:https://tyndp.entsoe.eu/tyndp2018/projects/projects/25]",-0.172042,49.083593,-1.277269,50.839338
TYNDP2018_285,Kingsnorth (UK),Warande (FR),160,1400,in_permitting,"{name:Gridlink, url:https://tyndp.entsoe.eu/tyndp2018/projects/projects/285}",0.596111111111111,51.41972,2.376776,51.034368
TYNDP2018_190,Simadalen (NO),Peterhead (UK),650,1400,in_permitting,"{name:NorthConnect, url:https://tyndp.entsoe.eu/tyndp2018/projects/projects/190}",7.16027,60.500527,-1.784066,57.508123
TYNDP2018_16,Gatica (ES),Cubnezais (FR),370,2200,in_permitting,"{name:Biscay Gulf, url:https://tyndp.entsoe.eu/tyndp2018/projects/projects/16}",-2.867,43.367,-0.408943,45.074191
TYNDP2018_21,Piossasco (IT),Grand Ile (FR),190,1000,under_construction,"{name:Italy-France, url:https://tyndp.entsoe.eu/tyndp2018/projects/projects/21}",7.468,44.9898,6.045,45.472
TYNDP2022_286,Waterford (IE),Pembroke (UK),180,500,under_construction,"{name:Greenlink,url:{name:TYNDP2022_286,url:https://tyndp2022-project-platform.azurewebsites.net/projectsheets/transmission/286}}",-6.987,52.26,-4.986,51.686
TYNDP2024_1134,Bordeaux (FR),Nantes (FR),312,640,under_consideration,"{name:GiLA,url:{name:TYNDP2024_1134,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",-1.209,46.901,-0.576,44.96
TYNDP2024_1157,Milan (IT),Viterbo (IT),500,2000,in_permitting,"{name:HG North Tyrrhenian Corridor,url:{name:TYNDP2024_1157,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",9.409,45.553,12.015,42.244
TYNDP2024_1166,Ferrara (IT),Foggia (IT),582,2000,in_permitting,"{name:HG Adriatic Corridor,url:{name:TYNDP2024_1166,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",11.661,44.855,15.55,41.513
TYNDP2024_1169,Fioumesanto (IT),Montalto (IT),390,1000,in_permitting,"{name:SAPEI 2,url:{name:TYNDP2024_1169,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",8.283,40.79,11.602,42.331
TYNDP2024_1168,Rossano (IT),Latina (IT),496,2000,in_permitting,"{name:HG Ionian-Tyrrhenian Corridor,url:{name:TYNDP2024_1168,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",16.629,39.568,12.779,41.43
TYNDP2024_1168_1,Rossano (IT),Catania (IT),330,2000,in_permitting,"{name:HG Ionian-Tyrrhenian Corridor 2,url:{name:TYNDP2024_1168_1,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",16.629,39.568,15.049,37.408
TYNDP2024_1192,Fetteresso (UK),Emden (DE),800,2000,under_consideration,"{name:Germany-UK Hybrid Interconnector,url:{name:TYNDP2024_1192,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",-2.383,56.991,7.207,53.376
TYNDP2024_1197,Hornsea (UK),Moerdijk (NL),460,1200,under_consideration,"{name:NU-Link Interconnector,url:{name:TYNDP2024_1197,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",-0.261,53.655,4.586,51.661
TYNDP2024_1210,La Farga (ES),La Spezia (IT),725,2091,under_consideration,"{name:APOLLO-LINK,url:{name:TYNDP2024_1210,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",2.883,42.062,9.884,44.107
TYNDP2024_1211,Lubmin (DE),Sindi (EE),960,2000,under_consideration,"{name:Baltic WindConnector (BWC),url:{name:TYNDP2024_1211,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",13.686,54.139,24.671903,58.429161
TYNDP2024_1216,Constanta (RO),Albertirsa (HU),930,2500,under_consideration,"{name:High-Voltage Direct Current Interconnector Project Romania-Hungary,url:{name:TYNDP2024_1216,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",28.588,44.201,19.584,47.224
TYNDP2024_1229,Ovelgönne (DE),Marxheim (DE),433,4000,in_permitting,"{name:Rhine-Main-Link,url:{name:TYNDP2024_1229,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",8.379,53.315,8.435,50.078
TYNDP2024_1231,Arachthos (GR),Ottenhofen (DE),600,3000,under_consideration,"{name:Green Aegean Interconnector,url:{name:TYNDP2024_1231,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",20.967,39.185,11.868,48.207
,bus0,bus1,length,p_nom,project_status,build_year,tags,x0,y0,x1,y1
TYNDP2024_153,Exeter (UK),Menuel (FR),220,1250,in_permitting,2031,"{name:France-Alderney-Britain,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}",-3.533899,50.718412,-1.469216,49.509594
TYNDP2018_25,Tourbe (FR),Chilling (GB),247.2,1000,completed,2021,"{name:IFA2, url:https://en.wikipedia.org/wiki/IFA-2]",-0.172042,49.083593,-1.277269,50.839338
TYNDP2024_285,Kingsnorth (UK),Warande (FR),158,1250,in_permitting,2030,"{name:Gridlink, url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}",0.596111111111111,51.41972,2.376776,51.034368
TYNDP2024_16,Gatica (ES),Cubnezais (FR),370,2000,under_construction,2028,"{name:Biscay Gulf, url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}",-2.867,43.367,-0.408943,45.074191
TYNDP2018_21,Piossasco (IT),Grand Ile (FR),190,1000,completed,2023,"{name:Italy-France, url:https://www.terna.it/en/projects/projects-common-interest/italy-france-electrical-interconnection}",7.468,44.9898,6.045,45.472
TYNDP2022_286,Waterford (IE),Pembroke (UK),180,500,under_construction,2025,"{name:Greenlink,url:https://www.greenlink.ie/faqs}",-6.987,52.26,-4.986,51.686
TYNDP2024_1134,Bordeaux (FR),Nantes (FR),312,640,under_consideration,2032,"{name:GiLA,url:{name:TYNDP2024_1134,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",-1.209,46.901,-0.576,44.96
TYNDP2024_1157,Milan (IT),Viterbo (IT),500,2000,in_permitting,2030,"{name:HG North Tyrrhenian Corridor,url:{name:TYNDP2024_1157,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",9.409,45.553,12.015,42.244
TYNDP2024_1166,Ferrara (IT),Foggia (IT),582,2000,in_permitting,2036,"{name:HG Adriatic Corridor,url:{name:TYNDP2024_1166,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",11.661,44.855,15.55,41.513
TYNDP2024_1169,Fioumesanto (IT),Montalto (IT),390,1000,in_permitting,2040,"{name:SAPEI 2,url:{name:TYNDP2024_1169,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",8.283,40.79,11.602,42.331
TYNDP2024_1168,Rossano (IT),Latina (IT),496,2000,in_permitting,2035,"{name:HG Ionian-Tyrrhenian Corridor,url:{name:TYNDP2024_1168,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",16.629,39.568,12.779,41.43
TYNDP2024_1168_1,Rossano (IT),Catania (IT),330,2000,in_permitting,2035,"{name:HG Ionian-Tyrrhenian Corridor 2,url:{name:TYNDP2024_1168_1,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",16.629,39.568,15.049,37.408
TYNDP2024_1192,Fetteresso (UK),Emden (DE),800,2000,under_consideration,2033,"{name:Germany-UK Hybrid Interconnector,url:{name:TYNDP2024_1192,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",-2.383,56.991,7.207,53.376
TYNDP2024_1197,Hornsea (UK),Moerdijk (NL),460,1200,under_consideration,2031,"{name:NU-Link Interconnector,url:{name:TYNDP2024_1197,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",-0.261,53.655,4.586,51.661
TYNDP2024_1210,La Farga (ES),La Spezia (IT),725,2091,under_consideration,2032,"{name:APOLLO-LINK,url:{name:TYNDP2024_1210,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",2.883,42.062,9.884,44.107
TYNDP2024_1211,Lubmin (DE),Sindi (EE),960,2000,under_consideration,2037,"{name:Baltic WindConnector (BWC),url:{name:TYNDP2024_1211,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",13.686,54.139,24.671903,58.429161
TYNDP2024_1216,Constanta (RO),Albertirsa (HU),930,2500,under_consideration,2030,"{name:High-Voltage Direct Current Interconnector Project Romania-Hungary,url:{name:TYNDP2024_1216,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",28.588,44.201,19.584,47.224
TYNDP2024_1229,Ovelgönne (DE),Marxheim (DE),433,4000,in_permitting,2035,"{name:Rhine-Main-Link,url:{name:TYNDP2024_1229,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",8.379,53.315,8.435,50.078
TYNDP2024_1231,Arachthos (GR),Ottenhofen (DE),600,3000,under_consideration,2035,"{name:Green Aegean Interconnector,url:{name:TYNDP2024_1231,url:https://eepublicdownloads.blob.core.windows.net/public-cdn-container/tyndp-documents/TYNDP2024/240220_TYNDP2024_project_portfolio.xlsx}}",20.967,39.185,11.868,48.207
8 changes: 4 additions & 4 deletions data/transmission_projects/tyndp2020/new_links.csv
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
,project_status,length,build_year,underground,p_nom,tags,x0,y0,x1,y1
TYNDP2020_0,under_consideration,330.0,2033,True,600.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/234"", ""tyndp2020_proj_id""=>""234"", ""tyndp2020_invest_id""=>""1236"", ""tyndp_status""=>""under_consideration""",12.492828,55.609384,16.11557,54.132674
TYNDP2020_1,in_permitting,700.0,2026,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/235"", ""tyndp2020_proj_id""=>""235"", ""tyndp2020_invest_id""=>""664"", ""tyndp_status""=>""in_permitting""",9.24087500000001,53.906765,9.12211621382025,49.0939516665424
TYNDP2020_2,in_permitting,558.0,2026,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/235"", ""tyndp2020_proj_id""=>""235"", ""tyndp2020_invest_id""=>""664"", ""tyndp_status""=>""in_permitting""",9.327393,53.931837,10.081329,49.950336
TYNDP2020_1_NEP_DC3,confirmed,700.0,2028,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/235"", ""tyndp2020_proj_id""=>""235"", ""tyndp2020_invest_id""=>""664"", ""tyndp_status""=>""in_permitting""",9.1395423,53.8972549,9.1258701,49.1425406
TYNDP2020_2_NEP_DC4,confirmed,558.0,2028,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/235"", ""tyndp2020_proj_id""=>""235"", ""tyndp2020_invest_id""=>""664"", ""tyndp_status""=>""in_permitting""",9.3741366,53.9233519,10.1810033,50.0082136
TYNDP2020_3,under_consideration,200.0,2035,True,800.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/239"", ""tyndp2020_proj_id""=>""239"", ""tyndp2020_invest_id""=>""1241"", ""tyndp_status""=>""under_consideration""",17.166138,63.184727,21.901245,63.03068
TYNDP2020_4,planned_not_yet_permitting,267.0,2030,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1034"", ""tyndp2020_proj_id""=>""1034"", ""tyndp2020_invest_id""=>""1692"", ""tyndp_status""=>""planned_not_yet_permitting""",8.00079299999999,53.55581,8.06808499999999,51.653815
TYNDP2020_5,planned_not_yet_permitting,407.0,2030,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1034"", ""tyndp2020_proj_id""=>""1034"", ""tyndp2020_invest_id""=>""1693"", ""tyndp_status""=>""planned_not_yet_permitting""",9.13101199999999,54.20101,7.06420899999999,51.66063
TYNDP2020_6,under_construction,445.0,2026,True,600.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/28"", ""tyndp2020_proj_id""=>""28"", ""tyndp2020_invest_id""=>""1503"", ""tyndp_status""=>""under_construction""",14.028168,42.409263,18.772888,42.315909
TYNDP2020_7,in_permitting,240.0,2023,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/247"", ""tyndp2020_proj_id""=>""247"", ""tyndp2020_invest_id""=>""1381"", ""tyndp_status""=>""in_permitting""",-1.05331400000001,50.900435,1.11373900000001,49.712937
TYNDP2020_7,completed,240.0,2023,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/247"", ""tyndp2020_proj_id""=>""247"", ""tyndp2020_invest_id""=>""1381"", ""tyndp_status""=>""in_permitting""",-1.05331400000001,50.900435,1.11373900000001,49.712937
TYNDP2020_8,under_consideration,133.0,2027,True,700.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1040"", ""tyndp2020_proj_id""=>""1040"", ""tyndp2020_invest_id""=>""1677"", ""tyndp_status""=>""under_consideration""",-5.80902099999999,54.726206,-4.880676,55.704677
TYNDP2020_10,in_permitting,340.0,2024,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/254"", ""tyndp2020_proj_id""=>""254"", ""tyndp2020_invest_id""=>""660"", ""tyndp_status""=>""in_permitting""",6.58493,51.245584,8.478699,49.283036
TYNDP2020_11,under_consideration,230.0,2025,True,1400.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1049"", ""tyndp2020_proj_id""=>""1049"", ""tyndp2020_invest_id""=>""1706"", ""tyndp_status""=>""under_consideration""",0.763549999999995,51.403489,3.18054200000001,51.330612
@@ -20,7 +20,7 @@ TYNDP2020_19,planned_not_yet_permitting,225.0,2029,False,2000.0,"""url""=>""http
TYNDP2020_20,under_consideration,195.0,2036,True,500.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1068"", ""tyndp2020_proj_id""=>""1068"", ""tyndp2020_invest_id""=>""1740"", ""tyndp_status""=>""under_consideration""",18.227692,57.571097,21.100616,56.489036
TYNDP2020_21,planned_not_yet_permitting,156.0,2022,True,1500.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/285"", ""tyndp2020_proj_id""=>""285"", ""tyndp2020_invest_id""=>""1383"", ""tyndp_status""=>""planned_not_yet_permitting""",0.575409000000004,51.430896,2.16293300000001,50.923813
TYNDP2020_22,in_permitting,540.0,2025,True,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/130"", ""tyndp2020_proj_id""=>""130"", ""tyndp2020_invest_id""=>""665"", ""tyndp_status""=>""in_permitting""",11.637268,52.27404,12.292328,48.659222
TYNDP2020_23,in_permitting,300.0,2025,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/132"", ""tyndp2020_proj_id""=>""132"", ""tyndp2020_invest_id""=>""661"", ""tyndp_status""=>""in_permitting""",7.23587000000001,53.374317,6.58493,51.245584
TYNDP2020_23_NEP_DC1,in_permitting,297.0,2027,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/132"", ""tyndp2020_proj_id""=>""132"", ""tyndp2020_invest_id""=>""661"", ""tyndp_status""=>""in_permitting""",7.2492328,53.3655941,6.6207151,51.2690922
TYNDP2020_24,under_consideration,110.0,2036,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1077"", ""tyndp2020_proj_id""=>""1077"", ""tyndp2020_invest_id""=>""1747"", ""tyndp_status""=>""under_consideration""",22.9422,40.662931,22.111359,41.50035
TYNDP2020_25,under_consideration,170.0,2036,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1077"", ""tyndp2020_proj_id""=>""1077"", ""tyndp2020_invest_id""=>""1748"", ""tyndp_status""=>""under_consideration""",22.111359,41.50035,23.03833,42.549034
TYNDP2020_26,under_consideration,180.0,2036,False,2000.0,"""url""=>""https://tyndp2020-project-platform.azurewebsites.net/projectsheets/transmission/1081"", ""tyndp2020_proj_id""=>""1081"", ""tyndp2020_invest_id""=>""1749"", ""tyndp_status""=>""under_consideration""",21.137695,39.279042,19.966278,41.16108
6 changes: 3 additions & 3 deletions doc/conf.py
Original file line number Diff line number Diff line change
@@ -99,17 +99,17 @@ def setup(app):

# General information about the project.
project = "PyPSA-Eur"
copyright = "2017-2024 Tom Brown (KIT, TUB, FIAS), Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), Fabian Neumann (TUB, KIT), Marta Victoria (Aarhus University), Lisa Zeyen (KIT, TUB)"
copyright = "2017-2025 Tom Brown (KIT, TUB, FIAS), Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), Fabian Neumann (TUB, KIT), Marta Victoria (Aarhus University), Lisa Zeyen (KIT, TUB)"
author = "Tom Brown (KIT, TUB, FIAS), Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), Fabian Neumann (TUB, KIT), Marta Victoria (Aarhus University), Lisa Zeyen (KIT, TUB)"

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = "0.13"
version = "v2025.01.0"
# The full version, including alpha/beta/rc tags.
release = "0.13.0"
release = version + ""

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
2 changes: 1 addition & 1 deletion doc/configtables/countries.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
,Unit,Values,Description
countries,--,"Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'XK'}","European countries defined by their `Two-letter country codes (ISO 3166-1) <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ which should be included in the energy system model."
countries,--,"Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MD', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'UA', 'XK'}","European countries defined by their `Two-letter country codes (ISO 3166-1) <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ which should be included in the energy system model."
3 changes: 2 additions & 1 deletion doc/configtables/electricity.csv
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ base_network, --, "Any value in {'entsoegridkit', 'osm-prebuilt', 'osm-raw}", "S
osm-prebuilt-version, --, "float, any value in range 0.1-0.6", "Choose the version of the prebuilt OSM network. Defaults to latest Zenodo release."
gaslimit_enable,bool,true or false,Add an overall absolute gas limit configured in ``electricity: gaslimit``.
gaslimit,MWhth,float or false,Global gas usage limit
co2limit_enable,bool,true or false,Add an overall absolute carbon-dioxide emissions limit configured in ``electricity: co2limit`` in :mod:`prepare_network`. **Warning:** This option should currently only be used with electricity-only networks, not for sector-coupled networks..
co2limit_enable,bool,true or false,"Add an overall absolute carbon-dioxide emissions limit configured in ``electricity: co2limit`` in :mod:`prepare_network`. **Warning:** This option should currently only be used with electricity-only networks, not for sector-coupled networks."
co2limit,:math:`t_{CO_2-eq}/a`,float,Cap on total annual system carbon dioxide emissions
co2base,:math:`t_{CO_2-eq}/a`,float,Reference value of total annual system carbon dioxide emissions if relative emission reduction target is specified in ``{opts}`` wildcard.
operational_reserve,,,Settings for reserve requirements following `GenX <https://genxproject.github.io/GenX/dev/core/#Reserves>`_
@@ -42,3 +42,4 @@ estimate_renewable_capacities,,,
autarky,,,
-- enable,bool,true or false,Require each node to be autarkic by removing all lines and links.
-- by_country,bool,true or false,Require each country to be autarkic by removing all cross-border lines and links. ``electricity: autarky`` must be enabled.
transmission_limit,str,"Values like 'vopt', 'v1.25', 'copt', 'c1.25'","Limit on transmission expansion. The first part can be ``v`` (for setting a limit on line volume) or ``c`` (for setting a limit on line cost). The second part can be ``opt`` or a float bigger than one (e.g. 1.25). If ``opt`` is chosen line expansion is optimised according to its capital cost (where the choice ``v`` only considers overhead costs for HVDC transmission lines, while ``c`` uses more accurate costs distinguishing between overhead and underwater sections and including inverter pairs). The setting ``v1.25`` will limit the total volume of line expansion to 25% of currently installed capacities weighted by individual line lengths. The setting ``c1.25`` will allow to build a transmission network that costs no more than 25 % more than the current system."
18 changes: 0 additions & 18 deletions doc/configtables/offwind-dc.csv

This file was deleted.

File renamed without changes.
1 change: 1 addition & 0 deletions doc/configtables/opts.csv
Original file line number Diff line number Diff line change
@@ -11,3 +11,4 @@ Trigger, Description, Definition, Status
``SAFE``,Add a capacity reserve margin of a certain fraction above the peak demand to which renewable generators and storage do *not* contribute. Ignores network., ``solve_network`` `add_opts_constraints() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/solve_network.py#L73>`__, Untested
``carrier+{c|p|m}factor``,"Alter the capital cost (``c``), installable potential (``p``) or marginal costs (``m``) of a carrier by a factor. Example: ``solar+c0.5`` reduces the capital cost of solar to 50\% of original values.", ``prepare_network``, In active use
``CH4L``,"Add an overall absolute gas limit. If configured in ``electricity: gaslimit`` it is given in MWh thermal, if a float is appended, the overall gaslimit is assumed to be given in TWh thermal (e.g. ``CH4L200`` limits gas dispatch to 200 TWh termal)", ``prepare_network``: ``add_gaslimit()``, In active use
``l{v|c}factor``,"Add an overall transmission expansion limit relative to existing power transmission infrastructure based on volume (``v``) or cost (``c``). Example: ``lv1.25`` allows power grid expansion up to a volume (length times capacity) by 25%.",``prepare_network``: ``set_transmission_limit()``, In active use
1 change: 0 additions & 1 deletion doc/configtables/scenario.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
,Unit,Values,Description
clusters,--,cf. :ref:`clusters`,"List of ``{clusters}`` wildcards to run."
ll,--,cf. :ref:`ll`,"List of ``{ll}`` wildcards to run."
opts,--,cf. :ref:`opts`,"List of ``{opts}`` wildcards to run."
sector_opts,--,cf. :ref:`sector_opts`,"List of ``{sector_opts}`` wildcards to run."
planning_horizons,--,cf. :ref:`planning_horizons`,"List of ``{planning_horizon}`` wildcards to run."
35 changes: 10 additions & 25 deletions doc/configtables/sector.csv
Original file line number Diff line number Diff line change
@@ -4,17 +4,17 @@ heating,--,"{true, false}",Flag to include heating sector.
biomass,--,"{true, false}",Flag to include biomass sector.
industry,--,"{true, false}",Flag to include industry sector.
agriculture,--,"{true, false}",Flag to include agriculture sector.
fossil_fuels,--,"{true, false}","Flag to include imports of fossil fuels ( [""coal"", ""gas"", ""oil"", ""lignite""])"
fossil_fuels,--,"{true, false}","Flag to include imports of fossil fuels."
district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_
-- potential,--,float,maximum fraction of urban demand which can be supplied by district heating
-- progress,--,Dictionary with planning horizons as keys., Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
-- district_heating_loss,--,float,Share increase in district heat demand in urban central due to heat losses
-- supply_temperature_approximation,,,
-- -- max_forward_temperature_baseyear,°C,Dictionary with country codes as keys. One key must be 'default'., Max. forward temperature in district heating in baseyear (if ambient temperature lower-or-equal `lower_threshold_ambient_temperature`)
-- -- min_forward_temperature_baseyear,°C,Dictionary with country codes as keys. One key must be 'default'., Min. forward temperature in district heating in baseyear (if ambient temperature higher-or-equal `upper_threshold_ambient_temperature`)
-- -- return_temperature_baseyear,°C,Dictionary with country codes as keys. One key must be 'default'.,Return temperature in district heating in baseyear . Must be lower than forward temperature
-- -- lower_threshold_ambient_temperature,°C,float, Assume `max_forward_temperature` if ambient temperature is below this threshold
-- -- upper_threshold_ambient_temperature,°C,float, Assume `min_forward_temperature` if ambient temperature is above this threshold
-- -- max_forward_temperature_baseyear,C,Dictionary with country codes as keys. One key must be 'default'., Max. forward temperature in district heating in baseyear (if ambient temperature lower-or-equal `lower_threshold_ambient_temperature`)
-- -- min_forward_temperature_baseyear,C,Dictionary with country codes as keys. One key must be 'default'., Min. forward temperature in district heating in baseyear (if ambient temperature higher-or-equal `upper_threshold_ambient_temperature`)
-- -- return_temperature_baseyear,C,Dictionary with country codes as keys. One key must be 'default'.,Return temperature in district heating in baseyear . Must be lower than forward temperature
-- -- lower_threshold_ambient_temperature,C,float, Assume `max_forward_temperature` if ambient temperature is below this threshold
-- -- upper_threshold_ambient_temperature,C,float, Assume `min_forward_temperature` if ambient temperature is above this threshold
-- -- rolling_window_ambient_temperature, h, int, Rolling window size for averaging ambient temperature when approximating supply temperature
-- -- relative_annual_temperature_reduction,, float, Relative annual reduction of district heating forward and return temperature - defaults to 0.01 (1%)
-- heat_source_cooling,K,float,Cooling of heat source for heat pumps
@@ -25,10 +25,9 @@ district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-
-- -- heat_loss,--,float,Heat pump heat loss assumed for approximation. Must be between 0 and 1.
-- heat_utilisation_potentials,--,Dictionary with names of heat sources for which data by Fraunhofer ISI (`Manz et al. 2024 <https://www.sciencedirect.com/science/article/pii/S0960148124001769>) should be used,
-- -- geothermal,-,Name of the heat source. Must be the same as in ``heat_pump_sources``,
-- -- -- key,-,string used to complete URL for data download - e.g. `geothermal_65` or `geothermal_85`","i.e file names in `Fordatis <https://fordatis.fraunhofer.de/handle/fordatis/341.3?mode=simple>`,
-- -- -- constant_temperature_celsius,°C,heat source temperature,
-- -- -- key,-,string used to complete URL for data download - e.g. `geothermal_65` or `geothermal_85`","i.e file names in `Fordatis <https://fordatis.fraunhofer.de/handle/fordatis/341.3?mode=simple>`"
-- -- -- constant_temperature_celsius,C,heat source temperature,
-- -- -- column_name,-,name of the data column in retrieved GeoDataFrame,

-- -- -- unit,-,unit of heat source potential must be in (K/M/G/T)Wh,
-- -- -- full_load_hours,h,assumed full-load hours in Manz et al. (used to scale from utilisation to technical potential),
-- direct_utilisation_heat_sources,--,List of heat sources for direct heat utilisation in district heating. Must be in the keys of `heat_utilisation_potentials` (e.g. ``geothermal``),
@@ -37,18 +36,15 @@ district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-
-- -- urban decentral,--,List of heat sources for heat pumps in urban decentral heating,
-- -- rural,--,List of heat sources for heat pumps in rural heating,
cluster_heat_buses,--,"{true, false}",Cluster residential and service heat buses in `prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_ to one to save memory.
,,,
bev_dsm_restriction _value,--,float,Adds a lower state of charge (SOC) limit for battery electric vehicles (BEV) to manage its own energy demand (DSM). Located in `build_transport_demand.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/build_transport_demand.py>`_. Set to 0 for no restriction on BEV DSM
bev_dsm_restriction _time,--,float,Time at which SOC of BEV has to be dsm_restriction_value
transport_heating _deadband_upper,°C,float,"The maximum temperature in the vehicle. At higher temperatures, the energy required for cooling in the vehicle increases."
transport_heating _deadband_lower,°C,float,"The minimum temperature in the vehicle. At lower temperatures, the energy required for heating in the vehicle increases."
,,,
transport_heating _deadband_upper,C,float,"The maximum temperature in the vehicle. At higher temperatures, the energy required for cooling in the vehicle increases."
transport_heating _deadband_lower,C,float,"The minimum temperature in the vehicle. At lower temperatures, the energy required for heating in the vehicle increases."
ICE_lower_degree_factor,--,float,Share increase in energy demand in internal combustion engine (ICE) for each degree difference between the cold environment and the minimum temperature.
ICE_upper_degree_factor,--,float,Share increase in energy demand in internal combustion engine (ICE) for each degree difference between the hot environment and the maximum temperature.
EV_lower_degree_factor,--,float,Share increase in energy demand in electric vehicles (EV) for each degree difference between the cold environment and the minimum temperature.
EV_upper_degree_factor,--,float,Share increase in energy demand in electric vehicles (EV) for each degree difference between the hot environment and the maximum temperature.
bev_dsm,--,"{true, false}",Add the option for battery electric vehicles (BEV) to participate in demand-side management (DSM)
,,,
bev_dsm_availability,--,float,The share for battery electric vehicles (BEV) that are able to do demand side management (DSM)
bev_energy,--,float,The average size of battery electric vehicles (BEV) in MWh
bev_charge_efficiency,--,float,Battery electric vehicles (BEV) charge and discharge efficiency
@@ -70,16 +66,13 @@ Mwh_MeOH_per_MWh_H2,LHV,float,"The energy amount of the produced methanol per en
MWh_MeOH_per_tCO2,LHV,float,"The energy amount of the produced methanol per ton of CO2. From `DECHEMA (2017) <https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf>`_, page 66."
MWh_MeOH_per_MWh_e,LHV,float,"The energy amount of the produced methanol per energy amount of electricity. From `DECHEMA (2017) <https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf>`_, page 64."
shipping_hydrogen _liquefaction,--,"{true, false}",Whether to include liquefaction costs for hydrogen demand in shipping.
,,,
shipping_hydrogen_share,--,Dictionary with planning horizons as keys.,The share of ships powered by hydrogen in a given year
shipping_methanol_share,--,Dictionary with planning horizons as keys.,The share of ships powered by methanol in a given year
shipping_oil_share,--,Dictionary with planning horizons as keys.,The share of ships powered by oil in a given year
shipping_methanol _efficiency,--,float,The efficiency of methanol-powered ships in the conversion of methanol to meet shipping needs (propulsion). The efficiency increase from oil can be 10-15% higher according to the `IEA <https://www.iea-amf.org/app/webroot/files/file/Annex%20Reports/AMF_Annex_56.pdf>`_
,,,
shipping_oil_efficiency,--,float,The efficiency of oil-powered ships in the conversion of oil to meet shipping needs (propulsion). Base value derived from 2011
aviation_demand_factor,--,float,The proportion of demand for aviation compared to today's consumption
HVC_demand_factor,--,float,The proportion of demand for high-value chemicals compared to today's consumption
,,,
time_dep_hp_cop,--,"{true, false}",Consider the time dependent coefficient of performance (COP) of the heat pump
heat_pump_sink_T,°C,float,The temperature heat sink used in heat pumps based on DTU / large area radiators. The value is conservatively high to cover hot water and space heating in poorly-insulated buildings
reduce_space_heat _exogenously,--,"{true, false}",Influence on space heating demand by a certain factor (applied before losses in district heating).
@@ -130,14 +123,11 @@ co2_sequestration_potential,--,Dictionary with planning horizons as keys.,The po
co2_sequestration_cost,currency/tCO2,float,The cost of sequestering a ton of CO2
co2_sequestration_lifetime,years,int,The lifetime of a CO2 sequestration site
co2_spatial,--,"{true, false}","Add option to spatially resolve carrier representing stored carbon dioxide. This allows for more detailed modelling of CCUTS, e.g. regarding the capturing of industrial process emissions, usage as feedstock for electrofuels, transport of carbon dioxide, and geological sequestration sites."
,,,
co2_network,--,"{true, false}",Add option for planning a new carbon dioxide transmission network
co2_network_cost_factor,p.u.,float,The cost factor for the capital cost of the carbon dioxide transmission network
,,,
cc_fraction,--,float,The default fraction of CO2 captured with post-combustion capture
hydrogen_underground _storage,--,"{true, false}",Add options for storing hydrogen underground. Storage potential depends regionally.
hydrogen_underground _storage_locations,,"{onshore, nearshore, offshore}","The location where hydrogen underground storage can be located. Onshore, nearshore, offshore means it must be located more than 50 km away from the sea, within 50 km of the sea, or within the sea itself respectively."
,,,
methanol,--,--,Add methanol as carrrier and add enabled methnol technologies
-- regional_methanol_demand,--,"{true, false}",Spatially resolve methanol demand. Set to true if regional CO2 constraints needed.
-- methanol_reforming,--,"{true, false}"," Add methanol reforming"
@@ -148,18 +138,15 @@ methanol,--,--,Add methanol as carrrier and add enabled methnol technologies
-- -- ccgt_cc,--,"{true, false}"," Add combined cycle gas turbine (CCGT) with carbon capture using methanol"
-- -- ocgt,--,"{true, false}"," Add open cycle gas turbine (OCGT) using methanol"
-- -- allam,--,"{true, false}"," Add Allam cycle gas power plants using methanol"
,,,
ammonia,--,"{true, false, regional}","Add ammonia as a carrrier. It can be either true (copperplated NH3), false (no NH3 carrier) or ""regional"" (regionalised NH3 without network)"
min_part_load_fischer _tropsch,per unit of p_nom ,float,The minimum unit dispatch (``p_min_pu``) for the Fischer-Tropsch process
min_part_load _methanolisation,per unit of p_nom ,float,The minimum unit dispatch (``p_min_pu``) for the methanolisation process
,,,
use_fischer_tropsch _waste_heat,--,"{true, false}",Add option for using waste heat of Fischer Tropsch in district heating networks
use_fuel_cell_waste_heat,--,"{true, false}",Add option for using waste heat of fuel cells in district heating networks
use_electrolysis_waste _heat,--,"{true, false}",Add option for using waste heat of electrolysis in district heating networks
electricity_transmission _grid,--,"{true, false}",Switch for enabling/disabling the electricity transmission grid.
electricity_distribution _grid,--,"{true, false}",Add a simplified representation of the exchange capacity between transmission and distribution grid level through a link.
electricity_distribution _grid_cost_factor,,,Multiplies the investment cost of the electricity distribution grid
,,,
electricity_grid _connection,--,"{true, false}",Add the cost of electricity grid connection for onshore wind and solar
transmission_efficiency,,,Section to specify transmission losses or compression energy demands of bidirectional links. Splits them into two capacity-linked unidirectional links.
-- {carrier},--,str,The carrier of the link.
@@ -173,7 +160,6 @@ H2_retrofit_capacity _per_CH4,--,float,"The ratio for H2 capacity per original C
"gas_network_connectivity _upgrade ",--,float,The number of desired edge connectivity (k) in the length-weighted `k-edge augmentation algorithm <https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation>`_ used for the gas network
gas_distribution_grid,--,"{true, false}",Add a gas distribution grid
gas_distribution_grid _cost_factor,,,Multiplier for the investment cost of the gas distribution grid
,,,
biomass_spatial,--,"{true, false}",Add option for resolving biomass demand regionally
biomass_transport,--,"{true, false}",Add option for transporting solid biomass between nodes
biogas_upgrading_cc,--,"{true, false}",Add option to capture CO2 from biomass upgrading
@@ -191,7 +177,6 @@ limit_max_growth,,,
-- -- {carrier},GW,float,The historic maximum growth of a carrier
-- max_relative_growth,,,
-- -- {carrier},p.u.,float,The historic maximum relative growth of a carrier
,,,
enhanced_geothermal,,,
-- enable,--,"{true, false}",Add option to include Enhanced Geothermal Systems
-- flexible,--,"{true, false}",Add option for flexible operation (see Ricks et al. 2024)
2 changes: 1 addition & 1 deletion doc/configtables/solving.csv
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ options,,,
-- -- -- {carrier},,,
-- -- link_threshold,,float,The threshold relative to the discrete link unit size beyond which to round up to the next unit by carrier (given in dictionary style).
-- -- -- {carrier},,,
-- -- fractional_last_unit_size,bool,"{'true','false'}",When true, links and lines can be built up to p_nom_max. When false, they can only be built up to a multiple of the unit size.
-- -- fractional_last_unit_size,bool,"{'true','false'}","When true, links and lines can be built up to p_nom_max. When false, they can only be built up to a multiple of the unit size."
agg_p_nom_limits,,,Configure per carrier generator nominal capacity constraints for individual countries if ``'CCL'`` is in ``{opts}`` wildcard.
-- agg_offwind,bool,"{'true','false'}",Aggregate together all the types of offwind when writing the constraint. Default is false.
-- include_existing,bool,"{'true','false'}",Take existing capacities into account when writing the constraint. Default is false.
52 changes: 7 additions & 45 deletions doc/configuration.rst
Original file line number Diff line number Diff line change
@@ -87,7 +87,7 @@ facilitate running multiple scenarios through a single command
For each wildcard, a **list of values** is provided. The rule
``solve_all_elec_networks`` will trigger the rules for creating
``results/networks/base_s_{clusters}_elec_l{ll}_{opts}.nc`` for **all
``results/networks/base_s_{clusters}_elec_{opts}.nc`` for **all
combinations** of the provided wildcard values as defined by Python's
`itertools.product(...)
<https://docs.python.org/2/library/itertools.html#itertools.product>`__ function
@@ -236,18 +236,18 @@ Define and specify the ``atlite.Cutout`` used for calculating renewable potentia
The default choice for corine ``grid_codes`` was based on Scholz, Y. (2012). Renewable energy based electricity supply at low costs
development of the REMix model and application for Europe. ( p.42 / p.28)

``offwind-ac``
``offwind-x``
--------------

.. literalinclude:: ../config/config.default.yaml
:language: yaml
:start-at: offwind-ac:
:end-before: offwind-dc:
:end-before: solar:

.. csv-table::
:header-rows: 1
:widths: 22,7,22,33
:file: configtables/offwind-ac.csv
:file: configtables/offwind.csv

.. note::
Notes on ``capacity_per_sqkm``. ScholzPhd Tab 4.3.1: 10MW/km^2 and assuming 20% fraction of the already restricted
@@ -259,39 +259,6 @@ Define and specify the ``atlite.Cutout`` used for calculating renewable potentia
from 10.1016/j.energy.2018.08.153
until done more rigorously in #153

``offwind-dc``
---------------

.. literalinclude:: ../config/config.default.yaml
:language: yaml
:start-at: offwind-dc:
:end-before: offwind-float:

.. csv-table::
:header-rows: 1
:widths: 22,7,22,33
:file: configtables/offwind-dc.csv

.. note::
Both ``offwind-ac`` and ``offwind-dc`` have the same assumption on
``capacity_per_sqkm`` and ``correction_factor``.

``offwind-float``
---------------

.. literalinclude:: ../config/config.default.yaml
:language: yaml
:start-at: offwind-float:
:end-before: solar:

.. csv-table::
:header-rows: 1
:widths: 22,7,22,33
:file: configtables/offwind-float.csv

.. note::
``offwind-ac``, ``offwind-dc`` , ``offwind-float`` have the same assumption on
``capacity_per_sqkm`` and ``correction_factor``.
``solar``
---------------

@@ -380,7 +347,7 @@ overwrite the existing values.
.. _transformers_cf:

``transmission projects``
=======================
=========================

Allows to define additional transmission projects that will be added to the base network, e.g., from the TYNDP 2020 dataset. The projects are read in from the CSV files in the subfolder of ``data/transmission_projects/``. New transmission projects, e.g. from TYNDP 2024, can be added in a new subfolder of transmission projects, e.g. ``data/transmission_projects/tyndp2024`` while extending the list of ``transmission_projects`` in the ``config.yaml`` by ``tyndp2024``. The CSV files in the project folder should have the same columns as the CSV files in the template folder ``data/transmission_projects/template``.

@@ -544,7 +511,7 @@ The list of available biomass is given by the category in `ENSPRESO_BIOMASS <htt

.. literalinclude:: ../config/config.default.yaml
:language: yaml
:start-at: industry:
:start-at: # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#industry
:end-before: # docs

.. csv-table::
@@ -583,13 +550,8 @@ The list of available biomass is given by the category in `ENSPRESO_BIOMASS <htt
:widths: 22,7,22,33
:file: configtables/clustering.csv

.. note::
``feature:`` in ``simplify_network:``
are only relevant if ``hac`` were chosen in ``algorithm``.

.. tip::
use ``min`` in ``p_nom_max:`` for more `
conservative assumptions.
use ``min`` in ``p_nom_max:`` for more conservative assumptions.

.. _adjustments_cf:

11 changes: 2 additions & 9 deletions doc/data-bundle.rst
Original file line number Diff line number Diff line change
@@ -33,13 +33,6 @@ scope to reduce file size, or are not provided through stable URLs elsewhere.
- **License:** `custom <https://ec.europa.eu/eurostat/about-us/policies/copyright>`__
- **Description:** Average annual population to calculate regional GDP data (thousand persons) by NUTS 3 regions.

``data/bundle/nama_10r_3gdp.tsv.gz``

- **Source:** Eurostat
- **Link:** https://ec.europa.eu/eurostat/databrowser/view/nama_10r_3gdp/default/table?lang=en
- **License:** `custom <https://ec.europa.eu/eurostat/about-us/policies/copyright>`__
- **Description:** Gross domestic product (GDP) at current market prices by NUTS 3 regions.

``data/bundle/corine``

- **Source:** European Environment Agency (EEA)
@@ -94,7 +87,7 @@ scope to reduce file size, or are not provided through stable URLs elsewhere.
- **License:** CC0 (`reference <https://datadryad.org/stash/dataset/doi:10.5061/dryad.dk1j0>`__)
- **Description:** Gridded GDP data.

``data/bundle/ppp_2013_1km_Aggregated.tif``
``data/bundle/ppp_2019_1km_Aggregated.tif``

- **Source:** WorldPop (www.worldpop.org - School of Geography and Environmental
Science, University of Southampton; Department of Geography and Geosciences,
@@ -104,5 +97,5 @@ scope to reduce file size, or are not provided through stable URLs elsewhere.
Funded by The Bill and Melinda Gates Foundation (OPP1134076).
https://dx.doi.org/10.5258/SOTON/WP00647
- **Link:** https://hub.worldpop.org/doi/10.5258/SOTON/WP00647
- **License:** CC-BY 4.0 (`reference <https://hub.worldpop.org/geodata/summary?id=24770>`__)
- **License:** CC-BY 4.0 (`reference <https://hub.worldpop.org/geodata/summary?id=24776>`__)
- **Description:** Gridded population data.
20 changes: 8 additions & 12 deletions doc/foresight.rst
Original file line number Diff line number Diff line change
@@ -206,21 +206,21 @@ The myopic code solves the network for the time steps included in
baseyear=2020, capacities installed before 2020 are added. In addition, the
network comprises additional generator, storage, and link capacities with
p_nom_extendable=True. The non-solved network is saved in
``results/run_name/networks/prenetworks-brownfield``.
``resources/run_name/networks``.

The base year is the first element in ``planning_horizons``. Step 1 is
implemented with the rule add_baseyear for the base year and with the rule
add_brownfield for the remaining planning_horizons.

2. The 2020 network is optimized. The solved network is saved in
``results/run_name/networks/postnetworks``
``results/run_name/networks``

3. For the next planning horizon, e.g. 2030, the capacities from a previous time
step are added if they are still in operation (i.e., if they fulfil planning
horizon <= commissioned year + lifetime). In addition, the network comprises
additional generator, storage, and link capacities with
p_nom_extendable=True. The non-solved network is saved in
``results/run_name/networks/prenetworks-brownfield``.
``results/run_name/networks``.

Steps 2 and 3 are solved recursively for all the planning_horizons included in
``config/config.yaml``.
@@ -231,7 +231,7 @@ Rule overview
- rule add_existing baseyear

The rule add_existing_baseyear loads the network in
‘results/run_name/networks/prenetworks’ and performs the following operations:
``resources/run_name/networks`` and performs the following operations:

1. Add the conventional, wind and solar power generators that were installed
before the base year.
@@ -260,17 +260,13 @@ Rule overview
2045.

Then, the resulting network is saved in
``results/run_name/networks/prenetworks-brownfield``.
``resources/run_name/networks``.

- rule add_brownfield

The rule add_brownfield loads the network in
``results/run_name/networks/prenetworks`` and performs the following
operation:

1. Read the capacities optimized in the previous time step and add them to the
The rule add_brownfield loads the network and reads the capacities optimized
in the previous time step and add them to the
network if they are still in operation (i.e., if they fulfill planning
horizon < commissioned year + lifetime)

Then, the resulting network is saved in
``results/run_name/networks/prenetworks_brownfield``.

Binary file modified doc/img/intro-workflow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 0 additions & 1 deletion doc/index.rst
Original file line number Diff line number Diff line change
@@ -244,7 +244,6 @@ The PyPSA-Eur workflow is continuously tested for Linux, macOS and Windows (WSL

retrieve
preparation
simplification
sector
solving
plotting
32 changes: 11 additions & 21 deletions doc/installation.rst
Original file line number Diff line number Diff line change
@@ -27,33 +27,23 @@ First of all, clone the `PyPSA-Eur repository <https://github.com/PyPSA/pypsa-eu
Install Python Dependencies
===============================

PyPSA-Eur relies on a set of other Python packages to function.
We recommend using the package manager `mamba <https://mamba.readthedocs.io/en/latest/>`__
to install them and manage your environments. For instructions for your operating
system follow the ``mamba`` `installation guide <https://mamba.readthedocs.io/en/latest/installation/mamba-installation.html>`__.
You can also use ``conda`` equivalently.
PyPSA-Eur relies on a set of other Python packages to function. We recommend
using the package manager `conda <https://docs.anaconda.com/miniconda/>` or
`mamba <https://mamba.readthedocs.io/en/latest/>`__ to install them and manage
your environments.

The package requirements are curated in the ``envs/environment.yaml`` file.
There are also regularly updated pinned environment files for each operating system to
ensure reproducibility (``envs/windows-pinned.yaml``, ``envs/linux-pinned.yaml``, ``envs/macos-pinned.yaml``).
We recommend to use the pinned files for a stable environment, but you could also use
the unpinned file.
We recommend using the pinned files for a stable environment.

.. code:: console
$ mamba env create -f envs/linux-pinned.yaml # replace for your os
$ conda update conda
$ mamba activate pypsa-eur
.. note::
The equivalent commands for ``conda`` would be

.. code:: console
$ conda env create -f envs/linux-pinned.yaml # replace for your os
$ conda activate pypsa-eur
$ conda env create -f envs/linux-pinned.yaml # replace for your os
$ conda activate pypsa-eur
Install a Solver
================
@@ -81,15 +71,15 @@ Nevertheless, you can still use open-source solvers for smaller problems.
`Instructions how to install a solver in the documentation of PyPSA <https://pypsa.readthedocs.io/en/latest/installation.html#getting-a-solver-for-linear-optimisation>`__

.. note::
The rules :mod:`cluster_network` and :mod:`simplify_network` solve a mixed-integer quadratic optimisation problem for clustering.
The rules :mod:`cluster_network` solves a mixed-integer quadratic optimisation problem for clustering.
The open-source solvers HiGHS, Cbc and GlPK cannot handle this. A fallback to SCIP is implemented in this case, which is included in the standard environment specifications.
For an open-source solver setup install for example HiGHS **and** SCIP in your ``conda`` environment on OSX/Linux.
To install the default solver Gurobi, run

.. code:: console
$ mamba activate pypsa-eur
$ mamba install -c gurobi gurobi
$ conda activate pypsa-eur
$ conda install -c gurobi gurobi"=12.0.0"
Additionally, you need to setup your `Gurobi license <https://www.gurobi.com/solutions/licensing/>`__.

13 changes: 7 additions & 6 deletions doc/introduction.rst
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@ For instance, an invocation to

.. code:: console
$ snakemake results/networks/base_s_128_elec_lvopt_.nc
$ snakemake results/networks/base_s_128_elec_.nc
follows this dependency graph

@@ -50,7 +50,7 @@ preceding rules which another rule takes as input data.

.. note::
The dependency graph was generated using
``snakemake --dag results/networks/base_s_128_elec_lvopt_.nc -F | sed -n "/digraph/,/}/p" | dot -Tpng -o doc/img/intro-workflow.png``
``snakemake --dag results/networks/base_s_128_elec_.nc -F | sed -n "/digraph/,/}/p" | dot -Tpng -o doc/img/intro-workflow.png``

For the use of ``snakemake``, it makes sense to familiarize yourself quickly
with the `basic tutorial
@@ -63,7 +63,7 @@ in particular.
Scenarios, Configuration and Modification
=========================================

It is easy to run PyPSA-Eur for multiple scenarios using the `wildcards feature
PyPSA-Eur can be used to run multiple scenarios using the `wildcards feature
<https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#wildcards>`__
of ``snakemake``. Wildcards allow to generalise a rule to produce all files that
follow a `regular expression
@@ -74,8 +74,9 @@ what data to retrieve and what files to produce. Details are explained in
:ref:`wildcards` and :ref:`scenario`.

The model also has several further configuration options collected in the
``config/config.default.yaml`` file located in the root directory, which that are not part of
the scenarios. Options are explained in :ref:`config`.
``config/config.default.yaml`` file located in the root directory, which can be
handled with another scenario management. Options are explained in
:ref:`config`.

Folder Structure
================
@@ -90,7 +91,7 @@ Folder Structure
- ``logs``: Stores log files.
- ``benchmarks``: Stores ``snakemake`` benchmarks.
- ``doc``: Includes the documentation of PyPSA-Eur.
- ``graphics``: Includes some graphics for the documentation of PyPSA-Eur.
- ``docker``: Includes some optional Docker environments.

System Requirements
===================
66 changes: 50 additions & 16 deletions doc/preparation.rst
Original file line number Diff line number Diff line change
@@ -13,25 +13,29 @@ rules which are briefly outlined and explained in detail in the sections below.
Not all data dependencies are shipped with the git repository.
Instead we provide separate data bundles which can be obtained
using the ``retrieve*`` rules (:ref:`data`).
Having downloaded the necessary data,
Having downloaded the necessary data, it can build a base PyPSA network with the following rules

- :mod:`build_shapes` generates GeoJSON files with shapes of the countries, exclusive economic zones and `NUTS3 <https://en.wikipedia.org/wiki/Nomenclature_of_Territorial_Units_for_Statistics>`__ areas.
- :mod:`build_cutout` prepares smaller weather data portions from `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`__ for cutout ``europe-2013-sarah3-era5`` and SARAH for cutout ``europe-2013-sarah``.
- :mod:`base_network` builds and stores the base network with all buses, HVAC lines and HVDC links, and determines `Voronoi cells <https://en.wikipedia.org/wiki/Voronoi_diagram>`__ for all substations.

With these and the externally extracted ENTSO-E online map topology
(``data/entsoegridkit``), it can build a base PyPSA network with the following rules:
The network is then simplified by preparing **approximations** of the network model, for which it is computationally viable to co-optimize generation, storage and transmission capacities.

- :mod:`base_network` builds and stores the base network with all buses, HVAC lines and HVDC links, and determines `Voronoi cells <https://en.wikipedia.org/wiki/Voronoi_diagram>`__ for all substations.

Then the process continues by calculating conventional power plant capacities, potentials, and per-unit availability time series for variable renewable energy carriers and hydro power plants with the following rules:
- :mod:`simplify_network` transforms the transmission grid to a 380 kV only equivalent network, while
- :mod:`cluster_network` uses a `k-means <https://en.wikipedia.org/wiki/K-means_clustering>`__ based clustering technique to partition the network into a given number of zones and then reduce the network to a representation with one bus per zone.

The simplification and clustering steps are described in detail in the paper

- Jonas Hörsch and Tom Brown. `The role of spatial scale in joint optimisations of generation and transmission for European highly renewable scenarios <https://arxiv.org/abs/1705.07617>`__), *14th International Conference on the European Energy Market*, 2017. `arXiv:1705.07617 <https://arxiv.org/abs/1705.07617>`__, `doi:10.1109/EEM.2017.7982024 <https://doi.org/10.1109/EEM.2017.7982024>`__.

Then, the process continues by calculating conventional power plant capacities, potentials, and per-unit availability time series for variable renewable energy carriers and hydro power plants with the following rules:

- :mod:`build_powerplants` for today's thermal power plant capacities using `powerplantmatching <https://github.com/PyPSA/powerplantmatching>`__ allocating these to the closest substation for each powerplant,
- :mod:`build_ship_raster` for building shipping traffic density,
- :mod:`build_powerplants` for today's thermal power plant capacities using `powerplantmatching <https://github.com/PyPSA/powerplantmatching>`__ allocating these to the matching clustered region for each powerplant,
- :mod:`determine_availability_matrix` for the land eligibility analysis of each cutout grid cell for PV, onshore and offshore wind,
- :mod:`build_renewable_profiles` for the hourly capacity factors and installation potentials constrained by land-use in each substation's Voronoi cell for PV, onshore and offshore wind, and
- :mod:`build_hydro_profile` for the hourly per-unit hydro power availability time series.

The central rule :mod:`add_electricity` then ties all the different data inputs
The rules :mod:`add_electricity` and :mod:`prepare_network` then tie all the different data inputs
together into a detailed PyPSA network stored in ``networks/base_s_{clusters}_elec.nc``.

.. _cutout:
@@ -78,13 +82,6 @@ Rule ``build_gdp_pop_non_nuts3``

.. automodule:: build_gdp_pop_non_nuts3

.. _powerplants:

Rule ``build_powerplants``
=============================

.. automodule:: build_powerplants


.. _electricity_demand:

@@ -94,6 +91,21 @@ Rule ``build_electricity_demand``

.. automodule:: build_electricity_demand

.. _simplify:

Rule ``simplify_network``
============================

.. automodule:: simplify_network

.. _cluster:

Rule ``cluster_network``
===========================

.. automodule:: cluster_network


.. _monthlyprices:

Rule ``build_monthly_prices``
@@ -139,3 +151,25 @@ Rule ``build_hydro_profile``
===============================

.. automodule:: build_hydro_profile

.. _powerplants:

Rule ``build_powerplants``
=============================

.. automodule:: build_powerplants

.. _electricity:

Rule ``add_electricity``
=============================

.. automodule:: add_electricity

.. _prepare:

Rule ``prepare_network``
===========================

.. automodule:: prepare_network

209 changes: 180 additions & 29 deletions doc/release_notes.rst
Original file line number Diff line number Diff line change
@@ -11,24 +11,40 @@ Release Notes
Upcoming Release
================

* Feature: Introduce geothermal district heating (direct utilisation and heat pumps). Potentials are based on `Manz et al. 2024: Spatial analysis of renewable and excess heat potentials for climate-neutral district heating in Europe <https://www.sciencedirect.com/science/article/pii/S0960148124001769>`.
- ...

* Feature: Allow CHPs to use different fuel sources such as gas, oil, coal, and methanol. Note that the cost assumptions are based on a gas CHP (except for solid biomass-fired CHP).

* Improve `sanitize_carrier`` function by filling in colors of missing carriers with colors mapped after using the function `rename_techs`.
PyPSA-Eur v2025.01.0 (24th January 2025)
========================================

* Bugfix: Adjusted efficiency2 (to atmosphere) for bioliquids-to-oil Link in `prepare_sector_network` to exactly offset the corresponding oil emissions.
.. note::
With this version, PyPSA-Eur switches to `CalVer <https://calver.org/>`__ versioning.

**Features**

* Bugfix: Waste CHPs were added to all electricity buses even if they were not connected to heating network. This is now fixed.
* Introduce geothermal district heating, including direct utilisation and heat
pumps, using potentials from `Manz et al. 2024: Spatial analysis of renewable
and excess heat potentials for climate-neutral district heating in Europe
<https://www.sciencedirect.com/science/article/pii/S0960148124001769>`__.
(https://github.com/PyPSA/pypsa-eur/pull/1359)

* Bugfix: Duplicates in build_transmission_projects were caught, but not removed from the network. This is now fixed.
* Added option to reduce central heating forward temperatures by annual
percentage (see rule :mod:`build_central_heating_temperature_profiles`). This
makes COP profiles and heat pump efficiencies planning-horizon-dependent.
Myopic and perfect foresight modes were adjusted accordingly to update COPs of
existing heat pumps in preceding years to adjusted temperatures.
(https://github.com/PyPSA/pypsa-eur/pull/1290)

* Replaced the Store representation of biogenic carriers (solid biomass, biogas, bioliquids, MSW) in ``prepare_sector_network`` with the extended Generator component that uses the ``e_sum_min`` and ``e_sum_max`` attributes to enforce minimum usage and limit maximum potential, respectively.
* Allow CHPs to use different fuel sources such as gas, oil, coal, and methanol.
Note that the cost assumptions are based on a gas CHP (except for solid
biomass-fired CHP). (https://github.com/PyPSA/pypsa-eur/pull/1392,
https://github.com/PyPSA/pypsa-eur/pull/1414)

* Added option to reduce central heating forward temperatures by annual percentage (see rule :mod:`build_central_heating_temperature_profiles`). This makes COP profiles and heat pump efficiencies planning-horizon-dependent. Myopic and perfect foresight modes were adjusted accordingly to update COPs of existing heat pumps in preceding years to adjusted temperatures.
**Breaking Changes**

* Rearranged workflow to cluster the electricity network before calculating
renewable profiles and adding further electricity system components.
(https://github.com/PyPSA/pypsa-eur/pull/1201)

- Moved rules ``simplify_network`` and ``cluster_network`` before
``add_electricity`` and ``build_renewable_profiles``.
@@ -38,8 +54,8 @@ Upcoming Release
``build_renewable_profiles``, which now only computes the profiles and total
potentials from the pre-computed availability matrix.

- Removed variables ``weight``, ``underwater_fraction``, and ``potential`` from the
output of ``build_renewable_profiles`` as it is no longer needed.
- Removed variables ``weight``, ``underwater_fraction``, and ``potential``
from the output of ``build_renewable_profiles`` as it is no longer needed.

- HAC-clustering is now based on wind speeds and irradiation time series
rather than capacity factors of wind and solar power plants.
@@ -62,8 +78,8 @@ Upcoming Release
- Added new rule ``build_electricity_demand_base`` to determine the load
distribution of the substations in the base network (which was previously
done in ``add_electricity``). This time series is used as weights for
kmeans-clustering in ``cluster_network`` and is later added to the network in
``add_electricity`` in aggregated form.
kmeans-clustering in ``cluster_network`` and is later added to the network
in ``add_electricity`` in aggregated form.

- The weights of the kmeans clustering algorithm are now exclusively based on
the load distribution. Previously, they also included the distribution of
@@ -83,37 +99,172 @@ Upcoming Release
defaults to 10 km. Previously the distance to the region's centroid was
used, which is not practical when the regions are already aggregated.

* Removed ``{ll}`` wildcard. This is now a configuration option ``electricity:
transmission_limit:``, defaulting to ``vopt``. All previous options of the
``{ll}`` wildcard are also now available within the ``{opts}`` wildcard (e.g.
as ``-lv1.25-``). (https://github.com/PyPSA/pypsa-eur/pull/1472)

* Breaking change: The location of several network files has changed to
distinguish more clearly between solved and unsolved networks. Unsolved
networks that were previously stored in ``results/{run}/prenetworks`` are now
placed in ``resources/{run}/networks``. Solved networks that were previously
stored in ``results/{run}/postnetworks`` are now stored in
``results/{run}/networks``. Brownfield networks are identified by a
``_brownfield`` suffix in their filename.

* Replaced the store representation of biogenic carriers (solid biomass, biogas,
bioliquids, MSW) in :mod:`prepare_sector_network` with generators using
attributes ``e_sum_min`` and ``e_sum_max`` to enforce minimum usage and limit
maximum potential, respectively.
(https://github.com/PyPSA/pypsa-eur/pull/1373)

* Aligned the configuration setting for the CO2 network with other similar
settings (changed from ``co2network`` to ``co2_network``).
(https://github.com/PyPSA/pypsa-eur/pull/1438)

* Added options ``biosng_cc`` and ``biomass_to_liquid_cc`` to separate the base
technology from the option to capture carbon from it.
(https://github.com/PyPSA/pypsa-eur/pull/1298)

**Changes**

* The building process of the base network from OpenStreetMap was revised. The
code was rewritten to improve the speed, accuracy and to preserve the topology
including original substation locations, wherever possible. The latest
``osm-prebuilt`` data is version v0.6 at https://zenodo.org/records/14144752.
(https://github.com/PyPSA/pypsa-eur/pull/1384,
https://github.com/PyPSA/pypsa-eur/pull/1387,
https://github.com/PyPSA/pypsa-eur/pull/1431)

* The shapes for countries and administrative regions have been updated. The
workflow has been modified to use higher resolution and more harmonised shapes
(NUTS3 2021 01M data and OSM administration level 1 for non-NUTS3 countries,
such as BA, MD, UA, and XK). Data sources for population and GDP per capita
p.c. have been updated to `JRC ARDECO
<https://urban.jrc.ec.europa.eu/ardeco>`__, using values for 2019. The rule
``build_gdp_pop_non_nuts3`` is now integrated into :mod:`build_shapes` and
extended to build regional values for all non-NUTS3 countries.
(https://github.com/PyPSA/pypsa-eur/pull/1479)

* The default configuration for the emission reduction path in myopic pathway
planning mode has been changed to align more closely with policy targets
(``co2_budget:``). (https://github.com/PyPSA/pypsa-eur/pull/1399)

* Consider the planning horizon for biomass potentials calculation. Previously,
the biomass potential year could be chosen independently of the current
planning horizon. (https://github.com/PyPSA/pypsa-eur/pull/1311)

* Update locations and capacities of ammonia plants.
(https://github.com/PyPSA/pypsa-eur/pull/1471)

* NEP transmission projects are updated to HTLS lines.
(https://github.com/PyPSA/pypsa-eur/pull/1348)

* Added 98% imperfect capture rate of Allam cycle gas turbine.
(https://github.com/PyPSA/pypsa-eur/pull/1298)

* Improved ``sanitize_carrier`` function by filling in colors of missing
carriers. (https://github.com/PyPSA/pypsa-eur/pull/1400)

* Resolved a problem where excluding certain countries from `countries` configuration led to clustering errors.
* In post-discretizing network elements, add a configuration option to allow a
fractional last unit size. (https://github.com/PyPSA/pypsa-eur/pull/1309)

* Bugfix: demand for ammonia was double-counted at current/near-term planning horizons when ``sector['ammonia']`` was set to ``True``.
**Bugfixes and Compatibility**

* Bugfix: Bug when multiple DC links are connected to the same DC bus and the DC bus is connected to an AC bus via converter. In this case, the DC links were wrongly simplified, completely dropping the shared DC bus. Bug fixed by adding preceding converter removal. Other functionalities are not impacted.
* The length factor on the transmission lines haversine length was applied
twice, once when calculating costs and once when clustering the network. Now
it is only applied when calculating costs.
(https://github.com/PyPSA/pypsa-eur/pull/1511)

* Major improvements to building the OSM based network. The code was rewritten to improve the speed, accuracy and to preserve the topology including original substation locations, wherever possible. Further features include:
- Aggregation of lines with identical geometries and voltages
- Lines overpassing virtual nodes (not actual substations), are merged, if they have the same voltage level and number of circuits
- Cleaner line geometries, especially at connection points to substations
- Substation interior point now based on Pole of Inaccessibility (doi.org/10.1080/14702540801897809)
- Substation radius sharpened to 500 meters
- Single transformers for each combination of voltage level per substation. Transformers now have a capacity s_nom based on connected lines
- Use of OSM relations where available and unambiguous (Overwriting all lines that are members of the respective relation to avoid duplicates)
* Vehicle-to-grid dispatch capacity is now limited by the fraction of vehicles
participating in demand-side-management, halving the dispatch capacity under
the default demand-side management participation rate of 0.5.
(https://github.com/PyPSA/pypsa-eur/pull/1423)

* Updated osm-prebuilt base network to version 0.6, for changelog, see https://zenodo.org/records/14144752
* Demand for ammonia was double-counted at current/near-term planning horizons
with ``sector: ammonia: true``. (https://github.com/PyPSA/pypsa-eur/pull/1312)

* Bugfix: vehicle-to-grid dispatch capacity is now limited by the fraction of vehicles participating in demand-side-management, halving the dispatch capacity under the default demand-side management participation rate of 0.5.
* Duplicates found in :mod:`build_transmission_projects` are now correctly
removed from the network. (https://github.com/PyPSA/pypsa-eur/pull/1360)

* Bugfix: Align the naming convention for the CO2 network configuration (from `co2network` to `co2_network`). This may be a small breaking change.
* Ensure ``s_max_pu`` are correctly set for transmission projects.
(https://github.com/PyPSA/pypsa-eur/pull/1323)

* Development: The installation via `make install` now prioritizes mamba over conda for faster installation. Conda is still used as a fallback. The command `make install` now also supports passing the name of the environment, e.g. `make install name=my-project`.
* Correctly reduce gas pipeline retrofit potentials in myopic pathway planning
mode. (https://github.com/PyPSA/pypsa-eur/pull/1258)

* Development: Ruff is now used for linting and formatting. It is used in the pre-commit, so no changes are needed. But you might wanna set it up in your IDE.
* The missing lifetime attribute was added to hydrogen steel tanks, which is
important for pathway planning. (https://github.com/PyPSA/pypsa-eur/pull/1510)

* Update locations and capacities of ammonia plants.
* Ensure all links with capital costs have a lifetime. This is important for
pathway planning. (https://github.com/PyPSA/pypsa-eur/pull/1319)

* Resolved a bug which occured when multiple DC links are connected to the same
DC bus and the DC bus is connected to an AC bus via a converter. In this case,
the DC links were wrongly simplified, completely dropping the shared DC bus.
(https://github.com/PyPSA/pypsa-eur/pull/1381,
https://github.com/PyPSA/pypsa-eur/pull/1507)

* Waste CHPs are now added only to buses with district heating. Previously they
were added to all regions. (https://github.com/PyPSA/pypsa-eur/pull/1407)

* Fixed VOM, emissions and efficiencies of methanol-to-kerosene links.
(https://github.com/PyPSA/pypsa-eur/pull/1317,
https://github.com/PyPSA/pypsa-eur/pull/1320,
https://github.com/PyPSA/pypsa-eur/pull/1376)

* Existing heating data in ``build_existing_heating_distribution`` and the
indexing of existing heat pumps for the COP correction in
:mod:`add_brownfield` have been adjusted so that myopic pathways work with the
geothermal district heating. (https://github.com/PyPSA/pypsa-eur/pull/1453)

* Adjusted ``efficiency2`` (to atmosphere) for bioliquids-to-oil link in
:mod:`prepare_sector_network` to correctly offset the corresponding oil
emissions. (https://github.com/PyPSA/pypsa-eur/pull/1410)

* Add ``{sector_opts}`` wildcard to :mod:`time_aggregation`.
(https://github.com/PyPSA/pypsa-eur/pull/1307)

* Resolved a problem where excluding certain countries from ``countries``
configuration led to clustering errors.
(https://github.com/PyPSA/pypsa-eur/pull/1308)

* The environment ``envs/retrieve.yaml`` was removed. Retrieval rules now use
``envs/environment.yaml``. (https://github.com/PyPSA/pypsa-eur/pull/1509)

* Logging files are created more comprehensively.
(https://github.com/PyPSA/pypsa-eur/pull/1508,
https://github.com/PyPSA/pypsa-eur/pull/1421)

* Link for monthly CO2 prices was fixed.
(https://github.com/PyPSA/pypsa-eur/pull/1485)

* Current ``rasterio`` versions supported.
(https://github.com/PyPSA/pypsa-eur/pull/1480)

* Compatibility with ``powerplantmatching<=0.6``.
(https://github.com/PyPSA/pypsa-eur/pull/1490)

* Compatibility with ``pypsa==0.32``.
(https://github.com/PyPSA/pypsa-eur/pull/1316,
https://github.com/PyPSA/pypsa-eur/pull/1445)

* Maximum ``snakemake`` version is currently 8.24.
(https://github.com/PyPSA/pypsa-eur/pull/1440)

* Initial steps towards unit testing are taken.
(https://github.com/PyPSA/pypsa-eur/pull/1466,
https://github.com/PyPSA/pypsa-eur/pull/1438,
https://github.com/PyPSA/pypsa-eur/pull/1432)

* The installation via ``make install`` now prioritizes ``mamba`` over ``conda``
for faster installation. Conda is still used as a fallback. The command ``make
install`` now also supports passing the name of the environment, e.g. ``make
install name=my-project``. (https://github.com/PyPSA/pypsa-eur/pull/1461)

* Ruff is now used for linting and formatting. It is used within pre-commit, so
no changes are needed. But we recommend to set it up locally as well.
(https://github.com/PyPSA/pypsa-eur/pull/1474)


PyPSA-Eur 0.13.0 (13th September 2024)
1 change: 1 addition & 0 deletions doc/requirements.txt
Original file line number Diff line number Diff line change
@@ -25,3 +25,4 @@ seaborn
memory_profiler
tables
descartes
fiona
49 changes: 0 additions & 49 deletions doc/simplification.rst

This file was deleted.

2 changes: 1 addition & 1 deletion doc/supply_demand.rst
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ Annual heat demands per country are retrieved from `JRC-IDEES <https://op.europ

The space heating demand can be exogenously reduced by retrofitting measures that improve the buildings’ thermal envelopes.

.. literalinclude:: ../config.default.yaml
.. literalinclude:: ../config/config.default.yaml
:language: yaml
:lines: 205

265 changes: 145 additions & 120 deletions doc/tutorial.rst

Large diffs are not rendered by default.

1,361 changes: 719 additions & 642 deletions doc/tutorial_sector.rst

Large diffs are not rendered by default.

5 changes: 0 additions & 5 deletions doc/validation.rst
Original file line number Diff line number Diff line change
@@ -16,11 +16,6 @@ Once the API key is set, the validation workflow can be triggered by running the
snakemake validate_elec_networks --configfile config/config.validation.yaml -c8


The configuration file `config/config.validation.yaml` contains the following parameters:

.. literalinclude:: ../config/config.validation.yaml
:language: yaml

The setup uses monthly varying fuel prices for gas, lignite, coal and oil as well as CO2 prices, which are created by the script ``build_monthly_prices``. Upon completion of the validation process, the resulting network and generated figures will be stored in the ``results/validation`` directory for further analysis.


46 changes: 0 additions & 46 deletions doc/wildcards.rst
Original file line number Diff line number Diff line change
@@ -48,36 +48,6 @@ network model should be reduced to in the rule :mod:`cluster_network`.
The number of clusters must be lower than the total number of nodes
and higher than the number of countries. However, a country counts twice if
it has two asynchronous subnetworks (e.g. Denmark or Italy).
.. _ll:

The ``{ll}`` wildcard
=====================

The ``{ll}`` wildcard specifies what limits on
line expansion are set for the optimisation model.
It is handled in the rule :mod:`prepare_network`.

The wildcard, in general, consists of two parts:

1. The first part can be
``v`` (for setting a limit on line volume) or
``c`` (for setting a limit on line cost)

2. The second part can be
``opt`` or a float bigger than one (e.g. 1.25).

(a) If ``opt`` is chosen line expansion is optimised
according to its capital cost
(where the choice ``v`` only considers overhead costs for HVDC transmission lines, while
``c`` uses more accurate costs distinguishing between
overhead and underwater sections and including inverter pairs).

(b) ``v1.25`` will limit the total volume of line expansion
to 25 % of currently installed capacities weighted by
individual line lengths; investment costs are neglected.

(c) ``c1.25`` will allow to build a transmission network that
costs no more than 25 % more than the current system.

.. _opts:

@@ -105,22 +75,6 @@ The ``{sector_opts}`` wildcard
More comprehensive documentation for this wildcard will be added soon.
To really understand the options here, look in scripts/prepare_sector_network.py

# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
# xH is the temporal resolution; 3h is 3-hourly, i.e. one snapshot every 3 hours
# single letters are sectors: T for land transport, H for building heating,
# B for biomass supply, I for industry, shipping and aviation,
# A for agriculture, forestry and fishing
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
# solar+p3 multiplies the available installable potential by factor 3
# seq400 sets the potential of CO2 sequestration to 400 Mt CO2 per year
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
# emissions throughout the transition path in the timeframe determined by the
# planning_horizons), be:beta decay; ex:exponential decay
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
# decay with initial growth rate 0

The ``{sector_opts}`` wildcard is only used for sector-coupling studies.

.. csv-table::
13 changes: 7 additions & 6 deletions envs/environment.yaml
Original file line number Diff line number Diff line change
@@ -7,14 +7,14 @@ channels:
- conda-forge
- bioconda
dependencies:
- python>=3.8
- python>=3.10
- pip

# Inhouse packages
- pypsa>=0.32
- atlite>=0.2.9
- linopy
- powerplantmatching>=0.5.15,<0.6
- pypsa>=0.32.1
- atlite>=0.3
- linopy>=0.4.4
- powerplantmatching>=0.5.15

# Dependencies of the workflow itself
- dask
@@ -29,9 +29,10 @@ dependencies:
- numpy
- pandas>=2.1
- geopandas>=1
- xarray>=2023.11.0
- xarray>=2024.03.0
- rioxarray
- netcdf4
- libgdal-netcdf
- networkx
- scipy
- glpk
116 changes: 61 additions & 55 deletions envs/linux-pinned.yaml
Original file line number Diff line number Diff line change
@@ -19,19 +19,19 @@ dependencies:
- atk-1.0=2.38.0
- atlite=0.3.0
- attrs=24.3.0
- aws-c-auth=0.8.0
- aws-c-auth=0.8.1
- aws-c-cal=0.8.1
- aws-c-common=0.10.6
- aws-c-compression=0.3.0
- aws-c-event-stream=0.5.0
- aws-c-http=0.9.2
- aws-c-io=0.15.3
- aws-c-mqtt=0.11.0
- aws-c-s3=0.7.7
- aws-c-sdkutils=0.2.1
- aws-c-s3=0.7.9
- aws-c-sdkutils=0.2.2
- aws-checksums=0.2.2
- aws-crt-cpp=0.29.7
- aws-sdk-cpp=1.11.458
- aws-crt-cpp=0.29.9
- aws-sdk-cpp=1.11.489
- azure-core-cpp=1.14.0
- azure-identity-cpp=1.10.0
- azure-storage-blobs-cpp=12.13.0
@@ -60,7 +60,7 @@ dependencies:
- click=8.1.8
- click-plugins=1.1.1
- cligj=0.7.2
- cloudpickle=3.1.0
- cloudpickle=3.1.1
- coin-or-cbc=2.10.12
- coin-or-cgl=0.60.9
- coin-or-clp=1.17.10
@@ -77,9 +77,8 @@ dependencies:
- cycler=0.12.1
- cyrus-sasl=2.1.27
- cytoolz=1.0.1
- dask=2024.12.1
- dask-core=2024.12.1
- dask-expr=1.1.21
- dask=2025.1.0
- dask-core=2025.1.0
- datapi=0.1.2
- datrie=0.8.2
- dav1d=1.2.1
@@ -88,7 +87,7 @@ dependencies:
- deprecation=2.1.0
- descartes=1.1.0
- distlib=0.3.9
- distributed=2024.12.1
- distributed=2025.1.0
- docutils=0.21.2
- double-conversion=3.3.0
- dpath=2.2.0
@@ -97,7 +96,7 @@ dependencies:
- exceptiongroup=1.2.2
- executing=2.1.0
- expat=2.6.4
- filelock=3.16.1
- filelock=3.17.0
- fiona=1.10.1
- folium=0.19.4
- font-ttf-dejavu-sans-mono=2.37
@@ -107,7 +106,7 @@ dependencies:
- fontconfig=2.15.0
- fonts-conda-ecosystem=1
- fonts-conda-forge=1
- fonttools=4.55.3
- fonttools=4.55.4
- freetype=2.12.1
- freexl=2.0.0
- fribidi=1.0.10
@@ -133,17 +132,17 @@ dependencies:
- gtk2=2.24.33
- gts=0.7.6
- h2=4.1.0
- harfbuzz=10.1.0
- harfbuzz=10.2.0
- hdf4=4.2.15
- hdf5=1.14.4
- hpack=4.0.0
- hdf5=1.14.3
- hpack=4.1.0
- humanfriendly=10.0
- hyperframe=6.0.1
- hyperframe=6.1.0
- icu=75.1
- identify=2.6.5
- identify=2.6.6
- idna=3.10
- immutables=0.21
- importlib-metadata=8.5.0
- importlib-metadata=8.6.1
- importlib_resources=6.5.2
- iniconfig=2.0.0
- ipopt=3.14.16
@@ -157,26 +156,26 @@ dependencies:
- jsonschema-specifications=2024.10.1
- jupyter_core=5.7.2
- keyutils=1.6.1
- kiwisolver=1.4.7
- kiwisolver=1.4.8
- krb5=1.21.3
- lcms2=2.16
- ld_impl_linux-64=2.43
- lerc=4.0.0
- libabseil=20240722.0
- libaec=1.1.3
- libarchive=3.7.7
- libarrow=18.1.0
- libarrow-acero=18.1.0
- libarrow-dataset=18.1.0
- libarrow-substrait=18.1.0
- libarrow=19.0.0
- libarrow-acero=19.0.0
- libarrow-dataset=19.0.0
- libarrow-substrait=19.0.0
- libavif16=1.1.1
- libblas=3.9.0
- libbrotlicommon=1.1.0
- libbrotlidec=1.1.0
- libbrotlienc=1.1.0
- libcblas=3.9.0
- libclang-cpp19.1=19.1.6
- libclang13=19.1.6
- libclang-cpp19.1=19.1.7
- libclang13=19.1.7
- libcrc32c=1.1.2
- libcups=2.3.3
- libcurl=8.11.1
@@ -192,7 +191,10 @@ dependencies:
- libgcc=14.2.0
- libgcc-ng=14.2.0
- libgd=2.3.3
- libgdal-core=3.10.0
- libgdal-core=3.10.1
- libgdal-hdf4=3.10.1
- libgdal-hdf5=3.10.1
- libgdal-netcdf=3.10.1
- libgfortran=14.2.0
- libgfortran-ng=14.2.0
- libgfortran5=14.2.0
@@ -201,8 +203,8 @@ dependencies:
- libglvnd=1.7.0
- libglx=1.7.0
- libgomp=14.2.0
- libgoogle-cloud=2.33.0
- libgoogle-cloud-storage=2.33.0
- libgoogle-cloud=2.34.0
- libgoogle-cloud-storage=2.34.0
- libgrpc=1.67.1
- libheif=1.19.5
- libhwloc=2.11.2
@@ -211,7 +213,7 @@ dependencies:
- libkml=1.3.0
- liblapack=3.9.0
- liblapacke=3.9.0
- libllvm19=19.1.6
- libllvm19=19.1.7
- liblzma=5.6.3
- liblzma-devel=5.6.3
- libnetcdf=4.9.2
@@ -220,7 +222,9 @@ dependencies:
- libntlm=1.8
- libopenblas=0.3.28
- libopengl=1.7.0
- libparquet=18.1.0
- libopentelemetry-cpp=1.18.0
- libopentelemetry-cpp-headers=1.18.0
- libparquet=19.0.0
- libpciaccess=0.18
- libpng=1.6.45
- libpq=17.2
@@ -231,13 +235,13 @@ dependencies:
- libscotch=7.0.4
- libspatialite=5.1.0
- libspral=2024.05.08
- libsqlite=3.47.2
- libsqlite=3.48.0
- libssh2=1.11.1
- libstdcxx=14.2.0
- libstdcxx-ng=14.2.0
- libthrift=0.21.0
- libtiff=4.7.0
- libutf8proc=2.9.0
- libutf8proc=2.10.0
- libuuid=2.38.1
- libwebp-base=1.5.0
- libxcb=1.17.0
@@ -273,6 +277,7 @@ dependencies:
- ncurses=6.5
- netcdf4=1.7.2
- networkx=3.4.2
- nlohmann_json=3.11.3
- nodeenv=1.9.1
- nomkl=1.0
- numexpr=2.10.2
@@ -284,7 +289,7 @@ dependencies:
- orc=2.0.3
- packaging=24.2
- pandas=2.2.3
- pango=1.56.0
- pango=1.56.1
- parso=0.8.4
- partd=1.4.2
- patsy=1.0.1
@@ -298,27 +303,28 @@ dependencies:
- plac=1.4.3
- platformdirs=4.3.6
- pluggy=1.5.0
- polars=1.17.1
- powerplantmatching=0.5.19
- pre-commit=4.0.1
- polars=1.20.0
- powerplantmatching=0.7.0
- pre-commit=4.1.0
- progressbar2=4.5.0
- proj=9.5.1
- prompt-toolkit=3.0.48
- prometheus-cpp=1.3.0
- prompt-toolkit=3.0.50
- psutil=6.1.1
- pthread-stubs=0.4
- ptyprocess=0.7.0
- pulp=2.8.0
- pure_eval=0.2.3
- py-cpuinfo=9.0.0
- pyarrow=18.1.0
- pyarrow-core=18.1.0
- pyarrow=19.0.0
- pyarrow-core=19.0.0
- pycountry=24.6.1
- pycparser=2.22
- pygments=2.19.1
- pyogrio=0.10.0
- pyparsing=3.2.1
- pyproj=3.7.0
- pypsa=0.32.0
- pypsa=0.32.1
- pyscipopt=5.2.1
- pyshp=2.3.1
- pyside6=6.8.1
@@ -328,7 +334,7 @@ dependencies:
- python=3.12.8
- python-dateutil=2.9.0.post0
- python-fastjsonschema=2.21.1
- python-tzdata=2024.2
- python-tzdata=2025.1
- python-utils=3.9.1
- python_abi=3.12
- pytz=2024.1
@@ -340,19 +346,19 @@ dependencies:
- rav1e=0.6.6
- re2=2024.07.02
- readline=8.2
- referencing=0.35.1
- referencing=0.36.1
- requests=2.32.3
- reretry=0.11.8
- rioxarray=0.17.0
- rioxarray=0.18.2
- rpds-py=0.22.3
- ruff=0.9.0
- s2n=1.5.10
- ruff=0.9.2
- s2n=1.5.11
- scikit-learn=1.6.1
- scip=9.1.1
- scipy=1.15.0
- scipy=1.15.1
- seaborn=0.13.2
- seaborn-base=0.13.2
- setuptools=75.7.0
- setuptools=75.8.0
- shapely=2.0.6
- six=1.17.0
- smart_open=7.1.0
@@ -366,7 +372,7 @@ dependencies:
- snuggs=1.4.7
- sortedcontainers=2.4.0
- soupsieve=2.5
- sqlite=3.47.2
- sqlite=3.48.0
- stack_data=0.6.3
- statsmodels=0.14.4
- svt-av1=2.3.0
@@ -383,18 +389,18 @@ dependencies:
- traitlets=5.14.3
- typing-extensions=4.12.2
- typing_extensions=4.12.2
- tzdata=2024b
- tzdata=2025a
- ukkonen=1.0.1
- unicodedata2=15.1.0
- unicodedata2=16.0.0
- unidecode=1.3.8
- uriparser=0.9.8
- urllib3=2.3.0
- validators=0.34.0
- virtualenv=20.28.1
- virtualenv=20.29.1
- wayland=1.23.1
- wcwidth=0.2.13
- wheel=0.45.1
- wrapt=1.17.0
- wrapt=1.17.2
- x265=3.5
- xarray=2025.1.1
- xcb-util=0.4.1
@@ -421,12 +427,12 @@ dependencies:
- xorg-libxrender=0.9.12
- xorg-libxtst=1.2.5
- xorg-libxxf86vm=1.1.6
- xyzservices=2024.9.0
- xyzservices=2025.1.0
- xz=5.6.3
- xz-gpl-tools=5.6.3
- xz-tools=5.6.3
- yaml=0.2.5
- yte=1.5.5
- yte=1.5.6
- zict=3.0.0
- zipp=3.21.0
- zlib=1.3.1
@@ -441,7 +447,7 @@ dependencies:
- pyomo==6.8.2
- requests-oauthlib==1.3.1
- snakemake-executor-plugin-cluster-generic==1.0.9
- snakemake-executor-plugin-slurm==0.12.0
- snakemake-executor-plugin-slurm==0.15.0
- snakemake-executor-plugin-slurm-jobstep==0.2.1
- snakemake-storage-plugin-http==0.2.3
- tsam==2.3.6
112 changes: 59 additions & 53 deletions envs/macos-pinned.yaml
Original file line number Diff line number Diff line change
@@ -16,19 +16,19 @@ dependencies:
- atk-1.0=2.38.0
- atlite=0.3.0
- attrs=24.3.0
- aws-c-auth=0.8.0
- aws-c-auth=0.8.1
- aws-c-cal=0.8.1
- aws-c-common=0.10.6
- aws-c-compression=0.3.0
- aws-c-event-stream=0.5.0
- aws-c-http=0.9.2
- aws-c-io=0.15.3
- aws-c-mqtt=0.11.0
- aws-c-s3=0.7.7
- aws-c-sdkutils=0.2.1
- aws-c-s3=0.7.9
- aws-c-sdkutils=0.2.2
- aws-checksums=0.2.2
- aws-crt-cpp=0.29.7
- aws-sdk-cpp=1.11.458
- aws-crt-cpp=0.29.9
- aws-sdk-cpp=1.11.489
- azure-core-cpp=1.14.0
- azure-identity-cpp=1.10.0
- azure-storage-blobs-cpp=12.13.0
@@ -57,7 +57,7 @@ dependencies:
- click=8.1.8
- click-plugins=1.1.1
- cligj=0.7.2
- cloudpickle=3.1.0
- cloudpickle=3.1.1
- coin-or-cbc=2.10.12
- coin-or-cgl=0.60.9
- coin-or-clp=1.17.10
@@ -73,24 +73,23 @@ dependencies:
- cppad=20240000.7
- cycler=0.12.1
- cytoolz=1.0.1
- dask=2024.12.1
- dask-core=2024.12.1
- dask-expr=1.1.21
- dask=2025.1.0
- dask-core=2025.1.0
- datapi=0.1.2
- datrie=0.8.2
- dav1d=1.2.1
- decorator=5.1.1
- deprecation=2.1.0
- descartes=1.1.0
- distlib=0.3.9
- distributed=2024.12.1
- distributed=2025.1.0
- docutils=0.21.2
- dpath=2.2.0
- entsoe-py=0.6.11
- et_xmlfile=2.0.0
- exceptiongroup=1.2.2
- executing=2.1.0
- filelock=3.16.1
- filelock=3.17.0
- fiona=1.10.1
- folium=0.19.4
- font-ttf-dejavu-sans-mono=2.37
@@ -100,7 +99,7 @@ dependencies:
- fontconfig=2.15.0
- fonts-conda-ecosystem=1
- fonts-conda-forge=1
- fonttools=4.55.3
- fonttools=4.55.4
- freetype=2.12.1
- freexl=2.0.0
- fribidi=1.0.10
@@ -126,17 +125,17 @@ dependencies:
- gtk2=2.24.33
- gts=0.7.6
- h2=4.1.0
- harfbuzz=10.1.0
- harfbuzz=10.2.0
- hdf4=4.2.15
- hdf5=1.14.4
- hpack=4.0.0
- hdf5=1.14.3
- hpack=4.1.0
- humanfriendly=10.0
- hyperframe=6.0.1
- hyperframe=6.1.0
- icu=75.1
- identify=2.6.5
- identify=2.6.6
- idna=3.10
- immutables=0.21
- importlib-metadata=8.5.0
- importlib-metadata=8.6.1
- importlib_resources=6.5.2
- iniconfig=2.0.0
- ipopt=3.14.16
@@ -149,17 +148,17 @@ dependencies:
- jsonschema=4.23.0
- jsonschema-specifications=2024.10.1
- jupyter_core=5.7.2
- kiwisolver=1.4.7
- kiwisolver=1.4.8
- krb5=1.21.3
- lcms2=2.16
- lerc=4.0.0
- libabseil=20240722.0
- libaec=1.1.3
- libarchive=3.7.7
- libarrow=18.1.0
- libarrow-acero=18.1.0
- libarrow-dataset=18.1.0
- libarrow-substrait=18.1.0
- libarrow=19.0.0
- libarrow-acero=19.0.0
- libarrow-dataset=19.0.0
- libarrow-substrait=19.0.0
- libavif16=1.1.1
- libblas=3.9.0
- libbrotlicommon=1.1.0
@@ -168,7 +167,7 @@ dependencies:
- libcblas=3.9.0
- libcrc32c=1.1.2
- libcurl=8.11.1
- libcxx=19.1.6
- libcxx=19.1.7
- libde265=1.0.15
- libdeflate=1.23
- libedit=3.1.20240808
@@ -177,12 +176,15 @@ dependencies:
- libexpat=2.6.4
- libffi=3.4.2
- libgd=2.3.3
- libgdal-core=3.10.0
- libgdal-core=3.10.1
- libgdal-hdf4=3.10.1
- libgdal-hdf5=3.10.1
- libgdal-netcdf=3.10.1
- libgfortran=5.0.0
- libgfortran5=13.2.0
- libglib=2.82.2
- libgoogle-cloud=2.33.0
- libgoogle-cloud-storage=2.33.0
- libgoogle-cloud=2.34.0
- libgoogle-cloud-storage=2.34.0
- libgrpc=1.67.1
- libheif=1.19.5
- libhwloc=2.11.2
@@ -196,27 +198,29 @@ dependencies:
- libnetcdf=4.9.2
- libnghttp2=1.64.0
- libopenblas=0.3.28
- libparquet=18.1.0
- libopentelemetry-cpp=1.18.0
- libopentelemetry-cpp-headers=1.18.0
- libparquet=19.0.0
- libpng=1.6.45
- libprotobuf=5.28.3
- libre2-11=2024.07.02
- librsvg=2.58.4
- librttopo=1.1.0
- libscotch=7.0.6
- libspatialite=5.1.0
- libsqlite=3.47.2
- libsqlite=3.48.0
- libssh2=1.11.1
- libthrift=0.21.0
- libtiff=4.7.0
- libutf8proc=2.9.0
- libutf8proc=2.10.0
- libwebp-base=1.5.0
- libxcb=1.17.0
- libxml2=2.13.5
- libxslt=1.1.39
- libzip=1.11.2
- libzlib=1.3.1
- linopy=0.4.4
- llvm-openmp=19.1.6
- llvm-openmp=19.1.7
- locket=1.0.0
- lxml=5.3.0
- lz4=4.3.3
@@ -240,6 +244,7 @@ dependencies:
- ncurses=6.5
- netcdf4=1.7.2
- networkx=3.4.2
- nlohmann_json=3.11.3
- nodeenv=1.9.1
- numexpr=2.10.2
- numpy=1.26.4
@@ -249,7 +254,7 @@ dependencies:
- orc=2.0.3
- packaging=24.2
- pandas=2.2.3
- pango=1.56.0
- pango=1.56.1
- parso=0.8.4
- partd=1.4.2
- patsy=1.0.1
@@ -263,27 +268,28 @@ dependencies:
- plac=1.4.3
- platformdirs=4.3.6
- pluggy=1.5.0
- polars=1.17.1
- powerplantmatching=0.5.19
- pre-commit=4.0.1
- polars=1.20.0
- powerplantmatching=0.7.0
- pre-commit=4.1.0
- progressbar2=4.5.0
- proj=9.5.1
- prompt-toolkit=3.0.48
- prometheus-cpp=1.3.0
- prompt-toolkit=3.0.50
- psutil=6.1.1
- pthread-stubs=0.4
- ptyprocess=0.7.0
- pulp=2.8.0
- pure_eval=0.2.3
- py-cpuinfo=9.0.0
- pyarrow=18.1.0
- pyarrow-core=18.1.0
- pyarrow=19.0.0
- pyarrow-core=19.0.0
- pycountry=24.6.1
- pycparser=2.22
- pygments=2.19.1
- pyogrio=0.10.0
- pyparsing=3.2.1
- pyproj=3.7.0
- pypsa=0.32.0
- pypsa=0.32.1
- pyscipopt=5.2.1
- pyshp=2.3.1
- pysocks=1.7.1
@@ -292,7 +298,7 @@ dependencies:
- python=3.12.8
- python-dateutil=2.9.0.post0
- python-fastjsonschema=2.21.1
- python-tzdata=2024.2
- python-tzdata=2025.1
- python-utils=3.9.1
- python_abi=3.12
- pytz=2024.1
@@ -303,18 +309,18 @@ dependencies:
- rav1e=0.6.6
- re2=2024.07.02
- readline=8.2
- referencing=0.35.1
- referencing=0.36.1
- requests=2.32.3
- reretry=0.11.8
- rioxarray=0.17.0
- rioxarray=0.18.2
- rpds-py=0.22.3
- ruff=0.9.0
- ruff=0.9.2
- scikit-learn=1.6.1
- scip=9.1.1
- scipy=1.14.1
- scipy=1.15.1
- seaborn=0.13.2
- seaborn-base=0.13.2
- setuptools=75.7.0
- setuptools=75.8.0
- shapely=2.0.6
- six=1.17.0
- smart_open=7.1.0
@@ -328,7 +334,7 @@ dependencies:
- snuggs=1.4.7
- sortedcontainers=2.4.0
- soupsieve=2.5
- sqlite=3.47.2
- sqlite=3.48.0
- stack_data=0.6.3
- statsmodels=0.14.4
- svt-av1=2.3.0
@@ -345,26 +351,26 @@ dependencies:
- traitlets=5.14.3
- typing-extensions=4.12.2
- typing_extensions=4.12.2
- tzdata=2024b
- tzdata=2025a
- ukkonen=1.0.1
- unicodedata2=15.1.0
- unicodedata2=16.0.0
- unidecode=1.3.8
- uriparser=0.9.8
- urllib3=2.3.0
- validators=0.34.0
- virtualenv=20.28.1
- virtualenv=20.29.1
- wcwidth=0.2.13
- wheel=0.45.1
- wrapt=1.17.0
- wrapt=1.17.2
- x265=3.5
- xarray=2025.1.1
- xerces-c=3.2.5
- xlrd=2.0.1
- xorg-libxau=1.0.12
- xorg-libxdmcp=1.1.5
- xyzservices=2024.9.0
- xyzservices=2025.1.0
- yaml=0.2.5
- yte=1.5.5
- yte=1.5.6
- zict=3.0.0
- zipp=3.21.0
- zlib=1.3.1
@@ -379,7 +385,7 @@ dependencies:
- pyomo==6.8.2
- requests-oauthlib==1.3.1
- snakemake-executor-plugin-cluster-generic==1.0.9
- snakemake-executor-plugin-slurm==0.12.0
- snakemake-executor-plugin-slurm==0.15.0
- snakemake-executor-plugin-slurm-jobstep==0.2.1
- snakemake-storage-plugin-http==0.2.3
- tsam==2.3.6
18 changes: 0 additions & 18 deletions envs/retrieve.yaml

This file was deleted.

106 changes: 54 additions & 52 deletions envs/windows-pinned.yaml
Original file line number Diff line number Diff line change
@@ -16,19 +16,19 @@ dependencies:
- asttokens=3.0.0
- atlite=0.3.0
- attrs=24.3.0
- aws-c-auth=0.8.0
- aws-c-auth=0.8.1
- aws-c-cal=0.8.1
- aws-c-common=0.10.6
- aws-c-compression=0.3.0
- aws-c-event-stream=0.5.0
- aws-c-http=0.9.2
- aws-c-io=0.15.3
- aws-c-mqtt=0.11.0
- aws-c-s3=0.7.7
- aws-c-sdkutils=0.2.1
- aws-c-s3=0.7.9
- aws-c-sdkutils=0.2.2
- aws-checksums=0.2.2
- aws-crt-cpp=0.29.7
- aws-sdk-cpp=1.11.458
- aws-crt-cpp=0.29.9
- aws-sdk-cpp=1.11.489
- beautifulsoup4=4.12.3
- blosc=1.21.6
- bokeh=3.6.2
@@ -52,7 +52,7 @@ dependencies:
- click=8.1.8
- click-plugins=1.1.1
- cligj=0.7.2
- cloudpickle=3.1.0
- cloudpickle=3.1.1
- colorama=0.4.6
- conda-inject=1.3.2
- configargparse=1.7
@@ -63,25 +63,24 @@ dependencies:
- cpython=3.12.8
- cycler=0.12.1
- cytoolz=1.0.1
- dask=2024.12.1
- dask-core=2024.12.1
- dask-expr=1.1.21
- dask=2025.1.0
- dask-core=2025.1.0
- datapi=0.1.2
- datrie=0.8.2
- dav1d=1.2.1
- decorator=5.1.1
- deprecation=2.1.0
- descartes=1.1.0
- distlib=0.3.9
- distributed=2024.12.1
- distributed=2025.1.0
- docutils=0.21.2
- double-conversion=3.3.0
- dpath=2.2.0
- entsoe-py=0.6.11
- et_xmlfile=2.0.0
- exceptiongroup=1.2.2
- executing=2.1.0
- filelock=3.16.1
- filelock=3.17.0
- fiona=1.10.1
- folium=0.19.4
- font-ttf-dejavu-sans-mono=2.37
@@ -91,7 +90,7 @@ dependencies:
- fontconfig=2.15.0
- fonts-conda-ecosystem=1
- fonts-conda-forge=1
- fonttools=4.55.3
- fonttools=4.55.4
- freetype=2.12.1
- freexl=2.0.0
- fribidi=1.0.10
@@ -113,17 +112,17 @@ dependencies:
- graphviz=12.0.0
- gts=0.7.6
- h2=4.1.0
- harfbuzz=10.1.0
- harfbuzz=10.2.0
- hdf4=4.2.15
- hdf5=1.14.4
- hpack=4.0.0
- hdf5=1.14.3
- hpack=4.1.0
- humanfriendly=10.0
- hyperframe=6.0.1
- hyperframe=6.1.0
- icu=75.1
- identify=2.6.5
- identify=2.6.6
- idna=3.10
- immutables=0.21
- importlib-metadata=8.5.0
- importlib-metadata=8.6.1
- importlib_resources=6.5.2
- iniconfig=2.0.0
- ipopt=3.14.16
@@ -135,25 +134,25 @@ dependencies:
- jsonschema=4.23.0
- jsonschema-specifications=2024.10.1
- jupyter_core=5.7.2
- kiwisolver=1.4.7
- kiwisolver=1.4.8
- krb5=1.21.3
- lcms2=2.16
- lerc=4.0.0
- libabseil=20240722.0
- libaec=1.1.3
- libarchive=3.7.7
- libarrow=18.1.0
- libarrow-acero=18.1.0
- libarrow-dataset=18.1.0
- libarrow-substrait=18.1.0
- libarrow=19.0.0
- libarrow-acero=19.0.0
- libarrow-dataset=19.0.0
- libarrow-substrait=19.0.0
- libavif16=1.1.1
- libblas=3.9.0
- libboost=1.86.0
- libbrotlicommon=1.1.0
- libbrotlidec=1.1.0
- libbrotlienc=1.1.0
- libcblas=3.9.0
- libclang13=19.1.6
- libclang13=19.1.7
- libcrc32c=1.1.2
- libcurl=8.11.1
- libde265=1.0.15
@@ -164,11 +163,14 @@ dependencies:
- libflang=5.0.0
- libgcc=14.2.0
- libgd=2.3.3
- libgdal-core=3.10.0
- libgdal-core=3.10.1
- libgdal-hdf4=3.10.1
- libgdal-hdf5=3.10.1
- libgdal-netcdf=3.10.1
- libglib=2.82.2
- libgomp=14.2.0
- libgoogle-cloud=2.33.0
- libgoogle-cloud-storage=2.33.0
- libgoogle-cloud=2.34.0
- libgoogle-cloud-storage=2.34.0
- libgrpc=1.67.1
- libheif=1.19.5
- libhwloc=2.11.2
@@ -180,17 +182,17 @@ dependencies:
- liblzma=5.6.3
- libnetcdf=4.9.2
- libopenblas=0.3.28
- libparquet=18.1.0
- libparquet=19.0.0
- libpng=1.6.45
- libprotobuf=5.28.3
- libre2-11=2024.07.02
- librttopo=1.1.0
- libspatialite=5.1.0
- libsqlite=3.47.2
- libsqlite=3.48.0
- libssh2=1.11.1
- libthrift=0.21.0
- libtiff=4.7.0
- libutf8proc=2.9.0
- libutf8proc=2.10.0
- libwebp-base=1.5.0
- libwinpthread=12.0.0.r4.gg4f2fc60ca
- libxcb=1.17.0
@@ -231,7 +233,7 @@ dependencies:
- orc=2.0.3
- packaging=24.2
- pandas=2.2.3
- pango=1.56.0
- pango=1.56.1
- parso=0.8.4
- partd=1.4.2
- patsy=1.0.1
@@ -244,25 +246,25 @@ dependencies:
- plac=1.4.3
- platformdirs=4.3.6
- pluggy=1.5.0
- powerplantmatching=0.5.19
- pre-commit=4.0.1
- powerplantmatching=0.7.0
- pre-commit=4.1.0
- progressbar2=4.5.0
- proj=9.5.1
- prompt-toolkit=3.0.48
- prompt-toolkit=3.0.50
- psutil=6.1.1
- pthread-stubs=0.4
- pulp=2.8.0
- pure_eval=0.2.3
- py-cpuinfo=9.0.0
- pyarrow=18.1.0
- pyarrow-core=18.1.0
- pyarrow=19.0.0
- pyarrow-core=19.0.0
- pycountry=24.6.1
- pycparser=2.22
- pygments=2.19.1
- pyogrio=0.10.0
- pyparsing=3.2.1
- pyproj=3.7.0
- pypsa=0.32.0
- pypsa=0.32.1
- pyreadline3=3.5.4
- pyscipopt=5.2.1
- pyshp=2.3.1
@@ -273,7 +275,7 @@ dependencies:
- python=3.12.8
- python-dateutil=2.9.0.post0
- python-fastjsonschema=2.21.1
- python-tzdata=2024.2
- python-tzdata=2025.1
- python-utils=3.9.1
- python_abi=3.12
- pytz=2024.1
@@ -285,18 +287,18 @@ dependencies:
- rasterio=1.4.3
- rav1e=0.6.6
- re2=2024.07.02
- referencing=0.35.1
- referencing=0.36.1
- requests=2.32.3
- reretry=0.11.8
- rioxarray=0.17.0
- rioxarray=0.18.2
- rpds-py=0.22.3
- ruff=0.9.0
- ruff=0.9.2
- scikit-learn=1.6.1
- scip=9.1.1
- scipy=1.15.0
- scipy=1.15.1
- seaborn=0.13.2
- seaborn-base=0.13.2
- setuptools=75.7.0
- setuptools=75.8.0
- shapely=2.0.6
- six=1.17.0
- smart_open=7.1.0
@@ -310,7 +312,7 @@ dependencies:
- snuggs=1.4.7
- sortedcontainers=2.4.0
- soupsieve=2.5
- sqlite=3.47.2
- sqlite=3.48.0
- stack_data=0.6.3
- statsmodels=0.14.4
- svt-av1=2.3.0
@@ -327,22 +329,22 @@ dependencies:
- traitlets=5.14.3
- typing-extensions=4.12.2
- typing_extensions=4.12.2
- tzdata=2024b
- tzdata=2025a
- ucrt=10.0.22621.0
- ukkonen=1.0.1
- unicodedata2=15.1.0
- unicodedata2=16.0.0
- unidecode=1.3.8
- uriparser=0.9.8
- urllib3=2.3.0
- validators=0.34.0
- vc=14.3
- vc14_runtime=14.42.34433
- virtualenv=20.28.1
- virtualenv=20.29.1
- vs2015_runtime=14.42.34433
- wcwidth=0.2.13
- wheel=0.45.1
- win_inet_pton=1.1.0
- wrapt=1.17.0
- wrapt=1.17.2
- x265=3.5
- xarray=2025.1.1
- xerces-c=3.2.5
@@ -355,9 +357,9 @@ dependencies:
- xorg-libxext=1.3.6
- xorg-libxpm=3.5.17
- xorg-libxt=1.3.1
- xyzservices=2024.9.0
- xyzservices=2025.1.0
- yaml=0.2.5
- yte=1.5.5
- yte=1.5.6
- zict=3.0.0
- zipp=3.21.0
- zlib=1.3.1
@@ -369,11 +371,11 @@ dependencies:
- highspy==1.7.2
- oauthlib==3.2.2
- ply==3.11
- polars==1.17.1
- polars==1.20.0
- pyomo==6.8.2
- requests-oauthlib==1.3.1
- snakemake-executor-plugin-cluster-generic==1.0.9
- snakemake-executor-plugin-slurm==0.12.0
- snakemake-executor-plugin-slurm==0.15.0
- snakemake-executor-plugin-slurm-jobstep==0.2.1
- snakemake-storage-plugin-http==0.2.3
- tsam==2.3.6
83 changes: 41 additions & 42 deletions rules/build_electricity.smk
Original file line number Diff line number Diff line change
@@ -20,6 +20,8 @@ rule build_electricity_demand:
resources("electricity_demand.csv"),
log:
logs("build_electricity_demand.log"),
benchmark:
benchmarks("build_electricity_demand")
resources:
mem_mb=5000,
conda:
@@ -98,24 +100,46 @@ rule base_network:
"../scripts/base_network.py"


rule build_osm_boundaries:
input:
json="data/osm-boundaries/json/{country}_adm1.json",
eez=ancient("data/eez/World_EEZ_v12_20231025_LR/eez_v12_lowres.gpkg"),
output:
boundary="data/osm-boundaries/build/{country}_adm1.geojson",
log:
"logs/build_osm_boundaries_{country}.log",
threads: 1
resources:
mem_mb=1500,
conda:
"../envs/environment.yaml"
script:
"../scripts/build_osm_boundaries.py"


rule build_shapes:
params:
countries=config_provider("countries"),
input:
naturalearth=ancient("data/naturalearth/ne_10m_admin_0_countries_deu.shp"),
eez=ancient("data/eez/World_EEZ_v12_20231025_LR/eez_v12_lowres.gpkg"),
nuts3=ancient("data/nuts/NUTS_RG_03M_2013_4326_LEVL_3.geojson"),
nuts3pop=ancient("data/bundle/nama_10r_3popgdp.tsv.gz"),
nuts3gdp=ancient("data/bundle/nama_10r_3gdp.tsv.gz"),
ch_cantons=ancient("data/ch_cantons.csv"),
ch_popgdp=ancient("data/bundle/je-e-21.03.02.xls"),
nuts3_2021="data/nuts/NUTS_RG_01M_2021_4326_LEVL_3.geojson",
ba_adm1="data/osm-boundaries/build/BA_adm1.geojson",
md_adm1="data/osm-boundaries/build/MD_adm1.geojson",
ua_adm1="data/osm-boundaries/build/UA_adm1.geojson",
xk_adm1="data/osm-boundaries/build/XK_adm1.geojson",
nuts3_gdp="data/jrc-ardeco/ARDECO-SUVGDP.2021.table.csv",
nuts3_pop="data/jrc-ardeco/ARDECO-SNPTD.2021.table.csv",
other_gdp="data/bundle/GDP_per_capita_PPP_1990_2015_v2.nc",
other_pop="data/bundle/ppp_2019_1km_Aggregated.tif",
output:
country_shapes=resources("country_shapes.geojson"),
offshore_shapes=resources("offshore_shapes.geojson"),
europe_shape=resources("europe_shape.geojson"),
nuts3_shapes=resources("nuts3_shapes.geojson"),
log:
logs("build_shapes.log"),
benchmark:
benchmarks("build_shapes")
threads: 1
resources:
mem_mb=1500,
@@ -204,6 +228,8 @@ rule determine_availability_matrix_MD_UA:
),
log:
logs("determine_availability_matrix_MD_UA_{clusters}_{technology}.log"),
benchmark:
benchmarks("determine_availability_matrix_MD_UA_{clusters}_{technology}")
threads: config["atlite"].get("nprocesses", 4)
resources:
mem_mb=config["atlite"].get("nprocesses", 4) * 5000,
@@ -300,7 +326,7 @@ rule build_renewable_profiles:
log:
logs("build_renewable_profile_{clusters}_{technology}.log"),
benchmark:
benchmarks("build_renewable_profiles_{clusters}_{technology}")
benchmarks("build_renewable_profile_{clusters}_{technology}")
threads: config["atlite"].get("nprocesses", 4)
resources:
mem_mb=config["atlite"].get("nprocesses", 4) * 5000,
@@ -321,6 +347,8 @@ rule build_monthly_prices:
fuel_price=resources("monthly_fuel_price.csv"),
log:
logs("build_monthly_prices.log"),
benchmark:
benchmarks("build_monthly_prices")
threads: 1
resources:
mem_mb=5000,
@@ -349,6 +377,8 @@ rule build_hydro_profile:
profile=resources("profile_hydro.nc"),
log:
logs("build_hydro_profile.log"),
benchmark:
benchmarks("build_hydro_profile")
resources:
mem_mb=5000,
conda:
@@ -472,42 +502,10 @@ def input_conventional(w):
}


# Optional input when having Ukraine (UA) or Moldova (MD) in the countries list
def input_gdp_pop_non_nuts3(w):
countries = set(config_provider("countries")(w))
if {"UA", "MD"}.intersection(countries):
return {"gdp_pop_non_nuts3": resources("gdp_pop_non_nuts3.geojson")}
return {}


rule build_gdp_pop_non_nuts3:
params:
countries=config_provider("countries"),
input:
base_network=resources("networks/base_s.nc"),
regions=resources("regions_onshore_base_s.geojson"),
gdp_non_nuts3="data/bundle/GDP_per_capita_PPP_1990_2015_v2.nc",
pop_non_nuts3="data/bundle/ppp_2013_1km_Aggregated.tif",
output:
resources("gdp_pop_non_nuts3.geojson"),
log:
logs("build_gdp_pop_non_nuts3.log"),
benchmark:
benchmarks("build_gdp_pop_non_nuts3")
threads: 1
resources:
mem_mb=8000,
conda:
"../envs/environment.yaml"
script:
"../scripts/build_gdp_pop_non_nuts3.py"


rule build_electricity_demand_base:
params:
distribution_key=config_provider("load", "distribution_key"),
input:
unpack(input_gdp_pop_non_nuts3),
base_network=resources("networks/base_s.nc"),
regions=resources("regions_onshore_base_s.geojson"),
nuts3=resources("nuts3_shapes.geojson"),
@@ -724,18 +722,19 @@ rule prepare_network:
adjustments=config_provider("adjustments", "electricity"),
autarky=config_provider("electricity", "autarky", default={}),
drop_leap_day=config_provider("enable", "drop_leap_day"),
transmission_limit=config_provider("electricity", "transmission_limit"),
input:
resources("networks/base_s_{clusters}_elec.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
),
co2_price=lambda w: resources("co2_price.csv") if "Ept" in w.opts else [],
output:
resources("networks/base_s_{clusters}_elec_l{ll}_{opts}.nc"),
resources("networks/base_s_{clusters}_elec_{opts}.nc"),
log:
logs("prepare_network_base_s_{clusters}_elec_l{ll}_{opts}.log"),
logs("prepare_network_base_s_{clusters}_elec_{opts}.log"),
benchmark:
benchmarks("prepare_network_base_s_{clusters}_elec_l{ll}_{opts}")
benchmarks("prepare_network_base_s_{clusters}_elec_{opts}")
threads: 1
resources:
mem_mb=4000,
Loading

0 comments on commit 88fc4b5

Please sign in to comment.