Merge branch 'master' into load-shedding-carrier

This commit is contained in:
Fabian Neumann 2022-06-24 20:19:37 +02:00 committed by GitHub
commit 2a55ad2162
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 23919 additions and 23168 deletions

1
.gitignore vendored
View File

@ -19,6 +19,7 @@ gurobi.log
/data
/data/links_p_nom.csv
/cutouts
/dask-worker-space
doc/_build

View File

@ -50,9 +50,9 @@ The dataset consists of:
- A grid model based on a modified [GridKit](https://github.com/bdw/GridKit)
extraction of the [ENTSO-E Transmission System
Map](https://www.entsoe.eu/data/map/). The grid model contains 6001 lines
Map](https://www.entsoe.eu/data/map/). The grid model contains 6763 lines
(alternating current lines at and above 220kV voltage level and all high
voltage direct current lines) and 3657 substations.
voltage direct current lines) and 3642 substations.
- The open power plant database
[powerplantmatching](https://github.com/FRESNA/powerplantmatching).
- Electrical demand time series from the

View File

@ -160,7 +160,7 @@ if config['enable'].get('build_cutout', False):
if config['enable'].get('retrieve_cutout', True):
rule retrieve_cutout:
input: HTTP.remote("zenodo.org/record/4709858/files/{cutout}.nc", keep_local=True, static=True)
input: HTTP.remote("zenodo.org/record/6382570/files/{cutout}.nc", keep_local=True, static=True)
output: "cutouts/{cutout}.nc"
run: move(input[0], output[0])
@ -201,19 +201,19 @@ rule build_renewable_profiles:
benchmark: "benchmarks/build_renewable_profiles_{technology}"
threads: ATLITE_NPROCESSES
resources: mem_mb=ATLITE_NPROCESSES * 5000
wildcard_constraints: technology="(?!hydro).*" # Any technology other than hydro
script: "scripts/build_renewable_profiles.py"
if 'hydro' in config['renewable'].keys():
rule build_hydro_profile:
input:
country_shapes='resources/country_shapes.geojson',
eia_hydro_generation='data/bundle/EIA_hydro_generation_2000_2014.csv',
cutout="cutouts/" + config["renewable"]['hydro']['cutout'] + ".nc"
output: 'resources/profile_hydro.nc'
log: "logs/build_hydro_profile.log"
resources: mem_mb=5000
script: 'scripts/build_hydro_profile.py'
rule build_hydro_profile:
input:
country_shapes='resources/country_shapes.geojson',
eia_hydro_generation='data/bundle/EIA_hydro_generation_2000_2014.csv',
cutout=f"cutouts/{config['renewable']['hydro']['cutout']}.nc" if "hydro" in config["renewable"] else "config['renewable']['hydro']['cutout'] not configured",
output: 'resources/profile_hydro.nc'
log: "logs/build_hydro_profile.log"
resources: mem_mb=5000
script: 'scripts/build_hydro_profile.py'
rule add_electricity:
@ -313,6 +313,8 @@ def memory(w):
break
if w.clusters.endswith('m'):
return int(factor * (18000 + 180 * int(w.clusters[:-1])))
elif w.clusters == "all":
return int(factor * (18000 + 180 * 4000))
else:
return int(factor * (10000 + 195 * int(w.clusters)))

View File

@ -17,7 +17,7 @@ scenario:
clusters: [5]
opts: [Co2L-24H]
countries: ['DE']
countries: ['BE']
clustering:
simplify:
@ -58,7 +58,7 @@ electricity:
atlite:
nprocesses: 4
cutouts:
europe-2013-era5-tutorial:
be-03-2013-era5:
module: era5
x: [4., 15.]
y: [46., 56.]
@ -66,7 +66,7 @@ atlite:
renewable:
onwind:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: wind
turbine: Vestas_V112_3MW
@ -83,7 +83,7 @@ renewable:
potential: simple # or conservative
clip_p_max_pu: 1.e-2
offwind-ac:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
@ -95,7 +95,7 @@ renewable:
potential: simple # or conservative
clip_p_max_pu: 1.e-2
offwind-dc:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
@ -108,7 +108,7 @@ renewable:
potential: simple # or conservative
clip_p_max_pu: 1.e-2
solar:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: pv
panel: CSi

View File

@ -1,6 +1,6 @@
# Unofficial ENTSO-E dataset processed by GridKit
This dataset was generated based on a map extract from May 25, 2018.
This dataset was generated based on a map extract from March 2022.
This is an _unofficial_ extract of the
[ENTSO-E interactive map](https://www.entsoe.eu/data/map/)
of the European power system (including to a limited extent North

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,7 @@
converter_id,bus0,bus1
6168,5442,5443
7290,6388,6389
2232,1837,1836
2349,1900,1902
2288,1869,1871
6342,5544,5545
2349,1900,1901
7484,6523,6524
2349,1901,1902

1 converter_id bus0 bus1
2 6168 2349 5442 1900 5443 1902
3 7290 2288 6388 1869 6389 1871
4 2232 6342 1837 5544 1836 5545
5 2349 1900 1901
6 7484 6523 6524
7 2349 1901 1902

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +1,63 @@
link_id,bus0,bus1,length,underground,under_construction,tags,geometry
5622,5,95,362337.247822072,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32523", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"SA", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(39.6360309199414 24.7771549364779,40.253906 27.059126,40.4982466187365 27.9539936298126)'
5995,1215,1217,11419.5508883069,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"36200", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"None", "symbol"=>"DC-Line", "country"=>"TR", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(26.680298 40.313043,26.5557438215552 40.3516481544774)'
14547,1261,1277,272366.529693327,f,f,,'LINESTRING(21.0892517161789 39.3174860744064,20.867157 39.426647,20.537567 39.544294,20.037689 39.647997,19.980011 39.678655,19.974518 39.748378,19.947052 39.807481,19.871521 39.834905,19.730072 39.852829,19.27002 39.898148,19.234314 39.900255,18.625946 39.932907,18.1732034663802 39.9781277204571)'
12997,1333,7276,92513.5411955304,f,f,,'LINESTRING(8.21673410679486 40.9126998173886,8.31665 40.979898,8.55560299999999 41.139365,9.04861499999999 41.276774,9.17007598089397 41.296762471629)'
5632,1361,2309,76847.0139826037,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32533", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"200", "symbol"=>"DC-Line", "country"=>"IT", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(8.67675371049727 40.6777653795244,9.03900099999999 40.979898,9.22164899999999 41.133159,9.19977299501706 41.2082924934473)'
5686,1406,1623,234733.218840324,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32590", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Rómulo", "symbol"=>"DC-Line", "country"=>"ES", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(2.48932993486183 39.561252379133,1.13159199999999 39.610978,0 39.710356,-0.234388957535875 39.7314420592468)'
14539,2077,2186,391819.608605717,f,t,,'LINESTRING(14.0986517070226 42.4133438660838,14.412689 42.431566,15.115814 42.363618,16.269379 42.067646,16.875 42.126747,16.962891 42.135913,18.531189 42.271212,18.7271798293119 42.3522936900005)'
12998,2190,7276,316517.539537871,f,f,,'LINESTRING(9.17009350125146 41.2967653544603,9.38095099999999 41.331451,9.858856 41.352072,10.70755 41.479776,11.25 41.448903,12.100067 41.432431,12.380219 41.426253,12.418671 41.401536,12.704315 41.347948,12.805939 41.368564,12.9016442293009 41.3921592955445)'
5621,2306,2307,24868.4258834249,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32521", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"FR", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.37679000208623 42.7053229039427,9.357605 42.552069,9.45054814341409 42.5389781005166)'
14545,2306,2310,103628.671904731,f,f,,'LINESTRING(9.37725891362686 42.7057449479108,9.79980499999999 42.799431,10.5931379465185 42.9693952059839)'
5631,2307,2308,130349.805131517,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32532", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"200", "symbol"=>"DC-Line", "country"=>"FR", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.45062783092712 42.538721099255,9.35348499999999 42.486277,9.385071 42.11758,9.13387617519614 41.4276065839255)'
5627,2308,7276,14773.4696528853,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32528", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"FR", "t9_code"=>"95.1.1", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.1338505292182 41.4269535813022,9.168091 41.303603,9.17008474107272 41.2967639130447)'
5628,2309,7276,11623.019620339,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32529", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"IT", "t9_code"=>"95.1.1", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.17008474107272 41.2967639130447,9.168091 41.303603,9.18319700000001 41.250968,9.1995514318356 41.2089447559651)'
14562,2403,2510,45367.7245799963,f,f,,'LINESTRING(2.98259070757654 42.2776059846425,2.90313700000001 42.397094,2.867432 42.467032,2.77404800000001 42.655172)'
14538,4622,4690,50206.4589537583,f,t,,'LINESTRING(6.43068069229957 50.8136946409214,6.020508 50.766865,5.925751 50.755572,5.73118285928413 50.7304278585398)'
14550,4882,4972,232745.802729813,f,f,,'LINESTRING(4.04528166772434 51.9611233898246,2.41561900000001 51.702353,0.794192405058928 51.4189824547604)'
14537,4885,4977,138366.495800613,f,t,,'LINESTRING(3.25699821065925 51.2773723094758,1.92947399999999 51.251601,1.27623412238205 51.2327009391635)'
14563,4887,4893,52725.5506558225,f,f,,'LINESTRING(1.75051314494826 50.9186901861196,1.43508900000001 50.970535,1.02353536683349 51.0370060560335)'
14542,5518,5723,49985.3600979311,t,f,,'LINESTRING(11.2853515176222 55.5308076825323,11.25 55.515415,11.185455 55.488191,11.134644 55.483523,10.735016 55.405629,10.5537191820378 55.3715610145456)'
14551,5540,5580,148283.118314702,t,f,,'LINESTRING(11.9669051857726 55.421747727341,12.087708 54.770593,12.13028 54.564896,12.236023 54.258807,12.267609 54.102086)'
5645,5567,7278,56022.9511788432,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32550", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Baltic Cable 400 kV", "symbol"=>"DC-Line", "country"=>"SE", "t9_code"=>"401.1.1", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(12.9299984288384 55.0630403498842,12.947388 55.077581,13.002319 55.155336,13.095703 55.379891,13.1752359988911 55.5447059797474)'
14560,5486,6227,223028.828051207,f,f,,'LINESTRING(16.861267 54.533833,16.274872 55.092515,16.022186 55.289283,15.37674 55.776573,14.8455441317166 56.1736465974452)'
5609,5630,3330,165019.269173818,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32508", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"BorWin 2", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.86000811621652 54.3820648628198,7.274323 54.290882,7.288055 53.860626,7.52975500000001 53.417717,7.454224 53.153359,7.39105200000001 53.107217)'
5646,5631,3330,157422.786637004,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32551", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"BorWin 1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.85179661058644 54.3229401608779,6.929626 54.324533,7.209778 54.266026,7.22213700000001 53.866295,7.46932999999999 53.399707,7.39105200000001 53.107217,7.38971611765728 53.0975905041478)'
12689,5634,7963,147059.541473767,f,t,,'LINESTRING(7.09421654321873 54.4442608229811,7.044983 54.388555,6.59042399999999 53.907574,6.64672900000001 53.683695,6.594543 53.59821,6.707153 53.530513,7.15458909584828 53.4027444956413)'
14561,5635,6886,155676.108968138,f,f,,'LINESTRING(9.32702542887196 53.9319881402015,9.06784100000001 54.038425,8.346863 54.26763,8.08181799999999 54.59355,7.88268999999999 54.8355,7.78817109722772 54.9221888624046)'
5658,5636,6886,90848.7767557952,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32562", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"HelWin 2", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(8.05753950747769 54.25154162105,8.20541400000001 54.23634,9.10354599999999 53.970628,9.32696419621539 53.9319113429646)'
5617,5637,6886,89346.6337548304,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32517", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"HelWin 1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(8.12610708224912 54.310749538123,8.238373 54.256401,9.32699442549698 53.9319562532009)'
5612,5638,5673,139209.866527364,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32512", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin 1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.84493115764205 53.880869,6.909027 53.880869,7.116394 53.835512,7.36358600000001 53.396432,7.32101399999999 53.112163,7.33612100000001 52.893992,7.16075117704058 52.8485079587114)'
5615,5639,8464,99066.5793764307,f,t,'"MW"=>"None", "TSO"=>"None", "oid"=>"32515", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin 3", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.84423599483409 53.8134043878533,6.71127300000001 53.693454,6.65634200000001 53.59821,6.73461900000001 53.55581,7.112274 53.45126,7.05596900000001 53.340713,7.237244 53.26932,7.223511 53.18135,7.223511 53.1805270078955)'
14540,5645,5687,280301.445474794,f,t,,'LINESTRING(6.75668661933496 53.437616158174,6.838989 53.664171,6.96258499999999 53.785238,7.34298700000001 53.882488,7.80029300000001 54.517096,8.20678699999999 55.297102,8.86005375885099 55.4336013425692)'
14558,5643,6237,575352.425009444,f,f,,'LINESTRING(6.83036734046461 53.4374933986115,6.253967 53.645452,6.33636499999999 55.776573,6.34597800000001 56.029855,6.34597800000001 56.030622,6.43661500000001 58.130121,6.90176957000565 58.2653404287817)'
5613,5662,5673,131420.09609615,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32513", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin 2", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(7.11083415172816 53.9630966319811,7.07107499999999 53.80795,7.301788 53.39807,7.267456 53.110514,7.29354899999999 52.907246,7.16070024970726 52.8485606886388)'
14584,5739,6232,574884.998052791,f,t,,'LINESTRING(6.81690675921544 58.6338502746805,6.63024900000001 58.249559,6.78268399999999 57.579197,7.17544599999999 56.532986,7.17407200000001 56.5345,7.46521000000001 55.776573,7.46521000000001 55.776573,7.64099100000001 55.312736,8.458099 54.316523,9.394684 53.934262)'
5626,5773,5951,59184.4227659405,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32527", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"222.1.2", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-4.94702447012386 55.0727948492206,-5.137482 55.042188,-5.62500000000001 54.890036,-5.631866 54.887667,-5.7332134509551 54.813550429852)'
5625,5773,5951,58741.4601812995,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32526", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"222.1.1", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-4.94689333475508 55.0726735779237,-5.045471 55.009914,-5.59616099999999 54.840245,-5.62500000000001 54.834709,-5.73306677066227 54.8134313531551)'
8068,5777,5816,363085.503577327,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"70191", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Western HVDC link", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-3.18595885129092 53.213699479605,-3.158569 53.308724,-3.40988200000001 53.511735,-4.081421 53.803084,-5.158081 54.013418,-5.28442399999999 54.866334,-5.177307 55.345546,-4.88616899999999 55.586883,-4.8806877889882 55.7044245716822)'
14552,5817,5965,242400.41935291,f,f,,'LINESTRING(-3.12293971810515 53.2087645354697,-3.13934300000001 53.266034,-3.368683 53.377594,-5.18280000000001 53.495399,-5.62500000000001 53.519084,-5.62500000000001 53.519084,-6.101532 53.503568,-6.61057668606004 53.483977180569)'
14541,5829,6547,695432.776022422,f,t,,'LINESTRING(6.64773945778347 59.5995729910866,6.483307 59.539192,6.374817 59.538495,6.24847399999999 59.510636,6.196289 59.448566,5.898285 59.321981,5.64697299999999 59.234284,5.62500000000001 59.223042,4.81338500000001 58.813742,2.03384400000001 57.374679,0 56.170023,-0.650940000000012 55.776573,-1.55838055228731 55.2221613174321)'
5681,6177,6224,93313.2906756649,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32585", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"150", "symbol"=>"DC-Line", "country"=>"SE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(18.2272491895352 57.5711315582343,17.274628 57.645401,16.875 57.674052,16.6818074486274 57.692364166947)'
14531,6187,6290,122935.90852816,f,f,,'LINESTRING(12.0227887239052 57.5613889668514,11.56723 57.399104,11.25 57.282754,11.174469 57.255281,11.001434 57.197296,10.740509 57.15263,10.578461 57.16678,10.366974 57.123569,10.2163571716117 57.1310010356663)'
14556,6187,6290,122337.134741418,f,f,,'LINESTRING(10.2163282994747 57.1311139024238,10.567474 57.20771,10.737762 57.192832,10.972595 57.230016,11.25 57.33171,11.532898 57.436081,11.867981 57.556366,12.0227165657676 57.561507168045)'
14543,6215,6219,231949.272290748,t,f,,'LINESTRING(13.5805221045065 55.8609194660763,13.8414 57.218121,14.543152 57.740083,14.6252826086631 57.7992163579132)'
11511,6241,6241,5210.95506577122,f,f,,'LINESTRING(8.1598074770784 58.2085243278292,8.10270452292159 58.2443198548829)'
14559,6241,6271,221531.577587461,t,f,,'LINESTRING(9.55911260232728 56.517221415454,9.31778000000001 56.610909,9.37408399999999 56.871495,9.14611800000001 57.139965,9.13650499999999 57.15263,8.728638 57.517298,8.728638 57.51656,8.072205 58.088041,8.10237170729511 58.2442659573338)'
14564,6241,6271,210556.812324662,f,f,,'LINESTRING(9.5593768244562 56.5173195981253,9.503174 56.649432,9.540253 56.875247,9.35348499999999 57.103436,9.27932699999999 57.19804,8.83300799999999 57.593919,8.26446499999999 58.085137,8.1602778860472 58.2081284789676)'
14546,6241,6271,212662.44654471,f,f,,'LINESTRING(9.5592153675061 56.5172786524048,9.408417 56.631308,9.456482 56.875247,9.27108800000001 57.092992,9.20654300000001 57.172736,8.779449 57.554155,8.143616 58.107636,8.16005655183257 58.2081093636119)'
14553,6430,6440,122361.767586768,f,f,,'LINESTRING(26.4769584465578 59.4850679251882,26.423492 59.613602,26.048584 59.92956,25.632477 60.272515,25.743713 60.360243,25.6409589827655 60.4394217635504)'
14555,6449,6481,257364.279393886,f,f,,'LINESTRING(21.3559064590049 61.0800030227353,21.303864 61.005076,20.946808 60.801394,18.153534 60.501202,18.007965 60.483615,17.171631 60.503906,17.0593630437863 60.5503864910584)'
14554,6452,6481,197128.229552834,f,f,,'LINESTRING(21.3557421230034 61.0800501553429,20.902863 60.846249,18.224945 60.556604,18.0193872312079 60.533018071939)'
14548,6483,6486,140169.735736189,f,f,,'LINESTRING(22.3045576957813 60.4368452717433,21.404114 60.329667,19.8472351583549 60.129935739173)'
8456,6547,6559,21158.5735245602,f,t,'"MW"=>"None", "TSO"=>"None", "oid"=>"89791", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"None", "symbol"=>"DC-Line", "country"=>"NO", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.64851407057135 59.5996162767494,6.99238592942864 59.5246589234811)'
5614,5673,8464,38561.1931761179,f,t,'"MW"=>"None", "TSO"=>"None", "oid"=>"32514", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin 3", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(7.223511 53.1805270078955,7.223511 53.179704,7.21527100000001 53.121229,7.24273699999999 52.932086,7.16056753068224 52.8486333236236)'
14549,6916,7278,192679.375330137,f,f,,'LINESTRING(10.883331 53.950429,11.25 54.062612,11.25 54.062612,11.657867 54.186548,12.208557 54.386955,12.236023 54.402946,12.43515 54.541003,12.602692 54.684153,12.745514 54.844199,12.744141 54.842618,12.87735 54.979978,12.947388 55.077581,12.9299984288384 55.0630403498842)'
12690,6934,7963,6905.52230262641,f,t,,'LINESTRING(7.15460523215685 53.4027398808691,7.24823000000001 53.375956)'
5577,5,94,362337.247822072,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32523", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"SA", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(39.6360309199414 24.7771549364779,40.253906 27.059126,40.4982466187365 27.9539936298126)'
5946,1231,1233,11419.5508883069,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"36200", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"None", "symbol"=>"DC-Line", "country"=>"TR", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"1.487925895e+12", "DeletedDate"=>"None", "ModifiedDate"=>"1.48895783e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(26.680298 40.313043,26.5557438215552 40.3516481544774)'
14811,1278,1294,272366.529693327,f,f,,'LINESTRING(21.0892517161789 39.3174860744064,20.867157 39.426647,20.537567 39.544294,20.037689 39.647997,19.980011 39.678655,19.974518 39.748378,19.947052 39.807481,19.871521 39.834905,19.730072 39.852829,19.27002 39.898148,19.234314 39.900255,18.625946 39.932907,18.1732034663802 39.9781277204571)'
13588,1349,7428,92513.5411955304,f,f,,'LINESTRING(8.21673410679486 40.9126998173886,8.31665 40.979898,8.55560299999999 41.139365,9.04861499999999 41.276774,9.17007598089397 41.296762471629)'
5587,1377,2382,76847.0139826037,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32533", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"200", "symbol"=>"DC-Line", "country"=>"IT", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(8.67675371049727 40.6777653795244,9.03900099999999 40.979898,9.22164899999999 41.133159,9.19977299501706 41.2082924934473)'
5640,1422,1638,234733.218840324,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32590", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Rómulo", "symbol"=>"DC-Line", "country"=>"ES", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(2.48932993486183 39.561252379133,1.13159199999999 39.610978,0 39.710356,-0.234388957535875 39.7314420592468)'
13589,2262,7428,316517.539537871,f,f,,'LINESTRING(9.17009350125146 41.2967653544603,9.38095099999999 41.331451,9.858856 41.352072,10.70755 41.479776,11.25 41.448903,12.100067 41.432431,12.380219 41.426253,12.418671 41.401536,12.704315 41.347948,12.805939 41.368564,12.9016442293009 41.3921592955445)'
14802,2258,7029,391819.608605717,f,t,,'LINESTRING(14.0986517070226 42.4133438660838,14.412689 42.431566,15.115814 42.363618,16.269379 42.067646,16.875 42.126747,16.962891 42.135913,18.531189 42.271212,18.7271798293119 42.3522936900005)'
14668,2333,3671,146536.932669904,f,t,,'LINESTRING(6.04271995139229 45.4637174756646,6.16607700000001 45.327048,6.351471 45.183973,6.54922499999999 45.148148,6.62338299999999 45.101638,6.642609 45.089036,6.70440700000001 45.05121,6.980438 45.089036,7.00653099999999 45.092914,7.21939099999999 45.094853,7.223511 45.089036,7.378693 44.871443,7.32136143270145 44.8385424366672)'
14808,2379,2383,103628.671904731,f,f,,'LINESTRING(9.37725891362686 42.7057449479108,9.79980499999999 42.799431,10.5931379465185 42.9693952059839)'
5575,2379,2380,24868.4258834249,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32521", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"FR", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.37679000208623 42.7053229039427,9.357605 42.552069,9.45054814341409 42.5389781005166)'
5586,2380,2381,130349.805131517,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32532", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"200", "symbol"=>"DC-Line", "country"=>"FR", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.45062783092712 42.538721099255,9.35348499999999 42.486277,9.385071 42.11758,9.13387617519614 41.4276065839255)'
5582,2381,7428,14773.4696528853,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32528", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"FR", "t9_code"=>"FR-IT-01", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.555318236e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.1338505292182 41.4269535813022,9.168091 41.303603,9.17008474107272 41.2967639130447)'
5583,2382,7428,11623.019620339,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32529", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"IT", "t9_code"=>"FR-IT-01", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.555323123e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(9.17008474107272 41.2967639130447,9.168091 41.303603,9.18319700000001 41.250968,9.1995514318356 41.2089447559651)'
14825,2476,2585,45367.7245799963,f,f,,'LINESTRING(2.98259070757654 42.2776059846425,2.90313700000001 42.397094,2.867432 42.467032,2.77404800000001 42.655172)'
8745,3611,8302,9361.61122972312,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"120591", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"None", "symbol"=>"DC-Line", "country"=>"CH", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"1", "CreatedDate"=>"1.556535027e+12", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(7.95410166666667 47.5542867377085,7.928009 47.555214,7.937622 47.526475,7.96895162362761 47.4961125343931)'
14801,4709,4781,50206.4589537583,f,t,,'LINESTRING(6.43068069229957 50.8136946409214,6.020508 50.766865,5.925751 50.755572,5.73118285928413 50.7304278585398)'
14814,4972,5062,232745.802729813,f,f,,'LINESTRING(4.04528166772434 51.9611233898246,2.41561900000001 51.702353,0.794192405058928 51.4189824547604)'
5558,4975,7427,45665.1050240866,f,t,'"MW"=>"None", "TSO"=>"None", "oid"=>"32502", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>" BE-UK-01", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.555407949e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(1.92947399999999 51.251601,1.27623412238205 51.2327009391635)'
14826,4977,4983,52725.5506558225,f,f,,'LINESTRING(1.75051314494826 50.9186901861196,1.43508900000001 50.970535,1.02353536683349 51.0370060560335)'
12727,5071,7427,92700.7652335474,t,f,,'LINESTRING(3.25699821065925 51.2773723094758,1.9294829557868 51.251601173908)'
14820,5605,6355,388691.281442629,f,f,,'LINESTRING(21.2350493599337 55.6649551399923,21.220093 55.641174,21.122589 55.631872,20.210724 55.776573,19.114838 55.949969,18.491364 55.974567,16.875 56.109576,16.875 56.109576,16.292725 56.158553,15.545654 56.647167)'
14805,5624,5847,49985.3600979311,t,f,,'LINESTRING(11.2853515176222 55.5308076825323,11.25 55.515415,11.185455 55.488191,11.134644 55.483523,10.735016 55.405629,10.5537191820378 55.3715610145456)'
14824,5646,5685,148283.118314702,f,f,,'LINESTRING(11.9669051857726 55.421747727341,12.087708 54.770593,12.13028 54.564896,12.236023 54.258807,12.267609 54.102086)'
5601,5673,7430,56022.9511788432,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32550", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Baltic Cable 400 kV", "symbol"=>"DC-Line", "country"=>"SE", "t9_code"=>"DE-SE-01", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.555402087e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(12.9299984288384 55.0630403498842,12.947388 55.077581,13.002319 55.155336,13.095703 55.379891,13.1752359988911 55.5447059797474)'
14823,5588,6351,223028.828051207,f,f,,'LINESTRING(16.861267 54.533833,16.274872 55.092515,16.022186 55.289283,15.37674 55.776573,14.8455441317166 56.1736465974452)'
5564,5736,5784,165019.269173818,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32508", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"BorWin2", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224178e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.86000811621652 54.3820648628198,7.274323 54.290882,7.288055 53.860626,7.52975500000001 53.417717,7.454224 53.153359,7.39105200000001 53.107217)'
5602,5737,5784,157422.786637004,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32551", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"BorWin1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224172e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.85179661058644 54.3229401608779,6.929626 54.324533,7.209778 54.266026,7.22213700000001 53.866295,7.46932999999999 53.399707,7.39105200000001 53.107217,7.38971611765728 53.0975905041478)'
12931,5740,8153,147059.541473767,f,t,,'LINESTRING(7.09421654321873 54.4442608229811,7.044983 54.388555,6.59042399999999 53.907574,6.64672900000001 53.683695,6.594543 53.59821,6.707153 53.530513,7.15458909584828 53.4027444956413)'
5625,5741,7074,155612.70583537,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32573", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"SylWin1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.549874782e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(7.78813124671178 54.9221766212277,8.346863 54.26763,9.06784100000001 54.038425,9.32702542887196 53.9319881402015)'
5613,5742,7074,90848.7767557952,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32562", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"HelWin2", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224095e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(8.05753950747769 54.25154162105,8.20541400000001 54.23634,9.10354599999999 53.970628,9.32696419621539 53.9319113429646)'
5571,5743,7074,89346.6337548304,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32517", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"HelWin1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224101e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(8.12610708224912 54.310749538123,8.238373 54.256401,9.32699442549698 53.9319562532009)'
5567,5744,5787,139209.866527364,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32512", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin1", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224147e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.84493115764205 53.880869,6.909027 53.880869,7.116394 53.835512,7.36358600000001 53.396432,7.32101399999999 53.112163,7.33612100000001 52.893992,7.16075117704058 52.8485079587114)'
5570,5745,8272,99066.5793764307,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32515", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin3", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224133e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.84423599483409 53.8134043878533,6.71127300000001 53.693454,6.65634200000001 53.59821,6.73461900000001 53.55581,7.112274 53.45126,7.05596900000001 53.340713,7.237244 53.26932,7.223511 53.18135,7.223511 53.1805270078955)'
14803,5751,5803,280301.445474794,f,t,,'LINESTRING(6.75668661933496 53.437616158174,6.838989 53.664171,6.96258499999999 53.785238,7.34298700000001 53.882488,7.80029300000001 54.517096,8.20678699999999 55.297102,8.86005375885099 55.4336013425692)'
14821,5749,6363,575352.425009444,f,f,,'LINESTRING(6.83036734046461 53.4374933986115,6.253967 53.645452,6.33636499999999 55.776573,6.34597800000001 56.029855,6.34597800000001 56.030622,6.43661500000001 58.130121,6.90176957000565 58.2653404287817)'
5568,5768,5787,131420.09609615,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32513", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin2", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.545224159e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(7.11083415172816 53.9630966319811,7.07107499999999 53.80795,7.301788 53.39807,7.267456 53.110514,7.29354899999999 52.907246,7.16070024970726 52.8485606886388)'
12932,5770,5773,6905.52230262641,f,t,,'LINESTRING(7.15460523215685 53.4027398808691,7.24823000000001 53.375956)'
14848,5858,6358,574884.998052791,f,t,,'LINESTRING(6.81690675921544 58.6338502746805,6.63024900000001 58.249559,6.78268399999999 57.579197,7.17544599999999 56.532986,7.17407200000001 56.5345,7.46521000000001 55.776573,7.46521000000001 55.776573,7.64099100000001 55.312736,8.458099 54.316523,9.394684 53.934262)'
5581,5893,6072,59184.4227659405,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32527", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"222.1.2", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-4.94702447012386 55.0727948492206,-5.137482 55.042188,-5.62500000000001 54.890036,-5.631866 54.887667,-5.7332134509551 54.813550429852)'
5580,5893,6072,58741.4601812995,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32526", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>" ", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"222.1.1", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"1", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-4.94689333475508 55.0726735779237,-5.045471 55.009914,-5.59616099999999 54.840245,-5.62500000000001 54.834709,-5.73306677066227 54.8134313531551)'
8009,5897,5936,363085.503577327,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"70191", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Western HVDC link", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"1.514994622e+12", "DeletedDate"=>"None", "ModifiedDate"=>"1.51499467e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-3.18595885129092 53.213699479605,-3.158569 53.308724,-3.40988200000001 53.511735,-4.081421 53.803084,-5.158081 54.013418,-5.28442399999999 54.866334,-5.177307 55.345546,-4.88616899999999 55.586883,-4.8806877889882 55.7044245716822)'
14815,5937,6086,242400.41935291,f,f,,'LINESTRING(-3.12293971810515 53.2087645354697,-3.13934300000001 53.266034,-3.368683 53.377594,-5.18280000000001 53.495399,-5.62500000000001 53.519084,-5.62500000000001 53.519084,-6.101532 53.503568,-6.61057668606004 53.483977180569)'
14804,5949,6684,695432.776022422,f,t,,'LINESTRING(6.64773945778347 59.5995729910866,6.483307 59.539192,6.374817 59.538495,6.24847399999999 59.510636,6.196289 59.448566,5.898285 59.321981,5.64697299999999 59.234284,5.62500000000001 59.223042,4.81338500000001 58.813742,2.03384400000001 57.374679,0 56.170023,-0.650940000000012 55.776573,-1.55838055228731 55.2221613174321)'
5635,6300,6348,93313.2906756649,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"32585", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"150", "symbol"=>"DC-Line", "country"=>"SE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(18.2272491895352 57.5711315582343,17.274628 57.645401,16.875 57.674052,16.6818074486274 57.692364166947)'
14819,6311,6416,122337.134741418,f,f,,'LINESTRING(10.2163282994747 57.1311139024238,10.567474 57.20771,10.737762 57.192832,10.972595 57.230016,11.25 57.33171,11.532898 57.436081,11.867981 57.556366,12.0227165657676 57.561507168045)'
14809,6311,6416,122935.90852816,f,f,,'LINESTRING(10.2163571716117 57.1310010356663,10.366974 57.123569,10.578461 57.16678,10.740509 57.15263,11.001434 57.197296,11.174469 57.255281,11.25 57.282754,11.56723 57.399104,12.0227887239052 57.5613889668514)'
14806,6339,6343,231949.324357763,t,f,,'LINESTRING(13.5805221045065 55.8609194660763,13.8414 57.218121,14.242401 57.518035,14.543152 57.740083,14.6252826086631 57.7992163579132)'
14822,6366,6396,221531.577587461,t,f,,'LINESTRING(9.55911260232728 56.517221415454,9.31778000000001 56.610909,9.37408399999999 56.871495,9.14611800000001 57.139965,9.13650499999999 57.15263,8.728638 57.517298,8.728638 57.51656,8.072205 58.088041,8.10237170729511 58.2442659573338)'
11679,6366,6366,5210.95506577122,f,f,,'LINESTRING(8.1598074770784 58.2085243278292,8.10270452292159 58.2443198548829)'
14827,6366,6396,210556.812324662,f,f,,'LINESTRING(9.5593768244562 56.5173195981253,9.503174 56.649432,9.540253 56.875247,9.35348499999999 57.103436,9.27932699999999 57.19804,8.83300799999999 57.593919,8.26446499999999 58.085137,8.1602778860472 58.2081284789676)'
14810,6366,6396,212662.44654471,f,f,,'LINESTRING(9.5592153675061 56.5172786524048,9.408417 56.631308,9.456482 56.875247,9.27108800000001 57.092992,9.20654300000001 57.172736,8.779449 57.554155,8.143616 58.107636,8.16005655183257 58.2081093636119)'
8708,6444,6449,146493.574370529,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"115391", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Caithness Moray HVDC", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"1.550153418e+12", "DeletedDate"=>"None", "ModifiedDate"=>"1.550153457e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-3.45338156475634 58.4908032474467,-3.00064100000001 58.470721,-3.239594 58.019737,-3.01171670865558 57.4230098547791)'
8706,6445,6449,81229.3870806789,f,f,'"MW"=>"None", "TSO"=>"None", "oid"=>"115000", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"Caithness Moray HVDC", "symbol"=>"DC-Line", "country"=>"UK", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"1.550153227e+12", "DeletedDate"=>"None", "ModifiedDate"=>"1.550153468e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(-3.01162654963074 57.4230148179161,-3.01025445036928 58.1523540206105)'
14807,6556,6558,91438.6141819039,f,f,,'LINESTRING(24.597015 59.388479,24.514618 59.41015,24.44046 59.58928,24.505005 59.752936,24.503632 59.751553,24.6559859237295 60.1665725262589)'
14816,6567,6577,122361.767586768,f,f,,'LINESTRING(26.4769584465578 59.4850679251882,26.423492 59.613602,26.048584 59.92956,25.632477 60.272515,25.743713 60.360243,25.6409589827655 60.4394217635504)'
14818,6586,6618,257364.279393886,f,f,,'LINESTRING(21.3559064590049 61.0800030227353,21.303864 61.005076,20.946808 60.801394,18.153534 60.501202,18.007965 60.483615,17.171631 60.503906,17.0593630437863 60.5503864910584)'
14817,6589,6618,197128.229552834,f,f,,'LINESTRING(21.3557421230034 61.0800501553429,20.902863 60.846249,18.224945 60.556604,18.0193872312079 60.533018071939)'
14812,6620,6623,140169.735736189,f,f,,'LINESTRING(22.3045576957813 60.4368452717433,21.404114 60.329667,19.8472351583549 60.129935739173)'
8394,6684,6696,21158.5735245602,f,t,'"MW"=>"None", "TSO"=>"None", "oid"=>"89791", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"None", "symbol"=>"DC-Line", "country"=>"NO", "t9_code"=>"None", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"1.518010133e+12", "DeletedDate"=>"None", "ModifiedDate"=>"None", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(6.64851407057135 59.5996162767494,6.99238592942864 59.5246589234811)'
5569,5787,8272,38561.1931761179,f,t,'"MW"=>"None", "TSO"=>"None", "oid"=>"32514", "ext1"=>"None", "EIC_2"=>"None", "EIC_3"=>"None", "EIC_4"=>"None", "text_"=>"DolWin 3", "symbol"=>"DC-Line", "country"=>"DE", "t9_code"=>"0", "visible"=>"1", "EIC_code"=>"None", "tie_line"=>"0", "oneCircuit"=>"0", "CreatedDate"=>"None", "DeletedDate"=>"None", "ModifiedDate"=>"1.489072219e+12", "Internalcomments"=>"None", "visible_on_printed"=>"1"','LINESTRING(7.223511 53.1805270078955,7.223511 53.179704,7.21527100000001 53.121229,7.24273699999999 52.932086,7.16056753068224 52.8486333236236)'
14813,7053,7430,192856.020480538,f,f,,'LINESTRING(10.8823542109264 53.948125809387,11.25 54.061,11.657867 54.186548,12.208557 54.386955,12.236023 54.402946,12.43515 54.541003,12.602692 54.684153,12.745514 54.844199,12.744141 54.842618,12.87735 54.979978,12.947388 55.077581,12.9299984288384 55.0630403498842)'

