base_network: Add links from TYNDP

Manually collected from https://tyndp.entsoe.eu/. Deactivated by default.
This commit is contained in:
Jonas Hörsch 2018-09-24 20:19:47 +02:00
parent 9c629560db
commit 52e214a3b2
4 changed files with 98 additions and 22 deletions

View File

@ -43,6 +43,7 @@ rule base_network:
eg_transformers='data/entsoegridkit/transformers.csv',
parameter_corrections='data/parameter_corrections.yaml',
links_p_nom='data/links_p_nom.csv',
links_tyndp='data/links_tyndp.csv',
country_shapes='resources/country_shapes.geojson',
offshore_shapes='resources/offshore_shapes.geojson',
europe_shape='resources/europe_shape.geojson'

View File

@ -5,7 +5,7 @@ scenario:
sectors: [E] # ,E+EV,E+BEV,E+BEV+V2G] # [ E+EV, E+BEV, E+BEV+V2G ]
simpl: ['']
lv: [1.0, 1.125, 1.25, 1.5, 2.0, 3.0]
clusters: [45, 64, 90, 128, 181, 256] #, 362] # (2**np.r_[5.5:9:.5]).astype(int)
clusters: [45, 64, 90, 128, 181] #, 256, 362] # (2**np.r_[5.5:9:.5]).astype(int)
opts: [Co2L-3H] #, LC-FL, LC-T, Ep-T, Co2L-T]
countries: ['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']
@ -32,7 +32,7 @@ electricity:
battery: 6
H2: 168
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
conventional_carriers: [] # nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
atlite:
nprocesses: 4
@ -114,6 +114,7 @@ lines:
links:
p_max_pu: 1.0
include_tyndp: false
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
transformers:
@ -150,9 +151,9 @@ solving:
load_shedding: true
noisy_costs: true
min_iterations: 4
max_iterations: 6
# max_iterations: 1
# nhours: 10
# max_iterations: 6
max_iterations: 3
#nhours: 10
solver:
name: gurobi
threads: 4

26
data/links_tyndp.csv Normal file
View File

