Merge branch 'master' into reduced-data-bundle

This commit is contained in:
Fabian Neumann 2024-05-12 15:53:08 +02:00
commit 0d9e0f34fd
35 changed files with 1392 additions and 1568 deletions

View File

@ -31,7 +31,7 @@ jobs:
os:
- ubuntu-latest
- macos-latest
# - windows-latest
- windows-latest
inhouse:
- stable
- master

View File

@ -51,7 +51,7 @@ repos:
# Formatting with "black" coding style
- repo: https://github.com/psf/black-pre-commit-mirror
rev: 24.3.0
rev: 24.4.2
hooks:
# Format Python files
- id: black
@ -74,7 +74,7 @@ repos:
# Format Snakemake rule / workflow files
- repo: https://github.com/snakemake/snakefmt
rev: v0.10.0
rev: v0.10.1
hooks:
- id: snakefmt

View File

@ -8,7 +8,7 @@ from os.path import normpath, exists
from shutil import copyfile, move, rmtree
from snakemake.utils import min_version
min_version("8.5")
min_version("8.11")
from scripts._helpers import path_provider, copy_default_files, get_scenarios, get_rdir

View File

@ -71,7 +71,6 @@ enable:
retrieve_databundle: true
retrieve_cost_data: true
build_cutout: false
retrieve_irena: false
retrieve_cutout: true
custom_busmap: false
drop_leap_day: true
@ -767,7 +766,7 @@ solving:
solver_options:
highs-default:
# refer to https://ergo-code.github.io/HiGHS/options/definitions.html#solver
# refer to https://ergo-code.github.io/HiGHS/dev/options/definitions/
threads: 4
solver: "ipm"
run_crossover: "off"

View File

@ -1,34 +0,0 @@
Country/area,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022
Albania,,,,,,,,,,,,,,,,,,,,,,,
Austria,,,,,,,,,,,,,,,,,,,,,,,
Belgium,,,,,,,,,,31.5,196.5,196.5,381.0,707.7,707.7,712.0,712.2,877.2,1185.9,1555.5,2261.8,2261.8,2261.8
Bosnia Herzg,,,,,,,,,,,,,,,,,,,,,,,
Bulgaria,,,,,,,,,,,,,,,,,,,,,,,
Croatia,,,,,,,,,,,,,,,,,,,,,,,
Czechia,,,,,,,,,,,,,,,,,,,,,,,
Denmark,49.95,49.95,213.95,423.35,423.35,423.35,423.35,423.35,423.35,660.85,867.85,871.45,921.85,1271.05,1271.05,1271.05,1271.05,1263.8,1700.8,1700.8,1700.8,2305.6,2305.6
Estonia,,,,,,,,,,,,,,,,,,,,,,,
Finland,,,,,,,,,24.0,24.0,26.3,26.3,26.3,26.3,26.3,32.0,32.0,72.7,72.7,73.0,73.0,73.0,73.0
France,,,,,,,,,,,,,,,,,,2.0,2.0,2.0,2.0,2.0,482.0
Germany,,,,,,,,,,35.0,80.0,188.0,268.0,508.0,994.0,3283.0,4132.0,5406.0,6393.0,7555.0,7787.0,7787.0,8129.0
Greece,,,,,,,,,,,,,,,,,,,,,,,
Hungary,,,,,,,,,,,,,,,,,,,,,,,
Ireland,,,,,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2,25.2
Italy,,,,,,,,,,,,,,,,,,,,,,,30.0
Latvia,,,,,,,,,,,,,,,,,,,,,,,
Lithuania,,,,,,,,,,,,,,,,,,,,,,,
Luxembourg,,,,,,,,,,,,,,,,,,,,,,,
Montenegro,,,,,,,,,,,,,,,,,,,,,,,
Netherlands,,,,,,,108.0,108.0,228.0,228.0,228.0,228.0,228.0,228.0,228.0,357.0,957.0,957.0,957.0,957.0,2459.5,2459.5,2571.0
North Macedonia,,,,,,,,,,,,,,,,,,,,,,,
Norway,,,,,,,,,,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,2.3,6.3,66.3
Poland,,,,,,,,,,,,,,,,,,,,,,,
Portugal,,,,,,,,,,,,1.86,2.0,2.0,2.0,2.0,,,,,25.0,25.0,25.0
Romania,,,,,,,,,,,,,,,,,,,,,,,
Serbia,,,,,,,,,,,,,,,,,,,,,,,
Slovakia,,,,,,,,,,,,,,,,,,,,,,,
Slovenia,,,,,,,,,,,,,,,,,,,,,,,
Spain,,,,,,,,,,,,,,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0,5.0
Sweden,13.0,22.0,22.0,22.0,22.0,22.0,22.0,131.0,133.0,163.0,163.0,163.0,163.0,212.0,213.0,213.0,203.0,203.0,203.0,203.0,203.0,193.0,193.0
Switzerland,,,,,,,,,,,,,,,,,,,,,,,
UK,4.0,4.0,4.0,64.0,124.0,214.0,304.0,394.0,596.2,951.0,1341.0,1838.0,2995.0,3696.0,4501.0,5093.0,5293.0,6988.0,8181.0,9888.0,10383.0,11255.0,13928.0
1 Country/area 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
2 Albania
3 Austria
4 Belgium 31.5 196.5 196.5 381.0 707.7 707.7 712.0 712.2 877.2 1185.9 1555.5 2261.8 2261.8 2261.8
5 Bosnia Herzg
6 Bulgaria
7 Croatia
8 Czechia
9 Denmark 49.95 49.95 213.95 423.35 423.35 423.35 423.35 423.35 423.35 660.85 867.85 871.45 921.85 1271.05 1271.05 1271.05 1271.05 1263.8 1700.8 1700.8 1700.8 2305.6 2305.6
10 Estonia
11 Finland 24.0 24.0 26.3 26.3 26.3 26.3 26.3 32.0 32.0 72.7 72.7 73.0 73.0 73.0 73.0
12 France 2.0 2.0 2.0 2.0 2.0 482.0
13 Germany 35.0 80.0 188.0 268.0 508.0 994.0 3283.0 4132.0 5406.0 6393.0 7555.0 7787.0 7787.0 8129.0
14 Greece
15 Hungary
16 Ireland 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2 25.2
17 Italy 30.0
18 Latvia
19 Lithuania
20 Luxembourg
21 Montenegro
22 Netherlands 108.0 108.0 228.0 228.0 228.0 228.0 228.0 228.0 228.0 357.0 957.0 957.0 957.0 957.0 2459.5 2459.5 2571.0
23 North Macedonia
24 Norway 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 6.3 66.3
25 Poland
26 Portugal 1.86 2.0 2.0 2.0 2.0 25.0 25.0 25.0
27 Romania
28 Serbia
29 Slovakia
30 Slovenia
31 Spain 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0
32 Sweden 13.0 22.0 22.0 22.0 22.0 22.0 22.0 131.0 133.0 163.0 163.0 163.0 163.0 212.0 213.0 213.0 203.0 203.0 203.0 203.0 203.0 193.0 193.0
33 Switzerland
34 UK 4.0 4.0 4.0 64.0 124.0 214.0 304.0 394.0 596.2 951.0 1341.0 1838.0 2995.0 3696.0 4501.0 5093.0 5293.0 6988.0 8181.0 9888.0 10383.0 11255.0 13928.0

View File

@ -1,34 +0,0 @@
Country/area,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022
Albania,,,,,,,,,,,,,,,,,,,,,,,
Austria,50.0,67.0,109.0,322.0,581.0,825.22,968.27,991.16,991.97,1000.99,1015.83,1105.97,1337.15,1674.54,2110.28,2488.73,2730.0,2886.7,3132.71,3224.12,3225.98,3407.81,3735.81
Belgium,14.0,26.0,31.0,67.0,96.0,167.0,212.0,276.0,324.0,576.5,715.5,872.5,985.9,1061.3,1225.0,1469.3,1621.6,1902.2,2119.0,2308.0,2410.9,2686.6,2989.6
Bosnia Herzg,,,,,,,,,,,,0.3,0.3,0.3,0.3,0.3,0.3,0.3,51.0,87.0,87.0,135.0,135.0
Bulgaria,,,,,1.0,8.0,27.0,30.0,114.0,333.0,488.0,541.0,677.0,683.0,699.0,699.0,699.0,698.39,698.92,703.12,702.8,704.38,704.38
Croatia,,,,,6.0,6.0,17.0,17.0,17.0,70.0,79.0,130.0,180.0,254.0,339.0,418.0,483.0,576.1,586.3,646.3,801.3,986.9,1042.9
Czechia,2.0,,6.4,10.6,16.5,22.0,43.5,113.8,150.0,193.0,213.0,213.0,258.0,262.0,278.0,281.0,282.0,308.21,316.2,339.41,339.42,339.41,339.41
Denmark,2340.07,2447.2,2680.58,2696.57,2700.36,2704.49,2712.35,2700.86,2739.52,2821.24,2933.98,3080.53,3240.09,3547.87,3615.35,3805.92,3974.09,4225.15,4421.86,4409.74,4566.23,4715.24,4782.24
Estonia,,,1.0,3.0,7.0,31.0,31.0,50.0,77.0,104.0,108.0,180.0,266.0,248.0,275.0,300.0,310.0,311.8,310.0,316.0,317.0,315.0,315.0
Finland,38.0,39.0,43.0,52.0,82.0,82.0,86.0,110.0,119.0,123.0,170.7,172.7,230.7,420.7,600.7,973.0,1533.0,1971.3,1968.3,2211.0,2513.0,3184.0,5541.0
France,38.0,66.0,138.0,218.0,358.0,690.0,1412.0,2223.0,3403.0,4582.0,5912.0,6758.02,7607.5,8155.96,9201.42,10298.18,11566.56,13497.35,14898.14,16424.85,17512.0,18737.98,20637.98
Germany,6095.0,8754.0,12001.0,14381.0,16419.0,18248.0,20474.0,22116.0,22794.0,25697.0,26823.0,28524.0,30711.0,32969.0,37620.0,41297.0,45303.0,50174.0,52328.0,53187.0,54414.0,56046.0,58165.0
Greece,226.0,270.0,287.0,371.0,470.0,491.0,749.0,846.0,1022.0,1171.0,1298.0,1640.0,1753.0,1809.0,1978.0,2091.0,2370.0,2624.0,2877.5,3589.0,4119.25,4649.13,4879.13
Hungary,,1.0,1.0,3.0,3.0,17.0,33.0,61.0,134.0,203.0,293.0,331.0,325.0,329.0,329.0,329.0,329.0,329.0,329.0,323.0,323.0,324.0,324.0
Ireland,116.5,122.9,134.8,210.3,311.2,468.1,651.3,715.3,917.1,1226.1,1365.2,1559.4,1679.15,1898.1,2258.05,2425.95,2776.45,3293.95,3648.65,4101.25,4281.5,4313.84,4593.84
Italy,363.0,664.0,780.0,874.0,1127.0,1635.0,1902.0,2702.0,3525.0,4879.0,5794.0,6918.0,8102.0,8542.0,8683.0,9137.0,9384.0,9736.58,10230.25,10679.46,10870.62,11253.73,11749.73
Latvia,2.0,2.0,22.0,26.0,26.0,26.0,26.0,26.0,28.0,29.0,30.0,36.0,59.0,65.89,68.92,68.17,69.91,77.11,78.17,78.07,78.07,77.13,136.13
Lithuania,,,,,1.0,1.0,31.0,47.0,54.0,98.0,133.0,202.0,275.0,279.0,288.0,436.0,509.0,518.0,533.0,534.0,540.0,671.0,814.0
Luxembourg,14.0,13.9,13.9,20.5,34.9,34.9,34.9,34.9,42.92,42.93,43.73,44.53,58.33,58.33,58.34,63.79,119.69,119.69,122.89,135.79,152.74,136.44,165.44
Montenegro,,,,,,,,,,,,,,,,,,72.0,72.0,118.0,118.0,118.0,118.0
Netherlands,447.0,486.0,672.0,905.0,1075.0,1224.0,1453.0,1641.0,1921.0,1994.0,2009.0,2088.0,2205.0,2485.0,2637.0,3033.84,3300.12,3245.0,3436.11,3527.16,4188.38,5309.87,6176.0
North Macedonia,,,,,,,,,,,,,,,37.0,37.0,37.0,37.0,37.0,37.0,37.0,37.0,37.0
Norway,13.0,13.0,97.0,97.0,152.0,265.0,284.0,348.0,395.0,420.7,422.7,509.7,702.7,815.7,856.7,864.7,880.7,1204.7,1707.7,2911.7,4027.7,5042.7,5067.7
Poland,4.0,19.0,32.0,35.0,40.0,121.0,172.0,306.0,526.0,709.0,1108.0,1800.0,2564.0,3429.0,3836.0,4886.0,5747.0,5759.36,5766.08,5837.76,6298.25,6967.34,7987.34
Portugal,83.0,125.0,190.0,268.0,553.0,1064.0,1681.0,2201.0,2857.0,3326.0,3796.0,4254.35,4409.55,4607.95,4854.56,4934.84,5124.1,5124.1,5172.36,5222.75,5097.26,5402.33,5430.33
Romania,,,,,,1.0,1.0,3.0,5.0,15.0,389.0,988.0,1822.0,2773.0,3244.0,3130.0,3025.0,3029.8,3032.26,3037.52,3012.53,3014.96,3014.96
Serbia,,,,,,,,,,,,,0.5,0.5,0.5,10.4,17.0,25.0,227.0,398.0,398.0,398.0,398.0
Slovakia,,,,3.0,3.0,5.0,5.0,5.0,5.0,3.0,3.0,3.0,3.0,5.0,3.0,3.0,3.0,4.0,3.0,4.0,4.0,4.0,4.0
Slovenia,,,,,,,,,,,,,2.0,2.0,3.0,3.0,3.0,3.3,3.3,3.3,3.3,3.33,3.33
Spain,2206.0,3397.0,4891.0,5945.0,8317.0,9918.0,11722.0,14820.0,16555.0,19176.0,20693.0,21529.0,22789.0,22953.0,22920.0,22938.0,22985.0,23119.48,23400.06,25585.08,26814.19,27902.65,29302.84
Sweden,196.0,273.0,335.0,395.0,453.0,500.0,563.0,692.0,956.0,1312.0,1854.0,2601.0,3443.0,3982.0,4875.0,5606.0,6232.0,6408.0,7097.0,8478.0,9773.0,11923.0,14364.0
Switzerland,3.0,5.0,5.0,5.0,9.0,12.0,12.0,12.0,14.0,18.0,42.0,46.0,49.0,60.0,60.0,60.0,75.0,75.0,75.0,75.0,87.0,87.0,87.0
UK,431.0,490.0,531.0,678.0,809.0,1351.0,1651.0,2083.0,2849.8,3468.0,4080.0,4758.0,6035.0,7586.0,8573.0,9212.0,10833.0,12597.0,13425.0,13999.0,14075.0,14492.0,14832.0
1 Country/area 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
2 Albania
3 Austria 50.0 67.0 109.0 322.0 581.0 825.22 968.27 991.16 991.97 1000.99 1015.83 1105.97 1337.15 1674.54 2110.28 2488.73 2730.0 2886.7 3132.71 3224.12 3225.98 3407.81 3735.81
4 Belgium 14.0 26.0 31.0 67.0 96.0 167.0 212.0 276.0 324.0 576.5 715.5 872.5 985.9 1061.3 1225.0 1469.3 1621.6 1902.2 2119.0 2308.0 2410.9 2686.6 2989.6
5 Bosnia Herzg 0.3 0.3 0.3 0.3 0.3 0.3 0.3 51.0 87.0 87.0 135.0 135.0
6 Bulgaria 1.0 8.0 27.0 30.0 114.0 333.0 488.0 541.0 677.0 683.0 699.0 699.0 699.0 698.39 698.92 703.12 702.8 704.38 704.38
7 Croatia 6.0 6.0 17.0 17.0 17.0 70.0 79.0 130.0 180.0 254.0 339.0 418.0 483.0 576.1 586.3 646.3 801.3 986.9 1042.9
8 Czechia 2.0 6.4 10.6 16.5 22.0 43.5 113.8 150.0 193.0 213.0 213.0 258.0 262.0 278.0 281.0 282.0 308.21 316.2 339.41 339.42 339.41 339.41
9 Denmark 2340.07 2447.2 2680.58 2696.57 2700.36 2704.49 2712.35 2700.86 2739.52 2821.24 2933.98 3080.53 3240.09 3547.87 3615.35 3805.92 3974.09 4225.15 4421.86 4409.74 4566.23 4715.24 4782.24
10 Estonia 1.0 3.0 7.0 31.0 31.0 50.0 77.0 104.0 108.0 180.0 266.0 248.0 275.0 300.0 310.0 311.8 310.0 316.0 317.0 315.0 315.0
11 Finland 38.0 39.0 43.0 52.0 82.0 82.0 86.0 110.0 119.0 123.0 170.7 172.7 230.7 420.7 600.7 973.0 1533.0 1971.3 1968.3 2211.0 2513.0 3184.0 5541.0
12 France 38.0 66.0 138.0 218.0 358.0 690.0 1412.0 2223.0 3403.0 4582.0 5912.0 6758.02 7607.5 8155.96 9201.42 10298.18 11566.56 13497.35 14898.14 16424.85 17512.0 18737.98 20637.98
13 Germany 6095.0 8754.0 12001.0 14381.0 16419.0 18248.0 20474.0 22116.0 22794.0 25697.0 26823.0 28524.0 30711.0 32969.0 37620.0 41297.0 45303.0 50174.0 52328.0 53187.0 54414.0 56046.0 58165.0
14 Greece 226.0 270.0 287.0 371.0 470.0 491.0 749.0 846.0 1022.0 1171.0 1298.0 1640.0 1753.0 1809.0 1978.0 2091.0 2370.0 2624.0 2877.5 3589.0 4119.25 4649.13 4879.13
15 Hungary 1.0 1.0 3.0 3.0 17.0 33.0 61.0 134.0 203.0 293.0 331.0 325.0 329.0 329.0 329.0 329.0 329.0 329.0 323.0 323.0 324.0 324.0
16 Ireland 116.5 122.9 134.8 210.3 311.2 468.1 651.3 715.3 917.1 1226.1 1365.2 1559.4 1679.15 1898.1 2258.05 2425.95 2776.45 3293.95 3648.65 4101.25 4281.5 4313.84 4593.84
17 Italy 363.0 664.0 780.0 874.0 1127.0 1635.0 1902.0 2702.0 3525.0 4879.0 5794.0 6918.0 8102.0 8542.0 8683.0 9137.0 9384.0 9736.58 10230.25 10679.46 10870.62 11253.73 11749.73
18 Latvia 2.0 2.0 22.0 26.0 26.0 26.0 26.0 26.0 28.0 29.0 30.0 36.0 59.0 65.89 68.92 68.17 69.91 77.11 78.17 78.07 78.07 77.13 136.13
19 Lithuania 1.0 1.0 31.0 47.0 54.0 98.0 133.0 202.0 275.0 279.0 288.0 436.0 509.0 518.0 533.0 534.0 540.0 671.0 814.0
20 Luxembourg 14.0 13.9 13.9 20.5 34.9 34.9 34.9 34.9 42.92 42.93 43.73 44.53 58.33 58.33 58.34 63.79 119.69 119.69 122.89 135.79 152.74 136.44 165.44
21 Montenegro 72.0 72.0 118.0 118.0 118.0 118.0
22 Netherlands 447.0 486.0 672.0 905.0 1075.0 1224.0 1453.0 1641.0 1921.0 1994.0 2009.0 2088.0 2205.0 2485.0 2637.0 3033.84 3300.12 3245.0 3436.11 3527.16 4188.38 5309.87 6176.0
23 North Macedonia 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0 37.0
24 Norway 13.0 13.0 97.0 97.0 152.0 265.0 284.0 348.0 395.0 420.7 422.7 509.7 702.7 815.7 856.7 864.7 880.7 1204.7 1707.7 2911.7 4027.7 5042.7 5067.7
25 Poland 4.0 19.0 32.0 35.0 40.0 121.0 172.0 306.0 526.0 709.0 1108.0 1800.0 2564.0 3429.0 3836.0 4886.0 5747.0 5759.36 5766.08 5837.76 6298.25 6967.34 7987.34
26 Portugal 83.0 125.0 190.0 268.0 553.0 1064.0 1681.0 2201.0 2857.0 3326.0 3796.0 4254.35 4409.55 4607.95 4854.56 4934.84 5124.1 5124.1 5172.36 5222.75 5097.26 5402.33 5430.33
27 Romania 1.0 1.0 3.0 5.0 15.0 389.0 988.0 1822.0 2773.0 3244.0 3130.0 3025.0 3029.8 3032.26 3037.52 3012.53 3014.96 3014.96
28 Serbia 0.5 0.5 0.5 10.4 17.0 25.0 227.0 398.0 398.0 398.0 398.0
29 Slovakia 3.0 3.0 5.0 5.0 5.0 5.0 3.0 3.0 3.0 3.0 5.0 3.0 3.0 3.0 4.0 3.0 4.0 4.0 4.0 4.0
30 Slovenia 2.0 2.0 3.0 3.0 3.0 3.3 3.3 3.3 3.3 3.33 3.33
31 Spain 2206.0 3397.0 4891.0 5945.0 8317.0 9918.0 11722.0 14820.0 16555.0 19176.0 20693.0 21529.0 22789.0 22953.0 22920.0 22938.0 22985.0 23119.48 23400.06 25585.08 26814.19 27902.65 29302.84
32 Sweden 196.0 273.0 335.0 395.0 453.0 500.0 563.0 692.0 956.0 1312.0 1854.0 2601.0 3443.0 3982.0 4875.0 5606.0 6232.0 6408.0 7097.0 8478.0 9773.0 11923.0 14364.0
33 Switzerland 3.0 5.0 5.0 5.0 9.0 12.0 12.0 12.0 14.0 18.0 42.0 46.0 49.0 60.0 60.0 60.0 75.0 75.0 75.0 75.0 87.0 87.0 87.0
34 UK 431.0 490.0 531.0 678.0 809.0 1351.0 1651.0 2083.0 2849.8 3468.0 4080.0 4758.0 6035.0 7586.0 8573.0 9212.0 10833.0 12597.0 13425.0 13999.0 14075.0 14492.0 14832.0