Can't render this file because it contains an unexpected character in line 2 and column 33.

File diff suppressed because it is too large Load Diff

View File

@ -1,45 +1,58 @@
Link:
p_nom:
oid:
"32551": 400 # BorWin 1
"32508": 800 # BorWin 2
"32508": 400 #BorWin1
"32513": 900 # DolWin 2
"32515": 900 # DolWin 3
"32517": 576 # HelWin 1
"32526": 250 # GB-IE
"32527": 250 # GB-IE
"32532": 300 # Links on Corse
"32528": 300 # Links on Corse
"32521": 300 # Links on Corse
"32529": 300 # SACOI (between Sardignia and Corse)
"32533": 300 # SACOI (between Sardignia and Corse)
"32529": 300 # SACOI (between Sardinia and Corse)
"32533": 300 # SACOI (between Sardinia and Corse)
"32550": 600 # Baltic
"115391": 1200 # Caithness Moray HVDC
"115000": 1200 # Caithness Moray HVDC
index:
"14541": 1400 # North-Sea link (NSN Link)
"14559": 700 # NO-DK Skagerrak 4
"14564": 440 # NO-DK Skagerrak 3
"14546": 500 # NO-DK Skagerrak 1-2
"11511": 940 # NO-DK Skagerrak joint 1-3
"14543": 1440 # SE-SE
"14531": 250 # Konti-Skan
"14540": 700 # Cobra DK-NL
"14537": 1000 # NEMO GB-BE
"14538": 1000 # ALEGrO BE-DE
"14556": 600 # Storebaelt
"12997": 1000 # Sardignia
"14804": 1400 # North-Sea link (NSN Link)
"14822": 700 # NO-DK Skagerrak 4
"14827": 440 # NO-DK Skagerrak 3
"14810": 500 # NO-DK Skagerrak 1-2
"11679": 940 # NO-DK Skagerrak joint 1-3
"14806": 1440 # SE-SE
"14819": 250 # Hassing-Lindome
"14803": 700 # Cobra DK-NL
"T6": 1000 # NEMO GB-BE
"14801": 1000 # ALEGrO BE-DE
"14807": 600 # SwePol
"14820": 700 #NordBalt
bus0:
index:
"8708": "6443" # fix bus-id of substation in GB
"8009": "5896" # fix bus-id of substation in GB
"11679": "6365" # fix bus-id of substation in NO
"12727": "7427" # bus0 == bus1 to remove link in remove_unconnected_components (GB-BE)
"5558": "7427" # bus0 == bus1 to remove link in remove_unconnected_components (GB-BE)
"5583": "7428" # bus0 == bus1 to remove link in remove_unconnected_components (Sardinia)
"13588": "7428" # bus0 == bus1 to remove link in remove_unconnected_components (Sardinia)
"T23": "6355" # bus0 == bus1 to remove link in remove_unconnected_components (NordBalt)
bus1:
index:
"11511": "6240" # fix wrong bus allocation from 6241
"14559": "6240" # fix wrong bus allocation from 6241
"12998": "1333" # combine link 12998 + 12997 in 12998
"5627": '2309' # combine link 5627 + 5628 in 5627
"8068": "5819" # fix GB location of Anglo-Scottish interconnector
length:
"12931": "8152" # BorWin3
"5582": "2382" # combine link 5583 + 5582 in 5582 (Sardinia)
"13589": "1349" # combine link 13589 + 13588 in 13589 (Sardinia)
"14820": "6354" # NordBalt
length:
index:
"12998": 409.0
"5627": 26.39
bus0:
index:
"14552": "5819" # fix GB location of GB-IE interconnector
"5628": "7276" # bus0 == bus1 to remove link in remove_unconnected_components
"12997": "7276" # bus0 == bus1 to remove link in remove_unconnected_components
"5582": 26.39 # new length of combined links (sum)
"13589": 509.0 # new length of combined links (sum)
Line:
bus1:
index:
"14573": "7950" #fix bus-id substation in PT (220/380kV issue)
bus0:
index:
"14573": "7179" #fix bus-id substation in PT (220/380kV issue)
v_nom:
index:
"14573": 220 # 220/380kV issue of substation in PT