@ -0,0 +1,26 @@
Name,Converterstation 1,Converterstation 2,Length (given) (km),Length (distance*1.2) (km),Power (MW),status,in links_p_nom.csv ?,Ref,x1,y1,x2,y2
Biscay Gulf,Gatica (ES),Cubnezais (FR),370,,2200,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/16,-2.867,43.367,-0.408943,45.074191
Italy-France,Piossasco (IT),Grand Ile (FR),190,,1000,under construction,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/21,7.468,44.9898,6.045,45.472
IFA2,Tourbe (FR),Chilling (GB),,247.2,1000,under construction,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/25,-0.172042,49.083593,-1.277269,50.839338
Italy-Montenegro,Villanova (IT),Latsva (MT),445,,1200,under construction,HVDC MON.ITA Project?,https://tyndp.entsoe.eu/tyndp2018/projects/projects/28,14.125,42.3947222222222,18.7947222222222,42.3175
NordLink,Tonstad (NO),Wilster (DE),514,,1400,under construction,NORD.LINK,https://tyndp.entsoe.eu/tyndp2018/projects/projects/37,6.716948,58.662631,9.373979,53.922479
COBRA cable,Endrup (DK),Eemshaven (NL),325,,700,under construction,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/71,8.718392,55.523115,6.835494,53.438589
Thames Estuary Cluster (NEMO-Link),Richborough (GB),Gezelle (BE),140,,1000,under construction,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/74,1.324854,51.295891,3.23043,51.24902
Anglo-Scottish -1,Hunterston (UK),Deeside (UK),422,,2400,under construction,Yes (Western HVDC Link ),https://tyndp.entsoe.eu/tyndp2018/projects/projects/77,-4.898329,55.723331,-3.032972,53.199735
ALEGrO,Lixhe (BE),Oberzier (DE),100,,1000,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/92,5.67933,50.7567965,6.474704,50.867532
North Sea Link,Kvilldal (NO),Blythe (GB),720,,1400,under construction,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/110,6.637527,59.515096,-1.510277,55.126957
HVDC SuedOstLink,Wolmirstedt (DE),Isar (DE),,557,2000,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/130,11.629014,52.252137,12.091596,48.080837
HVDC Line A-North,Emden East (DE),Osterath (DE),,284,2000,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/132,7.206009,53.359403,6.619451,51.272935
France-Alderney-Britain,Exeter (UK),Menuel (FR),220,,1400,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/153,-3.533899,50.718412,-1.469216,49.509594
Viking DKW-GB,Bicker Fen (GB),Revsing (DK),,807,1400,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/167,-0.203587,52.93979,9.178363,55.509166
ElecLink,Sellindge (UK),Mandarins (FR),,72,1000,under construction,Yes (Interconnexion France Angleterre (new)),https://tyndp.entsoe.eu/tyndp2018/projects/projects/172,0.975555555555556,51.1058333333333,1.78472222222222,50.9030555555556
Greenconnector,Verderio (IT),Sils i.D. (CH),150,,1000,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/174,9.439781,45.668539,9.76569,46.432156
Hansa PowerBridge I,Hurva (SE),Guestrow (DE),,283,700,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/176,13.6022222222222,55.8330555555556,12.189538,53.803155
NorthConnect,Simadalen (NO),Peterhead (UK),650,,1400,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/190,7.16027,60.500527,-1.784066,57.508123
HVDC SuedLink,Wilster (DE),Großgartach (DE),,637,4000,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/235,9.373979,53.922479,9.117193,49.145157
AQUIND Interconnector,Lovedean (GB),Barnabos (FR),254,,2000,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/247,-1.020512,50.908244,0.991736,49.656631
HVDC Ultranet,Osterath (DE),Philippsburg (DE),,314,600,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/254,6.619451,51.272935,8.458036,49.235253
Gridlink,Kingsnorth (UK),Warande (FR),160,,1400,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/285,0.596111111111111,51.41972,2.376776,51.034368
SACOI 3 -1,Codrongianos (IT),Lucciana (FR),,268,400,in permitting,replace SACOI 2,https://tyndp.entsoe.eu/tyndp2018/projects/projects/299,8.679351,40.65765,9.417275,42.547134
SACOI 3 -2,Lucciana (FR),Suvereto (IT),,139,400,in permitting,replace SACOI 2,https://tyndp.entsoe.eu/tyndp2018/projects/projects/299,9.417275,42.547134,10.678444,43.076683
NeuConnect,Grain (UK),Fedderwarden (DE),680,,1400,in permitting,,https://tyndp.entsoe.eu/tyndp2018/projects/projects/309,0.716666666666667,51.44,8.046524,53.562763
1 Name Converterstation 1 Converterstation 2 Length (given) (km) Length (distance*1.2) (km) Power (MW) status in links_p_nom.csv ? Ref x1 y1 x2 y2
2 Biscay Gulf Gatica (ES) Cubnezais (FR) 370 2200 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/16 -2.867 43.367 -0.408943 45.074191
3 Italy-France Piossasco (IT) Grand Ile (FR) 190 1000 under construction https://tyndp.entsoe.eu/tyndp2018/projects/projects/21 7.468 44.9898 6.045 45.472
4 IFA2 Tourbe (FR) Chilling (GB) 247.2 1000 under construction https://tyndp.entsoe.eu/tyndp2018/projects/projects/25 -0.172042 49.083593 -1.277269 50.839338
5 Italy-Montenegro Villanova (IT) Latsva (MT) 445 1200 under construction HVDC MON.ITA Project? https://tyndp.entsoe.eu/tyndp2018/projects/projects/28 14.125 42.3947222222222 18.7947222222222 42.3175
6 NordLink Tonstad (NO) Wilster (DE) 514 1400 under construction NORD.LINK https://tyndp.entsoe.eu/tyndp2018/projects/projects/37 6.716948 58.662631 9.373979 53.922479
7 COBRA cable Endrup (DK) Eemshaven (NL) 325 700 under construction https://tyndp.entsoe.eu/tyndp2018/projects/projects/71 8.718392 55.523115 6.835494 53.438589
8 Thames Estuary Cluster (NEMO-Link) Richborough (GB) Gezelle (BE) 140 1000 under construction https://tyndp.entsoe.eu/tyndp2018/projects/projects/74 1.324854 51.295891 3.23043 51.24902
9 Anglo-Scottish -1 Hunterston (UK) Deeside (UK) 422 2400 under construction Yes (Western HVDC Link ) https://tyndp.entsoe.eu/tyndp2018/projects/projects/77 -4.898329 55.723331 -3.032972 53.199735
10 ALEGrO Lixhe (BE) Oberzier (DE) 100 1000 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/92 5.67933 50.7567965 6.474704 50.867532
11 North Sea Link Kvilldal (NO) Blythe (GB) 720 1400 under construction https://tyndp.entsoe.eu/tyndp2018/projects/projects/110 6.637527 59.515096 -1.510277 55.126957
12 HVDC SuedOstLink Wolmirstedt (DE) Isar (DE) 557 2000 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/130 11.629014 52.252137 12.091596 48.080837
13 HVDC Line A-North Emden East (DE) Osterath (DE) 284 2000 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/132 7.206009 53.359403 6.619451 51.272935
14 France-Alderney-Britain Exeter (UK) Menuel (FR) 220 1400 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/153 -3.533899 50.718412 -1.469216 49.509594
15 Viking DKW-GB Bicker Fen (GB) Revsing (DK) 807 1400 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/167 -0.203587 52.93979 9.178363 55.509166
16 ElecLink Sellindge (UK) Mandarins (FR) 72 1000 under construction Yes (Interconnexion France Angleterre (new)) https://tyndp.entsoe.eu/tyndp2018/projects/projects/172 0.975555555555556 51.1058333333333 1.78472222222222 50.9030555555556
17 Greenconnector Verderio (IT) Sils i.D. (CH) 150 1000 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/174 9.439781 45.668539 9.76569 46.432156
18 Hansa PowerBridge I Hurva (SE) Guestrow (DE) 283 700 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/176 13.6022222222222 55.8330555555556 12.189538 53.803155
19 NorthConnect Simadalen (NO) Peterhead (UK) 650 1400 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/190 7.16027 60.500527 -1.784066 57.508123
20 HVDC SuedLink Wilster (DE) Großgartach (DE) 637 4000 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/235 9.373979 53.922479 9.117193 49.145157
21 AQUIND Interconnector Lovedean (GB) Barnabos (FR) 254 2000 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/247 -1.020512 50.908244 0.991736 49.656631
22 HVDC Ultranet Osterath (DE) Philippsburg (DE) 314 600 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/254 6.619451 51.272935 8.458036 49.235253
23 Gridlink Kingsnorth (UK) Warande (FR) 160 1400 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/285 0.596111111111111 51.41972 2.376776 51.034368
24 SACOI 3 -1 Codrongianos (IT) Lucciana (FR) 268 400 in permitting replace SACOI 2 https://tyndp.entsoe.eu/tyndp2018/projects/projects/299 8.679351 40.65765 9.417275 42.547134
25 SACOI 3 -2 Lucciana (FR) Suvereto (IT) 139 400 in permitting replace SACOI 2 https://tyndp.entsoe.eu/tyndp2018/projects/projects/299 9.417275 42.547134 10.678444 43.076683
26 NeuConnect Grain (UK) Fedderwarden (DE) 680 1400 in permitting https://tyndp.entsoe.eu/tyndp2018/projects/projects/309 0.716666666666667 51.44 8.046524 53.562763

