add planned LNG terminals from gem.wiki and convert units to MW
This commit is contained in:
parent
57c0dd29d1
commit
12ef1302e6
@ -104,6 +104,7 @@ if config["sector"]["gas_network"]:
|
|||||||
lng="data/gas_network/scigrid-gas/data/IGGIELGN_LNGs.geojson",
|
lng="data/gas_network/scigrid-gas/data/IGGIELGN_LNGs.geojson",
|
||||||
entry="data/gas_network/scigrid-gas/data/IGGIELGN_BorderPoints.geojson",
|
entry="data/gas_network/scigrid-gas/data/IGGIELGN_BorderPoints.geojson",
|
||||||
production="data/gas_network/scigrid-gas/data/IGGIELGN_Productions.geojson",
|
production="data/gas_network/scigrid-gas/data/IGGIELGN_Productions.geojson",
|
||||||
|
planned_lng="data/gas_network/planned_LNGs.csv"
|
||||||
regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||||
output:
|
output:
|
||||||
gas_input_nodes="resources/gas_input_locations_s{simpl}_{clusters}.geojson"
|
gas_input_nodes="resources/gas_input_locations_s{simpl}_{clusters}.geojson"
|
||||||
|
8
data/gas_network/planned_LNGs.csv
Normal file
8
data/gas_network/planned_LNGs.csv
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
name,geometry,max_cap_store2pipe_M_m3_per_d,source
|
||||||
|
Wilhelmshaven,"POINT(8.133 53.516)",27.4,https://www.gem.wiki/Wilhelmshaven_LNG_Terminal
|
||||||
|
Brunsbüttel,"POINT(8.976 53.914)",19.2,https://www.gem.wiki/Brunsb%C3%BCttel_LNG_Terminal
|
||||||
|
Stade,"POINT(9.510 53.652)",32.9,https://www.gem.wiki/Stade_LNG_Terminal
|
||||||
|
Alexandroupolis,"POINT(25.843 40.775)",16.7,https://www.gem.wiki/Alexandroupolis_LNG_Terminal
|
||||||
|
Shannon,"POINT(-9.442 52.581)",22.5,https://www.gem.wiki/Shannon_LNG_Terminal
|
||||||
|
Gothenburg,"POINT(11.948 57.702)",1.4,https://www.gem.wiki/Gothenburg_LNG_Terminal
|
||||||
|
Cork,"POINT(-8.323 51.831)",11.0,https://www.gem.wiki/Cork_LNG_Terminal
|
|
@ -7,6 +7,7 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import geopandas as gpd
|
import geopandas as gpd
|
||||||
|
from shapely import wkt
|
||||||
|
|
||||||
|
|
||||||
def read_scigrid_gas(fn):
|
def read_scigrid_gas(fn):
|
||||||
@ -16,10 +17,14 @@ def read_scigrid_gas(fn):
|
|||||||
return df
|
return df
|
||||||
|
|
||||||
|
|
||||||
def build_gas_input_locations(lng_fn, entry_fn, prod_fn, countries):
|
def build_gas_input_locations(lng_fn, planned_lng_fn, entry_fn, prod_fn, countries):
|
||||||
|
|
||||||
# LNG terminals
|
# LNG terminals
|
||||||
lng = read_scigrid_gas(lng_fn)
|
lng = read_scigrid_gas(lng_fn)
|
||||||
|
planned_lng = pd.read_csv(planned_lng_fn)
|
||||||
|
planned_lng.geometry = planned_lng.geometry.apply(wkt.loads)
|
||||||
|
planned_lng = gpd.GeoDataFrame(planned_lng, crs=4326)
|
||||||
|
lng = lng.append(planned_lng, ignore_index=True)
|
||||||
|
|
||||||
# Entry points from outside the model scope
|
# Entry points from outside the model scope
|
||||||
entry = read_scigrid_gas(entry_fn)
|
entry = read_scigrid_gas(entry_fn)
|
||||||
@ -38,15 +43,16 @@ def build_gas_input_locations(lng_fn, entry_fn, prod_fn, countries):
|
|||||||
(prod.country_code != "DE")
|
(prod.country_code != "DE")
|
||||||
]
|
]
|
||||||
|
|
||||||
lng["mcm_per_day"] = lng["max_cap_store2pipe_M_m3_per_d"]
|
conversion_factor = 437.5 # MCM/day to MWh/h
|
||||||
entry["mcm_per_day"] = entry["max_cap_from_to_M_m3_per_d"]
|
lng["p_nom"] = lng["max_cap_store2pipe_M_m3_per_d"] * conversion_factor
|
||||||
prod["mcm_per_day"] = prod["max_supply_M_m3_per_d"]
|
entry["p_nom"] = entry["max_cap_from_to_M_m3_per_d"] * conversion_factor
|
||||||
|
prod["p_nom"] = prod["max_supply_M_m3_per_d"] * conversion_factor
|
||||||
|
|
||||||
lng["type"] = "lng"
|
lng["type"] = "lng"
|
||||||
entry["type"] = "entry"
|
entry["type"] = "pipeline"
|
||||||
prod["type"] = "production"
|
prod["type"] = "production"
|
||||||
|
|
||||||
sel = ["geometry", "mcm_per_day", "type"]
|
sel = ["geometry", "p_nom", "type"]
|
||||||
|
|
||||||
return pd.concat([prod[sel], entry[sel], lng[sel]], ignore_index=True)
|
return pd.concat([prod[sel], entry[sel], lng[sel]], ignore_index=True)
|
||||||
|
|
||||||
@ -69,6 +75,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gas_input_locations = build_gas_input_locations(
|
gas_input_locations = build_gas_input_locations(
|
||||||
snakemake.input.lng,
|
snakemake.input.lng,
|
||||||
|
snakemake.input.planned_lng,
|
||||||
snakemake.input.entry,
|
snakemake.input.entry,
|
||||||
snakemake.input.production,
|
snakemake.input.production,
|
||||||
countries
|
countries
|
||||||
@ -85,7 +92,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
gas_input_nodes.to_file(snakemake.output.gas_input_nodes, driver='GeoJSON')
|
gas_input_nodes.to_file(snakemake.output.gas_input_nodes, driver='GeoJSON')
|
||||||
|
|
||||||
gas_input_nodes_s = gas_input_nodes.groupby(["bus", "type"])["mcm_per_day"].sum().unstack()
|
gas_input_nodes_s = gas_input_nodes.groupby(["bus", "type"])["p_nom"].sum().unstack()
|
||||||
gas_input_nodes_s.columns.name = "mcm_per_day"
|
gas_input_nodes_s.columns.name = "p_nom"
|
||||||
|
|
||||||
gas_input_nodes_s.to_csv(snakemake.output.gas_input_nodes_simplified)
|
gas_input_nodes_s.to_csv(snakemake.output.gas_input_nodes_simplified)
|
Loading…
Reference in New Issue
Block a user