View File

@ -6,7 +6,7 @@ logging,,,
-- format,--,"","Custom format for log messages. See `LogRecord <https://docs.python.org/3/library/logging.html#logging.LogRecord>`_ attributes."
summary_dir,--,"e.g. 'results'","Directory into which results are written."
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'}","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."
focus_weights,--,"Keys should be two-digit country codes (e.g. DE) and values should range between 0 and 1","Ratio of total clusters for particular countries. the remaining weight is distributed according to mean load. An example: ``focus_weights: DE: 0.6 FR: 0.2``."
focus_weights,--,"Keys should be two-digit country codes (e.g. DE) and values should range between 0 and 1","Ratio of total clusters for particular countries. the remaining weight is distributed according to mean load. An example: ``focus_weights: 'DE': 0.6 'FR': 0.2``."
enable,,,
-- prepare_links_p_nom,bool,"{true, false}","Switch to retrieve current HVDC projects from `Wikipedia <https://en.wikipedia.org/wiki/List_of_HVDC_projects>`_"
-- 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."

1 Unit Values Description
6 -- format -- Custom format for log messages. See `LogRecord <https://docs.python.org/3/library/logging.html#logging.LogRecord>`_ attributes.
7 summary_dir -- e.g. 'results' Directory into which results are written.
8 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'} 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.
9 focus_weights -- Keys should be two-digit country codes (e.g. DE) and values should range between 0 and 1 Ratio of total clusters for particular countries. the remaining weight is distributed according to mean load. An example: ``focus_weights: DE: 0.6 FR: 0.2``. Ratio of total clusters for particular countries. the remaining weight is distributed according to mean load. An example: ``focus_weights: 'DE': 0.6 'FR': 0.2``.
10 enable
11 -- prepare_links_p_nom bool {true, false} Switch to retrieve current HVDC projects from `Wikipedia <https://en.wikipedia.org/wiki/List_of_HVDC_projects>`_
12 -- 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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
doc/img/synchronisation.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