View File

@ -1,34 +0,0 @@
Country/area,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022
Albania,,0.1,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.3,0.4,0.56,0.68,0.76,0.87,1.05,1.0,1.0,1.0,14.0,21.0,23.0,28.6
Austria,5.0,7.0,9.0,23.0,27.0,18.49,19.61,21.42,27.0,45.56,85.27,169.88,333.09,620.78,779.76,931.56,1089.53,1262.01,1447.94,1694.4,2034.74,2773.91,3538.91
Belgium,,,1.0,1.0,1.0,2.0,2.0,20.0,62.0,386.0,1006.6,1978.6,2646.6,2901.6,3015.0,3131.6,3328.8,3620.6,4000.0,4636.6,5572.8,6012.4,6898.4
Bosnia Herzg,,,,0.1,0.2,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.35,1.34,7.17,8.17,14.12,16.0,18.15,22.35,34.89,56.51,107.47
Bulgaria,,,,,,,,0.03,0.1,2.0,25.0,154.0,921.99,1038.54,1028.92,1027.89,1029.89,1030.7,1033.06,1044.39,1100.21,1274.71,1948.36
Croatia,,,,,,,,,,0.3,0.3,0.3,4.0,19.0,33.0,47.8,55.8,60.0,67.7,84.8,108.5,138.3,182.3
Czechia,0.1,0.1,0.2,0.3,0.4,0.59,0.84,3.96,39.5,464.6,1727.0,1913.0,2022.0,2063.5,2067.4,2074.9,2067.9,2075.44,2081.05,2110.67,2171.96,2246.09,2627.09
Denmark,1.0,1.0,2.0,2.0,2.0,3.0,3.0,3.0,3.0,5.0,7.0,17.0,402.0,571.0,607.0,782.11,850.95,906.35,998.0,1080.0,1304.29,1704.04,3122.04
Estonia,,,,,,,,,,0.1,0.1,0.2,0.38,1.5,3.34,6.5,10.0,15.0,31.9,120.6,207.67,394.77,534.77
Finland,2.0,3.0,3.0,3.0,4.0,4.0,5.0,5.0,6.0,6.0,7.0,7.0,8.0,9.0,11.0,17.0,39.0,82.0,140.0,222.0,318.0,425.0,590.6
France,7.0,7.0,8.0,9.0,11.0,13.0,15.0,26.0,80.0,277.0,1044.0,3003.57,4358.75,5277.29,6034.42,7137.52,7702.08,8610.44,9638.88,10738.39,11812.2,14436.97,17036.97
Germany,114.0,195.0,260.0,435.0,1105.0,2056.0,2899.0,4170.0,6120.0,10564.0,18004.0,25914.0,34075.0,36708.0,37898.0,39222.0,40677.0,42291.0,45156.0,48912.0,53669.0,59371.0,66662.0
Greece,,1.0,1.0,1.0,1.0,1.0,5.0,9.0,12.0,46.0,202.0,612.0,1536.0,2579.0,2596.0,2604.0,2604.0,2605.53,2651.57,2833.79,3287.72,4277.42,5557.42
Hungary,,,,,,,,0.4,1.0,1.0,2.0,4.0,12.0,35.0,89.0,172.0,235.0,344.0,728.0,1400.0,2131.0,2968.0,2988.0
Ireland,,,,,,,,,,,,,,,,,,,,,,,
Italy,19.0,20.0,22.0,26.0,31.0,34.0,45.0,110.0,483.0,1264.0,3592.0,13131.0,16785.0,18185.0,18594.0,18901.0,19283.0,19682.29,20107.59,20865.28,21650.04,22594.26,25076.56
Latvia,,,,,,,,,,,,,,,,,0.69,0.69,1.96,3.3,5.1,7.16,56.16
Lithuania,,,,,,,,,0.1,0.1,0.1,0.3,7.0,68.0,69.0,69.0,70.0,70.08,72.0,73.0,80.0,84.0,397.0
Luxembourg,,0.16,1.59,14.17,23.56,23.58,23.7,23.93,24.56,26.36,29.45,40.67,74.65,95.02,109.93,116.27,121.9,128.1,130.62,159.74,186.64,277.16,319.16
Montenegro,,,,,,,,,,,,,,,,,,,,,2.57,2.57,22.2
Netherlands,13.0,21.0,26.0,46.0,50.0,51.0,53.0,54.0,59.0,69.0,90.0,149.0,287.0,650.0,1007.0,1526.26,2135.02,2910.89,4608.0,7226.0,11108.43,14910.69,18848.69
North Macedonia,,,,,,,,,,,,2.0,4.0,7.0,15.0,17.0,16.7,16.7,16.7,16.71,84.93,84.93,84.93
Norway,6.0,6.0,6.0,7.0,7.0,7.0,8.0,8.0,8.3,8.7,9.1,9.5,10.0,11.0,13.0,15.0,26.7,44.9,53.11,102.53,141.53,186.53,302.53
Poland,,,,,,,,,,,,1.11,1.3,2.39,27.15,107.78,187.25,287.09,561.98,1539.26,3954.96,7415.52,11166.52
Portugal,1.0,1.0,1.0,2.0,2.0,2.0,3.0,24.0,59.0,115.0,134.0,169.6,235.6,293.6,412.6,441.75,493.05,539.42,617.85,832.74,1010.07,1474.78,2364.78
Romania,,,,,,,,,0.1,0.1,0.1,1.0,41.0,761.0,1293.0,1326.0,1372.0,1374.13,1385.82,1397.71,1382.54,1393.92,1413.92
Serbia,,,,,,0.1,0.2,0.4,0.9,1.2,1.3,1.5,3.1,4.7,6.0,9.0,11.0,10.0,11.0,11.0,11.5,11.94,11.94
Slovakia,,,,,,,,,,,19.0,496.0,513.0,533.0,533.0,533.0,533.0,528.0,472.0,590.0,535.0,537.0,537.0
Slovenia,1.0,1.0,,,,0.05,0.19,0.59,1.0,4.0,12.0,57.0,142.0,187.0,223.0,238.0,233.0,246.8,246.8,277.88,369.78,461.16,632.16
Spain,1.0,3.0,6.0,10.0,19.0,37.0,113.0,476.0,3365.0,3403.0,3851.0,4260.0,4545.0,4665.0,4672.0,4677.0,4687.0,4696.0,4730.7,8772.02,10100.42,13678.4,18176.73
Sweden,3.0,3.0,3.0,4.0,4.0,4.0,5.0,6.0,8.0,9.0,11.0,12.0,24.0,43.0,60.0,104.0,153.0,231.0,411.0,698.0,1090.0,1587.0,2587.0
Switzerland,16.0,18.0,20.0,22.0,24.0,28.0,30.0,37.0,49.0,79.0,125.0,223.0,437.0,756.0,1061.0,1394.0,1664.0,1906.0,2173.0,2498.0,2973.0,3655.0,4339.92
UK,2.0,3.0,4.0,6.0,8.0,11.0,14.0,18.0,23.0,27.0,95.0,1000.0,1753.0,2937.0,5528.0,9601.0,11914.0,12760.0,13059.0,13345.0,13579.0,13965.0,14660.0
1 Country/area 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
2 Albania 0.1 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.3 0.4 0.56 0.68 0.76 0.87 1.05 1.0 1.0 1.0 14.0 21.0 23.0 28.6
3 Austria 5.0 7.0 9.0 23.0 27.0 18.49 19.61 21.42 27.0 45.56 85.27 169.88 333.09 620.78 779.76 931.56 1089.53 1262.01 1447.94 1694.4 2034.74 2773.91 3538.91
4 Belgium 1.0 1.0 1.0 2.0 2.0 20.0 62.0 386.0 1006.6 1978.6 2646.6 2901.6 3015.0 3131.6 3328.8 3620.6 4000.0 4636.6 5572.8 6012.4 6898.4
5 Bosnia Herzg 0.1 0.2 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.35 1.34 7.17 8.17 14.12 16.0 18.15 22.35 34.89 56.51 107.47
6 Bulgaria 0.03 0.1 2.0 25.0 154.0 921.99 1038.54 1028.92 1027.89 1029.89 1030.7 1033.06 1044.39 1100.21 1274.71 1948.36
7 Croatia 0.3 0.3 0.3 4.0 19.0 33.0 47.8 55.8 60.0 67.7 84.8 108.5 138.3 182.3
8 Czechia 0.1 0.1 0.2 0.3 0.4 0.59 0.84 3.96 39.5 464.6 1727.0 1913.0 2022.0 2063.5 2067.4 2074.9 2067.9 2075.44 2081.05 2110.67 2171.96 2246.09 2627.09
9 Denmark 1.0 1.0 2.0 2.0 2.0 3.0 3.0 3.0 3.0 5.0 7.0 17.0 402.0 571.0 607.0 782.11 850.95 906.35 998.0 1080.0 1304.29 1704.04 3122.04
10 Estonia 0.1 0.1 0.2 0.38 1.5 3.34 6.5 10.0 15.0 31.9 120.6 207.67 394.77 534.77
11 Finland 2.0 3.0 3.0 3.0 4.0 4.0 5.0 5.0 6.0 6.0 7.0 7.0 8.0 9.0 11.0 17.0 39.0 82.0 140.0 222.0 318.0 425.0 590.6
12 France 7.0 7.0 8.0 9.0 11.0 13.0 15.0 26.0 80.0 277.0 1044.0 3003.57 4358.75 5277.29 6034.42 7137.52 7702.08 8610.44 9638.88 10738.39 11812.2 14436.97 17036.97
13 Germany 114.0 195.0 260.0 435.0 1105.0 2056.0 2899.0 4170.0 6120.0 10564.0 18004.0 25914.0 34075.0 36708.0 37898.0 39222.0 40677.0 42291.0 45156.0 48912.0 53669.0 59371.0 66662.0
14 Greece 1.0 1.0 1.0 1.0 1.0 5.0 9.0 12.0 46.0 202.0 612.0 1536.0 2579.0 2596.0 2604.0 2604.0 2605.53 2651.57 2833.79 3287.72 4277.42 5557.42
15 Hungary 0.4 1.0 1.0 2.0 4.0 12.0 35.0 89.0 172.0 235.0 344.0 728.0 1400.0 2131.0 2968.0 2988.0
16 Ireland
17 Italy 19.0 20.0 22.0 26.0 31.0 34.0 45.0 110.0 483.0 1264.0 3592.0 13131.0 16785.0 18185.0 18594.0 18901.0 19283.0 19682.29 20107.59 20865.28 21650.04 22594.26 25076.56
18 Latvia 0.69 0.69 1.96 3.3 5.1 7.16 56.16
19 Lithuania 0.1 0.1 0.1 0.3 7.0 68.0 69.0 69.0 70.0 70.08 72.0 73.0 80.0 84.0 397.0
20 Luxembourg 0.16 1.59 14.17 23.56 23.58 23.7 23.93 24.56 26.36 29.45 40.67 74.65 95.02 109.93 116.27 121.9 128.1 130.62 159.74 186.64 277.16 319.16
21 Montenegro 2.57 2.57 22.2
22 Netherlands 13.0 21.0 26.0 46.0 50.0 51.0 53.0 54.0 59.0 69.0 90.0 149.0 287.0 650.0 1007.0 1526.26 2135.02 2910.89 4608.0 7226.0 11108.43 14910.69 18848.69
23 North Macedonia 2.0 4.0 7.0 15.0 17.0 16.7 16.7 16.7 16.71 84.93 84.93 84.93
24 Norway 6.0 6.0 6.0 7.0 7.0 7.0 8.0 8.0 8.3 8.7 9.1 9.5 10.0 11.0 13.0 15.0 26.7 44.9 53.11 102.53 141.53 186.53 302.53
25 Poland 1.11 1.3 2.39 27.15 107.78 187.25 287.09 561.98 1539.26 3954.96 7415.52 11166.52
26 Portugal 1.0 1.0 1.0 2.0 2.0 2.0 3.0 24.0 59.0 115.0 134.0 169.6 235.6 293.6 412.6 441.75 493.05 539.42 617.85 832.74 1010.07 1474.78 2364.78
27 Romania 0.1 0.1 0.1 1.0 41.0 761.0 1293.0 1326.0 1372.0 1374.13 1385.82 1397.71 1382.54 1393.92 1413.92
28 Serbia 0.1 0.2 0.4 0.9 1.2 1.3 1.5 3.1 4.7 6.0 9.0 11.0 10.0 11.0 11.0 11.5 11.94 11.94
29 Slovakia 19.0 496.0 513.0 533.0 533.0 533.0 533.0 528.0 472.0 590.0 535.0 537.0 537.0
30 Slovenia 1.0 1.0 0.05 0.19 0.59 1.0 4.0 12.0 57.0 142.0 187.0 223.0 238.0 233.0 246.8 246.8 277.88 369.78 461.16 632.16
31 Spain 1.0 3.0 6.0 10.0 19.0 37.0 113.0 476.0 3365.0 3403.0 3851.0 4260.0 4545.0 4665.0 4672.0 4677.0 4687.0 4696.0 4730.7 8772.02 10100.42 13678.4 18176.73
32 Sweden 3.0 3.0 3.0 4.0 4.0 4.0 5.0 6.0 8.0 9.0 11.0 12.0 24.0 43.0 60.0 104.0 153.0 231.0 411.0 698.0 1090.0 1587.0 2587.0
33 Switzerland 16.0 18.0 20.0 22.0 24.0 28.0 30.0 37.0 49.0 79.0 125.0 223.0 437.0 756.0 1061.0 1394.0 1664.0 1906.0 2173.0 2498.0 2973.0 3655.0 4339.92
34 UK 2.0 3.0 4.0 6.0 8.0 11.0 14.0 18.0 23.0 27.0 95.0 1000.0 1753.0 2937.0 5528.0 9601.0 11914.0 12760.0 13059.0 13345.0 13579.0 13965.0 14660.0

