Merge branch 'master' into load-shedding-carrier
This commit is contained in:
commit
2a55ad2162
1
.gitignore
vendored
1
.gitignore
vendored
@ -19,6 +19,7 @@ gurobi.log
|
||||
/data
|
||||
/data/links_p_nom.csv
|
||||
/cutouts
|
||||
/dask-worker-space
|
||||
|
||||
doc/_build
|
||||
|
||||
|
@ -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
|
||||
|
24
Snakefile
24
Snakefile
@ -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)))
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
@ -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
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
@ -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
|
||||
|
@ -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."
|
||||
|
|
BIN
doc/img/base.png
BIN
doc/img/base.png
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
BIN
doc/img/synchronisation.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 648 KiB |
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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']),
|
||||
|
@ -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
|
||||
|
@ -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])
|
||||
|
@ -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')
|
||||
|
@ -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')
|
||||
|
@ -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])
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user