View File

@ -9,7 +9,7 @@ from scipy.sparse import csgraph
from six import iteritems
from six.moves import filter
from shapely.geometry import Point
from shapely.geometry import Point, LineString
import shapely, shapely.prepared, shapely.wkt
from vresutils.graph import BreadthFirstLevels
@ -19,6 +19,23 @@ logger = logging.getLogger(__name__)
import pypsa
def _find_closest_links(links, new_links, distance_upper_bound=1.5):
tree = sp.spatial.KDTree(np.vstack([
new_links[['x1', 'y1', 'x2', 'y2']],
new_links[['x2', 'y2', 'x1', 'y1']]
]))
dist, ind = tree.query(
np.asarray([np.asarray(shapely.wkt.loads(s))[[0, -1]].flatten()
for s in links.geometry]),
distance_upper_bound=distance_upper_bound
)
return (
pd.DataFrame(dict(D=dist, i=new_links.index[ind % len(new_links)]), index=links.index)
.groupby('i').D.idxmin()
)
def _load_buses_from_eg():
buses = (pd.read_csv(snakemake.input.eg_buses, quotechar="'",
true_values='t', false_values='f',
@ -77,6 +94,49 @@ def _load_links_from_eg(buses):
return links
def _add_links_from_tyndp(buses, links):
links_tyndp = pd.read_csv(snakemake.input.links_tyndp)
links_tyndp["j"] = _find_closest_links(links, links_tyndp, distance_upper_bound=0.8)
# Corresponds approximately to 60km tolerances
if links_tyndp["j"].notnull().any():
logger.info("The following TYNDP links were already in the dataset (skipping): " + ", ".join(links_tyndp.loc[links_tyndp["j"].notnull(), "Name"]))
links_tyndp = links_tyndp.loc[links_tyndp["j"].isnull()]
tree = sp.spatial.KDTree(buses[['x', 'y']])
_, ind0 = tree.query(links_tyndp[["x1", "y1"]])
ind0_b = ind0 < len(buses)
links_tyndp.loc[ind0_b, "bus0"] = buses.index[ind0[ind0_b]]
_, ind1 = tree.query(links_tyndp[["x2", "y2"]])
ind1_b = ind1 < len(buses)
links_tyndp.loc[ind1_b, "bus1"] = buses.index[ind1[ind1_b]]
links_tyndp_located_b = links_tyndp["bus0"].notnull() & links_tyndp["bus1"].notnull()
if not links_tyndp_located_b.all():
logger.warn("Did not find connected buses for TYNDP links (skipping): " + ", ".join(links_tyndp.loc[~links_tyndp_located_b, "Name"]))
links_tyndp = links_tyndp.loc[links_tyndp_located_b]
logger.info("Adding the following TYNDP links: " + ", ".join(links_tyndp["Name"]))
links_tyndp = links_tyndp[["bus0", "bus1"]].assign(
carrier='DC',
p_nom=links_tyndp["Power (MW)"],
length=links_tyndp["Length (given) (km)"].fillna(links_tyndp["Length (distance*1.2) (km)"]),
under_construction=True,
underground=False,
geometry=(links_tyndp[["x1", "y1", "x2", "y2"]]
.apply(lambda s: str(LineString([[s.x1, s.y1], [s.x2, s.y2]])), axis=1)),
tags=('"name"=>"' + links_tyndp["Name"] + '", ' +
'"ref"=>"' + links_tyndp["Ref"] + '", ' +
'"status"=>"' + links_tyndp["status"] + '"')
)
links_tyndp.index = "T" + links_tyndp.index.astype(str)
return links.append(links_tyndp)
def _load_lines_from_eg(buses):
lines = (pd.read_csv(snakemake.input.eg_lines, quotechar="'", true_values='t', false_values='f',
dtype=dict(line_id='str', bus0='str', bus1='str',
@ -134,22 +194,7 @@ def _set_electrical_parameters_links(links):
links['p_min_pu'] = -p_max_pu
links_p_nom = pd.read_csv(snakemake.input.links_p_nom)
tree = sp.spatial.KDTree(np.vstack([
links_p_nom[['x1', 'y1', 'x2', 'y2']],
links_p_nom[['x2', 'y2', 'x1', 'y1']]
]))
dist, ind = tree.query(
np.asarray([np.asarray(shapely.wkt.loads(s))[[0, -1]].flatten()
for s in links.geometry]),
distance_upper_bound=1.5
)
links_p_nom["j"] =(
pd.DataFrame(dict(D=dist, i=links_p_nom.index[ind % len(links_p_nom)]), index=links.index)
.groupby('i').D.idxmin()
)
links_p_nom["j"] = _find_closest_links(links, links_p_nom)
p_nom = links_p_nom.dropna(subset=["j"]).set_index("j")["Power (MW)"]
links.loc[p_nom.index, "p_nom"] = p_nom
@ -321,6 +366,9 @@ def base_network():
buses = _load_buses_from_eg()
links = _load_links_from_eg(buses)
if snakemake.config['links'].get('include_tyndp'):
links = _add_links_from_tyndp(buses, links)
converters = _load_converters_from_eg(buses)
lines = _load_lines_from_eg(buses)