View File

@ -4,7 +4,6 @@ prepare_links_p_nom,bool,"{true, false}","Switch to retrieve current HVDC projec
retrieve_databundle,bool,"{true, false}","Switch to retrieve databundle from zenodo via the rule :mod:`retrieve_databundle` or whether to keep a custom databundle located in the corresponding folder."
retrieve_cost_data,bool,"{true, false}","Switch to retrieve technology cost data from `technology-data repository <https://github.com/PyPSA/technology-data>`_."
build_cutout,bool,"{true, false}","Switch to enable the building of cutouts via the rule :mod:`build_cutout`."
retrieve_irena,bool,"{true, false}",Switch to enable the retrieval of ``existing_capacities`` from IRENASTAT with :mod:`retrieve_irena`.
retrieve_cutout,bool,"{true, false}","Switch to enable the retrieval of cutouts from zenodo with :mod:`retrieve_cutout`."
custom_busmap,bool,"{true, false}","Switch to enable the use of custom busmaps in rule :mod:`cluster_network`. If activated the rule looks for provided busmaps at ``data/custom_busmap_elec_s{simpl}_{clusters}.csv`` which should have the same format as ``resources/busmap_elec_s{simpl}_{clusters}.csv``, i.e. the index should contain the buses of ``networks/elec_s{simpl}.nc``."
drop_leap_day,bool,"{true, false}","Switch to drop February 29 from all time-dependent data in leap years"

1 Unit Values Description
4 retrieve_databundle bool {true, false} Switch to retrieve databundle from zenodo via the rule :mod:`retrieve_databundle` or whether to keep a custom databundle located in the corresponding folder.
5 retrieve_cost_data bool {true, false} Switch to retrieve technology cost data from `technology-data repository <https://github.com/PyPSA/technology-data>`_.
6 build_cutout bool {true, false} Switch to enable the building of cutouts via the rule :mod:`build_cutout`.
retrieve_irena bool {true, false} Switch to enable the retrieval of ``existing_capacities`` from IRENASTAT with :mod:`retrieve_irena`.
7 retrieve_cutout bool {true, false} Switch to enable the retrieval of cutouts from zenodo with :mod:`retrieve_cutout`.
8 custom_busmap bool {true, false} Switch to enable the use of custom busmaps in rule :mod:`cluster_network`. If activated the rule looks for provided busmaps at ``data/custom_busmap_elec_s{simpl}_{clusters}.csv`` which should have the same format as ``resources/busmap_elec_s{simpl}_{clusters}.csv``, i.e. the index should contain the buses of ``networks/elec_s{simpl}.nc``.
9 drop_leap_day bool {true, false} Switch to drop February 29 from all time-dependent data in leap years

View File

@ -20,7 +20,7 @@ constraints ,,,
-- BAU,bool,"{'true','false'}",Add a per-``carrier`` minimal overall capacity; i.e. at least ``40GW`` of ``OCGT`` in Europe; configured in ``electricity: BAU_mincapacities``
-- SAFE,bool,"{'true','false'}",Add a capacity reserve margin of a certain fraction above the peak demand to which renewable generators and storage do *not* contribute. Ignores network.
solver,,,
-- name,--,"One of {'gurobi', 'cplex', 'cbc', 'glpk', 'ipopt'}; potentially more possible",Solver to use for optimisation problems in the workflow; e.g. clustering and linear optimal power flow.
-- name,--,"One of {'gurobi', 'cplex', 'highs', 'cbc', 'glpk'}; potentially more possible",Solver to use for optimisation problems in the workflow; e.g. clustering and linear optimal power flow.
-- options,--,Key listed under ``solver_options``.,Link to specific parameter settings.
solver_options,,dict,Dictionaries with solver-specific parameter settings.
mem,MB,int,Estimated maximum memory requirement for solving networks.

1 Unit Values Description
20 -- BAU bool {'true','false'} Add a per-``carrier`` minimal overall capacity; i.e. at least ``40GW`` of ``OCGT`` in Europe; configured in ``electricity: BAU_mincapacities``
21 -- SAFE bool {'true','false'} Add a capacity reserve margin of a certain fraction above the peak demand to which renewable generators and storage do *not* contribute. Ignores network.
22 solver
23 -- name -- One of {'gurobi', 'cplex', 'cbc', 'glpk', 'ipopt'}; potentially more possible One of {'gurobi', 'cplex', 'highs', 'cbc', 'glpk'}; potentially more possible Solver to use for optimisation problems in the workflow; e.g. clustering and linear optimal power flow.
24 -- options -- Key listed under ``solver_options``. Link to specific parameter settings.
25 solver_options dict Dictionaries with solver-specific parameter settings.
26 mem MB int Estimated maximum memory requirement for solving networks.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 208 KiB

BIN
doc/img/workflow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

View File

@ -135,7 +135,7 @@ as part of the `Stromnetze Research Initiative
Workflow
========
.. image:: ../graphics/workflow.png
.. image:: img/workflow.png
:class: full-width
:align: center

View File

@ -62,7 +62,7 @@ PyPSA is known to work with the free software
- `HiGHS <https://highs.dev/>`__
- `Cbc <https://projects.coin-or.org/Cbc#DownloadandInstall>`__
- `GLPK <https://www.gnu.org/software/glpk/>`__ (`WinGLKP <http://winglpk.sourceforge.net/>`__)
- `Ipopt <https://coin-or.github.io/Ipopt/INSTALL.html>`__
- `SCIP <https://scipopt.github.io/PySCIPOpt/docs/html/index.html>`__
and the non-free, commercial software (for some of which free academic licenses are available)
@ -80,7 +80,7 @@ Nevertheless, you can still use open-source solvers for smaller problems.
.. note::
The rules :mod:`cluster_network` and :mod:`simplify_network` solve 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.
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 in your ``conda`` environment on OSX/Linux. To install the default solver Gurobi, run
.. code:: bash

View File

@ -21,8 +21,7 @@ Having downloaded the necessary data,
With these and the externally extracted ENTSO-E online map topology
(``data/entsoegridkit``), it can build a base PyPSA network with the following rules:
- :mod:`base_network` builds and stores the base network with all buses, HVAC lines and HVDC links, while
- :mod:`build_bus_regions` determines `Voronoi cells <https://en.wikipedia.org/wiki/Voronoi_diagram>`__ for all substations.
- :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:
@ -34,13 +33,6 @@ Then the process continues by calculating conventional power plant capacities, p
The central rule :mod:`add_electricity` then ties all the different data inputs
together into a detailed PyPSA network stored in ``networks/elec.nc``.
.. _busregions:
Rule ``build_bus_regions``
=============================
.. automodule:: build_bus_regions
.. _cutout:
Rule ``build_cutout``

View File

@ -194,6 +194,10 @@ Upcoming Release
* Bugfix: allow modelling sector-coupled landlocked regions. (Fixed handling of offshore wind.)
* Bugfix: approximation of hydro power generation if Portugal or Spain are not included works now.
* Bugfix: copy_timeslice does not copy anymore, if country not present in load data.
* Adapt the disabling of transmission expansion in myopic foresight optimisations when limit is already reached to also handle cost limits.
* Fix duplicated years and grouping years reference in `add_land_use_constraint_m`.
@ -206,8 +210,15 @@ Upcoming Release
* Fix custom busmap read in `cluster_network`.
* Data on existing renewable capacities is now consistently taken from powerplantmatching (instead of being retrieved separately); the dataset has also been updated to include 2023 values.
* Added shapes to .nc file for different stages of the network object in `base_network`, `simplify_network`, and `cluster_network`; the `build_bus_regions` rule is now integrated into the `base_network` rule.
* Fix p_nom_min of renewables generators for myopic approach and add check of existing capacities in `add_land_use_constraint_m`.
* Add documentation section for how to contribute documentation
PyPSA-Eur 0.10.0 (19th February 2024)
=====================================

View File