View File

@ -7,6 +7,40 @@
Release Notes
##########################################
Synchronisation Release - Ukraine and Moldova (17th March 2022)
===============================================================
On March 16, 2022, the transmission networks of Ukraine and Moldova have
successfully been `synchronised with the continental European grid <https://www.entsoe.eu/news/2022/03/16/continental-europe-successful-synchronisation-with-ukraine-and-moldova-power-systems/>`_. We have taken
this as an opportunity to add the power systems of Ukraine and Moldova to
PyPSA-Eur. This includes:
.. image:: img/synchronisation.png
:width: 500
* the transmission network topology from the `ENTSO-E interactive map <https://www.entsoe.eu/data/map/>`_.
* existing power plants (incl. nuclear, coal, gas and hydro) from the `powerplantmatching <https://github.com/fresna/powerplantmatching>`_ tool
* country-level load time series from ENTSO-E through the `OPSD platform <https://data.open-power-system-data.org/time_series/2020-10-06>`_, which are then distributed heuristically to substations by GDP and population density.
* wind and solar profiles based on ERA5 and SARAH-2 weather data
* hydro profiles based on historical `EIA generation data <https://www.eia.gov/international/data/world>`_
* a simplified calculation of wind and solar potentials based on the `Copernicus Land Cover dataset <https://land.copernicus.eu/global/products/lc>`_.
* electrical characteristics of 750 kV transmission lines
The Crimean power system is currently disconnected from the main Ukrainian grid and, hence, not included.
This release is not on the ``master`` branch. It can be used with
.. code-block:: bash
git clone https://github.com/pypsa/pypsa-eur
git checkout synchronisation-release
Upcoming Release
================
@ -26,6 +60,20 @@ Upcoming Release
* Network building is made deterministic by supplying a fixed random state to network clustering routines.
* New network topology extracted from the ENTSO-E interactive map.
* The unused argument ``simple_hvdc_costs`` in :mod:`add_electricity` was removed.
* Iterative solving with impedance updates is skipped if there are no expandable lines.
* Switch from Germany to Belgium for continuous integration and tutorial to save resources.
* Use updated SARAH-2 and ERA5 cutouts with slightly wider scope to east and additional variables.
* Fix crs bug. Change crs 4236 to 4326.
* Update rasterio version to correctly calculate exclusion raster
PyPSA-Eur 0.4.0 (22th September 2021)
=====================================
@ -68,7 +116,7 @@ PyPSA-Eur 0.4.0 (22th September 2021)
[`#261 <https://github.com/PyPSA/pypsa-eur/pull/261>`_].
* The tutorial cutout was renamed from ``cutouts/europe-2013-era5.nc`` to
``cutouts/europe-2013-era5-tutorial.nc`` to accomodate tutorial and productive
``cutouts/be-03-2013-era5.nc`` to accomodate tutorial and productive
cutouts side-by-side.
* The flag ``keep_all_available_areas`` in the configuration for renewable

