diff --git a/Snakefile b/Snakefile index 3ae0aa59..73409867 100644 --- a/Snakefile +++ b/Snakefile @@ -104,6 +104,7 @@ if config["sector"]["gas_network"]: lng="data/gas_network/scigrid-gas/data/IGGIELGN_LNGs.geojson", entry="data/gas_network/scigrid-gas/data/IGGIELGN_BorderPoints.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"), output: gas_input_nodes="resources/gas_input_locations_s{simpl}_{clusters}.geojson" diff --git a/data/gas_network/planned_LNGs.csv b/data/gas_network/planned_LNGs.csv new file mode 100644 index 00000000..65706216 --- /dev/null +++ b/data/gas_network/planned_LNGs.csv @@ -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 \ No newline at end of file diff --git a/scripts/build_gas_input_locations.py b/scripts/build_gas_input_locations.py index 14a07dd2..1f28b8bd 100644 --- a/scripts/build_gas_input_locations.py +++ b/scripts/build_gas_input_locations.py @@ -7,6 +7,7 @@ logger = logging.getLogger(__name__) import pandas as pd import geopandas as gpd +from shapely import wkt def read_scigrid_gas(fn): @@ -16,10 +17,14 @@ def read_scigrid_gas(fn): 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 = 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 = 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") ] - lng["mcm_per_day"] = lng["max_cap_store2pipe_M_m3_per_d"] - entry["mcm_per_day"] = entry["max_cap_from_to_M_m3_per_d"] - prod["mcm_per_day"] = prod["max_supply_M_m3_per_d"] + conversion_factor = 437.5 # MCM/day to MWh/h + lng["p_nom"] = lng["max_cap_store2pipe_M_m3_per_d"] * conversion_factor + 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" - entry["type"] = "entry" + entry["type"] = "pipeline" 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) @@ -69,6 +75,7 @@ if __name__ == "__main__": gas_input_locations = build_gas_input_locations( snakemake.input.lng, + snakemake.input.planned_lng, snakemake.input.entry, snakemake.input.production, countries @@ -85,7 +92,7 @@ if __name__ == "__main__": 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.columns.name = "mcm_per_day" + gas_input_nodes_s = gas_input_nodes.groupby(["bus", "type"])["p_nom"].sum().unstack() + gas_input_nodes_s.columns.name = "p_nom" gas_input_nodes_s.to_csv(snakemake.output.gas_input_nodes_simplified) \ No newline at end of file