@ -92,11 +92,6 @@ This rule downloads techno-economic assumptions from the `technology-data reposi
- ``resources/costs.csv``
Rule ``retrieve_irena``
================================
.. automodule:: retrieve_irena
Rule ``retrieve_ship_raster``
================================

View File

@ -132,89 +132,76 @@ This triggers a workflow of multiple preceding jobs that depend on each rule's i
graph[bgcolor=white, margin=0];
node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
edge[penwidth=2, color=grey];
0[label = "solve_network", color = "0.39 0.6 0.85", style="rounded"];
1[label = "prepare_network\nll: copt\nopts: Co2L-24H", color = "0.29 0.6 0.85", style="rounded"];
2[label = "add_extra_components", color = "0.28 0.6 0.85", style="rounded"];
3[label = "cluster_network\nclusters: 6", color = "0.19 0.6 0.85", style="rounded"];
4[label = "simplify_network\nsimpl: ", color = "0.01 0.6 0.85", style="rounded"];
5[label = "add_electricity", color = "0.49 0.6 0.85", style="rounded"];
6[label = "build_renewable_profiles\ntechnology: solar", color = "0.21 0.6 0.85", style="rounded"];
7[label = "base_network", color = "0.27 0.6 0.85", style="rounded"];
8[label = "build_shapes", color = "0.26 0.6 0.85", style="rounded"];
9[label = "retrieve_databundle", color = "0.59 0.6 0.85", style="rounded"];
11[label = "build_bus_regions", color = "0.13 0.6 0.85", style="rounded"];
12[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.36 0.6 0.85", style="rounded,dashed"];
13[label = "build_renewable_profiles\ntechnology: onwind", color = "0.21 0.6 0.85", style="rounded"];
14[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.21 0.6 0.85", style="rounded"];
15[label = "build_ship_raster", color = "0.00 0.6 0.85", style="rounded"];
16[label = "retrieve_ship_raster", color = "0.51 0.6 0.85", style="rounded,dashed"];
17[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.21 0.6 0.85", style="rounded"];
18[label = "build_line_rating", color = "0.05 0.6 0.85", style="rounded"];
19[label = "retrieve_cost_data\nyear: 2030", color = "0.15 0.6 0.85", style="rounded"];
20[label = "build_powerplants", color = "0.54 0.6 0.85", style="rounded"];
21[label = "build_electricity_demand", color = "0.52 0.6 0.85", style="rounded"];
22[label = "retrieve_electricity_demand", color = "0.22 0.6 0.85", style="rounded"];
23[label = "copy_config", color = "0.44 0.6 0.85", style="rounded"];
0[label = "solve_network", color = "0.38 0.6 0.85", style="rounded"];
1[label = "prepare_network\nll: copt\nopts: Co2L-24H", color = "0.53 0.6 0.85", style="rounded"];
2[label = "add_extra_components", color = "0.01 0.6 0.85", style="rounded"];
3[label = "cluster_network\nclusters: 6", color = "0.03 0.6 0.85", style="rounded"];
4[label = "simplify_network\nsimpl: ", color = "0.42 0.6 0.85", style="rounded"];
5[label = "add_electricity", color = "0.10 0.6 0.85", style="rounded"];
6[label = "build_renewable_profiles\ntechnology: solar", color = "0.50 0.6 0.85", style="rounded"];
7[label = "base_network", color = "0.22 0.6 0.85", style="rounded"];
8[label = "build_shapes", color = "0.44 0.6 0.85", style="rounded"];
9[label = "retrieve_databundle", color = "0.29 0.6 0.85", style="rounded"];
10[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.49 0.6 0.85", style="rounded"];
11[label = "build_renewable_profiles\ntechnology: onwind", color = "0.50 0.6 0.85", style="rounded"];
12[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.50 0.6 0.85", style="rounded"];
13[label = "build_ship_raster", color = "0.19 0.6 0.85", style="rounded"];
14[label = "retrieve_ship_raster", color = "0.35 0.6 0.85", style="rounded"];
15[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.50 0.6 0.85", style="rounded"];
16[label = "build_line_rating", color = "0.60 0.6 0.85", style="rounded"];
17[label = "retrieve_cost_data\nyear: 2030", color = "0.59 0.6 0.85", style="rounded"];
18[label = "build_powerplants", color = "0.06 0.6 0.85", style="rounded"];
19[label = "build_electricity_demand", color = "0.13 0.6 0.85", style="rounded"];
20[label = "retrieve_electricity_demand", color = "0.49 0.6 0.85", style="rounded"];
21[label = "retrieve_synthetic_electricity_demand", color = "0.41 0.6 0.85", style="rounded"];
1 -> 0
23 -> 0
2 -> 1
19 -> 1
17 -> 1
3 -> 2
19 -> 2
17 -> 2
4 -> 3
19 -> 3
17 -> 3
5 -> 4
19 -> 4
11 -> 4
17 -> 4
7 -> 4
6 -> 5
13 -> 5
14 -> 5
17 -> 5
11 -> 5
12 -> 5
15 -> 5
7 -> 5
16 -> 5
17 -> 5
18 -> 5
19 -> 5
11 -> 5
20 -> 5
9 -> 5
21 -> 5
8 -> 5
7 -> 6
9 -> 6
10 -> 6
8 -> 6
11 -> 6
12 -> 6
10 -> 6
8 -> 7
9 -> 8
8 -> 11
7 -> 11
7 -> 13
9 -> 13
9 -> 11
8 -> 11
10 -> 11
7 -> 12
9 -> 12
13 -> 12
8 -> 12
10 -> 12
14 -> 13
10 -> 13
8 -> 13
11 -> 13
12 -> 13
7 -> 14
9 -> 14
10 -> 14
15 -> 14
8 -> 14
11 -> 14
12 -> 14
16 -> 15
12 -> 15
7 -> 17
9 -> 17
10 -> 17
15 -> 17
8 -> 17
11 -> 17
12 -> 17
7 -> 15
9 -> 15
13 -> 15
8 -> 15
10 -> 15
7 -> 16
10 -> 16
7 -> 18
12 -> 18
7 -> 20
22 -> 21
}
20 -> 19
21 -> 19
}
|
@ -224,27 +211,28 @@ In the terminal, this will show up as a list of jobs to be run:
Building DAG of jobs...
Job stats:
job count
--------------------------- -------
add_electricity 1
add_extra_components 1
base_network 1
build_bus_regions 1
build_electricity_demand 1
build_line_rating 1
build_powerplants 1
build_renewable_profiles 4
build_shapes 1
build_ship_raster 1
cluster_network 1
copy_config 1
prepare_network 1
retrieve_cost_data 1
retrieve_databundle 1
retrieve_electricity_demand 1
simplify_network 1
solve_network 1
total 22
job count
------------------------------------- -------
add_electricity 1
add_extra_components 1
base_network 1
build_electricity_demand 1
build_line_rating 1
build_powerplants 1
build_renewable_profiles 4
build_shapes 1
build_ship_raster 1
cluster_network 1
prepare_network 1
retrieve_cost_data 1
retrieve_cutout 1
retrieve_databundle 1
retrieve_electricity_demand 1
retrieve_ship_raster 1
retrieve_synthetic_electricity_demand 1
simplify_network 1
solve_network 1
total 22
``snakemake`` then runs these jobs in the correct order.

File diff suppressed because it is too large Load Diff

View File

@ -7,440 +7,466 @@ channels:
- bioconda
- http://conda.anaconda.org/gurobi
- conda-forge
- defaults
dependencies:
- _libgcc_mutex=0.1
- _openmp_mutex=4.5
- affine=2.4.0
- alsa-lib=1.2.10
- ampl-mp=3.1.0
- amply=0.1.6
- appdirs=1.4.4
- asttokens=2.4.1
- atk-1.0=2.38.0
- atlite=0.2.12
- attr=2.5.1
- attrs=23.2.0
- aws-c-auth=0.7.15
- aws-c-cal=0.6.9
- aws-c-common=0.9.12
- aws-c-compression=0.2.17
- aws-c-event-stream=0.4.1
- aws-c-http=0.8.0
- aws-c-io=0.14.3
- aws-c-mqtt=0.10.1
- aws-c-s3=0.5.0
- aws-c-sdkutils=0.1.14
- aws-checksums=0.1.17
- aws-crt-cpp=0.26.1
- aws-sdk-cpp=1.11.242
- azure-core-cpp=1.10.3
- azure-storage-blobs-cpp=12.10.0
- azure-storage-common-cpp=12.5.0
- beautifulsoup4=4.12.3
- blosc=1.21.5
- bokeh=3.3.4
- bottleneck=1.3.7
- branca=0.7.1
- brotli=1.1.0
- brotli-bin=1.1.0
- brotli-python=1.1.0
- bzip2=1.0.8
- c-ares=1.26.0
- c-blosc2=2.13.2
- ca-certificates=2024.2.2
- cairo=1.18.0
- cartopy=0.22.0
- cdsapi=0.6.1
- certifi=2024.2.2
- cffi=1.16.0
- cfgv=3.3.1
- cfitsio=4.3.1
- cftime=1.6.3
- charset-normalizer=3.3.2
- click=8.1.7
- click-plugins=1.1.1
- cligj=0.7.2
- cloudpickle=3.0.0
- coin-or-cbc=2.10.10
- coin-or-cgl=0.60.7
- coin-or-clp=1.17.8
- coin-or-osi=0.108.8
- coin-or-utils=2.11.9
- coincbc=2.10.10
- colorama=0.4.6
- configargparse=1.7
- connection_pool=0.0.3
- contourpy=1.2.0
- country_converter=1.2
- cppad=20240000.2
- cycler=0.12.1
- cytoolz=0.12.3
- dask=2024.2.0
- dask-core=2024.2.0
- datrie=0.8.2
- dbus=1.13.6
- decorator=5.1.1
- deprecation=2.1.0
- descartes=1.1.0
- distlib=0.3.8
- distributed=2024.2.0
- distro=1.9.0
- docutils=0.20.1
- dpath=2.1.6
- entsoe-py=0.6.6
- et_xmlfile=1.1.0
- exceptiongroup=1.2.0
- executing=2.0.1
- expat=2.5.0
- filelock=3.13.1
- fiona=1.9.5
- folium=0.15.1
- font-ttf-dejavu-sans-mono=2.37
- font-ttf-inconsolata=3.000
- font-ttf-source-code-pro=2.038
- font-ttf-ubuntu=0.83
- fontconfig=2.14.2
- fonts-conda-ecosystem=1
- fonts-conda-forge=1
- fonttools=4.49.0
- freetype=2.12.1
- freexl=2.0.0
- fribidi=1.0.10
- fsspec=2024.2.0
- gdal=3.8.4
- gdk-pixbuf=2.42.10
- geographiclib=1.52
- geojson-rewind=1.1.0
- geopandas=0.14.3
- geopandas-base=0.14.3
- geopy=2.4.1
- geos=3.12.1
- geotiff=1.7.1
- gettext=0.21.1
- gflags=2.2.2
- giflib=5.2.1
- gitdb=4.0.11
- gitpython=3.1.42
- glib=2.78.4
- glib-tools=2.78.4
- glog=0.6.0
- glpk=5.0
- gmp=6.3.0
- graphite2=1.3.13
- graphviz=9.0.0
- gst-plugins-base=1.22.9
- gstreamer=1.22.9
- gtk2=2.24.33
- gts=0.7.6
- harfbuzz=8.3.0
- hdf4=4.2.15
- hdf5=1.14.3
- humanfriendly=10.0
- icu=73.2
- identify=2.5.35
- idna=3.6
- importlib-metadata=7.0.1
- importlib_metadata=7.0.1
- importlib_resources=6.1.1
- iniconfig=2.0.0
- ipopt=3.14.14
- ipython=8.21.0
- jedi=0.19.1
- jinja2=3.1.3
- joblib=1.3.2
- json-c=0.17
- jsonschema=4.21.1
- jsonschema-specifications=2023.12.1
- jupyter_core=5.7.1
- kealib=1.5.3
- keyutils=1.6.1
- kiwisolver=1.4.5
- krb5=1.21.2
- lame=3.100
- lcms2=2.16
- ld_impl_linux-64=2.40
- lerc=4.0.0
- libabseil=20230802.1
- libaec=1.1.2
- libarchive=3.7.2
- libarrow=15.0.0
- libarrow-acero=15.0.0
- libarrow-dataset=15.0.0
- libarrow-flight=15.0.0
- libarrow-flight-sql=15.0.0
- libarrow-gandiva=15.0.0
- libarrow-substrait=15.0.0
- libblas=3.9.0
- libboost-headers=1.84.0
- libbrotlicommon=1.1.0
- libbrotlidec=1.1.0
- libbrotlienc=1.1.0
- libcap=2.69
- libcblas=3.9.0
- libclang=15.0.7
- libclang13=15.0.7
- libcrc32c=1.1.2
- libcups=2.3.3
- libcurl=8.5.0
- libdeflate=1.19
- libedit=3.1.20191231
- libev=4.33
- libevent=2.1.12
- libexpat=2.5.0
- libffi=3.4.2
- libflac=1.4.3
- libgcc-ng=13.2.0
- libgcrypt=1.10.3
- libgd=2.3.3
- libgdal=3.8.4
- libgfortran-ng=13.2.0
- libgfortran5=13.2.0
- libglib=2.78.4
- libgomp=13.2.0
- libgoogle-cloud=2.12.0
- libgpg-error=1.47
- libgrpc=1.60.1
- libhwloc=2.9.3
- libiconv=1.17
- libjpeg-turbo=3.0.0
- libkml=1.3.0
- liblapack=3.9.0
- liblapacke=3.9.0
- libllvm15=15.0.7
- libnetcdf=4.9.2
- libnghttp2=1.58.0
- libnl=3.9.0
- libnsl=2.0.1
- libnuma=2.0.16
- libogg=1.3.4
- libopenblas=0.3.26
- libopus=1.3.1
- libparquet=15.0.0
- libpng=1.6.42
- libpq=16.2
- libprotobuf=4.25.1
- libre2-11=2023.06.02
- librsvg=2.56.3
- librttopo=1.1.0
- libscotch=7.0.4
- libsndfile=1.2.2
- libspatialindex=1.9.3
- libspatialite=5.1.0
- libspral=2023.09.07
- libsqlite=3.45.1
- libssh2=1.11.0
- libstdcxx-ng=13.2.0
- libsystemd0=255
- libthrift=0.19.0
- libtiff=4.6.0
- libutf8proc=2.8.0
- libuuid=2.38.1
- libvorbis=1.3.7
- libwebp=1.3.2
- libwebp-base=1.3.2
- libxcb=1.15
- libxcrypt=4.4.36
- libxkbcommon=1.6.0
- libxml2=2.12.5
- libxslt=1.1.39
- libzip=1.10.1
- libzlib=1.2.13
- linopy=0.3.4
- locket=1.0.0
- lxml=5.1.0
- lz4=4.3.3
- lz4-c=1.9.4
- lzo=2.10
- mapclassify=2.6.1
- markupsafe=2.1.5
- matplotlib=3.8.3
- matplotlib-base=3.8.3
- matplotlib-inline=0.1.6
- memory_profiler=0.61.0
- metis=5.1.0
- minizip=4.0.4
- mpg123=1.32.4
- msgpack-python=1.0.7
- mumps-include=5.6.2
- mumps-seq=5.6.2
- munkres=1.1.4
- mysql-common=8.0.33
- mysql-libs=8.0.33
- nbformat=5.9.2
- ncurses=6.4
- netcdf4=1.6.5
- networkx=3.2.1
- nodeenv=1.8.0
- nomkl=1.0
- nspr=4.35
- nss=3.98
- numexpr=2.9.0
- numpy=1.26.4
- openjdk=21.0.2
- openjpeg=2.5.0
- openpyxl=3.1.2
- openssl=3.2.1
- orc=1.9.2
- packaging=23.2
- pandas=2.2.0
- pango=1.50.14
- parso=0.8.3
- partd=1.4.1
- patsy=0.5.6
- pcre2=10.42
- pexpect=4.9.0
- pickleshare=0.7.5
- pillow=10.2.0
- pip=24.0
- pixman=0.43.2
- pkgutil-resolve-name=1.3.10
- plac=1.4.2
- platformdirs=4.2.0
- pluggy=1.4.0
- ply=3.11
- poppler=24.02.0
- poppler-data=0.4.12
- postgresql=16.2
- powerplantmatching=0.5.11
- pre-commit=3.6.2
- progressbar2=4.3.2
- proj=9.3.1
- prompt-toolkit=3.0.42
- psutil=5.9.8
- pthread-stubs=0.4
- ptyprocess=0.7.0
- pulp=2.7.0
- pulseaudio-client=16.1
- pure_eval=0.2.2
- py-cpuinfo=9.0.0
- pyarrow=15.0.0
- pyarrow-hotfix=0.6
- pycountry=22.3.5
- pycparser=2.21
- pygments=2.17.2
- pyomo=6.6.1
- pyparsing=3.1.1
- pyproj=3.6.1
- pypsa=0.27.0
- pyqt=5.15.9
- pyqt5-sip=12.12.2
- pyscipopt=4.4.0
- pyshp=2.3.1
- pysocks=1.7.1
- pytables=3.9.2
- pytest=8.0.0
- python=3.11.8
- python-dateutil=2.8.2
- python-fastjsonschema=2.19.1
- python-tzdata=2024.1
- python-utils=3.8.2
- python_abi=3.11
- pytz=2024.1
- pyxlsb=1.0.10
- pyyaml=6.0.1
- qt-main=5.15.8
- rasterio=1.3.9
- rdma-core=50.0
- re2=2023.06.02
- readline=8.2
- referencing=0.33.0
- requests=2.31.0
- reretry=0.11.8
- rioxarray=0.15.1
- rpds-py=0.18.0
- rtree=1.2.0
- s2n=1.4.3
- scikit-learn=1.4.1.post1
- scip=8.1.0
- scipy=1.12.0
- scotch=7.0.4
- seaborn=0.13.2
- seaborn-base=0.13.2
- setuptools=69.1.0
- setuptools-scm=8.0.4
- setuptools_scm=8.0.4
- shapely=2.0.2
- sip=6.7.12
- six=1.16.0
- smart_open=6.4.0
- smmap=5.0.0
- snakemake-minimal=7.32.4
- snappy=1.1.10
- snuggs=1.4.7
- sortedcontainers=2.4.0
- soupsieve=2.5
- sqlite=3.45.1
- stack_data=0.6.2
- statsmodels=0.14.1
- stopit=1.1.2
- tabula-py=2.7.0
- tabulate=0.9.0
- tbb=2021.11.0
- tblib=3.0.0
- threadpoolctl=3.3.0
- throttler=1.2.2
- tiledb=2.20.0
- tk=8.6.13
- toml=0.10.2
- tomli=2.0.1
- toolz=0.12.1
- toposort=1.10
- tornado=6.3.3
- tqdm=4.66.2
- traitlets=5.14.1
- typing-extensions=4.9.0
- typing_extensions=4.9.0
- tzcode=2024a
- tzdata=2024a
- ucx=1.15.0
- ukkonen=1.0.1
- unidecode=1.3.8
- unixodbc=2.3.12
- uriparser=0.9.7
- urllib3=2.2.1
- validators=0.22.0
- virtualenv=20.25.0
- wcwidth=0.2.13
- wheel=0.42.0
- wrapt=1.16.0
- xarray=2024.2.0
- xcb-util=0.4.0
- xcb-util-image=0.4.0
- xcb-util-keysyms=0.4.0
- xcb-util-renderutil=0.3.9
- xcb-util-wm=0.4.1
- xerces-c=3.2.5
- xkeyboard-config=2.41
- xlrd=2.0.1
- xorg-fixesproto=5.0
- xorg-inputproto=2.3.2
- xorg-kbproto=1.0.7
- xorg-libice=1.1.1
- xorg-libsm=1.2.4
- xorg-libx11=1.8.7
- xorg-libxau=1.0.11
- xorg-libxdmcp=1.1.3
- xorg-libxext=1.3.4
- xorg-libxfixes=5.0.3
- xorg-libxi=1.7.10
- xorg-libxrender=0.9.11
- xorg-libxt=1.3.0
- xorg-libxtst=1.2.3
- xorg-recordproto=1.14.2
- xorg-renderproto=0.11.1
- xorg-xextproto=7.3.0
- xorg-xf86vidmodeproto=2.3.1
- xorg-xproto=7.0.31
- xyzservices=2023.10.1
- xz=5.2.6
- yaml=0.2.5
- yte=1.5.4
- zict=3.0.0
- zipp=3.17.0
- zlib=1.2.13
- zlib-ng=2.0.7
- zstd=1.5.5
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_gnu
- affine=2.4.0=pyhd8ed1ab_0
- alsa-lib=1.2.11=hd590300_1
- ampl-mp=3.1.0=h2cc385e_1006
- amply=0.1.6=pyhd8ed1ab_0
- appdirs=1.4.4=pyh9f0ad1d_0
- argparse-dataclass=2.0.0=pyhd8ed1ab_0
- asttokens=2.4.1=pyhd8ed1ab_0
- atk-1.0=2.38.0=h04ea711_2
- atlite=0.2.12=pyhd8ed1ab_0
- attr=2.5.1=h166bdaf_1
- attrs=23.2.0=pyh71513ae_0
- aws-c-auth=0.7.18=he0b1f16_0
- aws-c-cal=0.6.11=heb1d5e4_0
- aws-c-common=0.9.15=hd590300_0
- aws-c-compression=0.2.18=hce8ee76_3
- aws-c-event-stream=0.4.2=h01f5eca_8
- aws-c-http=0.8.1=hdb68c23_10
- aws-c-io=0.14.7=hbfbeace_6
- aws-c-mqtt=0.10.4=h50844eb_0
- aws-c-s3=0.5.7=h6be9164_2
- aws-c-sdkutils=0.1.15=hce8ee76_3
- aws-checksums=0.1.18=hce8ee76_3
- aws-crt-cpp=0.26.8=h2150271_2
- aws-sdk-cpp=1.11.267=hddb5a97_7
- azure-core-cpp=1.11.1=h91d86a7_1
- azure-identity-cpp=1.6.0=hf1915f5_1
- azure-storage-blobs-cpp=12.10.0=h00ab1b0_1
- azure-storage-common-cpp=12.5.0=h94269e2_4
- beautifulsoup4=4.12.3=pyha770c72_0
- blosc=1.21.5=hc2324a3_1
- bokeh=3.4.1=pyhd8ed1ab_0
- bottleneck=1.3.8=py311h1f0f07a_0
- branca=0.7.2=pyhd8ed1ab_0
- brotli=1.1.0=hd590300_1
- brotli-bin=1.1.0=hd590300_1
- brotli-python=1.1.0=py311hb755f60_1
- bzip2=1.0.8=hd590300_5
- c-ares=1.28.1=hd590300_0
- c-blosc2=2.14.4=hb4ffafa_1
- ca-certificates=2024.2.2=hbcca054_0
- cads-api-client=1.0.0=pyhd8ed1ab_0
- cairo=1.18.0=h3faef2a_0
- cartopy=0.23.0=py311h320fe9a_0
- cdsapi=0.7.0=pyhd8ed1ab_0
- certifi=2024.2.2=pyhd8ed1ab_0
- cffi=1.16.0=py311hb3a22ac_0
- cfgv=3.3.1=pyhd8ed1ab_0
- cfitsio=4.4.0=hbdc6101_1
- cftime=1.6.3=py311h1f0f07a_0
- charset-normalizer=3.3.2=pyhd8ed1ab_0
- click=8.1.7=unix_pyh707e725_0
- click-plugins=1.1.1=py_0
- cligj=0.7.2=pyhd8ed1ab_1
- cloudpickle=3.0.0=pyhd8ed1ab_0
- coin-or-cbc=2.10.10=h9002f0b_0
- coin-or-cgl=0.60.7=h516709c_0
- coin-or-clp=1.17.8=h1ee7a9c_0
- coin-or-osi=0.108.10=haf5fa05_0
- coin-or-utils=2.11.11=hee58242_0
- coincbc=2.10.10=0_metapackage
- colorama=0.4.6=pyhd8ed1ab_0
- conda-inject=1.3.1=pyhd8ed1ab_0
- configargparse=1.7=pyhd8ed1ab_0
- connection_pool=0.0.3=pyhd3deb0d_0
- contourpy=1.2.1=py311h9547e67_0
- country_converter=1.2=pyhd8ed1ab_0
- cppad=20240000.4=h59595ed_0
- cycler=0.12.1=pyhd8ed1ab_0
- cytoolz=0.12.3=py311h459d7ec_0
- dask=2024.4.2=pyhd8ed1ab_0
- dask-core=2024.4.2=pyhd8ed1ab_0
- dask-expr=1.0.14=pyhd8ed1ab_0
- datrie=0.8.2=py311h459d7ec_7
- dbus=1.13.6=h5008d03_3
- decorator=5.1.1=pyhd8ed1ab_0
- deprecation=2.1.0=pyh9f0ad1d_0
- descartes=1.1.0=py_4
- distlib=0.3.8=pyhd8ed1ab_0
- distributed=2024.4.2=pyhd8ed1ab_0
- distro=1.9.0=pyhd8ed1ab_0
- docutils=0.21.2=pyhd8ed1ab_0
- dpath=2.1.6=pyha770c72_0
- entsoe-py=0.6.7=pyhd8ed1ab_0
- et_xmlfile=1.1.0=pyhd8ed1ab_0
- exceptiongroup=1.2.0=pyhd8ed1ab_2
- executing=2.0.1=pyhd8ed1ab_0
- expat=2.6.2=h59595ed_0
- filelock=3.14.0=pyhd8ed1ab_0
- fiona=1.9.6=py311hf8e0aa6_0
- fmt=10.2.1=h00ab1b0_0
- folium=0.16.0=pyhd8ed1ab_0
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
- font-ttf-ubuntu=0.83=h77eed37_2
- fontconfig=2.14.2=h14ed4e7_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
- fonttools=4.51.0=py311h459d7ec_0
- freetype=2.12.1=h267a509_2
- freexl=2.0.0=h743c826_0
- fribidi=1.0.10=h36c2ea0_0
- fsspec=2024.3.1=pyhca7485f_0
- gdal=3.8.5=py311hd032c08_2
- gdk-pixbuf=2.42.11=hb9ae30d_0
- geographiclib=2.0=pyhd8ed1ab_0
- geojson-rewind=1.1.0=pyhd8ed1ab_0
- geopandas=0.14.4=pyhd8ed1ab_0
- geopandas-base=0.14.4=pyha770c72_0
- geopy=2.4.1=pyhd8ed1ab_1
- geos=3.12.1=h59595ed_0
- geotiff=1.7.1=h6cf1f90_16
- gettext=0.22.5=h59595ed_2
- gettext-tools=0.22.5=h59595ed_2
- gflags=2.2.2=he1b5a44_1004
- giflib=5.2.2=hd590300_0
- gitdb=4.0.11=pyhd8ed1ab_0
- gitpython=3.1.43=pyhd8ed1ab_0
- glib=2.80.0=hf2295e7_6
- glib-tools=2.80.0=hde27a5a_6
- glog=0.7.0=hed5481d_0
- glpk=5.0=h445213a_0
- gmp=6.3.0=h59595ed_1
- graphite2=1.3.13=h59595ed_1003
- graphviz=9.0.0=h78e8752_1
- gst-plugins-base=1.24.1=hfa15dee_2
- gstreamer=1.24.1=h98fc4e7_2
- gtk2=2.24.33=h280cfa0_4
- gts=0.7.6=h977cf35_4
- harfbuzz=8.4.0=h3d44ed6_0
- hdf4=4.2.15=h2a13503_7
- hdf5=1.14.3=nompi_h4f84152_101
- humanfriendly=10.0=pyhd8ed1ab_6
- icu=73.2=h59595ed_0
- identify=2.5.36=pyhd8ed1ab_0
- idna=3.7=pyhd8ed1ab_0
- immutables=0.20=py311h459d7ec_1
- importlib-metadata=7.1.0=pyha770c72_0
- importlib_metadata=7.1.0=hd8ed1ab_0
- importlib_resources=6.4.0=pyhd8ed1ab_0
- iniconfig=2.0.0=pyhd8ed1ab_0
- ipopt=3.14.16=hf967516_0
- ipython=8.22.2=pyh707e725_0
- jedi=0.19.1=pyhd8ed1ab_0
- jinja2=3.1.3=pyhd8ed1ab_0
- joblib=1.4.2=pyhd8ed1ab_0
- json-c=0.17=h7ab15ed_0
- jsonschema=4.22.0=pyhd8ed1ab_0
- jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- jupyter_core=5.7.2=py311h38be061_0
- kealib=1.5.3=h2f55d51_0
- keyutils=1.6.1=h166bdaf_0
- kiwisolver=1.4.5=py311h9547e67_1
- krb5=1.21.2=h659d440_0
- lame=3.100=h166bdaf_1003
- lcms2=2.16=hb7c19ff_0
- ld_impl_linux-64=2.40=h55db66e_0
- lerc=4.0.0=h27087fc_0
- libabseil=20240116.2=cxx17_h59595ed_0
- libaec=1.1.3=h59595ed_0
- libarchive=3.7.2=h2aa1ff5_1
- libarrow=15.0.2=hefa796f_6_cpu
- libarrow-acero=15.0.2=hbabe93e_6_cpu
- libarrow-dataset=15.0.2=hbabe93e_6_cpu
- libarrow-flight=15.0.2=hc4f8a93_6_cpu
- libarrow-flight-sql=15.0.2=he4f5ca8_6_cpu
- libarrow-gandiva=15.0.2=hc1954e9_6_cpu
- libarrow-substrait=15.0.2=he4f5ca8_6_cpu
- libasprintf=0.22.5=h661eb56_2
- libasprintf-devel=0.22.5=h661eb56_2
- libblas=3.9.0=22_linux64_openblas
- libboost-headers=1.84.0=ha770c72_2
- libbrotlicommon=1.1.0=hd590300_1
- libbrotlidec=1.1.0=hd590300_1
- libbrotlienc=1.1.0=hd590300_1
- libcap=2.69=h0f662aa_0
- libcblas=3.9.0=22_linux64_openblas
- libclang-cpp15=15.0.7=default_h127d8a8_5
- libclang13=18.1.4=default_h5d6823c_0
- libcrc32c=1.1.2=h9c3ff4c_0
- libcups=2.3.3=h4637d8d_4
- libcurl=8.7.1=hca28451_0
- libdeflate=1.20=hd590300_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=hd590300_2
- libevent=2.1.12=hf998b51_1
- libexpat=2.6.2=h59595ed_0
- libffi=3.4.2=h7f98852_5
- libflac=1.4.3=h59595ed_0
- libgcc-ng=13.2.0=h77fa898_6
- libgcrypt=1.10.3=hd590300_0
- libgd=2.3.3=h119a65a_9
- libgdal=3.8.5=hf9625ee_2
- libgettextpo=0.22.5=h59595ed_2
- libgettextpo-devel=0.22.5=h59595ed_2
- libgfortran-ng=13.2.0=h69a702a_6
- libgfortran5=13.2.0=h43f5ff8_6
- libglib=2.80.0=hf2295e7_6
- libgomp=13.2.0=h77fa898_6
- libgoogle-cloud=2.23.0=h9be4e54_1
- libgoogle-cloud-storage=2.23.0=hc7a4891_1
- libgpg-error=1.49=h4f305b6_0
- libgrpc=1.62.2=h15f2491_0
- libhwloc=2.9.3=default_h554bfaf_1009
- libiconv=1.17=hd590300_2
- libjpeg-turbo=3.0.0=hd590300_1
- libkml=1.3.0=h01aab08_1018
- liblapack=3.9.0=22_linux64_openblas
- liblapacke=3.9.0=22_linux64_openblas
- libllvm15=15.0.7=hb3ce162_4
- libllvm16=16.0.6=hb3ce162_3
- libllvm18=18.1.4=h2448989_0
- libnetcdf=4.9.2=nompi_h9612171_113
- libnghttp2=1.58.0=h47da74e_1
- libnl=3.9.0=hd590300_0
- libnsl=2.0.1=hd590300_0
- libogg=1.3.4=h7f98852_1
- libopenblas=0.3.27=pthreads_h413a1c8_0
- libopus=1.3.1=h7f98852_1
- libparquet=15.0.2=hacf5a1f_6_cpu
- libpng=1.6.43=h2797004_0
- libpq=16.2=h33b98f1_1
- libprotobuf=4.25.3=h08a7969_0
- libre2-11=2023.09.01=h5a48ba9_2
- librsvg=2.58.0=hadf69e7_1
- librttopo=1.1.0=h8917695_15
- libscotch=7.0.4=h91e35bf_1
- libsndfile=1.2.2=hc60ed4a_1
- libspatialindex=1.9.3=h9c3ff4c_4
- libspatialite=5.1.0=h6f065fc_5
- libspral=2024.01.18=h6aa6db2_0
- libsqlite=3.45.3=h2797004_0
- libssh2=1.11.0=h0841786_0
- libstdcxx-ng=13.2.0=hc0a3c3a_6
- libsystemd0=255=h3516f8a_1
- libthrift=0.19.0=hb90f79a_1
- libtiff=4.6.0=h1dd3fc0_3
- libutf8proc=2.8.0=h166bdaf_0
- libuuid=2.38.1=h0b41bf4_0
- libvorbis=1.3.7=h9c3ff4c_0
- libwebp=1.4.0=h2c329e2_0
- libwebp-base=1.4.0=hd590300_0
- libxcb=1.15=h0b41bf4_0
- libxcrypt=4.4.36=hd590300_1
- libxkbcommon=1.7.0=h662e7e4_0
- libxml2=2.12.6=h232c23b_2
- libxslt=1.1.39=h76b75d6_0
- libzip=1.10.1=h2629f0a_3
- libzlib=1.2.13=hd590300_5
- linopy=0.3.8=pyhd8ed1ab_0
- locket=1.0.0=pyhd8ed1ab_0
- lxml=5.2.1=py311hc0a218f_0
- lz4=4.3.3=py311h38e4bf4_0
- lz4-c=1.9.4=hcb278e6_0
- lzo=2.10=hd590300_1001
- mapclassify=2.6.1=pyhd8ed1ab_0
- markupsafe=2.1.5=py311h459d7ec_0
- matplotlib=3.8.4=py311h38be061_0
- matplotlib-base=3.8.4=py311h54ef318_0
- matplotlib-inline=0.1.7=pyhd8ed1ab_0
- memory_profiler=0.61.0=pyhd8ed1ab_0
- metis=5.1.0=h59595ed_1007
- minizip=4.0.5=h0ab5242_0
- mpfr=4.2.1=h9458935_1
- mpg123=1.32.6=h59595ed_0
- msgpack-python=1.0.7=py311h9547e67_0
- multiurl=0.3.1=pyhd8ed1ab_0
- mumps-include=5.6.2=ha770c72_4
- mumps-seq=5.6.2=hfef103a_4
- munkres=1.1.4=pyh9f0ad1d_0
- mysql-common=8.3.0=hf1915f5_4
- mysql-libs=8.3.0=hca2cd23_4
- nbformat=5.10.4=pyhd8ed1ab_0
- ncurses=6.4.20240210=h59595ed_0
- netcdf4=1.6.5=nompi_py311he8ad708_100
- networkx=3.3=pyhd8ed1ab_1
- nodeenv=1.8.0=pyhd8ed1ab_0
- nomkl=1.0=h5ca1d4c_0
- nspr=4.35=h27087fc_0
- nss=3.98=h1d7d5a4_0
- numexpr=2.9.0=py311h039bad6_100
- numpy=1.26.4=py311h64a7726_0
- openjdk=22.0.1=hb622114_0
- openjpeg=2.5.2=h488ebb8_0
- openpyxl=3.1.2=py311h459d7ec_1
- openssl=3.3.0=hd590300_0
- orc=2.0.0=h17fec99_1
- packaging=24.0=pyhd8ed1ab_0
- pandas=2.2.2=py311h320fe9a_0
- pango=1.52.2=ha41ecd1_0
- parso=0.8.4=pyhd8ed1ab_0
- partd=1.4.1=pyhd8ed1ab_0
- patsy=0.5.6=pyhd8ed1ab_0
- pcre2=10.43=hcad00b1_0
- pexpect=4.9.0=pyhd8ed1ab_0
- pickleshare=0.7.5=py_1003
- pillow=10.3.0=py311h18e6fac_0
- pip=24.0=pyhd8ed1ab_0
- pixman=0.43.2=h59595ed_0
- pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- plac=1.4.3=pyhd8ed1ab_0
- platformdirs=4.2.1=pyhd8ed1ab_0
- pluggy=1.5.0=pyhd8ed1ab_0
- ply=3.11=pyhd8ed1ab_2
- poppler=24.04.0=hb6cd0d7_0
- poppler-data=0.4.12=hd8ed1ab_0
- postgresql=16.2=h82ecc9d_1
- powerplantmatching=0.5.14=pyhd8ed1ab_0
- pre-commit=3.7.0=pyha770c72_0
- progressbar2=4.4.2=pyhd8ed1ab_0
- proj=9.4.0=h1d62c97_1
- prompt-toolkit=3.0.42=pyha770c72_0
- psutil=5.9.8=py311h459d7ec_0
- pthread-stubs=0.4=h36c2ea0_1001
- ptyprocess=0.7.0=pyhd3deb0d_0
- pulp=2.8.0=py311h38be061_0
- pulseaudio-client=17.0=hb77b528_0
- pure_eval=0.2.2=pyhd8ed1ab_0
- py-cpuinfo=9.0.0=pyhd8ed1ab_0
- pyarrow=15.0.2=py311hd5e4297_6_cpu
- pyarrow-hotfix=0.6=pyhd8ed1ab_0
- pycountry=22.3.5=pyhd8ed1ab_0
- pycparser=2.22=pyhd8ed1ab_0
- pygments=2.17.2=pyhd8ed1ab_0
- pyomo=6.6.1=py311hb755f60_0
- pyparsing=3.1.2=pyhd8ed1ab_0
- pyproj=3.6.1=py311hb3a3e68_6
- pypsa=0.27.1=pyhd8ed1ab_0
- pyqt=5.15.9=py311hf0fb5b6_5
- pyqt5-sip=12.12.2=py311hb755f60_5
- pyscipopt=5.0.1=py311hb755f60_0
- pyshp=2.3.1=pyhd8ed1ab_0
- pysocks=1.7.1=pyha2e5f31_6
- pytables=3.9.2=py311h3e8b7c9_2
- pytest=8.2.0=pyhd8ed1ab_0
- python=3.11.9=hb806964_0_cpython
- python-dateutil=2.9.0=pyhd8ed1ab_0
- python-fastjsonschema=2.19.1=pyhd8ed1ab_0
- python-tzdata=2024.1=pyhd8ed1ab_0
- python-utils=3.8.2=pyhd8ed1ab_0
- python_abi=3.11=4_cp311
- pytz=2024.1=pyhd8ed1ab_0
- pyxlsb=1.0.10=pyhd8ed1ab_0
- pyyaml=6.0.1=py311h459d7ec_1
- qt-main=5.15.8=hc9dc06e_21
- rasterio=1.3.10=py311h375a7ea_0
- rdma-core=51.0=hd3aeb46_0
- re2=2023.09.01=h7f4b329_2
- readline=8.2=h8228510_1
- referencing=0.35.1=pyhd8ed1ab_0
- requests=2.31.0=pyhd8ed1ab_0
- reretry=0.11.8=pyhd8ed1ab_0
- rioxarray=0.15.5=pyhd8ed1ab_0
- rpds-py=0.18.0=py311h46250e7_0
- rtree=1.2.0=py311h3bb2b0f_0
- s2n=1.4.12=h06160fa_0
- scikit-learn=1.4.2=py311hc009520_0
- scip=9.0.0=hded5f35_4
- scipy=1.13.0=py311h64a7726_0
- scotch=7.0.4=h23d43cc_1
- seaborn=0.13.2=hd8ed1ab_2
- seaborn-base=0.13.2=pyhd8ed1ab_2
- setuptools=69.5.1=pyhd8ed1ab_0
- setuptools-scm=8.0.4=pyhd8ed1ab_1
- setuptools_scm=8.0.4=hd8ed1ab_1
- shapely=2.0.4=py311h2032efe_0
- sip=6.7.12=py311hb755f60_0
- six=1.16.0=pyh6c4a22f_0
- smart_open=7.0.4=pyhd8ed1ab_0
- smmap=5.0.0=pyhd8ed1ab_0
- snakemake-interface-common=1.17.2=pyhdfd78af_0
- snakemake-interface-executor-plugins=9.1.1=pyhdfd78af_0
- snakemake-interface-report-plugins=1.0.0=pyhdfd78af_0
- snakemake-interface-storage-plugins=3.2.2=pyhdfd78af_0
- snakemake-minimal=8.11.1=pyhdfd78af_0
- snappy=1.2.0=hdb0a2a9_1
- snuggs=1.4.7=py_0
- sortedcontainers=2.4.0=pyhd8ed1ab_0
- soupsieve=2.5=pyhd8ed1ab_1
- spdlog=1.13.0=hd2e6256_0
- sqlite=3.45.3=h2c6b66d_0
- stack_data=0.6.2=pyhd8ed1ab_0
- statsmodels=0.14.1=py311h1f0f07a_0
- stopit=1.1.2=py_0
- tabula-py=2.7.0=py311h38be061_1
- tabulate=0.9.0=pyhd8ed1ab_1
- tbb=2021.11.0=h00ab1b0_1
- tblib=3.0.0=pyhd8ed1ab_0
- threadpoolctl=3.5.0=pyhc1e730c_0
- throttler=1.2.2=pyhd8ed1ab_0
- tiledb=2.22.0=h27f064a_3
- tk=8.6.13=noxft_h4845f30_101
- toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
- toolz=0.12.1=pyhd8ed1ab_0
- toposort=1.10=pyhd8ed1ab_0
- tornado=6.4=py311h459d7ec_0
- tqdm=4.66.2=pyhd8ed1ab_0
- traitlets=5.14.3=pyhd8ed1ab_0
- typing-extensions=4.11.0=hd8ed1ab_0
- typing_extensions=4.11.0=pyha770c72_0
- tzcode=2024a=h3f72095_0
- tzdata=2024a=h0c530f3_0
- ucx=1.15.0=ha691c75_8
- ukkonen=1.0.1=py311h9547e67_4
- unidecode=1.3.8=pyhd8ed1ab_0
- unixodbc=2.3.12=h661eb56_0
- uriparser=0.9.7=h59595ed_1
- urllib3=2.2.1=pyhd8ed1ab_0
- validators=0.28.1=pyhd8ed1ab_0
- virtualenv=20.26.1=pyhd8ed1ab_0
- wcwidth=0.2.13=pyhd8ed1ab_0
- wheel=0.43.0=pyhd8ed1ab_1
- wrapt=1.16.0=py311h459d7ec_0
- xarray=2024.3.0=pyhd8ed1ab_0
- xcb-util=0.4.0=hd590300_1
- xcb-util-image=0.4.0=h8ee46fc_1
- xcb-util-keysyms=0.4.0=h8ee46fc_1
- xcb-util-renderutil=0.3.9=hd590300_1
- xcb-util-wm=0.4.1=h8ee46fc_1
- xerces-c=3.2.5=hac6953d_0
- xkeyboard-config=2.41=hd590300_0
- xlrd=2.0.1=pyhd8ed1ab_3
- xorg-fixesproto=5.0=h7f98852_1002
- xorg-inputproto=2.3.2=h7f98852_1002
- xorg-kbproto=1.0.7=h7f98852_1002
- xorg-libice=1.1.1=hd590300_0
- xorg-libsm=1.2.4=h7391055_0
- xorg-libx11=1.8.9=h8ee46fc_0
- xorg-libxau=1.0.11=hd590300_0
- xorg-libxdmcp=1.1.3=h7f98852_0
- xorg-libxext=1.3.4=h0b41bf4_2
- xorg-libxfixes=5.0.3=h7f98852_1004
- xorg-libxi=1.7.10=h7f98852_0
- xorg-libxrender=0.9.11=hd590300_0
- xorg-libxt=1.3.0=hd590300_1
- xorg-libxtst=1.2.3=h7f98852_1002
- xorg-recordproto=1.14.2=h7f98852_1002
- xorg-renderproto=0.11.1=h7f98852_1002
- xorg-xextproto=7.3.0=h0b41bf4_1003
- xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
- xorg-xproto=7.0.31=h7f98852_1007
- xyzservices=2024.4.0=pyhd8ed1ab_0
- xz=5.2.6=h166bdaf_0
- yaml=0.2.5=h7f98852_2
- yte=1.5.4=pyha770c72_0
- zict=3.0.0=pyhd8ed1ab_0
- zipp=3.17.0=pyhd8ed1ab_0
- zlib=1.2.13=hd590300_5
- zlib-ng=2.0.7=h0b41bf4_0
- zstd=1.5.5=hfc55251_0
- pip:
- highspy==1.5.3
- oauthlib==3.2.2
- requests-oauthlib==1.3.1
- snakemake-executor-plugin-cluster-generic==1.0.9
- snakemake-executor-plugin-slurm==0.4.5
- snakemake-executor-plugin-slurm-jobstep==0.2.1
- snakemake-storage-plugin-http==0.2.3
- tsam==2.3.1

View File

@ -20,12 +20,12 @@ dependencies:
- openpyxl!=3.1.1
- pycountry
- seaborn
- snakemake-minimal>=8.5
- snakemake-minimal>=8.11
- memory_profiler
- yaml
- pytables
- lxml
- powerplantmatching>=0.5.5,!=0.5.9
- powerplantmatching>=0.5.13
- numpy
- pandas>=2.1
- geopandas>=0.11.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 664 KiB

View File

@ -86,7 +86,9 @@ rule base_network:
offshore_shapes=resources("offshore_shapes.geojson"),
europe_shape=resources("europe_shape.geojson"),
output:
resources("networks/base.nc"),
base_network=resources("networks/base.nc"),
regions_onshore=resources("regions_onshore.geojson"),
regions_offshore=resources("regions_offshore.geojson"),
log:
logs("base_network.log"),
benchmark:
@ -127,27 +129,6 @@ rule build_shapes:
"../scripts/build_shapes.py"
rule build_bus_regions:
params:
countries=config_provider("countries"),
input:
country_shapes=resources("country_shapes.geojson"),
offshore_shapes=resources("offshore_shapes.geojson"),
base_network=resources("networks/base.nc"),
output:
regions_onshore=resources("regions_onshore.geojson"),
regions_offshore=resources("regions_offshore.geojson"),
log:
logs("build_bus_regions.log"),
threads: 1
resources:
mem_mb=1000,
conda:
"../envs/environment.yaml"
script:
"../scripts/build_bus_regions.py"
if config["enable"].get("build_cutout", False):
rule build_cutout:
@ -412,7 +393,7 @@ rule add_electricity:
else resources("networks/base.nc")
),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
regions=resources("regions_onshore.geojson"),
powerplants=resources("powerplants.csv"),
@ -457,7 +438,7 @@ rule simplify_network:
input:
network=resources("networks/elec.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
regions_onshore=resources("regions_onshore.geojson"),
regions_offshore=resources("regions_offshore.geojson"),
@ -466,7 +447,6 @@ rule simplify_network:
regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"),
regions_offshore=resources("regions_offshore_elec_s{simpl}.geojson"),
busmap=resources("busmap_elec_s{simpl}.csv"),
connection_costs=resources("connection_costs_s{simpl}.csv"),
log:
logs("simplify_network/elec_s{simpl}.log"),
benchmark:
@ -506,7 +486,7 @@ rule cluster_network:
else []
),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
output:
network=resources("networks/elec_s{simpl}_{clusters}.nc"),
@ -535,7 +515,7 @@ rule add_extra_components:
input:
network=resources("networks/elec_s{simpl}_{clusters}.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
output:
resources("networks/elec_s{simpl}_{clusters}_ec.nc"),
@ -570,7 +550,7 @@ rule prepare_network:
input:
resources("networks/elec_s{simpl}_{clusters}_ec.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
co2_price=lambda w: resources("co2_price.csv") if "Ept" in w.opts else [],
output:

View File

@ -55,24 +55,6 @@ if config["enable"]["retrieve"] and config["enable"].get("retrieve_databundle",
"../scripts/retrieve_eurostat_data.py"
if config["enable"].get("retrieve_irena"):
rule retrieve_irena:
output:
offwind="data/existing_infrastructure/offwind_capacity_IRENA.csv",
onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
log:
"logs/retrieve_irena.log",
resources:
mem_mb=1000,
retries: 2
conda:
"../envs/retrieve.yaml"
script:
"../scripts/retrieve_irena.py"
if config["enable"]["retrieve"] and config["enable"].get("retrieve_cutout", True):
rule retrieve_cutout:

View File

@ -26,9 +26,6 @@ rule add_existing_baseyear:
existing_heating_distribution=resources(
"existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv"
),
existing_solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
existing_onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
existing_offwind="data/existing_infrastructure/offwind_capacity_IRENA.csv",
output:
RESULTS
+ "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",

View File

@ -25,9 +25,6 @@ rule add_existing_baseyear:
"existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv"
),
existing_heating="data/existing_infrastructure/existing_heating_raw.csv",
existing_solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
existing_onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
existing_offwind="data/existing_infrastructure/offwind_capacity_IRENA.csv",
output:
RESULTS
+ "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",

View File

@ -13,6 +13,7 @@ from types import SimpleNamespace
import country_converter as coco
import numpy as np
import pandas as pd
import powerplantmatching as pm
import pypsa
import xarray as xr
from _helpers import (
@ -60,14 +61,22 @@ def add_existing_renewables(df_agg, costs):
Append existing renewables to the df_agg pd.DataFrame with the conventional
power plants.
"""
carriers = {"solar": "solar", "onwind": "onwind", "offwind": "offwind-ac"}
tech_map = {"solar": "PV", "onwind": "Onshore", "offwind": "Offshore"}
for tech in ["solar", "onwind", "offwind"]:
carrier = carriers[tech]
countries = snakemake.config["countries"]
irena = pm.data.IRENASTAT().powerplant.convert_country_to_alpha2()
irena = irena.query("Country in @countries")
irena = irena.groupby(["Technology", "Country", "Year"]).Capacity.sum()
df = pd.read_csv(snakemake.input[f"existing_{tech}"], index_col=0).fillna(0.0)
irena = irena.unstack().reset_index()
for carrier, tech in tech_map.items():
df = (
irena[irena.Technology.str.contains(tech)]
.drop(columns=["Technology"])
.set_index("Country")
)
df.columns = df.columns.astype(int)
df.index = cc.convert(df.index, to="iso2")
# calculate yearly differences
df.insert(loc=0, value=0.0, column="1999")
@ -97,14 +106,16 @@ def add_existing_renewables(df_agg, costs):
for year in nodal_df.columns:
for node in nodal_df.index:
name = f"{node}-{tech}-{year}"
name = f"{node}-{carrier}-{year}"
capacity = nodal_df.loc[node, year]
if capacity > 0.0:
df_agg.at[name, "Fueltype"] = tech
df_agg.at[name, "Fueltype"] = carrier
df_agg.at[name, "Capacity"] = capacity
df_agg.at[name, "DateIn"] = year
df_agg.at[name, "lifetime"] = costs.at[tech, "lifetime"]
df_agg.at[name, "DateOut"] = year + costs.at[tech, "lifetime"] - 1
df_agg.at[name, "lifetime"] = costs.at[carrier, "lifetime"]
df_agg.at[name, "DateOut"] = (
year + costs.at[carrier, "lifetime"] - 1
)
df_agg.at[name, "cluster_bus"] = node
@ -310,7 +321,7 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
n.madd(
"Generator",
new_capacity.index,
suffix=" " + name_suffix,
suffix=name_suffix,
bus=new_capacity.index,
carrier=generator,
p_nom=new_capacity,

View File

@ -5,10 +5,7 @@
# coding: utf-8
"""
Creates the network topology from a `ENTSO-E map extract.
<https://github.com/PyPSA/GridKit/tree/master/entsoe>`_ (March 2022) as a PyPSA
network.
Creates the network topology from an `ENTSO-E map extract <https://github.com/PyPSA/GridKit/tree/master/entsoe>`_ (March 2022) as a PyPSA network.
Relevant Settings
-----------------
@ -59,8 +56,19 @@ Outputs
.. image:: img/base.png
:scale: 33 %
- ``resources/regions_onshore.geojson``:
.. image:: img/regions_onshore.png
:scale: 33 %
- ``resources/regions_offshore.geojson``:
.. image:: img/regions_offshore.png
:scale: 33 %
Description
-----------
Creates the network topology from an ENTSO-E map extract, and create Voronoi shapes for each bus representing both onshore and offshore regions.
"""
import logging
@ -75,11 +83,11 @@ import shapely
import shapely.prepared
import shapely.wkt
import yaml
from _helpers import configure_logging, get_snapshots, set_scenario_config
from _helpers import REGION_COLS, configure_logging, get_snapshots, set_scenario_config
from packaging.version import Version, parse
from scipy import spatial
from scipy.sparse import csgraph
from shapely.geometry import LineString, Point
from shapely.geometry import LineString, Point, Polygon
PD_GE_2_2 = parse(pd.__version__) >= Version("2.2")
@ -698,6 +706,22 @@ def _adjust_capacities_of_under_construction_branches(n, config):
return n
def _set_shapes(n, country_shapes, offshore_shapes):
# Write the geodataframes country_shapes and offshore_shapes to the network.shapes component
country_shapes = gpd.read_file(country_shapes).rename(columns={"name": "idx"})
country_shapes["type"] = "country"
offshore_shapes = gpd.read_file(offshore_shapes).rename(columns={"name": "idx"})
offshore_shapes["type"] = "offshore"
all_shapes = pd.concat([country_shapes, offshore_shapes], ignore_index=True)
n.madd(
"Shape",
all_shapes.index,
geometry=all_shapes.geometry,
idx=all_shapes.idx,
type=all_shapes["type"],
)
def base_network(
eg_buses,
eg_converters,
@ -758,9 +782,150 @@ def base_network(
n = _adjust_capacities_of_under_construction_branches(n, config)
_set_shapes(n, country_shapes, offshore_shapes)
return n
def voronoi_partition_pts(points, outline):
"""
Compute the polygons of a voronoi partition of `points` within the polygon
`outline`. Taken from
https://github.com/FRESNA/vresutils/blob/master/vresutils/graph.py.
Attributes
----------
points : Nx2 - ndarray[dtype=float]
outline : Polygon
Returns
-------
polygons : N - ndarray[dtype=Polygon|MultiPolygon]
"""
points = np.asarray(points)
if len(points) == 1:
polygons = [outline]
else:
xmin, ymin = np.amin(points, axis=0)
xmax, ymax = np.amax(points, axis=0)
xspan = xmax - xmin
yspan = ymax - ymin
# to avoid any network positions outside all Voronoi cells, append
# the corners of a rectangle framing these points
vor = spatial.Voronoi(
np.vstack(
(
points,
[
[xmin - 3.0 * xspan, ymin - 3.0 * yspan],
[xmin - 3.0 * xspan, ymax + 3.0 * yspan],
[xmax + 3.0 * xspan, ymin - 3.0 * yspan],
[xmax + 3.0 * xspan, ymax + 3.0 * yspan],
],
)
)
)
polygons = []
for i in range(len(points)):
poly = Polygon(vor.vertices[vor.regions[vor.point_region[i]]])
if not poly.is_valid:
poly = poly.buffer(0)
with np.errstate(invalid="ignore"):
poly = poly.intersection(outline)
polygons.append(poly)
return polygons
def build_bus_shapes(n, country_shapes, offshore_shapes, countries):
country_shapes = gpd.read_file(country_shapes).set_index("name")["geometry"]
offshore_shapes = gpd.read_file(offshore_shapes)
offshore_shapes = offshore_shapes.reindex(columns=REGION_COLS).set_index("name")[
"geometry"
]
onshore_regions = []
offshore_regions = []
for country in countries:
c_b = n.buses.country == country
onshore_shape = country_shapes[country]
onshore_locs = (
n.buses.loc[c_b & n.buses.onshore_bus]
.sort_values(
by="substation_lv", ascending=False
) # preference for substations
.drop_duplicates(subset=["x", "y"], keep="first")[["x", "y"]]
)
onshore_regions.append(
gpd.GeoDataFrame(
{
"name": onshore_locs.index,
"x": onshore_locs["x"],
"y": onshore_locs["y"],
"geometry": voronoi_partition_pts(
onshore_locs.values, onshore_shape
),
"country": country,
}
)
)
if country not in offshore_shapes.index:
continue
offshore_shape = offshore_shapes[country]
offshore_locs = n.buses.loc[c_b & n.buses.substation_off, ["x", "y"]]
offshore_regions_c = gpd.GeoDataFrame(
{
"name": offshore_locs.index,
"x": offshore_locs["x"],
"y": offshore_locs["y"],
"geometry": voronoi_partition_pts(offshore_locs.values, offshore_shape),
"country": country,
}
)
offshore_regions_c = offshore_regions_c.loc[offshore_regions_c.area > 1e-2]
offshore_regions.append(offshore_regions_c)
shapes = pd.concat(onshore_regions, ignore_index=True)
return onshore_regions, offshore_regions, shapes
def append_bus_shapes(n, shapes, type):
"""
Append shapes to the network. If shapes with the same component and type
already exist, they will be removed.
Parameters:
n (pypsa.Network): The network to which the shapes will be appended.
shapes (geopandas.GeoDataFrame): The shapes to be appended.
**kwargs: Additional keyword arguments used in `n.madd`.
Returns:
None
"""
remove = n.shapes.query("component == 'Bus' and type == @type").index
n.mremove("Shape", remove)
offset = n.shapes.index.astype(int).max() + 1 if not n.shapes.empty else 0
shapes = shapes.rename(lambda x: int(x) + offset)
n.madd(
"Shape",
shapes.index,
geometry=shapes.geometry,
idx=shapes.name,
component="Bus",
type=type,
)
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
@ -784,5 +949,22 @@ if __name__ == "__main__":
snakemake.config,
)
onshore_regions, offshore_regions, shapes = build_bus_shapes(
n,
snakemake.input.country_shapes,
snakemake.input.offshore_shapes,
snakemake.params.countries,
)
shapes.to_file(snakemake.output.regions_onshore)
append_bus_shapes(n, shapes, "onshore")
if offshore_regions:
shapes = pd.concat(offshore_regions, ignore_index=True)
shapes.to_file(snakemake.output.regions_offshore)
append_bus_shapes(n, shapes, "offshore")
else:
offshore_shapes.to_frame().to_file(snakemake.output.regions_offshore)
n.meta = snakemake.config
n.export_to_netcdf(snakemake.output[0])
n.export_to_netcdf(snakemake.output.base_network)

View File

@ -1,184 +0,0 @@
# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
"""
Creates Voronoi shapes for each bus representing both onshore and offshore
regions.
Relevant Settings
-----------------
.. code:: yaml
countries:
.. seealso::
Documentation of the configuration file ``config/config.yaml`` at
:ref:`toplevel_cf`
Inputs
------
- ``resources/country_shapes.geojson``: confer :ref:`shapes`
- ``resources/offshore_shapes.geojson``: confer :ref:`shapes`
- ``networks/base.nc``: confer :ref:`base`
Outputs
-------
- ``resources/regions_onshore.geojson``:
.. image:: img/regions_onshore.png
:scale: 33 %
- ``resources/regions_offshore.geojson``:
.. image:: img/regions_offshore.png
:scale: 33 %
Description
-----------
"""
import logging
import geopandas as gpd
import numpy as np
import pandas as pd
import pypsa
from _helpers import REGION_COLS, configure_logging, set_scenario_config
from scipy.spatial import Voronoi
from shapely.geometry import Polygon
logger = logging.getLogger(__name__)
def voronoi_partition_pts(points, outline):
"""
Compute the polygons of a voronoi partition of `points` within the polygon
`outline`. Taken from
https://github.com/FRESNA/vresutils/blob/master/vresutils/graph.py.
Attributes
----------
points : Nx2 - ndarray[dtype=float]
outline : Polygon
Returns
-------
polygons : N - ndarray[dtype=Polygon|MultiPolygon]
"""
points = np.asarray(points)
if len(points) == 1:
polygons = [outline]
else:
xmin, ymin = np.amin(points, axis=0)
xmax, ymax = np.amax(points, axis=0)
xspan = xmax - xmin
yspan = ymax - ymin
# to avoid any network positions outside all Voronoi cells, append
# the corners of a rectangle framing these points
vor = Voronoi(
np.vstack(
(
points,
[
[xmin - 3.0 * xspan, ymin - 3.0 * yspan],
[xmin - 3.0 * xspan, ymax + 3.0 * yspan],
[xmax + 3.0 * xspan, ymin - 3.0 * yspan],
[xmax + 3.0 * xspan, ymax + 3.0 * yspan],
],
)
)
)
polygons = []
for i in range(len(points)):
poly = Polygon(vor.vertices[vor.regions[vor.point_region[i]]])
if not poly.is_valid:
poly = poly.buffer(0)
with np.errstate(invalid="ignore"):
poly = poly.intersection(outline)
polygons.append(poly)
return polygons
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_bus_regions")
configure_logging(snakemake)
set_scenario_config(snakemake)
countries = snakemake.params.countries
n = pypsa.Network(snakemake.input.base_network)
country_shapes = gpd.read_file(snakemake.input.country_shapes).set_index("name")[
"geometry"
]
offshore_shapes = gpd.read_file(snakemake.input.offshore_shapes)
offshore_shapes = offshore_shapes.reindex(columns=REGION_COLS).set_index("name")[
"geometry"
]
onshore_regions = []
offshore_regions = []
for country in countries:
c_b = n.buses.country == country
onshore_shape = country_shapes[country]
onshore_locs = (
n.buses.loc[c_b & n.buses.onshore_bus]
.sort_values(
by="substation_lv", ascending=False
) # preference for substations
.drop_duplicates(subset=["x", "y"], keep="first")[["x", "y"]]
)
onshore_regions.append(
gpd.GeoDataFrame(
{
"name": onshore_locs.index,
"x": onshore_locs["x"],
"y": onshore_locs["y"],
"geometry": voronoi_partition_pts(
onshore_locs.values, onshore_shape
),
"country": country,
}
)
)
if country not in offshore_shapes.index:
continue
offshore_shape = offshore_shapes[country]
offshore_locs = n.buses.loc[c_b & n.buses.substation_off, ["x", "y"]]
offshore_regions_c = gpd.GeoDataFrame(
{
"name": offshore_locs.index,
"x": offshore_locs["x"],
"y": offshore_locs["y"],
"geometry": voronoi_partition_pts(offshore_locs.values, offshore_shape),
"country": country,
}
)
offshore_regions_c = offshore_regions_c.loc[offshore_regions_c.area > 1e-2]
offshore_regions.append(offshore_regions_c)
pd.concat(onshore_regions, ignore_index=True).to_file(
snakemake.output.regions_onshore
)
if offshore_regions:
pd.concat(offshore_regions, ignore_index=True).to_file(
snakemake.output.regions_offshore
)
else:
offshore_shapes.to_frame().to_file(snakemake.output.regions_offshore)

View File

@ -129,7 +129,7 @@ def copy_timeslice(load, cntry, start, stop, delta, fn_load=None):
load.loc[start:stop, cntry] = load.loc[
start - delta : stop - delta, cntry
].values
elif fn_load is not None:
elif fn_load is not None and cntry in load:
duration = pd.date_range(freq="h", start=start - delta, end=stop - delta)
load_raw = load_timeseries(fn_load, duration, [cntry])
load.loc[start:stop, cntry] = load_raw.loc[
@ -311,6 +311,8 @@ if __name__ == "__main__":
logger.info("Supplement missing data with synthetic data.")
fn = snakemake.input.synthetic
synthetic_load = pd.read_csv(fn, index_col=0, parse_dates=True)
# "UA" does not appear in synthetic load data
countries = list(set(countries) - set(["UA"]))
synthetic_load = synthetic_load.loc[snapshots, countries]
load = load.combine_first(synthetic_load)

View File

@ -139,7 +139,10 @@ def approximate_missing_eia_stats(eia_stats, runoff_fn, countries):
runoff.index = runoff.index.astype(int)
# fix outliers; exceptional floods in 1977-1979 in ES & PT
runoff.loc[1978, ["ES", "PT"]] = runoff.loc[1979, ["ES", "PT"]]
if "ES" in runoff:
runoff.loc[1978, "ES"] = runoff.loc[1979, "ES"]
if "PT" in runoff:
runoff.loc[1978, "PT"] = runoff.loc[1979, "PT"]
runoff_eia = runoff.loc[eia_stats.index]

View File

@ -135,6 +135,7 @@ import pypsa
import seaborn as sns
from _helpers import configure_logging, set_scenario_config, update_p_nom_max
from add_electricity import load_costs
from base_network import append_bus_shapes
from packaging.version import Version, parse
from pypsa.clustering.spatial import (
busmap_by_greedy_modularity,
@ -428,20 +429,27 @@ def clustering_for_n_clusters(
return clustering
def cluster_regions(busmaps, input=None, output=None):
def cluster_regions(busmaps, regions):
"""
Cluster regions based on busmaps and save the results to a file and to the
network.
Parameters:
- busmaps (list): A list of busmaps used for clustering.
- which (str): The type of regions to cluster.
Returns:
None
"""
busmap = reduce(lambda x, y: x.map(y), busmaps[1:], busmaps[0])
for which in ("regions_onshore", "regions_offshore"):
regions = gpd.read_file(getattr(input, which))
regions = regions.reindex(columns=["name", "geometry"]).set_index("name")
regions_c = regions.dissolve(busmap)
regions_c.index.name = "name"
regions_c = regions_c.reset_index()
regions_c.to_file(getattr(output, which))
regions = regions.reindex(columns=["name", "geometry"]).set_index("name")
regions_c = regions.dissolve(busmap)
regions_c.index.name = "name"
return regions_c.reset_index()
def plot_busmap_for_n_clusters(n, n_clusters, fn=None):
busmap = busmap_for_n_clusters(n, n_clusters)
def plot_busmap_for_n_clusters(n, n_clusters, solver_name="scip", fn=None):
busmap = busmap_for_n_clusters(n, n_clusters, solver_name)
cs = busmap.unique()
cr = sns.color_palette("hls", len(cs))
n.plot(bus_colors=busmap.map(dict(zip(cs, cr))))
@ -538,21 +546,25 @@ if __name__ == "__main__":
params.focus_weights,
)
update_p_nom_max(clustering.network)
nc = clustering.network
update_p_nom_max(nc)
if params.cluster_network.get("consider_efficiency_classes"):
labels = [f" {label} efficiency" for label in ["low", "medium", "high"]]
nc = clustering.network
nc.generators["carrier"] = nc.generators.carrier.replace(labels, "", regex=True)
clustering.network.meta = dict(
snakemake.config, **dict(wildcards=dict(snakemake.wildcards))
)
clustering.network.export_to_netcdf(snakemake.output.network)
for attr in (
"busmap",
"linemap",
): # also available: linemap_positive, linemap_negative
getattr(clustering, attr).to_csv(snakemake.output[attr])
cluster_regions((clustering.busmap,), snakemake.input, snakemake.output)
nc.shapes = n.shapes.copy()
for which in ["regions_onshore", "regions_offshore"]:
regions = gpd.read_file(snakemake.input[which])
clustered_regions = cluster_regions((clustering.busmap,), regions)
clustered_regions.to_file(snakemake.output[which])
append_bus_shapes(nc, clustered_regions, type=which.split("_")[1])
nc.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
nc.export_to_netcdf(snakemake.output.network)

View File

@ -97,7 +97,7 @@ def define_spatial(nodes, options):
spatial.gas.industry = nodes + " gas for industry"
spatial.gas.industry_cc = nodes + " gas for industry CC"
spatial.gas.biogas_to_gas = nodes + " biogas to gas"
spatial.gas.biogas_to_gas_cc = nodes + "biogas to gas CC"
spatial.gas.biogas_to_gas_cc = nodes + " biogas to gas CC"
else:
spatial.gas.nodes = ["EU gas"]
spatial.gas.locations = ["EU"]

View File

@ -1,108 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright 2023 Thomas Gilon (Climact)
# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
"""
This rule downloads the existing capacities from `IRENASTAT <https://www.irena.org/Data/Downloads/IRENASTAT>`_ and extracts it in the ``data/existing_capacities`` sub-directory.
**Relevant Settings**
.. code:: yaml
enable:
retrieve_irena:
.. seealso::
Documentation of the configuration file ``config.yaml`` at
:ref:`enable_cf`
**Outputs**
- ``data/existing_capacities``: existing capacities for offwind, onwind and solar
"""
import logging
import pandas as pd
from _helpers import configure_logging, set_scenario_config
logger = logging.getLogger(__name__)
REGIONS = [
"Albania",
"Austria",
"Belgium",
"Bosnia and Herzegovina",
"Bulgaria",
"Croatia",
"Czechia",
"Denmark",
"Estonia",
"Finland",
"France",
"Germany",
"Greece",
"Hungary",
"Ireland",
"Italy",
"Latvia",
"Lithuania",
"Luxembourg",
"Montenegro",
# "Netherlands",
"Netherlands (Kingdom of the)",
"North Macedonia",
"Norway",
"Poland",
"Portugal",
"Romania",
"Serbia",
"Slovakia",
"Slovenia",
"Spain",
"Sweden",
"Switzerland",
# "United Kingdom",
"United Kingdom of Great Britain and Northern Ireland (the)",
]
REGIONS_DICT = {
"Bosnia and Herzegovina": "Bosnia Herzg",
"Netherlands (Kingdom of the)": "Netherlands",
"United Kingdom of Great Britain and Northern Ireland (the)": "UK",
}
if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
snakemake = mock_snakemake("retrieve_irena")
configure_logging(snakemake)
set_scenario_config(snakemake)
irena_raw = pd.read_csv(
"https://pxweb.irena.org:443/sq/99e64b12-fe03-4a7b-92ea-a22cc3713b92",
skiprows=2,
index_col=[0, 1, 3],
encoding="latin-1",
)
var = "Installed electricity capacity (MW)"
irena = irena_raw[var].unstack(level=2).reset_index(level=1).replace(0, "")
irena = irena[irena.index.isin(REGIONS)]
irena.rename(index=REGIONS_DICT, inplace=True)
df_offwind = irena[irena.Technology.str.contains("Offshore")].drop(
columns=["Technology"]
)
df_onwind = irena[irena.Technology.str.contains("Onshore")].drop(
columns=["Technology"]
)
df_pv = irena[irena.Technology.str.contains("Solar")].drop(columns=["Technology"])
df_offwind.to_csv(snakemake.output["offwind"])
df_onwind.to_csv(snakemake.output["onwind"])
df_pv.to_csv(snakemake.output["solar"])

View File

@ -88,12 +88,14 @@ The rule :mod:`simplify_network` does up to four things:
import logging
from functools import reduce
import geopandas as gpd
import numpy as np
import pandas as pd
import pypsa
import scipy as sp
from _helpers import configure_logging, set_scenario_config, update_p_nom_max
from add_electricity import load_costs
from base_network import append_bus_shapes
from cluster_network import cluster_regions, clustering_for_n_clusters
from pypsa.clustering.spatial import (
aggregateoneport,
@ -207,7 +209,7 @@ def _compute_connection_costs_to_bus(
return connection_costs_to_bus
def _adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus, output):
def _adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus):
connection_costs = {}
for tech in connection_costs_to_bus:
tech_b = n.generators.carrier == tech
@ -228,14 +230,12 @@ def _adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus, out
)
)
connection_costs[tech] = costs
pd.DataFrame(connection_costs).to_csv(output.connection_costs)
def _aggregate_and_move_components(
n,
busmap,
connection_costs_to_bus,
output,
aggregate_one_ports={"Load", "StorageUnit"},
aggregation_strategies=dict(),
exclude_carriers=None,
@ -248,7 +248,7 @@ def _aggregate_and_move_components(
if not df.empty:
import_series_from_dataframe(n, df, c, attr)
_adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus, output)
_adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus)
generator_strategies = aggregation_strategies["generators"]
@ -281,7 +281,6 @@ def simplify_links(
length_factor,
p_max_pu,
exclude_carriers,
output,
aggregation_strategies=dict(),
):
## Complex multi-node links are folded into end-points
@ -406,7 +405,6 @@ def simplify_links(
n,
busmap,
connection_costs_to_bus,
output,
aggregation_strategies=aggregation_strategies,
exclude_carriers=exclude_carriers,
)
@ -419,7 +417,6 @@ def remove_stubs(
renewable_carriers,
length_factor,
simplify_network,
output,
aggregation_strategies=dict(),
):
logger.info("Removing stubs")
@ -436,7 +433,6 @@ def remove_stubs(
n,
busmap,
connection_costs_to_bus,
output,
aggregation_strategies=aggregation_strategies,
exclude_carriers=simplify_network["exclude_carriers"],
)
@ -556,7 +552,6 @@ if __name__ == "__main__":
params.length_factor,
params.p_max_pu,
params.simplify_network["exclude_carriers"],
snakemake.output,
params.aggregation_strategies,
)
@ -569,7 +564,6 @@ if __name__ == "__main__":
params.renewable_carriers,
params.length_factor,
params.simplify_network,
snakemake.output,
aggregation_strategies=params.aggregation_strategies,
)
busmaps.append(stub_map)
@ -610,6 +604,7 @@ if __name__ == "__main__":
n.lines.drop(remove, axis=1, errors="ignore", inplace=True)
if snakemake.wildcards.simpl:
shapes = n.shapes
n, cluster_map = cluster(
n,
int(snakemake.wildcards.simpl),
@ -619,14 +614,19 @@ if __name__ == "__main__":
params.simplify_network["feature"],
params.aggregation_strategies,
)
n.shapes = shapes
busmaps.append(cluster_map)
update_p_nom_max(n)
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
n.export_to_netcdf(snakemake.output.network)
busmap_s = reduce(lambda x, y: x.map(y), busmaps[1:], busmaps[0])
busmap_s.to_csv(snakemake.output.busmap)
cluster_regions(busmaps, snakemake.input, snakemake.output)
for which in ["regions_onshore", "regions_offshore"]:
regions = gpd.read_file(snakemake.input[which])
clustered_regions = cluster_regions(busmaps, regions)
clustered_regions.to_file(snakemake.output[which])
append_bus_shapes(n, clustered_regions, type=which.split("_")[1])
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
n.export_to_netcdf(snakemake.output.network)

View File

@ -159,6 +159,9 @@ def _add_land_use_constraint_m(n, planning_horizons, config):
current_horizon = snakemake.wildcards.planning_horizons
for carrier in ["solar", "onwind", "offwind-ac", "offwind-dc"]:
extendable_i = (n.generators.carrier == carrier) & n.generators.p_nom_extendable
n.generators.loc[extendable_i, "p_nom_min"] = 0
existing = n.generators.loc[n.generators.carrier == carrier, "p_nom"]
ind = list(
{i.split(sep=" ")[0] + " " + i.split(sep=" ")[1] for i in existing.index}
@ -180,6 +183,19 @@ def _add_land_use_constraint_m(n, planning_horizons, config):
sel_p_year
].rename(lambda x: x[:-4] + current_horizon)
# check if existing capacities are larger than technical potential
existing_large = n.generators[
n.generators["p_nom_min"] > n.generators["p_nom_max"]
].index
if len(existing_large):
logger.warning(
f"Existing capacities larger than technical potential for {existing_large},\
adjust technical potential to existing capacities"
)
n.generators.loc[existing_large, "p_nom_max"] = n.generators.loc[
existing_large, "p_nom_min"
]
n.generators.p_nom_max.clip(lower=0, inplace=True)