View File

@ -43,7 +43,7 @@ For more information on the data dependencies of PyPSA-Eur, continue reading :re
How to customise PyPSA-Eur?
===========================
The model can be adapted to only include selected countries (e.g. Germany) instead of all European countries to limit the spatial scope.
The model can be adapted to only include selected countries (e.g. Belgium) instead of all European countries to limit the spatial scope.
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
@ -53,41 +53,43 @@ Likewise, the example's temporal scope can be restricted (e.g. to a single month
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 24-27
:start-at: snapshots:
:end-before: enable:
It is also possible to allow less or more carbon-dioxide emissions. Here, we limit the emissions of Germany 100 Megatonnes per year.
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 38,40
:lines: 40,42
PyPSA-Eur also includes a database of existing conventional powerplants.
We can select which types of powerplants we like to be included with fixed capacities:
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 38,54
:lines: 40,56
To accurately model the temporal and spatial availability of renewables such as wind and solar energy, we rely on historical weather data.
It is advisable to adapt the required range of coordinates to the selection of countries.
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 56-63
:start-at: atlite:
:end-before: renewable:
We can also decide which weather data source should be used to calculate potentials and capacity factor time-series for each carrier.
For example, we may want to use the ERA-5 dataset for solar and not the default SARAH-2 dataset.
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 65,108-109
:lines: 67,110,111
Finally, it is possible to pick a solver. For instance, this tutorial uses the open-source solvers CBC and Ipopt and does not rely
on the commercial solvers Gurobi or CPLEX (for which free academic licenses are available).
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 171,181-182
:lines: 173,183,184
.. note::
@ -126,11 +128,6 @@ orders ``snakemake`` to run the script ``solve_network`` that produces the solve
.. until https://github.com/snakemake/snakemake/issues/46 closed
.. warning::
On Windows the previous command may currently cause a ``MissingRuleException`` due to problems with output files in subfolders.
This is an `open issue <https://github.com/snakemake/snakemake/issues/46>`_ at `snakemake <https://snakemake.readthedocs.io/>`_.
Windows users should add the option ``--keep-target-files`` to the command or instead run ``snakemake -j 1 solve_all_networks``.
This triggers a workflow of multiple preceding jobs that depend on each rule's inputs and outputs:
.. graphviz::
@ -271,7 +268,8 @@ the wildcards given in ``scenario`` in the configuration file ``config.yaml`` ar
.. literalinclude:: ../config.tutorial.yaml
:language: yaml
:lines: 14-18
:start-at: scenario:
:end-before: countries:
In this example we would not only solve a 6-node model of Germany but also a 2-node model.

View File

@ -11,7 +11,7 @@ dependencies:
- pip
- pypsa>=0.18.1
- atlite>=0.2.5
- atlite>=0.2.6
- dask
# Dependencies of the workflow itself
@ -24,7 +24,7 @@ dependencies:
- yaml
- pytables
- lxml
- powerplantmatching>=0.4.8
- powerplantmatching>=0.5.3
- numpy
- pandas
- geopandas
@ -37,6 +37,7 @@ dependencies:
- pyomo
- matplotlib
- proj
- fiona<=1.18.20 # Till issue https://github.com/Toblerity/Fiona/issues/1085 is not solved
# Keep in conda environment when calling ipython
- ipython
@ -44,7 +45,7 @@ dependencies:
# GIS dependencies:
- cartopy
- descartes
- rasterio
- rasterio<=1.2.9 # 1.2.10 creates error https://github.com/PyPSA/atlite/issues/238
# PyPSA-Eur-Sec Dependencies
- geopy

View File

@ -120,7 +120,7 @@ def load_network_for_plots(fn, tech_costs, config, combine_hydro_ps=True):
# n.storage_units.loc[bus_carrier == "heat","carrier"] = "water tanks"
Nyears = n.snapshot_weightings.objective.sum() / 8760.
costs = load_costs(Nyears, tech_costs, config['costs'], config['electricity'])
costs = load_costs(tech_costs, config['costs'], config['electricity'], Nyears)
update_transmission_costs(n, costs)
return n
@ -231,6 +231,7 @@ def mock_snakemake(rulename, **wildcards):
import os
from pypsa.descriptors import Dict
from snakemake.script import Snakemake
from packaging.version import Version, parse
script_dir = Path(__file__).parent.resolve()
assert Path.cwd().resolve() == script_dir, \
@ -240,7 +241,8 @@ def mock_snakemake(rulename, **wildcards):
if os.path.exists(p):
snakefile = p
break
workflow = sm.Workflow(snakefile, overwrite_configfiles=[])
kwargs = dict(rerun_triggers=[]) if parse(sm.__version__) > Version("7.7.0") else {}
workflow = sm.Workflow(snakefile, overwrite_configfiles=[], **kwargs)
workflow.include(snakefile)
workflow.global_resources = {}
rule = workflow.get_rule(rulename)

View File

@ -94,7 +94,6 @@ import geopandas as gpd
import powerplantmatching as pm
from powerplantmatching.export import map_country_bus
from vresutils.costdata import annuity
from vresutils import transfer as vtransfer
idx = pd.IndexSlice
@ -105,6 +104,18 @@ logger = logging.getLogger(__name__)
def normed(s): return s/s.sum()
def calculate_annuity(n, r):
"""Calculate the annuity factor for an asset with lifetime n years and
discount rate of r, e.g. annuity(20, 0.05) * 20 = 1.6"""
if isinstance(r, pd.Series):
return pd.Series(1/n, index=r.index).where(r == 0, r/(1. - 1./(1.+r)**n))
elif r > 0:
return r / (1. - 1./(1.+r)**n)
else:
return 1 / n
def _add_missing_carriers_from_costs(n, costs, carriers):
missing_carriers = pd.Index(carriers).difference(n.carriers.index)
if missing_carriers.empty: return
@ -138,7 +149,7 @@ def load_costs(tech_costs, config, elec_config, Nyears=1.):
"investment" : 0,
"lifetime" : 25})
costs["capital_cost"] = ((annuity(costs["lifetime"], costs["discount rate"]) +
costs["capital_cost"] = ((calculate_annuity(costs["lifetime"], costs["discount rate"]) +
costs["FOM"]/100.) *
costs["investment"] * Nyears)
@ -227,7 +238,7 @@ def attach_load(n, regions, load, nuts3_shapes, countries, scaling=1.):
n.madd("Load", substation_lv_i, bus=substation_lv_i, p_set=load)
def update_transmission_costs(n, costs, length_factor=1.0, simple_hvdc_costs=False):
def update_transmission_costs(n, costs, length_factor=1.0):
# TODO: line length factor of lines is applied to lines and links.
# Separate the function to distinguish.
@ -242,16 +253,12 @@ def update_transmission_costs(n, costs, length_factor=1.0, simple_hvdc_costs=Fal
# may be missing. Therefore we have to return here.
if n.links.loc[dc_b].empty: return
if simple_hvdc_costs:
costs = (n.links.loc[dc_b, 'length'] * length_factor *
costs.at['HVDC overhead', 'capital_cost'])
else:
costs = (n.links.loc[dc_b, 'length'] * length_factor *
((1. - n.links.loc[dc_b, 'underwater_fraction']) *
costs.at['HVDC overhead', 'capital_cost'] +
n.links.loc[dc_b, 'underwater_fraction'] *
costs.at['HVDC submarine', 'capital_cost']) +
costs.at['HVDC inverter pair', 'capital_cost'])
costs = (n.links.loc[dc_b, 'length'] * length_factor *
((1. - n.links.loc[dc_b, 'underwater_fraction']) *
costs.at['HVDC overhead', 'capital_cost'] +
n.links.loc[dc_b, 'underwater_fraction'] *
costs.at['HVDC submarine', 'capital_cost']) +
costs.at['HVDC inverter pair', 'capital_cost'])
n.links.loc[dc_b, 'capital_cost'] = costs

View File

@ -4,7 +4,7 @@
# coding: utf-8
"""
Creates the network topology from a `ENTSO-E map extract <https://github.com/PyPSA/GridKit/tree/master/entsoe>`_ (January 2020) as a PyPSA network.
Creates the network topology from a `ENTSO-E map extract <https://github.com/PyPSA/GridKit/tree/master/entsoe>`_ (March 2022) as a PyPSA network.
Relevant Settings
-----------------
@ -41,7 +41,7 @@ Relevant Settings
Inputs
------
- ``data/entsoegridkit``: Extract from the geographical vector data of the online `ENTSO-E Interactive Map <https://www.entsoe.eu/data/map/>`_ by the `GridKit <https://github.com/pypsa/gridkit>`_ toolkit dating back to January 2020.
- ``data/entsoegridkit``: Extract from the geographical vector data of the online `ENTSO-E Interactive Map <https://www.entsoe.eu/data/map/>`_ by the `GridKit <https://github.com/martacki/gridkit>`_ toolkit dating back to March 2022.
- ``data/parameter_corrections.yaml``: Corrections for ``data/entsoegridkit``
- ``data/links_p_nom.csv``: confer :ref:`links`
- ``data/links_tyndp.csv``: List of projects in the `TYNDP 2018 <https://tyndp.entsoe.eu/tyndp2018/>`_ that are at least *in permitting* with fields for start- and endpoint (names and coordinates), length, capacity, construction status, and project reference ID.
@ -165,8 +165,9 @@ def _load_links_from_eg(buses, eg_links):
links['length'] /= 1e3
# hotfix
links.loc[links.bus1=='6271', 'bus1'] = '6273'
# Skagerrak Link is connected to 132kV bus which is removed in _load_buses_from_eg.
# Connect to neighboring 380kV bus
links.loc[links.bus1=='6396', 'bus1'] = '6398'
links = _remove_dangling_branches(links, buses)

View File

@ -47,9 +47,10 @@ from _helpers import configure_logging
import pypsa
import os
import pandas as pd
import numpy as np
import geopandas as gpd
from vresutils.graph import voronoi_partition_pts
from shapely.geometry import Polygon
from scipy.spatial import Voronoi
logger = logging.getLogger(__name__)
@ -61,6 +62,53 @@ def save_to_geojson(s, fn):
s.to_file(fn, driver='GeoJSON', schema=schema)
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.*xspan, ymin-3.*yspan],
[xmin-3.*xspan, ymax+3.*yspan],
[xmax+3.*xspan, ymin-3.*yspan],
[xmax+3.*xspan, ymax+3.*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)
poly = poly.intersection(outline)
polygons.append(poly)
return np.array(polygons, dtype=object)
if __name__ == "__main__":
if 'snakemake' not in globals():
from _helpers import mock_snakemake

View File

@ -116,14 +116,19 @@ def nan_statistics(df):
keys=['total', 'consecutive', 'max_total_per_month'], axis=1)
def copy_timeslice(load, cntry, start, stop, delta):
def copy_timeslice(load, cntry, start, stop, delta, fn_load=None):
start = pd.Timestamp(start)
stop = pd.Timestamp(stop)
if start-delta in load.index and stop in load.index and cntry in load:
load.loc[start:stop, cntry] = load.loc[start-delta:stop-delta, cntry].values
if (start in load.index and stop in load.index):
if start-delta in load.index and stop-delta in load.index and cntry in load:
load.loc[start:stop, cntry] = load.loc[start-delta:stop-delta, cntry].values
elif fn_load is not None:
duration = pd.date_range(freq='h', start=start-delta, end=stop-delta)
load_raw = load_timeseries(fn_load, duration, [cntry], powerstatistics)
load.loc[start:stop, cntry] = load_raw.loc[start-delta:stop-delta, cntry].values
def manual_adjustment(load, powerstatistics):
def manual_adjustment(load, fn_load, powerstatistics):
"""
Adjust gaps manual for load data from OPSD time-series package.
@ -150,6 +155,8 @@ def manual_adjustment(load, powerstatistics):
powerstatistics: bool
Whether argument load comprises the electricity consumption data of
the ENTSOE power statistics or of the ENTSOE transparency map
load_fn: str
File name or url location (file format .csv)
Returns
-------
@ -175,7 +182,11 @@ def manual_adjustment(load, powerstatistics):
copy_timeslice(load, 'CH', '2010-11-04 04:00', '2010-11-04 22:00', Delta(days=1))
copy_timeslice(load, 'NO', '2010-12-09 11:00', '2010-12-09 18:00', Delta(days=1))
# whole january missing
copy_timeslice(load, 'GB', '2009-12-31 23:00', '2010-01-31 23:00', Delta(days=-364))
copy_timeslice(load, 'GB', '2010-01-01 00:00', '2010-01-31 23:00', Delta(days=-365), fn_load)
# 1.1. at midnight gets special treatment
copy_timeslice(load, 'IE', '2016-01-01 00:00', '2016-01-01 01:00', Delta(days=-366), fn_load)
copy_timeslice(load, 'PT', '2016-01-01 00:00', '2016-01-01 01:00', Delta(days=-366), fn_load)
copy_timeslice(load, 'GB', '2016-01-01 00:00', '2016-01-01 01:00', Delta(days=-366), fn_load)
else:
if 'ME' in load:
@ -206,7 +217,7 @@ if __name__ == "__main__":
load = load_timeseries(snakemake.input[0], years, countries, powerstatistics)
if snakemake.config['load']['manual_adjustments']:
load = manual_adjustment(load, powerstatistics)
load = manual_adjustment(load, snakemake.input[0], powerstatistics)
logger.info(f"Linearly interpolate gaps of size {interpolate_limit} and less.")
load = load.interpolate(method='linear', limit=interpolate_limit)

View File

@ -40,7 +40,7 @@ Description
"""
import logging
from _helpers import configure_logging, retrieve_snakemake_keys
from _helpers import configure_logging
import atlite
import geopandas as gpd
@ -73,20 +73,17 @@ if __name__ == "__main__":
snakemake = mock_snakemake('build_natura_raster')
configure_logging(snakemake)
paths, config, wildcards, logs, out = retrieve_snakemake_keys(snakemake)
cutouts = paths.cutouts
cutouts = snakemake.input.cutouts
xs, Xs, ys, Ys = zip(*(determine_cutout_xXyY(cutout) for cutout in cutouts))
bounds = transform_bounds(4326, 3035, min(xs), min(ys), max(Xs), max(Ys))
transform, out_shape = get_transform_and_shape(bounds, res=100)
# adjusted boundaries
shapes = gpd.read_file(paths.natura).to_crs(3035)
shapes = gpd.read_file(snakemake.input.natura).to_crs(3035)
raster = ~geometry_mask(shapes.geometry, out_shape[::-1], transform)
raster = raster.astype(rio.uint8)
with rio.open(out[0], 'w', driver='GTiff', dtype=rio.uint8,
with rio.open(snakemake.output[0], 'w', driver='GTiff', dtype=rio.uint8,
count=1, transform=transform, crs=3035, compress='lzw',
width=raster.shape[1], height=raster.shape[0]) as dst:
dst.write(raster, indexes=1)

View File

@ -189,6 +189,7 @@ import logging
from pypsa.geo import haversine
from shapely.geometry import LineString
import time
from dask.distributed import Client, LocalCluster
from _helpers import configure_logging
@ -202,8 +203,8 @@ if __name__ == '__main__':
configure_logging(snakemake)
pgb.streams.wrap_stderr()
nprocesses = snakemake.config['atlite'].get('nprocesses')
noprogress = not snakemake.config['atlite'].get('show_progress', True)
nprocesses = int(snakemake.threads)
noprogress = not snakemake.config['atlite'].get('show_progress', False)
config = snakemake.config['renewable'][snakemake.wildcards.technology]
resource = config['resource'] # pv panel config / wind turbine config
correction_factor = config.get('correction_factor', 1.)
@ -216,7 +217,9 @@ if __name__ == '__main__':
if correction_factor != 1.:
logger.info(f'correction_factor is set as {correction_factor}')
cluster = LocalCluster(n_workers=nprocesses, threads_per_worker=1)
client = Client(cluster, asynchronous=True)
cutout = atlite.Cutout(snakemake.input['cutout'])
regions = gpd.read_file(snakemake.input.regions).set_index('name').rename_axis('bus')
buses = regions.index
@ -240,7 +243,7 @@ if __name__ == '__main__':
# use named function np.greater with partially frozen argument instead
# and exclude areas where: -max_depth > grid cell depth
func = functools.partial(np.greater,-config['max_depth'])
excluder.add_raster(snakemake.input.gebco, codes=func, crs=4236, nodata=-1000)
excluder.add_raster(snakemake.input.gebco, codes=func, crs=4326, nodata=-1000)
if 'min_shore_distance' in config:
buffer = config['min_shore_distance']
@ -266,7 +269,7 @@ if __name__ == '__main__':
potential = capacity_per_sqkm * availability.sum('bus') * area
func = getattr(cutout, resource.pop('method'))
resource['dask_kwargs'] = {'num_workers': nprocesses}
resource['dask_kwargs'] = {"scheduler": client}
capacity_factor = correction_factor * func(capacity_factor=True, **resource)
layout = capacity_factor * area * capacity_per_sqkm
profile, capacities = func(matrix=availability.stack(spatial=['y','x']),

View File

@ -263,9 +263,9 @@ def clustering_for_n_clusters(n, n_clusters, custom_busmap=False, aggregate_carr
algorithm="kmeans", extended_link_costs=0, focus_weights=None):
if potential_mode == 'simple':
p_nom_max_strategy = np.sum
p_nom_max_strategy = pd.Series.sum
elif potential_mode == 'conservative':
p_nom_max_strategy = np.min
p_nom_max_strategy = pd.Series.min
else:
raise AttributeError(f"potential_mode should be one of 'simple' or 'conservative' but is '{potential_mode}'")
@ -281,7 +281,14 @@ def clustering_for_n_clusters(n, n_clusters, custom_busmap=False, aggregate_carr
aggregate_generators_carriers=aggregate_carriers,
aggregate_one_ports=["Load", "StorageUnit"],
line_length_factor=line_length_factor,
generator_strategies={'p_nom_max': p_nom_max_strategy, 'p_nom_min': np.sum},
generator_strategies={'p_nom_max': p_nom_max_strategy,
'p_nom_min': pd.Series.sum,
'p_min_pu': pd.Series.mean,
'marginal_cost': pd.Series.mean,
'committable': np.any,
'ramp_limit_up': pd.Series.max,
'ramp_limit_down': pd.Series.max,
},
scale_link_capital_costs=False)
if not n.links.empty:
@ -343,6 +350,9 @@ if __name__ == "__main__":
if snakemake.wildcards.clusters.endswith('m'):
n_clusters = int(snakemake.wildcards.clusters[:-1])
aggregate_carriers = pd.Index(n.generators.carrier.unique()).difference(renewable_carriers)
elif snakemake.wildcards.clusters == 'all':
n_clusters = len(n.buses)
aggregate_carriers = None # All
else:
n_clusters = int(snakemake.wildcards.clusters)
aggregate_carriers = None # All

View File

@ -54,7 +54,7 @@ Replacing '/summaries/' with '/plots/' creates nice colored maps of the results.
"""
import logging
from _helpers import configure_logging, retrieve_snakemake_keys
from _helpers import configure_logging
import os
import pypsa
@ -171,6 +171,9 @@ def calculate_capacity(n,label,capacity):
if 'p_nom_opt' in c.df.columns:
c_capacities = abs(c.df.p_nom_opt.multiply(c.df.sign)).groupby(c.df.carrier).sum()
capacity = include_in_summary(capacity, [c.list_name], label, c_capacities)
elif 'e_nom_opt' in c.df.columns:
c_capacities = abs(c.df.e_nom_opt.multiply(c.df.sign)).groupby(c.df.carrier).sum()
capacity = include_in_summary(capacity, [c.list_name], label, c_capacities)
for c in n.iterate_components(n.passive_branch_components):
c_capacities = c.df['s_nom_opt'].groupby(c.df.carrier).sum()
@ -185,11 +188,11 @@ def calculate_capacity(n,label,capacity):
def calculate_supply(n, label, supply):
"""calculate the max dispatch of each component at the buses where the loads are attached"""
load_types = n.loads.carrier.value_counts().index
load_types = n.buses.carrier.unique()
for i in load_types:
buses = n.loads.bus[n.loads.carrier == i].values
buses = n.buses.query("carrier == @i").index
bus_map = pd.Series(False,index=n.buses.index)
@ -232,11 +235,11 @@ def calculate_supply(n, label, supply):
def calculate_supply_energy(n, label, supply_energy):
"""calculate the total dispatch of each component at the buses where the loads are attached"""
load_types = n.loads.carrier.value_counts().index
load_types = n.buses.carrier.unique()
for i in load_types:
buses = n.loads.bus[n.loads.carrier == i].values
buses = n.buses.query("carrier == @i").index
bus_map = pd.Series(False,index=n.buses.index)
@ -404,7 +407,7 @@ def make_summaries(networks_dict, paths, config, country='all'):
Nyears = n.snapshot_weightings.objective.sum() / 8760.
costs = load_costs(paths[0], config['costs'], config['electricity'], Nyears)
update_transmission_costs(n, costs, simple_hvdc_costs=False)
update_transmission_costs(n, costs)
assign_carriers(n)
@ -430,7 +433,8 @@ if __name__ == "__main__":
network_dir = os.path.join('results', 'networks')
configure_logging(snakemake)
paths, config, wildcards, logs, out = retrieve_snakemake_keys(snakemake)
config = snakemake.config
wildcards = snakemake.wildcards
def expand_from_wildcard(key, config):
w = getattr(wildcards, key)
@ -451,6 +455,6 @@ if __name__ == "__main__":
for l in ll
for opts in expand_from_wildcard("opts", config)}
dfs = make_summaries(networks_dict, paths, config, country=wildcards.country)
dfs = make_summaries(networks_dict, snakemake.input, config, country=wildcards.country)
to_csv(dfs, out[0])
to_csv(dfs, snakemake.output[0])

View File

@ -20,8 +20,7 @@ Description
"""
import logging
from _helpers import (retrieve_snakemake_keys, load_network_for_plots,
aggregate_p, aggregate_costs, configure_logging)
from _helpers import (load_network_for_plots, aggregate_p, aggregate_costs, configure_logging)
import pandas as pd
import numpy as np
@ -75,7 +74,7 @@ def set_plot_style():
}])
def plot_map(n, ax=None, attribute='p_nom', opts={}):
def plot_map(n, opts, ax=None, attribute='p_nom'):
if ax is None:
ax = plt.gca()
@ -182,7 +181,7 @@ def plot_map(n, ax=None, attribute='p_nom', opts={}):
return fig
def plot_total_energy_pie(n, ax=None):
def plot_total_energy_pie(n, opts, ax=None):
if ax is None: ax = plt.gca()
ax.set_title('Energy per technology', fontdict=dict(fontsize="medium"))
@ -200,7 +199,7 @@ def plot_total_energy_pie(n, ax=None):
t1.remove()
t2.remove()
def plot_total_cost_bar(n, ax=None):
def plot_total_cost_bar(n, opts, ax=None):
if ax is None: ax = plt.gca()
total_load = (n.snapshot_weightings.generators * n.loads_t.p.sum(axis=1)).sum()
@ -259,25 +258,25 @@ if __name__ == "__main__":
set_plot_style()
paths, config, wildcards, logs, out = retrieve_snakemake_keys(snakemake)
config, wildcards = snakemake.config, snakemake.wildcards
map_figsize = config['map']['figsize']
map_boundaries = config['map']['boundaries']
map_figsize = config["plotting"]['map']['figsize']
map_boundaries = config["plotting"]['map']['boundaries']
n = load_network_for_plots(paths.network, paths.tech_costs, config)
n = load_network_for_plots(snakemake.input.network, snakemake.input.tech_costs, config)
scenario_opts = wildcards.opts.split('-')
fig, ax = plt.subplots(figsize=map_figsize, subplot_kw={"projection": ccrs.PlateCarree()})
plot_map(n, ax, wildcards.attr, config)
plot_map(n, config["plotting"], ax=ax, attribute=wildcards.attr)
fig.savefig(out.only_map, dpi=150, bbox_inches='tight')
fig.savefig(snakemake.output.only_map, dpi=150, bbox_inches='tight')
ax1 = fig.add_axes([-0.115, 0.625, 0.2, 0.2])
plot_total_energy_pie(n, ax1)
plot_total_energy_pie(n, config["plotting"], ax=ax1)
ax2 = fig.add_axes([-0.075, 0.1, 0.1, 0.45])
plot_total_cost_bar(n, ax2)
plot_total_cost_bar(n, config["plotting"], ax=ax2)
ll = wildcards.ll
ll_type = ll[0]
@ -287,4 +286,4 @@ if __name__ == "__main__":
fig.suptitle('Expansion to {amount} {label} at {clusters} clusters'
.format(amount=amnt, label=lbl, clusters=wildcards.clusters))
fig.savefig(out.ext, transparent=True, bbox_inches='tight')
fig.savefig(snakemake.output.ext, transparent=True, bbox_inches='tight')

View File

@ -19,7 +19,7 @@ Description
"""
import logging
from _helpers import configure_logging, retrieve_snakemake_keys
from _helpers import configure_logging
import pypsa
import pandas as pd
@ -53,13 +53,11 @@ if __name__ == "__main__":
clusts= '5,full', country= 'all')
configure_logging(snakemake)
paths, config, wildcards, logs, out = retrieve_snakemake_keys(snakemake)
plot_kwds = dict(drawstyle="steps-post")
clusters = wildcards.clusts.split(',')
techs = wildcards.techs.split(',')
country = wildcards.country
clusters = snakemake.wildcards.clusts.split(',')
techs = snakemake.wildcards.techs.split(',')
country = snakemake.wildcards.country
if country == 'all':
country = None
else:
@ -68,7 +66,7 @@ if __name__ == "__main__":
fig, axes = plt.subplots(1, len(techs))
for j, cluster in enumerate(clusters):
net = pypsa.Network(paths[j])
net = pypsa.Network(snakemake.input[j])
for i, tech in enumerate(techs):
cum_p_nom_max(net, tech, country).plot(x="p_max_pu", y="cum_p_nom_max",
@ -81,4 +79,4 @@ if __name__ == "__main__":
plt.legend(title="Cluster level")
fig.savefig(out[0], transparent=True, bbox_inches='tight')
fig.savefig(snakemake.output[0], transparent=True, bbox_inches='tight')

View File

@ -21,7 +21,7 @@ Description
import os
import logging
from _helpers import configure_logging, retrieve_snakemake_keys
from _helpers import configure_logging
import pandas as pd
import matplotlib.pyplot as plt
@ -170,12 +170,12 @@ if __name__ == "__main__":
attr='', ext='png', country='all')
configure_logging(snakemake)
paths, config, wildcards, logs, out = retrieve_snakemake_keys(snakemake)
config = snakemake.config
summary = wildcards.summary
summary = snakemake.wildcards.summary
try:
func = globals()[f"plot_{summary}"]
except KeyError:
raise RuntimeError(f"plotting function for {summary} has not been defined")
func(os.path.join(paths[0], f"{summary}.csv"), config, out[0])
func(os.path.join(snakemake.input[0], f"{summary}.csv"), config, snakemake.output[0])

View File

@ -37,7 +37,7 @@ Description
"""
import logging
from _helpers import configure_logging, retrieve_snakemake_keys
from _helpers import configure_logging
import pandas as pd
@ -63,8 +63,6 @@ if __name__ == "__main__":
snakemake = mock_snakemake('prepare_links_p_nom', simpl='', network='elec')
configure_logging(snakemake)
paths, config, wildcards, logs, out = retrieve_snakemake_keys(snakemake)
links_p_nom = pd.read_html('https://en.wikipedia.org/wiki/List_of_HVDC_projects', header=0, match="SwePol")[0]
mw = "Power (MW)"
@ -76,4 +74,4 @@ if __name__ == "__main__":
links_p_nom['x1'], links_p_nom['y1'] = extract_coordinates(links_p_nom['Converterstation 1'])
links_p_nom['x2'], links_p_nom['y2'] = extract_coordinates(links_p_nom['Converterstation 2'])
links_p_nom.dropna(subset=['x1', 'y1', 'x2', 'y2']).to_csv(out[0], index=False)
links_p_nom.dropna(subset=['x1', 'y1', 'x2', 'y2']).to_csv(snakemake.output[0], index=False)

View File

@ -104,7 +104,7 @@ def set_transmission_limit(n, ll_type, factor, costs, Nyears=1):
ref = (lines_s_nom @ n.lines[col] +
n.links.loc[links_dc_b, "p_nom"] @ n.links.loc[links_dc_b, col])
update_transmission_costs(n, costs, simple_hvdc_costs=False)
update_transmission_costs(n, costs)
if factor == 'opt' or float(factor) > 1.0:
n.lines['s_nom_min'] = lines_s_nom

View File

@ -254,7 +254,12 @@ def solve_network(n, config, opts='', **kwargs):
n.config = config
n.opts = opts
if cf_solving.get('skip_iterations', False):
skip_iterations = cf_solving.get('skip_iterations', False)
if not n.lines.s_nom_extendable.any():
skip_iterations = True
logger.info("No expandable lines found. Skipping iterative solving.")
if skip_iterations:
network_lopf(n, solver_name=solver_name, solver_options=solver_options,
extra_functionality=extra_functionality, **kwargs)
else:

View File

@ -16,7 +16,7 @@ scenario:
clusters: [5]
opts: [Co2L-24H]
countries: ['DE']
countries: ['BE']
clustering:
simplify:
@ -57,7 +57,7 @@ electricity:
atlite:
nprocesses: 4
cutouts:
europe-2013-era5-tutorial:
be-03-2013-era5:
module: era5
x: [4., 15.]
y: [46., 56.]
@ -65,7 +65,7 @@ atlite:
renewable:
onwind:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: wind
turbine: Vestas_V112_3MW
@ -82,7 +82,7 @@ renewable:
potential: simple # or conservative
clip_p_max_pu: 1.e-2
offwind-ac:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
@ -94,7 +94,7 @@ renewable:
potential: simple # or conservative
clip_p_max_pu: 1.e-2
offwind-dc:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
@ -107,7 +107,7 @@ renewable:
potential: simple # or conservative
clip_p_max_pu: 1.e-2
solar:
cutout: europe-2013-era5-tutorial
cutout: be-03-2013-era5
resource:
method: pv
panel: CSi