From c273eb7f2cc6b1cb87512c5e0a602175e85e3d6b Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sun, 23 Jan 2022 14:20:18 +0100 Subject: [PATCH 01/56] plot_network: legends, EqualEarth projection, w/wo retrofit compatibility --- scripts/plot_network.py | 407 ++++++++++++++++++++++++++-------------- 1 file changed, 268 insertions(+), 139 deletions(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 9b8cddc3..62ac5ad6 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -6,13 +6,14 @@ import matplotlib.pyplot as plt import cartopy.crs as ccrs from matplotlib.legend_handler import HandlerPatch -from matplotlib.patches import Circle, Ellipse +from matplotlib.patches import Circle, Patch +from pypsa.plot import projected_area_factor from make_summary import assign_carriers from plot_summary import rename_techs, preferred_order from helper import override_component_attrs -plt.style.use('ggplot') +plt.style.use(['ggplot', "../matplotlibrc"]) def rename_techs_tyndp(tech): @@ -36,31 +37,65 @@ def rename_techs_tyndp(tech): else: return tech +class HandlerCircle(HandlerPatch): + """ + Legend Handler used to create circles for legend entries. + + This handler resizes the circles in order to match the same dimensional + scaling as in the applied axis. + """ + def create_artists( + self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans + ): + fig = legend.get_figure() + ax = legend.axes -def make_handler_map_to_scale_circles_as_in(ax, dont_resize_actively=False): - fig = ax.get_figure() + unit = np.diff(ax.transData.transform([(0, 0), (1, 1)]), axis=0)[0][1] + radius = orig_handle.get_radius() * unit * (72 / fig.dpi) + center = 5 - xdescent, 3 - ydescent + p = plt.Circle(center, radius) + self.update_prop(p, orig_handle, legend) + p.set_transform(trans) + return [p] - def axes2pt(): - return np.diff(ax.transData.transform([(0, 0), (1, 1)]), axis=0)[0] * (72. / fig.dpi) - ellipses = [] - if not dont_resize_actively: - def update_width_height(event): - dist = axes2pt() - for e, radius in ellipses: - e.width, e.height = 2. * radius * dist - fig.canvas.mpl_connect('resize_event', update_width_height) - ax.callbacks.connect('xlim_changed', update_width_height) - ax.callbacks.connect('ylim_changed', update_width_height) +def add_legend_circles(ax, sizes, labels, scale=1, srid=None, patch_kw={}, legend_kw={}): + + if srid is not None: + area_correction = projected_area_factor(ax, n.srid)**2 + print(area_correction) + sizes = [s * area_correction for s in sizes] + + handles = make_legend_circles_for(sizes, scale, **patch_kw) + + legend = ax.legend( + handles, labels, + handler_map={Circle: HandlerCircle()}, + **legend_kw + ) - def legend_circle_handler(legend, orig_handle, xdescent, ydescent, - width, height, fontsize): - w, h = 2. * orig_handle.get_radius() * axes2pt() - e = Ellipse(xy=(0.5 * width - 0.5 * xdescent, 0.5 * - height - 0.5 * ydescent), width=w, height=w) - ellipses.append((e, orig_handle.get_radius())) - return e - return {Circle: HandlerPatch(patch_func=legend_circle_handler)} + ax.add_artist(legend) + + +def add_legend_lines(ax, sizes, labels, scale=1, patch_kw={}, legend_kw={}): + + handles = [plt.Line2D([0], [0], linewidth=s/scale, **patch_kw) for s in sizes] + + legend = ax.legend( + handles, labels, + **legend_kw + ) + + ax.add_artist(legend) + + +def add_legend_patches(ax, colors, labels, patch_kw={}, legend_kw={}): + + handles = [Patch(facecolor=c, **patch_kw) for c in colors] + + legend = ax.legend(handles, labels, **legend_kw) + + ax.add_artist(legend) def make_legend_circles_for(sizes, scale=1.0, **kw): @@ -80,6 +115,8 @@ def assign_location(n): def plot_map(network, components=["links", "stores", "storage_units", "generators"], bus_size_factor=1.7e10, transmission=False): + tech_colors = snakemake.config['plotting']['tech_colors'] + n = network.copy() assign_location(n) # Drop non-electric buses so they don't clutter the plot @@ -109,7 +146,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator costs = costs[new_columns] for item in new_columns: - if item not in snakemake.config['plotting']['tech_colors']: + if item not in tech_colors: print("Warning!",item,"not in config/plotting/tech_colors") costs = costs.stack() # .sort_index() @@ -129,6 +166,11 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator # make sure they are removed from index costs.index = pd.MultiIndex.from_tuples(costs.index.values) + threshold = 100e6 # 100 mEUR/a + carriers = costs.sum(level=1) + carriers = carriers.where(carriers > threshold).dropna() + carriers = list(carriers.index) + # PDF has minimum width, so set these to zero line_lower_threshold = 500. line_upper_threshold = 1e4 @@ -140,23 +182,23 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator # should be zero line_widths = n.lines.s_nom_opt - n.lines.s_nom link_widths = n.links.p_nom_opt - n.links.p_nom - title = "Transmission reinforcement" + title = "Added grid" if transmission: line_widths = n.lines.s_nom_opt link_widths = n.links.p_nom_opt linewidth_factor = 2e3 line_lower_threshold = 0. - title = "Today's transmission" + title = "Today's grid" else: line_widths = n.lines.s_nom_opt - n.lines.s_nom_min link_widths = n.links.p_nom_opt - n.links.p_nom_min - title = "Transmission reinforcement" + title = "Added grid" if transmission: line_widths = n.lines.s_nom_opt link_widths = n.links.p_nom_opt - title = "Total transmission" + title = "Total grid" line_widths[line_widths < line_lower_threshold] = 0. link_widths[link_widths < line_lower_threshold] = 0. @@ -164,12 +206,12 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator line_widths[line_widths > line_upper_threshold] = line_upper_threshold link_widths[link_widths > line_upper_threshold] = line_upper_threshold - fig, ax = plt.subplots(subplot_kw={"projection": ccrs.PlateCarree()}) + fig, ax = plt.subplots(subplot_kw={"projection": ccrs.EqualEarth()}) fig.set_size_inches(7, 6) n.plot( bus_sizes=costs / bus_size_factor, - bus_colors=snakemake.config['plotting']['tech_colors'], + bus_colors=tech_colors, line_colors=ac_color, link_colors=dc_color, line_widths=line_widths / linewidth_factor, @@ -177,45 +219,63 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator ax=ax, **map_opts ) - handles = make_legend_circles_for( - [5e9, 1e9], - scale=bus_size_factor, - facecolor="gray" - ) + sizes = [20, 10, 5] + labels = [f"{s} bEUR/a" for s in sizes] - labels = ["{} bEUR/a".format(s) for s in (5, 1)] - - l2 = ax.legend( - handles, labels, + legend_kw = dict( loc="upper left", - bbox_to_anchor=(0.01, 1.01), - labelspacing=1.0, + bbox_to_anchor=(0.01, 1.06), + labelspacing=0.8, frameon=False, + handletextpad=0, title='System cost', - handler_map=make_handler_map_to_scale_circles_as_in(ax) ) - ax.add_artist(l2) + add_legend_circles( + ax, + sizes, + labels, + scale=bus_size_factor/1e9, + srid=n.srid, + patch_kw=dict(facecolor="lightgrey"), + legend_kw=legend_kw + ) - handles = [] - labels = [] + sizes = [10, 5] + labels = [f"{s} GW" for s in sizes] - for s in (10, 5): - handles.append(plt.Line2D([0], [0], color=ac_color, - linewidth=s * 1e3 / linewidth_factor)) - labels.append("{} GW".format(s)) - - l1_1 = ax.legend( - handles, labels, + legend_kw = dict( loc="upper left", - bbox_to_anchor=(0.22, 1.01), + bbox_to_anchor=(0.27, 1.06), frameon=False, labelspacing=0.8, - handletextpad=1.5, + handletextpad=1, title=title ) - ax.add_artist(l1_1) + add_legend_lines( + ax, + sizes, + labels, + scale=linewidth_factor/1e3, + patch_kw=dict(color='lightgrey'), + legend_kw=legend_kw + ) + + legend_kw = dict( + bbox_to_anchor=(1.55, 1.04), + frameon=False, + ) + + colors = [tech_colors[c] for c in carriers] + [ac_color, dc_color] + labels = carriers + ["HVAC line", "HVDC link"] + + add_legend_patches( + ax, + colors, + labels, + legend_kw=legend_kw, + ) fig.savefig( snakemake.output.map, @@ -226,6 +286,8 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator def plot_h2_map(network): + tech_colors = snakemake.config['plotting']['tech_colors'] + n = network.copy() if "H2 pipeline" not in n.links.carrier.unique(): return @@ -240,7 +302,9 @@ def plot_h2_map(network): # Drop non-electric buses so they don't clutter the plot n.buses.drop(n.buses.index[n.buses.carrier != "AC"], inplace=True) - elec = n.links[n.links.carrier.isin(["H2 Electrolysis", "H2 Fuel Cell"])].index + carriers = ["H2 Electrolysis", "H2 Fuel Cell"] + + elec = n.links[n.links.carrier.isin(carriers)].index bus_sizes = n.links.loc[elec,"p_nom_opt"].groupby([n.links["bus0"], n.links.carrier]).sum() / bus_size_factor @@ -253,20 +317,28 @@ def plot_h2_map(network): h2_retro = n.links.loc[n.links.carrier=='H2 pipeline retrofitted'] - positive_order = h2_retro.bus0 < h2_retro.bus1 - h2_retro_p = h2_retro[positive_order] - swap_buses = {"bus0": "bus1", "bus1": "bus0"} - h2_retro_n = h2_retro[~positive_order].rename(columns=swap_buses) - h2_retro = pd.concat([h2_retro_p, h2_retro_n]) + if not h2_retro.empty: - h2_retro.index = h2_retro.apply( - lambda x: f"H2 pipeline {x.bus0.replace(' H2', '')} -> {x.bus1.replace(' H2', '')}", - axis=1 - ) + positive_order = h2_retro.bus0 < h2_retro.bus1 + h2_retro_p = h2_retro[positive_order] + swap_buses = {"bus0": "bus1", "bus1": "bus0"} + h2_retro_n = h2_retro[~positive_order].rename(columns=swap_buses) + h2_retro = pd.concat([h2_retro_p, h2_retro_n]) - h2_retro = h2_retro["p_nom_opt"] + h2_retro.index = h2_retro.apply( + lambda x: f"H2 pipeline {x.bus0.replace(' H2', '')} -> {x.bus1.replace(' H2', '')}", + axis=1 + ) - link_widths_total = (h2_new + h2_retro) / linewidth_factor + h2_retro = h2_retro["p_nom_opt"] + + h2_total = h2_new + h2_retro + + else: + + h2_total = h2_new + + link_widths_total = h2_total / linewidth_factor link_widths_total = link_widths_total.groupby(level=0).sum().reindex(n.links.index).fillna(0.) link_widths_total[n.links.p_nom_opt < line_lower_threshold] = 0. @@ -279,13 +351,17 @@ def plot_h2_map(network): fig, ax = plt.subplots( figsize=(7, 6), - subplot_kw={"projection": ccrs.PlateCarree()} + subplot_kw={"projection": ccrs.EqualEarth()} ) + + color_h2_pipe = '#a2f0f2' + color_retrofit = '#72d3d6' n.plot( + geomap=True, bus_sizes=bus_sizes, - bus_colors=snakemake.config['plotting']['tech_colors'], - link_colors='#a2f0f2', + bus_colors=tech_colors, + link_colors=color_h2_pipe, link_widths=link_widths_total, branch_components=["Link"], ax=ax, @@ -293,54 +369,70 @@ def plot_h2_map(network): ) n.plot( - geomap=False, + geomap=True, # set False in PyPSA 0.19 bus_sizes=0, - link_colors='#72d3d6', + link_colors=color_retrofit, link_widths=link_widths_retro, branch_components=["Link"], ax=ax, - **map_opts + # color_geomap=False, # needs PyPSA 0.19 + boundaries=map_opts["boundaries"] ) - handles = make_legend_circles_for( - [50000, 10000], - scale=bus_size_factor, - facecolor='grey' - ) + sizes = [50, 10] + labels = [f"{s} GW" for s in sizes] - labels = ["{} GW".format(s) for s in (50, 10)] - - l2 = ax.legend( - handles, labels, + legend_kw = dict( loc="upper left", - bbox_to_anchor=(-0.03, 1.01), - labelspacing=1.0, + bbox_to_anchor=(0, 1), + labelspacing=0.8, + handletextpad=0, frameon=False, - title='Electrolyzer capacity', - handler_map=make_handler_map_to_scale_circles_as_in(ax) ) - ax.add_artist(l2) + add_legend_circles(ax, sizes, labels, + scale=bus_size_factor/1e3, + srid=n.srid, + patch_kw=dict(facecolor='lightgrey'), + legend_kw=legend_kw + ) - handles = [] - labels = [] + sizes = [50, 10] + labels = [f"{s} GW" for s in sizes] - for s in (50, 10): - handles.append(plt.Line2D([0], [0], color="grey", - linewidth=s * 1e3 / linewidth_factor)) - labels.append("{} GW".format(s)) - - l1_1 = ax.legend( - handles, labels, + legend_kw = dict( loc="upper left", - bbox_to_anchor=(0.28, 1.01), + bbox_to_anchor=(0.23, 1), frameon=False, labelspacing=0.8, - handletextpad=1.5, - title='H2 pipeline capacity' + handletextpad=1, ) - ax.add_artist(l1_1) + add_legend_lines( + ax, + sizes, + labels, + scale=linewidth_factor/1e3, + patch_kw=dict(color='lightgrey'), + legend_kw=legend_kw, + ) + + colors = [tech_colors[c] for c in carriers] + [color_h2_pipe, color_retrofit] + labels = carriers + ["H2 pipeline (total)", "H2 pipeline (repurposed)"] + + legend_kw = dict( + loc="upper left", + bbox_to_anchor=(0, 1.13), + ncol=2, + frameon=False, + ) + + add_legend_patches( + ax, + colors, + labels, + legend_kw=legend_kw + ) fig.savefig( snakemake.output.map.replace("-costs-all","-h2_network"), @@ -400,89 +492,126 @@ def plot_ch4_map(network): link_widths_used = max_usage / linewidth_factor link_widths_used[max_usage < line_lower_threshold] = 0. - link_color_used = n.links.carrier.map({"gas pipeline": "#f08080", - "gas pipeline new": "#c46868"}) + tech_colors = snakemake.config['plotting']['tech_colors'] + + pipe_colors = { + "gas pipeline": "#f08080", + "gas pipeline new": "#c46868", + "gas pipeline (2020)": 'lightgrey', + "gas pipeline (available)": '#e8d1d1', + } + + link_color_used = n.links.carrier.map(pipe_colors) n.links.bus0 = n.links.bus0.str.replace(" gas", "") n.links.bus1 = n.links.bus1.str.replace(" gas", "") - tech_colors = snakemake.config['plotting']['tech_colors'] - bus_colors = { "fossil gas": tech_colors["fossil gas"], "methanation": tech_colors["methanation"], "biogas": "seagreen" } - fig, ax = plt.subplots(figsize=(7,6), subplot_kw={"projection": ccrs.PlateCarree()}) + fig, ax = plt.subplots(figsize=(7,6), subplot_kw={"projection": ccrs.EqualEarth()}) n.plot( bus_sizes=bus_sizes, bus_colors=bus_colors, - link_colors='lightgrey', + link_colors=pipe_colors['gas pipeline (2020)'], link_widths=link_widths_orig, branch_components=["Link"], ax=ax, + geomap=True, **map_opts ) n.plot( - geomap=False, + geomap=True, # set False in PyPSA 0.19 ax=ax, bus_sizes=0., - link_colors='#e8d1d1', + link_colors=pipe_colors['gas pipeline (available)'], link_widths=link_widths_rem, branch_components=["Link"], - **map_opts + # color_geomap=False, # needs PyPSA 0.19 + boundaries=map_opts["boundaries"] ) n.plot( - geomap=False, + geomap=True, # set False in PyPSA 0.19 ax=ax, bus_sizes=0., link_colors=link_color_used, link_widths=link_widths_used, branch_components=["Link"], - **map_opts + # color_geomap=False, # needs PyPSA 0.19 + boundaries=map_opts["boundaries"] ) - handles = make_legend_circles_for( - [10e6, 100e6], - scale=bus_size_factor, - facecolor='grey' - ) - labels = ["{} TWh".format(s) for s in (10, 100)] + sizes = [100, 10] + labels = [f"{s} TWh" for s in sizes] - l2 = ax.legend( - handles, labels, + legend_kw = dict( loc="upper left", - bbox_to_anchor=(-0.03, 1.01), - labelspacing=1.0, + bbox_to_anchor=(0, 1.03), + labelspacing=0.8, frameon=False, - title='gas generation', - handler_map=make_handler_map_to_scale_circles_as_in(ax) + handletextpad=1, + title='Gas Sources', ) - ax.add_artist(l2) + add_legend_circles( + ax, + sizes, + labels, + scale=bus_size_factor/1e6, + srid=n.srid, + patch_kw=dict(facecolor='lightgrey'), + legend_kw=legend_kw, + ) - handles = [] - labels = [] - - for s in (50, 10): - handles.append(plt.Line2D([0], [0], color="grey", linewidth=s * 1e3 / linewidth_factor)) - labels.append("{} GW".format(s)) + sizes = [50, 10] + labels = [f"{s} GW" for s in sizes] - l1_1 = ax.legend( - handles, labels, + legend_kw = dict( loc="upper left", - bbox_to_anchor=(0.28, 1.01), + bbox_to_anchor=(0.25, 1.03), frameon=False, labelspacing=0.8, - handletextpad=1.5, - title='gas pipeline used capacity' + handletextpad=1, + title='Gas Pipeline' ) - ax.add_artist(l1_1) + add_legend_lines( + ax, + sizes, + labels, + scale=linewidth_factor/1e3, + patch_kw=dict(color='lightgrey'), + legend_kw=legend_kw, + ) + + colors = list(pipe_colors.values()) + list(bus_colors.values()) + labels = list(pipe_colors.keys()) + list(bus_colors.keys()) + + # legend on the side + # legend_kw = dict( + # bbox_to_anchor=(1.47, 1.04), + # frameon=False, + # ) + + legend_kw = dict( + loc='upper left', + bbox_to_anchor=(0, 1.24), + ncol=2, + frameon=False, + ) + + add_legend_patches( + ax, + colors, + labels, + legend_kw=legend_kw, + ) fig.savefig( snakemake.output.map.replace("-costs-all","-ch4_network"), @@ -500,13 +629,13 @@ def plot_map_without(network): fig, ax = plt.subplots( figsize=(7, 6), - subplot_kw={"projection": ccrs.PlateCarree()} + subplot_kw={"projection": ccrs.EqualEarth()} ) # PDF has minimum width, so set these to zero line_lower_threshold = 200. line_upper_threshold = 1e4 - linewidth_factor = 2e3 + linewidth_factor = 3e3 ac_color = "gray" dc_color = "m" @@ -709,7 +838,7 @@ if __name__ == "__main__": plot_map(n, components=["generators", "links", "stores", "storage_units"], - bus_size_factor=1.5e10, + bus_size_factor=2e10, transmission=False ) From 3323f348965794fc4e54a4c17abf10327897454b Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Fri, 4 Feb 2022 12:26:58 +0100 Subject: [PATCH 02/56] bugfix: also plot h2 corridors where no retrofit --- scripts/plot_network.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 62ac5ad6..3a4859ce 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -13,7 +13,7 @@ from make_summary import assign_carriers from plot_summary import rename_techs, preferred_order from helper import override_component_attrs -plt.style.use(['ggplot', "../matplotlibrc"]) +plt.style.use(['ggplot', "matplotlibrc"]) def rename_techs_tyndp(tech): @@ -313,7 +313,7 @@ def plot_h2_map(network): n.links.drop(n.links.index[~n.links.carrier.str.contains("H2 pipeline")], inplace=True) - h2_new = n.links.loc[n.links.carrier=="H2 pipeline", "p_nom_opt"] + h2_new = n.links.loc[n.links.carrier=="H2 pipeline"] h2_retro = n.links.loc[n.links.carrier=='H2 pipeline retrofitted'] @@ -325,21 +325,28 @@ def plot_h2_map(network): h2_retro_n = h2_retro[~positive_order].rename(columns=swap_buses) h2_retro = pd.concat([h2_retro_p, h2_retro_n]) + h2_retro["index_orig"] = h2_retro.index h2_retro.index = h2_retro.apply( lambda x: f"H2 pipeline {x.bus0.replace(' H2', '')} -> {x.bus1.replace(' H2', '')}", axis=1 ) - h2_retro = h2_retro["p_nom_opt"] + retro_w_new_i = h2_retro.index.intersection(h2_new.index) + h2_retro_w_new = h2_retro.loc[retro_w_new_i] - h2_total = h2_new + h2_retro + retro_wo_new_i = h2_retro.index.difference(h2_new.index) + h2_retro_wo_new = h2_retro.loc[retro_wo_new_i] + h2_retro_wo_new.index = h2_retro_wo_new.index_orig + + to_concat = [h2_new, h2_retro_w_new, h2_retro_wo_new] + h2_total = pd.concat(to_concat).p_nom_opt.groupby(level=0).sum() else: h2_total = h2_new link_widths_total = h2_total / linewidth_factor - link_widths_total = link_widths_total.groupby(level=0).sum().reindex(n.links.index).fillna(0.) + link_widths_total = link_widths_total.reindex(n.links.index).fillna(0.) link_widths_total[n.links.p_nom_opt < line_lower_threshold] = 0. retro = n.links.p_nom_opt.where(n.links.carrier=='H2 pipeline retrofitted', other=0.) From 4b1360c3f0946238a41de75a66582bc1c71a48e2 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sun, 20 Feb 2022 15:59:51 +0100 Subject: [PATCH 03/56] do not aggregate rooftop and solar PV in plots --- scripts/plot_network.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 3a4859ce..e2409a99 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -26,8 +26,8 @@ def rename_techs_tyndp(tech): return "H2 storage" elif tech in ["OCGT", "CHP", "gas boiler", "H2 Fuel Cell"]: return "gas-to-power/heat" - elif "solar" in tech: - return "solar" + # elif "solar" in tech: + # return "solar" elif tech == "Fischer-Tropsch": return "power-to-liquid" elif "offshore wind" in tech: From c754f253bc21afb264aa9697d19ec42d4203944d Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sun, 20 Feb 2022 16:13:11 +0100 Subject: [PATCH 04/56] plotting adjustments for pypsa 0.19.1 --- config.default.yaml | 2 +- scripts/plot_network.py | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 5340682b..cb0b70ff 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -387,7 +387,7 @@ plotting: boundaries: [-11, 30, 34, 71] color_geomap: ocean: white - land: whitesmoke + land: white costs_max: 1000 costs_threshold: 1 energy_max: 20000 diff --git a/scripts/plot_network.py b/scripts/plot_network.py index e2409a99..0f4abcee 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -263,7 +263,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator ) legend_kw = dict( - bbox_to_anchor=(1.55, 1.04), + bbox_to_anchor=(1.52, 1.04), frameon=False, ) @@ -361,13 +361,18 @@ def plot_h2_map(network): subplot_kw={"projection": ccrs.EqualEarth()} ) - color_h2_pipe = '#a2f0f2' - color_retrofit = '#72d3d6' + color_h2_pipe = '#b3f3f4' + color_retrofit = '#54cacd' + bus_colors = { + "H2 Electrolysis": "#ff29d9", + "H2 Fuel Cell": "#6b3161", + } + n.plot( geomap=True, bus_sizes=bus_sizes, - bus_colors=tech_colors, + bus_colors=bus_colors, link_colors=color_h2_pipe, link_widths=link_widths_total, branch_components=["Link"], @@ -376,13 +381,13 @@ def plot_h2_map(network): ) n.plot( - geomap=True, # set False in PyPSA 0.19 + geomap=True, bus_sizes=0, link_colors=color_retrofit, link_widths=link_widths_retro, branch_components=["Link"], ax=ax, - # color_geomap=False, # needs PyPSA 0.19 + color_geomap=False, boundaries=map_opts["boundaries"] ) @@ -424,7 +429,7 @@ def plot_h2_map(network): legend_kw=legend_kw, ) - colors = [tech_colors[c] for c in carriers] + [color_h2_pipe, color_retrofit] + colors = [bus_colors[c] for c in carriers] + [color_h2_pipe, color_retrofit] labels = carriers + ["H2 pipeline (total)", "H2 pipeline (repurposed)"] legend_kw = dict( @@ -533,24 +538,24 @@ def plot_ch4_map(network): ) n.plot( - geomap=True, # set False in PyPSA 0.19 + geomap=True, ax=ax, bus_sizes=0., link_colors=pipe_colors['gas pipeline (available)'], link_widths=link_widths_rem, branch_components=["Link"], - # color_geomap=False, # needs PyPSA 0.19 + color_geomap=False, boundaries=map_opts["boundaries"] ) n.plot( - geomap=True, # set False in PyPSA 0.19 + geomap=True, ax=ax, bus_sizes=0., link_colors=link_color_used, link_widths=link_widths_used, branch_components=["Link"], - # color_geomap=False, # needs PyPSA 0.19 + color_geomap=False, boundaries=map_opts["boundaries"] ) From a8171ec9f3e6b9c6a04edb6635420098f4c260e0 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 28 Jun 2022 18:03:29 +0200 Subject: [PATCH 05/56] color adaptations, new features --- Snakefile | 3 +- scripts/helper.py | 2 -- scripts/plot_network.py | 77 +++++++++++++++++++++++++++++------------ 3 files changed, 56 insertions(+), 26 deletions(-) diff --git a/Snakefile b/Snakefile index d428db45..b5756646 100644 --- a/Snakefile +++ b/Snakefile @@ -478,7 +478,8 @@ rule prepare_sector_network: rule plot_network: input: overrides="data/override_component_attrs", - network=RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc" + network=RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", + regions='../pypsa-eur/resources/regions_onshore_elec_s{simpl}_{clusters}.geojson' output: map=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", today=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}-today.pdf" diff --git a/scripts/helper.py b/scripts/helper.py index b176ccee..ca35c019 100644 --- a/scripts/helper.py +++ b/scripts/helper.py @@ -42,9 +42,7 @@ def mock_snakemake(rulename, **wildcards): This function is expected to be executed from the 'scripts'-directory of ' the snakemake project. It returns a snakemake.script.Snakemake object, based on the Snakefile. - If a rule has wildcards, you have to specify them in **wildcards. - Parameters ---------- rulename: str diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 0f4abcee..fc252229 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -2,6 +2,7 @@ import pypsa import numpy as np import pandas as pd +import geopandas as gpd import matplotlib.pyplot as plt import cartopy.crs as ccrs @@ -63,7 +64,6 @@ def add_legend_circles(ax, sizes, labels, scale=1, srid=None, patch_kw={}, legen if srid is not None: area_correction = projected_area_factor(ax, n.srid)**2 - print(area_correction) sizes = [s * area_correction for s in sizes] handles = make_legend_circles_for(sizes, scale, **patch_kw) @@ -113,7 +113,9 @@ def assign_location(n): def plot_map(network, components=["links", "stores", "storage_units", "generators"], - bus_size_factor=1.7e10, transmission=False): + bus_size_factor=1.7e10, transmission=False, with_legend=True): + + tech_colors = snakemake.config['plotting']['tech_colors'] tech_colors = snakemake.config['plotting']['tech_colors'] @@ -174,9 +176,9 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator # PDF has minimum width, so set these to zero line_lower_threshold = 500. line_upper_threshold = 1e4 - linewidth_factor = 2e3 - ac_color = "gray" - dc_color = "m" + linewidth_factor = 4e3 + ac_color = "rosybrown" + dc_color = "darkseagreen" if snakemake.wildcards["lv"] == "1.0": # should be zero @@ -221,6 +223,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator sizes = [20, 10, 5] labels = [f"{s} bEUR/a" for s in sizes] + sizes = [s/bus_size_factor*1e9 for s in sizes] legend_kw = dict( loc="upper left", @@ -235,7 +238,6 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator ax, sizes, labels, - scale=bus_size_factor/1e9, srid=n.srid, patch_kw=dict(facecolor="lightgrey"), legend_kw=legend_kw @@ -267,15 +269,17 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator frameon=False, ) - colors = [tech_colors[c] for c in carriers] + [ac_color, dc_color] - labels = carriers + ["HVAC line", "HVDC link"] + if with_legend: - add_legend_patches( - ax, - colors, - labels, - legend_kw=legend_kw, - ) + colors = [tech_colors[c] for c in carriers] + [ac_color, dc_color] + labels = carriers + ["HVAC line", "HVDC link"] + + add_legend_patches( + ax, + colors, + labels, + legend_kw=legend_kw, + ) fig.savefig( snakemake.output.map, @@ -284,7 +288,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator ) -def plot_h2_map(network): +def plot_h2_map(network, regions): tech_colors = snakemake.config['plotting']['tech_colors'] @@ -294,6 +298,10 @@ def plot_h2_map(network): assign_location(n) + h2_storage = n.stores.query("carrier == 'H2'") + regions["H2"] = h2_storage.rename(index=h2_storage.bus.map(n.buses.location)).e_nom_opt.div(1e6) # TWh + regions["H2"] = regions["H2"].where(regions["H2"] > 0.1) + bus_size_factor = 1e5 linewidth_factor = 1e4 # MW below which not drawn @@ -356,17 +364,20 @@ def plot_h2_map(network): n.links.bus0 = n.links.bus0.str.replace(" H2", "") n.links.bus1 = n.links.bus1.str.replace(" H2", "") + proj = ccrs.EqualEarth() + regions = regions.to_crs(proj.proj4_init) + fig, ax = plt.subplots( figsize=(7, 6), - subplot_kw={"projection": ccrs.EqualEarth()} + subplot_kw={"projection": proj} ) color_h2_pipe = '#b3f3f4' - color_retrofit = '#54cacd' + color_retrofit = '#499a9c' bus_colors = { "H2 Electrolysis": "#ff29d9", - "H2 Fuel Cell": "#6b3161", + "H2 Fuel Cell": '#805394' } n.plot( @@ -391,8 +402,24 @@ def plot_h2_map(network): boundaries=map_opts["boundaries"] ) + regions.plot( + ax=ax, + column="H2", + cmap='Blues', + linewidths=0, + legend=True, + vmax=10, + vmin=0, + legend_kwds={ + "label": "Hydrogen Storage [TWh]", + "shrink": 0.7, + "extend": "max", + }, + ) + sizes = [50, 10] labels = [f"{s} GW" for s in sizes] + sizes = [s/bus_size_factor*1e3 for s in sizes] legend_kw = dict( loc="upper left", @@ -403,7 +430,6 @@ def plot_h2_map(network): ) add_legend_circles(ax, sizes, labels, - scale=bus_size_factor/1e3, srid=n.srid, patch_kw=dict(facecolor='lightgrey'), legend_kw=legend_kw @@ -446,6 +472,9 @@ def plot_h2_map(network): legend_kw=legend_kw ) + plt.gca().outline_patch.set_visible(False) + ax.set_facecolor("white") + fig.savefig( snakemake.output.map.replace("-costs-all","-h2_network"), bbox_inches="tight" @@ -561,6 +590,7 @@ def plot_ch4_map(network): sizes = [100, 10] labels = [f"{s} TWh" for s in sizes] + sizes = [s/bus_size_factor*1e6 for s in sizes] legend_kw = dict( loc="upper left", @@ -575,7 +605,6 @@ def plot_ch4_map(network): ax, sizes, labels, - scale=bus_size_factor/1e6, srid=n.srid, patch_kw=dict(facecolor='lightgrey'), legend_kw=legend_kw, @@ -648,8 +677,8 @@ def plot_map_without(network): line_lower_threshold = 200. line_upper_threshold = 1e4 linewidth_factor = 3e3 - ac_color = "gray" - dc_color = "m" + ac_color = "rosybrown" + dc_color = "darkseagreen" # hack because impossible to drop buses... if "EU gas" in n.buses.index: @@ -846,6 +875,8 @@ if __name__ == "__main__": overrides = override_component_attrs(snakemake.input.overrides) n = pypsa.Network(snakemake.input.network, override_component_attrs=overrides) + regions = gpd.read_file(snakemake.input.regions).set_index("name") + map_opts = snakemake.config['plotting']['map'] plot_map(n, @@ -854,7 +885,7 @@ if __name__ == "__main__": transmission=False ) - plot_h2_map(n) + plot_h2_map(n, regions) plot_ch4_map(n) plot_map_without(n) From 8143f7e0fda9ac4baf477b289939a14038884288 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Fri, 1 Jul 2022 10:16:11 +0200 Subject: [PATCH 06/56] remove accidental config file additions --- config.co2seq.yaml | 595 --------------------------------------- config.cost.yaml | 594 --------------------------------------- config.decentral.yaml | 592 --------------------------------------- config.gas.yaml | 590 --------------------------------------- config.h2.yaml | 596 ---------------------------------------- config.import.yaml | 626 ------------------------------------------ config.lv.yaml | 594 --------------------------------------- config.onw.yaml | 594 --------------------------------------- config.spatial.yaml | 593 --------------------------------------- config.temporal.yaml | 590 --------------------------------------- 10 files changed, 5964 deletions(-) delete mode 100644 config.co2seq.yaml delete mode 100644 config.cost.yaml delete mode 100644 config.decentral.yaml delete mode 100644 config.gas.yaml delete mode 100644 config.h2.yaml delete mode 100644 config.import.yaml delete mode 100644 config.lv.yaml delete mode 100644 config.onw.yaml delete mode 100644 config.spatial.yaml delete mode 100644 config.temporal.yaml diff --git a/config.co2seq.yaml b/config.co2seq.yaml deleted file mode 100644 index 7d3fa6c4..00000000 --- a/config.co2seq.yaml +++ /dev/null @@ -1,595 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-co2seq # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.5 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq50 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq100 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq200 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq400 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq600 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq800 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5-seq1000 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.cost.yaml b/config.cost.yaml deleted file mode 100644 index 402b5943..00000000 --- a/config.cost.yaml +++ /dev/null @@ -1,594 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-cost # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.5 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-solar-c0.75 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-wind-c0.75 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-Electrolysis-c0.75 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-SMR-c0.75 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-battery-c0.75 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5-DAC-c0.75 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.decentral.yaml b/config.decentral.yaml deleted file mode 100644 index 5d1489ea..00000000 --- a/config.decentral.yaml +++ /dev/null @@ -1,592 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-decentral # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - opt - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral-noH2network - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral-onwind+p0 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-decentral-noH2network-onwind+p0 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.gas.yaml b/config.gas.yaml deleted file mode 100644 index e31abd80..00000000 --- a/config.gas.yaml +++ /dev/null @@ -1,590 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-gas # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.0 - - 1.5 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: true - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 170000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.h2.yaml b/config.h2.yaml deleted file mode 100644 index b69e7955..00000000 --- a/config.h2.yaml +++ /dev/null @@ -1,596 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-h2 # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.0 - #- 1.25 - - opt - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-noH2network - #- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-noH2network-onwind+p0.25 - #- Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.25 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-noH2network-onwind+p0 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.import.yaml b/config.import.yaml deleted file mode 100644 index f5a6cc20..00000000 --- a/config.import.yaml +++ /dev/null @@ -1,626 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-import # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.5 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-import - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: [2030] # investment years for myopic and perfect; or costs year for overnight - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 3 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - import: - capacity_boost: 2 - options: - - pipeline-h2 - - shipping-lh2 - - shipping-lch4 - - shipping-ftfuel - - hvdc - # limit: 100 # TWh - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - import: - capacity_boost: 2 - options: - - pipeline-h2 - - shipping-lh2 - - shipping-lch4 - - shipping-ftfuel - - hvdc - # limit: 100 # TWh - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 8 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 160000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - fossil gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - gas pipeline new: '#a87c62' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - solid: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - biomass: '#baa741' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#d8f9b8' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - hydrogen: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - H2 storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 pipeline retrofitted: '#ba99b5' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - methane: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - liquid: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#f29dae' - CCS: '#f29dae' - CO2 sequestration: '#f29dae' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#2fb537' - power-to-gas: '#c44ce6' - power-to-H2: '#ff29d9' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' - waste: '#e3d37d' - other: '#000000' - import pipeline-h2: '#fff6e0' - import shipping-lh2: '#ebe1ca' - import shipping-lch4: '#d6cbb2' - import shipping-ftfuel: '#bdb093' - import hvdc: '#91856a' - diff --git a/config.lv.yaml b/config.lv.yaml deleted file mode 100644 index 04a10a3c..00000000 --- a/config.lv.yaml +++ /dev/null @@ -1,594 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-lv # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.0 - - 1.125 - - 1.25 - - 1.5 - - 1.75 - - 2.0 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.onw.yaml b/config.onw.yaml deleted file mode 100644 index 6b1e31f2..00000000 --- a/config.onw.yaml +++ /dev/null @@ -1,594 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-onw # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.25 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.125 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.25 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.5 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p0.75 - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind+p1 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.spatial.yaml b/config.spatial.yaml deleted file mode 100644 index 44b4e90d..00000000 --- a/config.spatial.yaml +++ /dev/null @@ -1,593 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-spatial # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.5 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 37 - - 50 - - 100 - - 150 - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' diff --git a/config.temporal.yaml b/config.temporal.yaml deleted file mode 100644 index 7b5b6b01..00000000 --- a/config.temporal.yaml +++ /dev/null @@ -1,590 +0,0 @@ -version: 0.6.0 - -logging_level: INFO - -results_dir: results/ -summary_dir: results -costs_dir: ../technology-data/outputs/ -run: 20211218-181-temporal # use this to keep track of runs with different settings -foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) -# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below - -scenario: - simpl: # only relevant for PyPSA-Eur - - '' - lv: # allowed transmission line volume expansion, can be any float >= 1.0 (today) or "opt" - - 1.5 - clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred - - 181 - opts: # only relevant for PyPSA-Eur - - '' - sector_opts: # this is where the main scenario settings are - - Co2L0-3H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5 - - Co2L0-4H-T-H-B-I-A-solar+p3-linemaxext10-onwind-p0.5 - # to really understand the options here, look in scripts/prepare_sector_network.py - # Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%); - # Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions - # xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours - # single letters are sectors: T for land transport, H for building heating, - # B for biomass supply, I for industry, shipping and aviation, - # A for agriculture, forestry and fishing - # solar+c0.5 reduces the capital cost of solar to 50\% of reference value - # solar+p3 multiplies the available installable potential by factor 3 - # co2 stored+e2 multiplies the potential of CO2 sequestration by a factor 2 - # dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv - # for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative - # emissions throughout the transition path in the timeframe determined by the - # planning_horizons), be:beta decay; ex:exponential decay - # cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential - # decay with initial growth rate 0 - planning_horizons: # investment years for myopic and perfect; or costs year for overnight - - 2030 - # for example, set to [2020, 2030, 2040, 2050] for myopic foresight - -# CO2 budget as a fraction of 1990 emissions -# this is over-ridden if CO2Lx is set in sector_opts -# this is also over-ridden if cb is set in sector_opts -co2_budget: - 2020: 0.7011648746 - 2025: 0.5241935484 - 2030: 0.2970430108 - 2035: 0.1500896057 - 2040: 0.0712365591 - 2045: 0.0322580645 - 2050: 0 - -# snapshots are originally set in PyPSA-Eur/config.yaml but used again by PyPSA-Eur-Sec -snapshots: - # arguments to pd.date_range - start: "2013-01-01" - end: "2014-01-01" - closed: left # end is not inclusive - -atlite: - cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc - -# this information is NOT used but needed as an argument for -# pypsa-eur/scripts/add_electricity.py/load_costs in make_summary.py -electricity: - max_hours: - battery: 6 - H2: 168 - -# regulate what components with which carriers are kept from PyPSA-Eur; -# some technologies are removed because they are implemented differently -# (e.g. battery or H2 storage) or have different year-dependent costs -# in PyPSA-Eur-Sec -pypsa_eur: - Bus: - - AC - Link: - - DC - Generator: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - StorageUnit: - - PHS - - hydro - Store: [] - - -energy: - energy_totals_year: 2011 - base_emissions_year: 1990 - eurostat_report_year: 2016 - emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)" - -biomass: - year: 2030 - scenario: ENS_Med - classes: - solid biomass: - - Agricultural waste - - Fuelwood residues - - Secondary Forestry residues - woodchips - - Sawdust - - Residues from landscape care - - Municipal waste - not included: - - Sugar from sugar beet - - Rape seed - - "Sunflower, soya seed " - - Bioethanol barley, wheat, grain maize, oats, other cereals and rye - - Miscanthus, switchgrass, RCG - - Willow - - Poplar - - FuelwoodRW - - C&P_RW - biogas: - - Manure solid, liquid - - Sludge - - -solar_thermal: - clearsky_model: simple # should be "simple" or "enhanced"? - orientation: - slope: 45. - azimuth: 180. - -# only relevant for foresight = myopic or perfect -existing_capacities: - grouping_years: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] - threshold_capacity: 10 - conventional_carriers: - - lignite - - coal - - oil - - uranium - - -sector: - district_heating: - potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating - # increase of today's district heating demand to potential maximum district heating share - # progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating - progress: 1 - # 2020: 0.0 - # 2030: 0.3 - # 2040: 0.6 - # 2050: 1.0 - district_heating_loss: 0.15 - bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM - bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value - transport_heating_deadband_upper: 20. - transport_heating_deadband_lower: 15. - ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband - ICE_upper_degree_factor: 1.6 - EV_lower_degree_factor: 0.98 - EV_upper_degree_factor: 0.63 - bev_dsm: true #turns on EV battery - bev_availability: 0.5 #How many cars do smart charging - bev_energy: 0.05 #average battery size in MWh - bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency - bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S - bev_charge_rate: 0.011 #3-phase charger with 11 kW - bev_avail_max: 0.95 - bev_avail_mean: 0.8 - v2g: true #allows feed-in to grid from EV battery - #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: 0.15 # 1 means all FCEVs - # 2020: 0 - # 2030: 0.05 - # 2040: 0.1 - # 2050: 0.15 - land_transport_electric_share: 0.85 # 1 means all EVs - # 2020: 0 - # 2030: 0.25 - # 2040: 0.6 - # 2050: 0.85 - transport_fuel_cell_efficiency: 0.5 - transport_internal_combustion_efficiency: 0.3 - agriculture_machinery_electric_share: 0 - agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use - agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 - shipping_hydrogen_liquefaction: true # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: 1 # 1 means all hydrogen FC - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.15 - # 2040: 0.3 - # 2045: 0.6 - # 2050: 1 - time_dep_hp_cop: true #time dependent heat pump coefficient of performance - heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py - # conservatively high to cover hot water and space heating in poorly-insulated buildings - reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH) - # this can represent e.g. building renovation, building demolition, or if - # the factor is negative: increasing floor area, increased thermal comfort, population growth - reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand - # the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221 - # 2020: 0.10 # this results in a space heat demand reduction of 10% - # 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita - # 2030: 0.09 - # 2035: 0.11 - # 2040: 0.16 - # 2045: 0.21 - # 2050: 0.29 - retrofitting : # co-optimises building renovation to reduce space heat demand - retro_endogen: false # co-optimise space heat savings - cost_factor: 1.0 # weight costs for building renovation - interest_rate: 0.04 # for investment in building components - annualise_cost: true # annualise the investment costs - tax_weighting: false # weight costs depending on taxes in countries - construction_index: true # weight costs depending on labour/material costs per country - tes: true - tes_tau: # 180 day time constant for centralised, 3 day for decentralised - decentral: 3 - central: 180 - boilers: true - oil_boilers: false - chp: true - micro_chp: false - solar_thermal: true - solar_cf_correction: 0.788457 # = >>> 1/1.2683 - marginal_cost_storage: 0. #1e-4 - methanation: true - helmeth: false - dac: true - co2_vent: false - SMR: true - co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe - co2_sequestration_cost: 20 #EUR/tCO2 for sequestration of CO2 - co2_network: false - cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture - hydrogen_underground_storage: true - hydrogen_underground_storage_locations: - # - onshore # more than 50 km from sea - - nearshore # within 50 km of sea - # - offshore - use_fischer_tropsch_waste_heat: true - use_fuel_cell_waste_heat: true - electricity_distribution_grid: true - electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - electricity_grid_connection: true # only applies to onshore wind and utility PV - H2_network: true - gas_network: false - H2_retrofit: true # if set to True existing gas pipes can be retrofitted to H2 pipes - # according to hydrogen backbone strategy (April, 2020) p.15 - # https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf - # 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity - H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines - gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation - gas_distribution_grid: true - gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_transport: false # biomass transport between nodes - conventional_generation: # generator : carrier - OCGT: gas - - -industry: - St_primary_fraction: 0.3 # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6 - # 2020: 0.6 - # 2025: 0.55 - # 2030: 0.5 - # 2035: 0.45 - # 2040: 0.4 - # 2045: 0.35 - # 2050: 0.3 - DRI_fraction: 1 # fraction of the primary route converted to DRI + EAF - # 2020: 0 - # 2025: 0 - # 2030: 0.05 - # 2035: 0.2 - # 2040: 0.4 - # 2045: 0.7 - # 2050: 1 - H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279 - elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf - Al_primary_fraction: 0.2 # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4 - # 2020: 0.4 - # 2025: 0.375 - # 2030: 0.35 - # 2035: 0.325 - # 2040: 0.3 - # 2045: 0.25 - # 2050: 0.2 - MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf - MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3 - MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy) - MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB) - NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28 - petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28 - HVC_primary_fraction: 0.45 # fraction of today's HVC produced via primary route - HVC_mechanical_recycling_fraction: 0.30 # fraction of today's HVC produced via mechanical recycling - HVC_chemical_recycling_fraction: 0.15 # fraction of today's HVC produced via chemical recycling - HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX - MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756. - MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking - chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43 - MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43 - MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process - methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62 - MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65 - MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65 - hotmaps_locate_missing: false - reference_year: 2015 - # references: - # DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf - # Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050 - -costs: - lifetime: 25 #default lifetime - # From a Lion Hirth paper, also reflects average of Noothout et al 2016 - discountrate: 0.07 - # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501 - USD2013_to_EUR2013: 0.7532 - - # Marginal and capital costs can be overwritten - # capital_cost: - # onwind: 500 - marginal_cost: - solar: 0.01 - onwind: 0.015 - offwind: 0.015 - hydro: 0. - H2: 0. - battery: 0. - - emission_prices: # only used with the option Ep (emission prices) - co2: 0. - - lines: - length_factor: 1.25 #to estimate offwind connection costs - - -solving: - #tmpdir: "path/to/tmp" - options: - formulation: kirchhoff - clip_p_max_pu: 1.e-2 - load_shedding: false - noisy_costs: true - skip_iterations: true - track_iterations: false - min_iterations: 4 - max_iterations: 6 - keep_shadowprices: - - Bus - - Line - - Link - - Transformer - - GlobalConstraint - - Generator - - Store - - StorageUnit - solver: - name: gurobi - threads: 4 - method: 2 # barrier - crossover: 0 - BarConvTol: 1.e-4 - Seed: 123 - AggFill: 0 - PreDual: 0 - GURO_PAR_BARDENSETHRESH: 200 - #FeasibilityTol: 1.e-6 - - #name: cplex - #threads: 4 - #lpmethod: 4 # barrier - #solutiontype: 2 # non basic solution, ie no crossover - #barrier_convergetol: 1.e-5 - #feasopt_tolerance: 1.e-6 - mem: 126000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2 - - -plotting: - map: - boundaries: [-11, 30, 34, 71] - color_geomap: - ocean: white - land: white - costs_max: 1000 - costs_threshold: 1 - energy_max: 20000 - energy_min: -20000 - energy_threshold: 50 - vre_techs: - - onwind - - offwind-ac - - offwind-dc - - solar - - ror - renewable_storage_techs: - - PHS - - hydro - conv_techs: - - OCGT - - CCGT - - Nuclear - - Coal - storage_techs: - - hydro+PHS - - battery - - H2 - load_carriers: - - AC load - AC_carriers: - - AC line - - AC transformer - link_carriers: - - DC line - - Converter AC-DC - heat_links: - - heat pump - - resistive heater - - CHP heat - - CHP electric - - gas boiler - - central heat pump - - central resistive heater - - central CHP heat - - central CHP electric - - central gas boiler - heat_generators: - - gas boiler - - central gas boiler - - solar thermal collector - - central solar thermal collector - tech_colors: - # wind - onwind: "#235ebc" - onshore wind: "#235ebc" - offwind: "#6895dd" - offshore wind: "#6895dd" - offwind-ac: "#6895dd" - offshore wind (AC): "#6895dd" - offwind-dc: "#74c6f2" - offshore wind (DC): "#74c6f2" - # water - hydro: '#298c81' - hydro reservoir: '#298c81' - ror: '#3dbfb0' - run of river: '#3dbfb0' - hydroelectricity: '#298c81' - PHS: '#51dbcc' - wave: '#a7d4cf' - # solar - solar: "#f9d002" - solar PV: "#f9d002" - solar thermal: '#ffbf2b' - solar rooftop: '#ffea80' - # gas - OCGT: '#e0986c' - OCGT marginal: '#e0986c' - OCGT-heat: '#e0986c' - gas boiler: '#db6a25' - gas boilers: '#db6a25' - gas boiler marginal: '#db6a25' - gas: '#e05b09' - natural gas: '#e05b09' - CCGT: '#a85522' - CCGT marginal: '#a85522' - gas for industry co2 to atmosphere: '#692e0a' - gas for industry co2 to stored: '#8a3400' - gas for industry: '#853403' - gas for industry CC: '#692e0a' - gas pipeline: '#ebbca0' - # oil - oil: '#c9c9c9' - oil boiler: '#adadad' - agriculture machinery oil: '#949494' - shipping oil: "#808080" - land transport oil: '#afafaf' - # nuclear - Nuclear: '#ff8c00' - Nuclear marginal: '#ff8c00' - nuclear: '#ff8c00' - uranium: '#ff8c00' - # coal - Coal: '#545454' - coal: '#545454' - Coal marginal: '#545454' - Lignite: '#826837' - lignite: '#826837' - Lignite marginal: '#826837' - # biomass - biogas: '#e3d37d' - solid biomass: '#baa741' - solid biomass transport: '#baa741' - solid biomass for industry: '#7a6d26' - solid biomass for industry CC: '#47411c' - solid biomass for industry co2 from atmosphere: '#736412' - solid biomass for industry co2 to stored: '#47411c' - # power transmission - lines: '#6c9459' - transmission lines: '#6c9459' - electricity distribution grid: '#97ad8c' - # electricity demand - Electric load: '#110d63' - electric demand: '#110d63' - electricity: '#110d63' - industry electricity: '#2d2a66' - industry new electricity: '#2d2a66' - agriculture electricity: '#494778' - # battery + EVs - battery: '#ace37f' - battery storage: '#ace37f' - home battery: '#80c944' - home battery storage: '#80c944' - BEV charger: '#baf238' - V2G: '#e5ffa8' - land transport EV: '#baf238' - Li ion: '#baf238' - # hot water storage - water tanks: '#e69487' - hot water storage: '#e69487' - hot water charging: '#e69487' - hot water discharging: '#e69487' - # heat demand - Heat load: '#cc1f1f' - heat: '#cc1f1f' - heat demand: '#cc1f1f' - rural heat: '#ff5c5c' - central heat: '#cc1f1f' - decentral heat: '#750606' - low-temperature heat for industry: '#8f2727' - process heat: '#ff0000' - agriculture heat: '#d9a5a5' - # heat supply - heat pumps: '#2fb537' - heat pump: '#2fb537' - air heat pump: '#36eb41' - ground heat pump: '#2fb537' - Ambient: '#98eb9d' - CHP: '#8a5751' - CHP CC: '#634643' - CHP heat: '#8a5751' - CHP electric: '#8a5751' - district heating: '#e8beac' - resistive heater: '#c78536' - retrofitting: '#8487e8' - building retrofitting: '#8487e8' - # hydrogen - H2 for industry: "#f073da" - H2 for shipping: "#ebaee0" - H2: '#bf13a0' - SMR: '#870c71' - SMR CC: '#4f1745' - H2 liquefaction: '#d647bd' - hydrogen storage: '#bf13a0' - land transport fuel cell: '#6b3161' - H2 pipeline: '#f081dc' - H2 Fuel Cell: '#c251ae' - H2 Electrolysis: '#ff29d9' - # syngas - Sabatier: '#9850ad' - methanation: '#c44ce6' - helmeth: '#e899ff' - # synfuels - Fischer-Tropsch: '#25c49a' - kerosene for aviation: '#a1ffe6' - naphtha for industry: '#57ebc4' - # co2 - CC: '#9e132c' - CO2 sequestration: '#9e132c' - DAC: '#ff5270' - co2 stored: '#f2385a' - co2: '#f29dae' - co2 vent: '#ffd4dc' - CO2 pipeline: '#f5627f' - # emissions - process emissions CC: '#000000' - process emissions: '#222222' - process emissions to stored: '#444444' - process emissions to atmosphere: '#888888' - oil emissions: '#aaaaaa' - shipping oil emissions: "#555555" - land transport oil emissions: '#777777' - agriculture machinery oil emissions: '#333333' - # other - shipping: '#03a2ff' - power-to-heat: '#cc1f1f' - power-to-gas: '#c44ce6' - power-to-liquid: '#25c49a' - gas-to-power/heat: '#ee8340' From 6c13974643ee9687d3053e29932af73a7da01dc5 Mon Sep 17 00:00:00 2001 From: lisazeyen Date: Mon, 1 Aug 2022 18:02:55 +0200 Subject: [PATCH 07/56] add option to cluster heat buses --- config.default.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/config.default.yaml b/config.default.yaml index b2fa5f6b..ad6764c7 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -154,6 +154,7 @@ sector: # 2040: 0.6 # 2050: 1.0 district_heating_loss: 0.15 + cluster_heat_buses: False # cluster residential and service heat buses to one to save memory bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value transport_heating_deadband_upper: 20. From 973074de217687440af9a86aca8a813dd02ceab9 Mon Sep 17 00:00:00 2001 From: lisazeyen Date: Mon, 1 Aug 2022 18:03:11 +0200 Subject: [PATCH 08/56] add function to cluster heat buses --- scripts/prepare_sector_network.py | 99 +++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 7abdadff..1eabc37d 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -19,6 +19,7 @@ from helper import override_component_attrs, generate_periodic_profiles, update_ from networkx.algorithms.connectivity.edge_augmentation import k_edge_augmentation from networkx.algorithms import complement from pypsa.geo import haversine_pts +from pypsa.io import import_components_from_dataframe import logging logger = logging.getLogger(__name__) @@ -26,6 +27,9 @@ logger = logging.getLogger(__name__) from types import SimpleNamespace spatial = SimpleNamespace() +from distutils.version import LooseVersion +pd_version = LooseVersion(pd.__version__) +agg_group_kwargs = dict(numeric_only=False) if pd_version >= "1.3" else {} def define_spatial(nodes, options): """ @@ -2323,6 +2327,99 @@ def limit_individual_line_extension(n, maxext): hvdc = n.links.index[n.links.carrier == 'DC'] n.links.loc[hvdc, 'p_nom_max'] = n.links.loc[hvdc, 'p_nom'] + maxext + +aggregate_dict = { + "p_nom": "sum", + "s_nom": "sum", + "v_nom": "max", + "v_mag_pu_max": "min", + "v_mag_pu_min": "max", + "p_nom_max": "sum", + "s_nom_max": "sum", + "p_nom_min": "sum", + "s_nom_min": "sum", + 'v_ang_min': "max", + "v_ang_max":"min", + "terrain_factor":"mean", + "num_parallel": "sum", + "p_set": "sum", + "e_initial": "sum", + "e_nom": "sum", + "e_nom_max": "sum", + "e_nom_min": "sum", + "state_of_charge_initial": "sum", + "state_of_charge_set": "sum", + "inflow": "sum", + "p_max_pu": "first", + "x": "mean", + "y": "mean" +} + +def cluster_heat_buses(n): + """Cluster residential and service heat buses to one representative bus. + This can be done to save memory and speed up optimisation + """ + + def define_clustering(attributes, aggregate_dict): + """Define how attributes should be clustered. + Input: + attributes : pd.Index() + aggregate_dict: dictionary (key: name of attribute, value + clustering method) + + Returns: + agg : clustering dictionary + """ + keys = attributes.intersection(aggregate_dict.keys()) + agg = dict( + zip( + attributes.difference(keys), + ["first"] * len(df.columns.difference(keys)), + ) + ) + for key in keys: + agg[key] = aggregate_dict[key] + return agg + + logger.info("Cluster residential and service heat buses.") + components = ["Bus", "Carrier", "Generator", "Link", "Load", "Store"] + + for c in n.iterate_components(components): + df = c.df + cols = df.columns[df.columns.str.contains("bus") | (df.columns=="carrier")] + + # rename columns and index + df[cols] = (df[cols] + .apply(lambda x: x.str.replace("residential ","") + .str.replace("services ", ""), axis=1)) + df = df.rename(index=lambda x: x.replace("residential ","") + .replace("services ", "")) + + + # cluster heat nodes + # static dataframe + agg = define_clustering(df.columns, aggregate_dict) + df = df.groupby(level=0).agg(agg, **agg_group_kwargs) + # time-varying data + pnl = c.pnl + agg = define_clustering(pd.Index(pnl.keys()), aggregate_dict) + for k in pnl.keys(): + pnl[k].rename(columns=lambda x: x.replace("residential ","") + .replace("services ", ""), inplace=True) + pnl[k] = ( + pnl[k] + .groupby(level=0, axis=1) + .agg(agg[k], **agg_group_kwargs) + ) + + # remove unclustered assets of service/residential + to_drop = c.df.index.difference(df.index) + n.mremove(c.name, to_drop) + # add clustered assets + to_add = df.index.difference(c.df.index) + import_components_from_dataframe(n, df.loc[to_add], c.name) + + #%% if __name__ == "__main__": if 'snakemake' not in globals(): @@ -2467,4 +2564,6 @@ if __name__ == "__main__": if options['electricity_grid_connection']: add_electricity_grid_connection(n, costs) + if options["cluster_heat_buses"]: + cluster_heat_buses(n) n.export_to_netcdf(snakemake.output[0]) From cbab86c4bcf2227aaa34f9dfd198e62a6e0d2c27 Mon Sep 17 00:00:00 2001 From: lisazeyen Date: Mon, 1 Aug 2022 18:15:35 +0200 Subject: [PATCH 09/56] add heat buses clustering to myopic --- scripts/add_existing_baseyear.py | 5 ++++- scripts/prepare_sector_network.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/add_existing_baseyear.py b/scripts/add_existing_baseyear.py index 11b8d49b..1cf532a3 100644 --- a/scripts/add_existing_baseyear.py +++ b/scripts/add_existing_baseyear.py @@ -12,7 +12,7 @@ import xarray as xr import pypsa import yaml -from prepare_sector_network import prepare_costs, define_spatial +from prepare_sector_network import prepare_costs, define_spatial, cluster_heat_buses from helper import override_component_attrs, update_config_with_sector_opts from types import SimpleNamespace @@ -495,4 +495,7 @@ if __name__ == "__main__": default_lifetime = snakemake.config['costs']['lifetime'] add_heating_capacities_installed_before_baseyear(n, baseyear, grouping_years, ashp_cop, gshp_cop, time_dep_hp_cop, costs, default_lifetime) + if options["cluster_heat_buses"]: + cluster_heat_buses(n) + n.export_to_netcdf(snakemake.output[0]) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 1eabc37d..c3b518e2 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2564,6 +2564,10 @@ if __name__ == "__main__": if options['electricity_grid_connection']: add_electricity_grid_connection(n, costs) - if options["cluster_heat_buses"]: + first_year_myopic = ((snakemake.config["foresight"] == 'myopic') and + (snakemake.config["scenario"]["planning_horizons"][0]==investment_year)) + + if options["cluster_heat_buses"] and not first_year_myopic: cluster_heat_buses(n) + n.export_to_netcdf(snakemake.output[0]) From 34a3d9aaad05706d73bb1a3857afd7a23087b1e2 Mon Sep 17 00:00:00 2001 From: lisazeyen Date: Tue, 2 Aug 2022 09:27:37 +0200 Subject: [PATCH 10/56] remove depreciated distutils.version --- scripts/prepare_sector_network.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index c3b518e2..c9494d74 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -27,9 +27,9 @@ logger = logging.getLogger(__name__) from types import SimpleNamespace spatial = SimpleNamespace() -from distutils.version import LooseVersion -pd_version = LooseVersion(pd.__version__) -agg_group_kwargs = dict(numeric_only=False) if pd_version >= "1.3" else {} +from packaging.version import Version, parse +pd_version = parse(pd.__version__) +agg_group_kwargs = dict(numeric_only=False) if pd_version >= Version("1.3") else {} def define_spatial(nodes, options): """ From 84618b3ee1c72c32722cf89b73282cc26cc19422 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sun, 13 Nov 2022 13:43:05 +0100 Subject: [PATCH 11/56] distribute international shipping by port trade volumes --- Snakefile | 13 + data/attributed_ports.json | 861 ++++++++++++++++++++++++++++++ scripts/build_shipping_demand.py | 48 ++ scripts/prepare_sector_network.py | 31 +- 4 files changed, 940 insertions(+), 13 deletions(-) create mode 100644 data/attributed_ports.json create mode 100644 scripts/build_shipping_demand.py diff --git a/Snakefile b/Snakefile index 6b195d12..8285700e 100644 --- a/Snakefile +++ b/Snakefile @@ -441,6 +441,18 @@ rule build_population_weighted_energy_totals: script: "scripts/build_population_weighted_energy_totals.py" +rule build_shipping_demand: + input: + ports="data/attributed_ports.json", + scope=pypsaeur("resources/europe_shape.geojson"), + regions=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"), + demand="resources/energy_totals.csv" + output: "resources/shipping_demand_s{simpl}_{clusters}.csv" + threads: 1 + resources: mem_mb=2000 + script: "scripts/build_shipping_demand.py" + + rule build_transport_demand: input: clustered_pop_layout="resources/pop_layout_elec_s{simpl}_{clusters}.csv", @@ -466,6 +478,7 @@ rule prepare_sector_network: energy_totals_name='resources/energy_totals.csv', eurostat=input_eurostat, pop_weighted_energy_totals="resources/pop_weighted_energy_totals_s{simpl}_{clusters}.csv", + shipping_demand="resources/shipping_demand_s{simpl}_{clusters}.csv", transport_demand="resources/transport_demand_s{simpl}_{clusters}.csv", transport_data="resources/transport_data_s{simpl}_{clusters}.csv", avail_profile="resources/avail_profile_s{simpl}_{clusters}.csv", diff --git a/data/attributed_ports.json b/data/attributed_ports.json new file mode 100644 index 00000000..12344811 --- /dev/null +++ b/data/attributed_ports.json @@ -0,0 +1,861 @@ +{ +"type": "FeatureCollection", +"features": [ +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-345---", "LOCODE": "AEAUH", "Name": "Abu Dhabi", "NameWoDiac": "Abu Dhabi", "Status": "AI", "outflows": 41597.142851999997 }, "geometry": { "type": "Point", "coordinates": [ 54.366666666666667, 24.466666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-------", "LOCODE": "AERUW", "Name": "Ar Ruways", "NameWoDiac": "Ar Ruways", "Status": "RL", "outflows": 166556.0 }, "geometry": { "type": "Point", "coordinates": [ 52.733333333333334, 24.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-------", "LOCODE": "AEKLF", "Name": "Khor al Fakkan", "NameWoDiac": "Khor al Fakkan", "Status": "RL", "outflows": 790406.5 }, "geometry": { "type": "Point", "coordinates": [ 56.35, 25.333333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-3-----", "LOCODE": "AEMKH", "Name": "Mina Khalid", "NameWoDiac": "Mina Khalid", "Status": "RL", "outflows": 646965.0 }, "geometry": { "type": "Point", "coordinates": [ 55.366666666666667, 25.35 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-------", "LOCODE": "AEKHL", "Name": "Mina Khalifa\/Abu Dhabi", "NameWoDiac": "Mina Khalifa\/Abu Dhabi", "Status": "RL", "outflows": 18341458.820419993 }, "geometry": { "type": "Point", "coordinates": [ 54.666666666666664, 24.833333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1--4----", "LOCODE": "AEQIW", "Name": "Umm al Qaiwain", "NameWoDiac": "Umm al Qaiwain", "Status": "AI", "outflows": 14196.0 }, "geometry": { "type": "Point", "coordinates": [ 55.55, 25.566666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Antigua and Barbuda", "Function": "1-------", "LOCODE": "AGSJO", "Name": "Saint John's", "NameWoDiac": "Saint John's", "Status": "AI", "outflows": 208663.0 }, "geometry": { "type": "Point", "coordinates": [ -61.85, 17.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1--4----", "LOCODE": "ARBHI", "Name": "Bahía Blanca", "NameWoDiac": "Bahia Blanca", "Status": "AI", "outflows": 677327.625 }, "geometry": { "type": "Point", "coordinates": [ -62.283333333333331, -38.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "12345---", "LOCODE": "ARBUE", "Name": "Buenos Aires", "NameWoDiac": "Buenos Aires", "Status": "AI", "outflows": 11083411.036479998 }, "geometry": { "type": "Point", "coordinates": [ -58.666666666666664, -34.583333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1-345---", "LOCODE": "ARMDQ", "Name": "Mar del Plata", "NameWoDiac": "Mar del Plata", "Status": "AI", "outflows": 24960.0 }, "geometry": { "type": "Point", "coordinates": [ -57.533333333333331, -38.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1--4----", "LOCODE": "ARPUD", "Name": "Puerto Deseado", "NameWoDiac": "Puerto Deseado", "Status": "AI", "outflows": 24960.0 }, "geometry": { "type": "Point", "coordinates": [ -65.9, -47.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1--4----", "LOCODE": "ARPMY", "Name": "Puerto Madryn", "NameWoDiac": "Puerto Madryn", "Status": "AI", "outflows": 671555.625 }, "geometry": { "type": "Point", "coordinates": [ -65.033333333333331, -42.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "12345---", "LOCODE": "ARROS", "Name": "Rosario", "NameWoDiac": "Rosario", "Status": "AI", "outflows": 110227.0 }, "geometry": { "type": "Point", "coordinates": [ -60.65, -32.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1-------", "LOCODE": "ARSAE", "Name": "San Antonio Este", "NameWoDiac": "San Antonio Este", "Status": "RQ", "outflows": 23075.0 }, "geometry": { "type": "Point", "coordinates": [ -64.733333333333334, -40.8 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1--4----", "LOCODE": "ARUSH", "Name": "Ushuaia", "NameWoDiac": "Ushuaia", "Status": "AI", "outflows": 30732.0 }, "geometry": { "type": "Point", "coordinates": [ -68.3, -54.8 ] } }, +{ "type": "Feature", "properties": { "Country": "Argentina", "Function": "1-------", "LOCODE": "ARZAE", "Name": "Zárate", "NameWoDiac": "Zarate", "Status": "AI", "outflows": 164645.0 }, "geometry": { "type": "Point", "coordinates": [ -59.033333333333331, -34.1 ] } }, +{ "type": "Feature", "properties": { "Country": "American Samoa", "Function": "1--45---", "LOCODE": "ASPPG", "Name": "Pago Pago", "NameWoDiac": "Pago Pago", "Status": "AI", "outflows": 338184.5 }, "geometry": { "type": "Point", "coordinates": [ -170.7, 14.266666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "12345---", "LOCODE": "AUADL", "Name": "Adelaide", "NameWoDiac": "Adelaide", "Status": "AC", "outflows": 5338947.2004299983 }, "geometry": { "type": "Point", "coordinates": [ 138.583333333333343, -34.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "12345---", "LOCODE": "AUBNE", "Name": "Brisbane", "NameWoDiac": "Brisbane", "Status": "AC", "outflows": 8402703.6401499975 }, "geometry": { "type": "Point", "coordinates": [ 153.01666666666668, -27.466666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "12345---", "LOCODE": "AUDRW", "Name": "Darwin", "NameWoDiac": "Darwin", "Status": "AC", "outflows": 88640.416664000004 }, "geometry": { "type": "Point", "coordinates": [ 130.833333333333343, -12.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "12345---", "LOCODE": "AUMEL", "Name": "Melbourne", "NameWoDiac": "Melbourne", "Status": "AC", "outflows": 9957826.0957300067 }, "geometry": { "type": "Point", "coordinates": [ 144.966666666666669, -37.81666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "12345---", "LOCODE": "AUSYD", "Name": "Sydney", "NameWoDiac": "Sydney", "Status": "AC", "outflows": 10352110.143530006 }, "geometry": { "type": "Point", "coordinates": [ 151.2, -33.85 ] } }, +{ "type": "Feature", "properties": { "Country": "Aruba", "Function": "1-------", "LOCODE": "AWBAR", "Name": "Barcadera", "NameWoDiac": "Barcadera", "Status": "RL", "outflows": 65431.8 }, "geometry": { "type": "Point", "coordinates": [ -69.983333333333334, 12.483333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Bangladesh", "Function": "1--45---", "LOCODE": "BDCGP", "Name": "Chattogram", "NameWoDiac": "Chattogram", "Status": "AI", "outflows": 1379549.0523300001 }, "geometry": { "type": "Point", "coordinates": [ 91.833333333333329, 22.333333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "Belgium", "Function": "12345---", "LOCODE": "BEANR", "Name": "Antwerpen", "NameWoDiac": "Antwerpen", "Status": "AI", "outflows": 51827814.560638025 }, "geometry": { "type": "Point", "coordinates": [ 4.416666666666667, 51.216666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Belgium", "Function": "1234----", "LOCODE": "BEGNE", "Name": "Gent (Ghent)", "NameWoDiac": "Gent (Ghent)", "Status": "AI", "outflows": 13260.0 }, "geometry": { "type": "Point", "coordinates": [ 3.716666666666667, 51.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Belgium", "Function": "1-3-----", "LOCODE": "BEZEE", "Name": "Zeebrugge", "NameWoDiac": "Zeebrugge", "Status": "AI", "outflows": 5650583.2502299985 }, "geometry": { "type": "Point", "coordinates": [ 3.2, 51.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Bahrain", "Function": "1-------", "LOCODE": "BHMIN", "Name": "Mina Sulman Port", "NameWoDiac": "Mina Sulman Port", "Status": "AA", "outflows": 632118.5 }, "geometry": { "type": "Point", "coordinates": [ 50.616666666666667, 26.2 ] } }, +{ "type": "Feature", "properties": { "Country": "Bonaire, Sint Eustatius and Saba", "Function": "1-------", "LOCODE": "BQKRA", "Name": "Kralendijk", "NameWoDiac": "Kralendijk", "Status": "AI", "outflows": 117162.5 }, "geometry": { "type": "Point", "coordinates": [ -68.266666666666666, 12.15 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "-23-----", "LOCODE": "BRIGI", "Name": "Itaguaí", "NameWoDiac": "Itaguai", "Status": "RL", "outflows": 2879859.0476199985 }, "geometry": { "type": "Point", "coordinates": [ -43.766666666666666, -22.866666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-3-----", "LOCODE": "BRIOA", "Name": "Itapoá", "NameWoDiac": "Itapoa", "Status": "RL", "outflows": 9027277.19 }, "geometry": { "type": "Point", "coordinates": [ -48.6, -26.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-34----", "LOCODE": "BRNVT", "Name": "Navegantes", "NameWoDiac": "Navegantes", "Status": "AI", "outflows": 10279036.91334 }, "geometry": { "type": "Point", "coordinates": [ -48.65, -26.9 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRPNG", "Name": "Paranaguá", "NameWoDiac": "Paranagua", "Status": "AI", "outflows": 13802196.524050001 }, "geometry": { "type": "Point", "coordinates": [ -48.5, -25.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "12------", "LOCODE": "BRPEC", "Name": "Pecém Pt\/São Gonçalo do Amarante", "NameWoDiac": "Pecem Pt\/Sao Goncalo do Amarante", "Status": "AA", "outflows": 2174063.6046599997 }, "geometry": { "type": "Point", "coordinates": [ -38.866666666666667, -3.533333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "123-567-", "LOCODE": "BRRIO", "Name": "Rio de Janeiro", "NameWoDiac": "Rio de Janeiro", "Status": "AA", "outflows": 9600221.3041699976 }, "geometry": { "type": "Point", "coordinates": [ -43.233333333333334, -22.883333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-------", "LOCODE": "BRMCP", "Name": "Santana Pt.\/Macapá", "NameWoDiac": "Santana Pt.\/Macapa", "Status": "AA", "outflows": 837504.77784000011 }, "geometry": { "type": "Point", "coordinates": [ -51.166666666666664, -0.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1234----", "LOCODE": "BRSSZ", "Name": "Santos", "NameWoDiac": "Santos", "Status": "AI", "outflows": 17682777.003890004 }, "geometry": { "type": "Point", "coordinates": [ -46.333333333333336, -23.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-34----", "LOCODE": "BRSLZ", "Name": "São Luís", "NameWoDiac": "Sao Luis", "Status": "AI", "outflows": 45240.0 }, "geometry": { "type": "Point", "coordinates": [ -44.3, -2.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-------", "LOCODE": "BRVIX", "Name": "Vitória Pt", "NameWoDiac": "Vitoria Pt", "Status": "AA", "outflows": 738129.52788000007 }, "geometry": { "type": "Point", "coordinates": [ -40.333333333333336, -20.316666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Bahamas", "Function": "1--45---", "LOCODE": "BSNAS", "Name": "Nassau", "NameWoDiac": "Nassau", "Status": "AI", "outflows": 62842.0 }, "geometry": { "type": "Point", "coordinates": [ -77.35, 25.083333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "Belize", "Function": "1-34----", "LOCODE": "BZBGK", "Name": "Big Creek", "NameWoDiac": "Big Creek", "Status": "RL", "outflows": 199368.0 }, "geometry": { "type": "Point", "coordinates": [ -88.4, 16.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1-34----", "LOCODE": "CANWP", "Name": "Argentia", "NameWoDiac": "Argentia", "Status": "AI", "outflows": 27248.000001 }, "geometry": { "type": "Point", "coordinates": [ -54.0, 47.3 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1-34-6--", "LOCODE": "CASJB", "Name": "Saint-John", "NameWoDiac": "Saint-John", "Status": "AS", "outflows": 389420.2 }, "geometry": { "type": "Point", "coordinates": [ -66.066666666666663, 45.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1-3-----", "LOCODE": "CASJF", "Name": "Saint-John's", "NameWoDiac": "Saint-John's", "Status": "AS", "outflows": 26845.0 }, "geometry": { "type": "Point", "coordinates": [ -52.733333333333334, 47.56666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Congo, The Democratic Republic of the", "Function": "1-3-----", "LOCODE": "CDBNW", "Name": "Banana", "NameWoDiac": "Banana", "Status": "RL", "outflows": 48681.0 }, "geometry": { "type": "Point", "coordinates": [ 12.401211892732039, -6.003633266930797 ] } }, +{ "type": "Feature", "properties": { "Country": "Congo", "Function": "1--45---", "LOCODE": "CGPNR", "Name": "Pointe Noire", "NameWoDiac": "Pointe Noire", "Status": "AI", "outflows": 3473713.5811700015 }, "geometry": { "type": "Point", "coordinates": [ 11.85, -4.8 ] } }, +{ "type": "Feature", "properties": { "Country": "Côte d'Ivoire", "Function": "1--45---", "LOCODE": "CIABJ", "Name": "Abidjan", "NameWoDiac": "Abidjan", "Status": "AI", "outflows": 3248845.4334399998 }, "geometry": { "type": "Point", "coordinates": [ -4.016666666666667, 5.333333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Côte d'Ivoire", "Function": "1-34----", "LOCODE": "CISPY", "Name": "San-Pédro", "NameWoDiac": "San-Pedro", "Status": "AI", "outflows": 2312502.0286400001 }, "geometry": { "type": "Point", "coordinates": [ -6.616666666666667, 4.733333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1--4----", "LOCODE": "CLANF", "Name": "Antofagasta", "NameWoDiac": "Antofagasta", "Status": "AI", "outflows": 2136460.625 }, "geometry": { "type": "Point", "coordinates": [ -70.38333333333334, -23.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1-34----", "LOCODE": "CLARI", "Name": "Arica", "NameWoDiac": "Arica", "Status": "AI", "outflows": 1400600.825 }, "geometry": { "type": "Point", "coordinates": [ -70.316666666666663, -18.483333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "123-----", "LOCODE": "CLCNL", "Name": "Coronel", "NameWoDiac": "Coronel", "Status": "AI", "outflows": 5437390.8332000002 }, "geometry": { "type": "Point", "coordinates": [ -73.15, -37.016666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1--4----", "LOCODE": "CLIQQ", "Name": "Iquique", "NameWoDiac": "Iquique", "Status": "AI", "outflows": 1915647.5 }, "geometry": { "type": "Point", "coordinates": [ -70.13333333333334, -20.216666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "123-----", "LOCODE": "CLLQN", "Name": "Lirquén", "NameWoDiac": "Lirquen", "Status": "AI", "outflows": 3185838.4995000004 }, "geometry": { "type": "Point", "coordinates": [ -72.983333333333334, -36.7 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1-------", "LOCODE": "CLMJS", "Name": "Mejillones", "NameWoDiac": "Mejillones", "Status": "AI", "outflows": 32362.2 }, "geometry": { "type": "Point", "coordinates": [ -70.45, -23.1 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "123-----", "LOCODE": "CLPAG", "Name": "Puerto Angamos", "NameWoDiac": "Puerto Angamos", "Status": "RL", "outflows": 5408319.3663000017 }, "geometry": { "type": "Point", "coordinates": [ -70.45, -23.083333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1-34----", "LOCODE": "CLPUQ", "Name": "Punta Arenas", "NameWoDiac": "Punta Arenas", "Status": "AI", "outflows": 18174.0 }, "geometry": { "type": "Point", "coordinates": [ -70.933333333333337, -53.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "123-----", "LOCODE": "CLSAI", "Name": "San Antonio", "NameWoDiac": "San Antonio", "Status": "AI", "outflows": 9417069.025 }, "geometry": { "type": "Point", "coordinates": [ -71.6, -33.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1-3-----", "LOCODE": "CLSVE", "Name": "San Vicente", "NameWoDiac": "San Vicente", "Status": "AI", "outflows": 945075.625 }, "geometry": { "type": "Point", "coordinates": [ -73.13333333333334, -36.7 ] } }, +{ "type": "Feature", "properties": { "Country": "Chile", "Function": "1234----", "LOCODE": "CLVAP", "Name": "Valparaiso", "NameWoDiac": "Valparaiso", "Status": "AI", "outflows": 2059925.0 }, "geometry": { "type": "Point", "coordinates": [ -71.63333333333334, -33.033333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNCFD", "Name": "Caofeidian Pt", "NameWoDiac": "Caofeidian Pt", "Status": "AS", "outflows": 168350.0 }, "geometry": { "type": "Point", "coordinates": [ 118.533333333333331, 38.95 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1----6--", "LOCODE": "CNDCB", "Name": "DA CHAN BAY", "NameWoDiac": "DA CHAN BAY", "Status": "RL", "outflows": 4367401.0713399984 }, "geometry": { "type": "Point", "coordinates": [ 113.86666666666666, 22.533333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNDGG", "Name": "Dongguan Pt", "NameWoDiac": "Dongguan Pt", "Status": "AS", "outflows": 94354.0 }, "geometry": { "type": "Point", "coordinates": [ 113.75, 23.033333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNDJK", "Name": "Dongjiangkou", "NameWoDiac": "Dongjiangkou", "Status": "AS", "outflows": 386750.0 }, "geometry": { "type": "Point", "coordinates": [ 119.52253982618285, 35.308885331582253 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "--3-----", "LOCODE": "CNFQG", "Name": "Fuqing", "NameWoDiac": "Fuqing", "Status": "RL", "outflows": 1164780.9333599997 }, "geometry": { "type": "Point", "coordinates": [ 119.36666666666666, 25.716666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNHUI", "Name": "Huizhou Pt", "NameWoDiac": "Huizhou Pt", "Status": "AS", "outflows": 27300.0 }, "geometry": { "type": "Point", "coordinates": [ 114.36666666666666, 23.083333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNHMN", "Name": "Humen Pt", "NameWoDiac": "Humen Pt", "Status": "AS", "outflows": 630027.5 }, "geometry": { "type": "Point", "coordinates": [ 113.666666666666671, 22.833333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-3-----", "LOCODE": "CNJGY", "Name": "Jiangyin", "NameWoDiac": "Jiangyin", "Status": "RL", "outflows": 594906.0 }, "geometry": { "type": "Point", "coordinates": [ 119.3, 25.466666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNJNZ", "Name": "Jinzhou Pt", "NameWoDiac": "Jinzhou Pt", "Status": "AS", "outflows": 684866.0 }, "geometry": { "type": "Point", "coordinates": [ 121.15, 41.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNLYG", "Name": "Lianyungang", "NameWoDiac": "Lianyungang", "Status": "AS", "outflows": 9288988.8094500005 }, "geometry": { "type": "Point", "coordinates": [ 119.433333333333337, 34.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNNSA", "Name": "Nansha Pt", "NameWoDiac": "Nansha Pt", "Status": "AS", "outflows": 42484636.038412996 }, "geometry": { "type": "Point", "coordinates": [ 113.583333333333329, 22.75 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNNTG", "Name": "Nantong Pt", "NameWoDiac": "Nantong Pt", "Status": "AS", "outflows": 261618.5 }, "geometry": { "type": "Point", "coordinates": [ 120.85, 32.016666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNSHP", "Name": "Qinhuangdao Pt", "NameWoDiac": "Qinhuangdao Pt", "Status": "AS", "outflows": 105300.0 }, "geometry": { "type": "Point", "coordinates": [ 119.583333333333329, 39.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNQZJ", "Name": "Quanzhou Pt", "NameWoDiac": "Quanzhou Pt", "Status": "AS", "outflows": 512451.33335000003 }, "geometry": { "type": "Point", "coordinates": [ 118.6, 24.933333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNRZH", "Name": "Rizhao Pt", "NameWoDiac": "Rizhao Pt", "Status": "AS", "outflows": 1075073.00003 }, "geometry": { "type": "Point", "coordinates": [ 119.533333333333331, 35.383333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNSHK", "Name": "Shekou Pt", "NameWoDiac": "Shekou Pt", "Status": "AS", "outflows": 74635666.140550002 }, "geometry": { "type": "Point", "coordinates": [ 113.916666666666671, 22.483333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNSHD", "Name": "Shidao Pt", "NameWoDiac": "Shidao Pt", "Status": "AS", "outflows": 54886.0 }, "geometry": { "type": "Point", "coordinates": [ 122.433333333333337, 36.866666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNWIH", "Name": "Waihai", "NameWoDiac": "Waihai", "Status": "AS", "outflows": 50050.0 }, "geometry": { "type": "Point", "coordinates": [ 113.13333333333334, 22.583333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1--4----", "LOCODE": "CNWEF", "Name": "Weifang Pt", "NameWoDiac": "Weifang Pt", "Status": "AS", "outflows": 65923.0 }, "geometry": { "type": "Point", "coordinates": [ 119.1, 36.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1--45---", "LOCODE": "CNWEI", "Name": "Weihai", "NameWoDiac": "Weihai", "Status": "AS", "outflows": 238257.5 }, "geometry": { "type": "Point", "coordinates": [ 122.11666666666666, 37.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNYPG", "Name": "Yangpu Pt", "NameWoDiac": "Yangpu Pt", "Status": "AS", "outflows": 872543.16658000019 }, "geometry": { "type": "Point", "coordinates": [ 109.2, 19.7 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNYTN", "Name": "Yantian Pt", "NameWoDiac": "Yantian Pt", "Status": "AS", "outflows": 74187678.537459999 }, "geometry": { "type": "Point", "coordinates": [ 119.86666666666666, 26.85 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNYIK", "Name": "Yingkou Pt", "NameWoDiac": "Yingkou Pt", "Status": "AS", "outflows": 1421671.0 }, "geometry": { "type": "Point", "coordinates": [ 122.216666666666669, 40.65 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNZJG", "Name": "Zhangjiagang", "NameWoDiac": "Zhangjiagang", "Status": "AS", "outflows": 196865.5 }, "geometry": { "type": "Point", "coordinates": [ 120.533333333333331, 31.866666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNZZU", "Name": "Zhangzhou Pt", "NameWoDiac": "Zhangzhou Pt", "Status": "AS", "outflows": 340964.0 }, "geometry": { "type": "Point", "coordinates": [ 117.65, 24.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "China", "Function": "1-------", "LOCODE": "CNZUH", "Name": "Zhuhai Pt", "NameWoDiac": "Zhuhai Pt", "Status": "AS", "outflows": 929467.5 }, "geometry": { "type": "Point", "coordinates": [ 113.566666666666663, 22.283333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--4----", "LOCODE": "COLET", "Name": "Leticia", "NameWoDiac": "Leticia", "Status": "AI", "outflows": 9675.0 }, "geometry": { "type": "Point", "coordinates": [ -69.933333333333337, -4.216666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--4----", "LOCODE": "COTLU", "Name": "Tolú", "NameWoDiac": "Tolu", "Status": "AI", "outflows": 9675.0 }, "geometry": { "type": "Point", "coordinates": [ -75.583333333333329, 9.533333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--4----", "LOCODE": "COTRB", "Name": "Turbo", "NameWoDiac": "Turbo", "Status": "AI", "outflows": 799731.40001499979 }, "geometry": { "type": "Point", "coordinates": [ -76.716666666666669, 8.083333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Costa Rica", "Function": "123-----", "LOCODE": "CRCAL", "Name": "Caldera", "NameWoDiac": "Caldera", "Status": "RL", "outflows": 704191.8 }, "geometry": { "type": "Point", "coordinates": [ -84.716666666666669, 9.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Costa Rica", "Function": "1-3-----", "LOCODE": "CRMOB", "Name": "Moín", "NameWoDiac": "Moin", "Status": "RL", "outflows": 2884497.4165249998 }, "geometry": { "type": "Point", "coordinates": [ -83.083333333333329, 10.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Costa Rica", "Function": "1-3-----", "LOCODE": "CRLIO", "Name": "Puerto Limón", "NameWoDiac": "Puerto Limon", "Status": "AI", "outflows": 2372283.3334299996 }, "geometry": { "type": "Point", "coordinates": [ -83.033333333333331, 10.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Cuba", "Function": "1234----", "LOCODE": "CUMAR", "Name": "Mariel", "NameWoDiac": "Mariel", "Status": "RL", "outflows": 370296.8 }, "geometry": { "type": "Point", "coordinates": [ -82.75, 23.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Cabo Verde", "Function": "1-3-----", "LOCODE": "CVMIN", "Name": "Mindelo", "NameWoDiac": "Mindelo", "Status": "RL", "outflows": 114309.0 }, "geometry": { "type": "Point", "coordinates": [ -25.0, 16.883333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Curaçao", "Function": "1-------", "LOCODE": "CWWIL", "Name": "Willemstad", "NameWoDiac": "Willemstad", "Status": "AI", "outflows": 721990.3 }, "geometry": { "type": "Point", "coordinates": [ -68.916666666666671, 12.1 ] } }, +{ "type": "Feature", "properties": { "Country": "Christmas Island", "Function": "1-------", "LOCODE": "CXFFC", "Name": "Flying Fish Cove", "NameWoDiac": "Flying Fish Cove", "Status": "RL", "outflows": 2520.0 }, "geometry": { "type": "Point", "coordinates": [ 105.716666666666669, -10.416666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Cyprus", "Function": "1-3-5---", "LOCODE": "CYLMS", "Name": "Limassol", "NameWoDiac": "Limassol", "Status": "AA", "outflows": 2366252.75 }, "geometry": { "type": "Point", "coordinates": [ 33.05, 34.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "123-----", "LOCODE": "DEBKE", "Name": "Brake", "NameWoDiac": "Brake", "Status": "AF", "outflows": 27774.0 }, "geometry": { "type": "Point", "coordinates": [ 8.483333333333333, 53.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "123-----", "LOCODE": "DECUX", "Name": "Cuxhaven", "NameWoDiac": "Cuxhaven", "Status": "AF", "outflows": 128258.0 }, "geometry": { "type": "Point", "coordinates": [ 8.7, 53.883333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "1234----", "LOCODE": "DEEME", "Name": "Emden", "NameWoDiac": "Emden", "Status": "AF", "outflows": 14598.0 }, "geometry": { "type": "Point", "coordinates": [ 7.216666666666667, 53.366666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "1234----", "LOCODE": "DEKEL", "Name": "Kiel", "NameWoDiac": "Kiel", "Status": "AF", "outflows": 14040.0 }, "geometry": { "type": "Point", "coordinates": [ 10.133333333333333, 54.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "12345---", "LOCODE": "DERSK", "Name": "Rostock", "NameWoDiac": "Rostock", "Status": "AF", "outflows": 7984.0 }, "geometry": { "type": "Point", "coordinates": [ 12.133333333333333, 54.083333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "1234----", "LOCODE": "DEWVN", "Name": "Wilhelmshaven", "NameWoDiac": "Wilhelmshaven", "Status": "AF", "outflows": 7664957.3927999986 }, "geometry": { "type": "Point", "coordinates": [ 8.133333333333333, 53.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "12345---", "LOCODE": "DKAAR", "Name": "Aarhus", "NameWoDiac": "Aarhus", "Status": "AF", "outflows": 4009844.4282799996 }, "geometry": { "type": "Point", "coordinates": [ 10.216666666666667, 56.15 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "12345---", "LOCODE": "DKCPH", "Name": "København", "NameWoDiac": "Kobenhavn", "Status": "AF", "outflows": 138606.0 }, "geometry": { "type": "Point", "coordinates": [ 12.583333333333334, 55.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Dominican Republic", "Function": "1-3--6--", "LOCODE": "DOCAU", "Name": "Caucedo", "NameWoDiac": "Caucedo", "Status": "RL", "outflows": 11771542.79576 }, "geometry": { "type": "Point", "coordinates": [ -69.63333333333334, 18.416666666666668 ] } }, +{ "type": "Feature", "properties": { "Country": "Dominican Republic", "Function": "123-----", "LOCODE": "DOMAN", "Name": "Manzanillo", "NameWoDiac": "Manzanillo", "Status": "RL", "outflows": 53258.4 }, "geometry": { "type": "Point", "coordinates": [ -71.75, 19.7 ] } }, +{ "type": "Feature", "properties": { "Country": "Algeria", "Function": "123456--", "LOCODE": "DZALG", "Name": "Alger (Algiers)", "NameWoDiac": "Alger (Algiers)", "Status": "AI", "outflows": 835952.4 }, "geometry": { "type": "Point", "coordinates": [ 3.05, 36.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Algeria", "Function": "123-----", "LOCODE": "DZAZW", "Name": "Arzew", "NameWoDiac": "Arzew", "Status": "RL", "outflows": 24660.0 }, "geometry": { "type": "Point", "coordinates": [ -0.316666666666667, 35.866666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Algeria", "Function": "123-----", "LOCODE": "DZGHZ", "Name": "Ghazaouet", "NameWoDiac": "Ghazaouet", "Status": "RL", "outflows": 72735.0 }, "geometry": { "type": "Point", "coordinates": [ -1.85, 35.1 ] } }, +{ "type": "Feature", "properties": { "Country": "Ecuador", "Function": "1--4----", "LOCODE": "ECESM", "Name": "Esmeraldas", "NameWoDiac": "Esmeraldas", "Status": "AI", "outflows": 153990.2 }, "geometry": { "type": "Point", "coordinates": [ -79.7, 0.983333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Ecuador", "Function": "1--45---", "LOCODE": "ECGYE", "Name": "Guayaquil", "NameWoDiac": "Guayaquil", "Status": "AI", "outflows": 8368052.2252000012 }, "geometry": { "type": "Point", "coordinates": [ -79.9, -2.166666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Ecuador", "Function": "--3--6--", "LOCODE": "ECPSJ", "Name": "Posorja", "NameWoDiac": "Posorja", "Status": "RL", "outflows": 1776250.6667999995 }, "geometry": { "type": "Point", "coordinates": [ -80.25, -2.7 ] } }, +{ "type": "Feature", "properties": { "Country": "Ecuador", "Function": "1-------", "LOCODE": "ECPBO", "Name": "Puerto Bolívar", "NameWoDiac": "Puerto Bolivar", "Status": "AI", "outflows": 1601516.8 }, "geometry": { "type": "Point", "coordinates": [ -79.983333333333334, -3.266666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Estonia", "Function": "1------B", "LOCODE": "EEKND", "Name": "Kunda", "NameWoDiac": "Kunda", "Status": "AA", "outflows": 4176.0 }, "geometry": { "type": "Point", "coordinates": [ 26.533333333333335, 59.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Estonia", "Function": "1------B", "LOCODE": "EEMUG", "Name": "Muuga", "NameWoDiac": "Muuga", "Status": "AA", "outflows": 74880.0 }, "geometry": { "type": "Point", "coordinates": [ 24.966666666666665, 59.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Estonia", "Function": "-23----B", "LOCODE": "EEPLA", "Name": "Paldiski", "NameWoDiac": "Paldiski", "Status": "AA", "outflows": 90009.0 }, "geometry": { "type": "Point", "coordinates": [ 24.05, 59.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Estonia", "Function": "1--45---", "LOCODE": "EETLL", "Name": "Tallinn", "NameWoDiac": "Tallinn", "Status": "AI", "outflows": 493596.99998000002 }, "geometry": { "type": "Point", "coordinates": [ 24.733333333333334, 59.43333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Egypt", "Function": "1234----", "LOCODE": "EGDAM", "Name": "Dumyat (Damietta)", "NameWoDiac": "Dumyat (Damietta)", "Status": "RL", "outflows": 9993066.850010002 }, "geometry": { "type": "Point", "coordinates": [ 31.816666666666666, 31.416666666666668 ] } }, +{ "type": "Feature", "properties": { "Country": "Egypt", "Function": "1--45---", "LOCODE": "EGALY", "Name": "El Iskandariya (Alexandria)", "NameWoDiac": "El Iskandariya (Alexandria)", "Status": "AI", "outflows": 6389301.2997899996 }, "geometry": { "type": "Point", "coordinates": [ 29.916666666666668, 31.183333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Egypt", "Function": "1-------", "LOCODE": "EGSOK", "Name": "Sokhna Port", "NameWoDiac": "Sokhna Port", "Status": "RQ", "outflows": 3639356.7318400005 }, "geometry": { "type": "Point", "coordinates": [ 32.35, 29.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Eritrea", "Function": "1234----", "LOCODE": "ERMSW", "Name": "Massawa (Mitsiwa)", "NameWoDiac": "Massawa (Mitsiwa)", "Status": "AI", "outflows": 44242.0 }, "geometry": { "type": "Point", "coordinates": [ 39.45, 15.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1234----", "LOCODE": "ESLEI", "Name": "Almería", "NameWoDiac": "Almeria", "Status": "AI", "outflows": 123708.0 }, "geometry": { "type": "Point", "coordinates": [ -2.45, 36.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "12345---", "LOCODE": "ESBIO", "Name": "Bilbao", "NameWoDiac": "Bilbao", "Status": "AI", "outflows": 757628.79999199987 }, "geometry": { "type": "Point", "coordinates": [ -2.966666666666667, 43.25 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "123-----", "LOCODE": "ESCAR", "Name": "Cartagena", "NameWoDiac": "Cartagena", "Status": "AA", "outflows": 161718.0 }, "geometry": { "type": "Point", "coordinates": [ -0.983333333333333, 37.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "123-----", "LOCODE": "ESCAS", "Name": "Castellón de la Plana", "NameWoDiac": "Castellon de la Plana", "Status": "AI", "outflows": 2188540.79158 }, "geometry": { "type": "Point", "coordinates": [ -0.033333333333333, 39.983333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "123-----", "LOCODE": "ESFRO", "Name": "Ferrol", "NameWoDiac": "Ferrol", "Status": "AI", "outflows": 165064.5 }, "geometry": { "type": "Point", "coordinates": [ -8.25, 43.483333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1234----", "LOCODE": "ESGIJ", "Name": "Gijón", "NameWoDiac": "Gijon", "Status": "AI", "outflows": 356746.0 }, "geometry": { "type": "Point", "coordinates": [ -5.666666666666667, 43.533333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1--4----", "LOCODE": "ESACE", "Name": "Lanzarote", "NameWoDiac": "Lanzarote", "Status": "AI", "outflows": 421980.0 }, "geometry": { "type": "Point", "coordinates": [ -13.533333333333333, 28.966666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1-3456--", "LOCODE": "ESLPA", "Name": "Las Palmas de Gran Canaria", "NameWoDiac": "Las Palmas de Gran Canaria", "Status": "AI", "outflows": 5009347.5287000006 }, "geometry": { "type": "Point", "coordinates": [ -15.416666666666666, 28.1 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1--45---", "LOCODE": "ESAGP", "Name": "Málaga", "NameWoDiac": "Malaga", "Status": "AI", "outflows": 439868.0 }, "geometry": { "type": "Point", "coordinates": [ -4.416666666666667, 36.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1-34----", "LOCODE": "ESMLN", "Name": "Melilla", "NameWoDiac": "Melilla", "Status": "AI", "outflows": 45500.0 }, "geometry": { "type": "Point", "coordinates": [ -2.883333333333333, 35.31666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "123-----", "LOCODE": "ESSAG", "Name": "Sagunto", "NameWoDiac": "Sagunto", "Status": "AI", "outflows": 417560.0 }, "geometry": { "type": "Point", "coordinates": [ -0.266666666666667, 39.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1--4----", "LOCODE": "ESSPC", "Name": "Santa Cruz de La Palma", "NameWoDiac": "Santa Cruz de La Palma", "Status": "AI", "outflows": 245440.0 }, "geometry": { "type": "Point", "coordinates": [ -17.766666666666666, 28.683333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1-3-----", "LOCODE": "ESVIL", "Name": "Villagarcía de Arosa", "NameWoDiac": "Villagarcia de Arosa", "Status": "AI", "outflows": 130988.0 }, "geometry": { "type": "Point", "coordinates": [ -8.75, 42.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-34----", "LOCODE": "FITKU", "Name": "Åbo (Turku)", "NameWoDiac": "Abo (Turku)", "Status": "AI", "outflows": 16263.0 }, "geometry": { "type": "Point", "coordinates": [ 22.283333333333335, 60.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-34----", "LOCODE": "FITKU", "Name": "Turku (Åbo)", "NameWoDiac": "Turku (Abo)", "Status": "AI", "outflows": 16263.0 }, "geometry": { "type": "Point", "coordinates": [ 22.283333333333335, 60.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-34----", "LOCODE": "FIPOR", "Name": "Björneborg (Pori)", "NameWoDiac": "Bjorneborg (Pori)", "Status": "AI", "outflows": 5220.0 }, "geometry": { "type": "Point", "coordinates": [ 21.8, 61.483333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-34----", "LOCODE": "FIPOR", "Name": "Pori (Björneborg)", "NameWoDiac": "Pori (Bjorneborg)", "Status": "AI", "outflows": 5220.0 }, "geometry": { "type": "Point", "coordinates": [ 21.8, 61.483333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FIHMN", "Name": "Fredrikshamn (Hamina)", "NameWoDiac": "Fredrikshamn (Hamina)", "Status": "AI", "outflows": 4437.0 }, "geometry": { "type": "Point", "coordinates": [ 27.2, 60.56666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FIHMN", "Name": "Hamina (Fredrikshamn)", "NameWoDiac": "Hamina (Fredrikshamn)", "Status": "AI", "outflows": 4437.0 }, "geometry": { "type": "Point", "coordinates": [ 27.2, 60.56666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123-----", "LOCODE": "FIPRS", "Name": "Jakobstad (Pietarsaari)", "NameWoDiac": "Jakobstad (Pietarsaari)", "Status": "AI", "outflows": 9396.0 }, "geometry": { "type": "Point", "coordinates": [ 22.783333333333335, 63.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123-----", "LOCODE": "FIPRS", "Name": "Pietarsaari (Jakobstad)", "NameWoDiac": "Pietarsaari (Jakobstad)", "Status": "AI", "outflows": 9396.0 }, "geometry": { "type": "Point", "coordinates": [ 22.783333333333335, 63.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123-----", "LOCODE": "FIKOK", "Name": "Karleby (Kokkola)", "NameWoDiac": "Karleby (Kokkola)", "Status": "AI", "outflows": 39182.0 }, "geometry": { "type": "Point", "coordinates": [ 23.116666666666667, 63.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123-----", "LOCODE": "FIKOK", "Name": "Kokkola (Karleby)", "NameWoDiac": "Kokkola (Karleby)", "Status": "AI", "outflows": 39182.0 }, "geometry": { "type": "Point", "coordinates": [ 23.116666666666667, 63.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-34----", "LOCODE": "FIKEM", "Name": "Kemi\/Torneå (Kemi\/Tornio)", "NameWoDiac": "Kemi\/Tornea (Kemi\/Tornio)", "Status": "AI", "outflows": 106574.0 }, "geometry": { "type": "Point", "coordinates": [ 24.566666666666666, 65.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-34----", "LOCODE": "FIKEM", "Name": "Kemi\/Tornio (Kemi\/Torneå)", "NameWoDiac": "Kemi\/Tornio (Kemi\/Tornea)", "Status": "AI", "outflows": 106574.0 }, "geometry": { "type": "Point", "coordinates": [ 24.566666666666666, 65.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123----B", "LOCODE": "FIKTK", "Name": "Kotka", "NameWoDiac": "Kotka", "Status": "AC", "outflows": 1116795.4999200001 }, "geometry": { "type": "Point", "coordinates": [ 26.916666666666668, 60.466666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123----B", "LOCODE": "FIRAU", "Name": "Rauma (Raumo)", "NameWoDiac": "Rauma (Raumo)", "Status": "AC", "outflows": 705561.49998000008 }, "geometry": { "type": "Point", "coordinates": [ 21.5, 61.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "123----B", "LOCODE": "FIRAU", "Name": "Raumo (Rauma)", "NameWoDiac": "Raumo (Rauma)", "Status": "AC", "outflows": 705561.49998000008 }, "geometry": { "type": "Point", "coordinates": [ 21.5, 61.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FITOR", "Name": "Torneå (Tornio)", "NameWoDiac": "Tornea (Tornio)", "Status": "AI", "outflows": 91624.0 }, "geometry": { "type": "Point", "coordinates": [ 24.183333333333334, 65.85 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FITOR", "Name": "Tornio (Torneå)", "NameWoDiac": "Tornio (Tornea)", "Status": "AI", "outflows": 91624.0 }, "geometry": { "type": "Point", "coordinates": [ 24.183333333333334, 65.85 ] } }, +{ "type": "Feature", "properties": { "Country": "Fiji", "Function": "123-----", "LOCODE": "FJLTK", "Name": "Lautoka", "NameWoDiac": "Lautoka", "Status": "RL", "outflows": 490393.0 }, "geometry": { "type": "Point", "coordinates": [ 177.45, -17.616666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Fiji", "Function": "1--45---", "LOCODE": "FJSUV", "Name": "Suva", "NameWoDiac": "Suva", "Status": "AI", "outflows": 535295.0 }, "geometry": { "type": "Point", "coordinates": [ 178.45, -18.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Faroe Islands", "Function": "1-3-----", "LOCODE": "FOKOL", "Name": "Kollafjördur", "NameWoDiac": "Kollafjordur", "Status": "RL", "outflows": 82628.0 }, "geometry": { "type": "Point", "coordinates": [ -6.883333333333333, 62.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Faroe Islands", "Function": "1-------", "LOCODE": "FOTHO", "Name": "Thorshavn", "NameWoDiac": "Thorshavn", "Status": "RL", "outflows": 91104.0 }, "geometry": { "type": "Point", "coordinates": [ -6.766666666666667, 62.016666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12------", "LOCODE": "FRBAS", "Name": "Bassens", "NameWoDiac": "Bassens", "Status": "AF", "outflows": 33930.0 }, "geometry": { "type": "Point", "coordinates": [ -0.516666666666667, 44.9 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "1234----", "LOCODE": "FRBES", "Name": "Brest", "NameWoDiac": "Brest", "Status": "AF", "outflows": 107185.0 }, "geometry": { "type": "Point", "coordinates": [ -4.483333333333333, 48.4 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12--5---", "LOCODE": "FRDKK", "Name": "Dunkerque", "NameWoDiac": "Dunkerque", "Status": "AF", "outflows": 4450642.0836299993 }, "geometry": { "type": "Point", "coordinates": [ 2.383333333333333, 51.033333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "123---7-", "LOCODE": "FRFOS", "Name": "Fos-sur-Mer", "NameWoDiac": "Fos-sur-Mer", "Status": "AF", "outflows": 18248513.215530016 }, "geometry": { "type": "Point", "coordinates": [ 4.933333333333334, 43.43333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "1-------", "LOCODE": "FRLPE", "Name": "la Pallice", "NameWoDiac": "la Pallice", "Status": "AF", "outflows": 22725.0 }, "geometry": { "type": "Point", "coordinates": [ -1.216666666666667, 46.166666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12-4----", "LOCODE": "FRLRH", "Name": "La Rochelle", "NameWoDiac": "La Rochelle", "Status": "AF", "outflows": 33930.0 }, "geometry": { "type": "Point", "coordinates": [ -1.15, 46.166666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12345---", "LOCODE": "FRLEH", "Name": "Le Havre", "NameWoDiac": "Le Havre", "Status": "AF", "outflows": 35976285.665610015 }, "geometry": { "type": "Point", "coordinates": [ 0.1, 49.5 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12-45---", "LOCODE": "FRMRS", "Name": "Marseille", "NameWoDiac": "Marseille", "Status": "AF", "outflows": 629024.0 }, "geometry": { "type": "Point", "coordinates": [ 5.4, 43.3 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "123-----", "LOCODE": "FRMTX", "Name": "Montoir-de-Bretagne", "NameWoDiac": "Montoir-de-Bretagne", "Status": "AF", "outflows": 1130547.1665700004 }, "geometry": { "type": "Point", "coordinates": [ -2.15, 47.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12------", "LOCODE": "FRPOV", "Name": "Port-Vendres", "NameWoDiac": "Port-Vendres", "Status": "AF", "outflows": 21450.0 }, "geometry": { "type": "Point", "coordinates": [ 3.116666666666667, 42.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "1-3-----", "LOCODE": "FRRAD", "Name": "Radicatel", "NameWoDiac": "Radicatel", "Status": "RL", "outflows": 42900.000003000001 }, "geometry": { "type": "Point", "coordinates": [ 0.5, 49.5 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "1-34----", "LOCODE": "FRURO", "Name": "Rouen", "NameWoDiac": "Rouen", "Status": "AF", "outflows": 34842.0 }, "geometry": { "type": "Point", "coordinates": [ 1.1, 49.45 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "123-----", "LOCODE": "FRSET", "Name": "Sète", "NameWoDiac": "Sete", "Status": "AF", "outflows": 34041.0 }, "geometry": { "type": "Point", "coordinates": [ 3.7, 43.4 ] } }, +{ "type": "Feature", "properties": { "Country": "France", "Function": "12-4----", "LOCODE": "FRTLN", "Name": "Toulon", "NameWoDiac": "Toulon", "Status": "AF", "outflows": 1080.0 }, "geometry": { "type": "Point", "coordinates": [ 5.933333333333334, 43.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1--4----", "LOCODE": "GBABD", "Name": "Aberdeen", "NameWoDiac": "Aberdeen", "Status": "AF", "outflows": 48681.0 }, "geometry": { "type": "Point", "coordinates": [ -2.1, 57.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1--4-6--", "LOCODE": "GBBEL", "Name": "Belfast", "NameWoDiac": "Belfast", "Status": "AF", "outflows": 137826.0 }, "geometry": { "type": "Point", "coordinates": [ -5.916666666666667, 54.983333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBGRG", "Name": "Grangemouth", "NameWoDiac": "Grangemouth", "Status": "AF", "outflows": 192244.0 }, "geometry": { "type": "Point", "coordinates": [ -3.716666666666667, 56.0 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBGRK", "Name": "Greenock", "NameWoDiac": "Greenock", "Status": "AF", "outflows": 275567.66664999997 }, "geometry": { "type": "Point", "coordinates": [ -4.75, 55.93333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBHUL", "Name": "Hull", "NameWoDiac": "Hull", "Status": "AF", "outflows": 219740.33333800005 }, "geometry": { "type": "Point", "coordinates": [ -0.316666666666667, 53.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBIMM", "Name": "Immingham", "NameWoDiac": "Immingham", "Status": "AF", "outflows": 329625.0 }, "geometry": { "type": "Point", "coordinates": [ -0.216666666666667, 53.6 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1--4----", "LOCODE": "GBLIV", "Name": "Liverpool", "NameWoDiac": "Liverpool", "Status": "AF", "outflows": 1673890.2916200003 }, "geometry": { "type": "Point", "coordinates": [ -3.0, 53.416666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "123--6--", "LOCODE": "GBLGP", "Name": "London Gateway Port", "NameWoDiac": "London Gateway Port", "Status": "RL", "outflows": 21704403.092420008 }, "geometry": { "type": "Point", "coordinates": [ 0.483333333333333, 51.5 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBTEE", "Name": "Teesport", "NameWoDiac": "Teesport", "Status": "AF", "outflows": 556920.0 }, "geometry": { "type": "Point", "coordinates": [ -1.15, 54.583333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBTYN", "Name": "Tyne", "NameWoDiac": "Tyne", "Status": "RQ", "outflows": 31668.0 }, "geometry": { "type": "Point", "coordinates": [ -1.433333333333333, 55.0 ] } }, +{ "type": "Feature", "properties": { "Country": "French Guiana", "Function": "1-------", "LOCODE": "GFDDC", "Name": "Dégrad des Cannes", "NameWoDiac": "Degrad des Cannes", "Status": "RL", "outflows": 286520.0 }, "geometry": { "type": "Point", "coordinates": [ -52.266666666666666, 4.85 ] } }, +{ "type": "Feature", "properties": { "Country": "Greenland", "Function": "1-34----", "LOCODE": "GLGOH", "Name": "Nuuk (Godthaab)", "NameWoDiac": "Nuuk (Godthaab)", "Status": "AI", "outflows": 23426.0 }, "geometry": { "type": "Point", "coordinates": [ -51.75, 64.183333333333337 ] } }, +{ "type": "Feature", "properties": { "Country": "Guadeloupe", "Function": "1--45---", "LOCODE": "GPPTP", "Name": "Point-à-Pitre Apt", "NameWoDiac": "Point-a-Pitre Apt", "Status": "AF", "outflows": 1970512.9165490004 }, "geometry": { "type": "Point", "coordinates": [ -61.516666666666666, 16.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Greece", "Function": "1--4----", "LOCODE": "GRHER", "Name": "Heraklion (Iraklion)", "NameWoDiac": "Heraklion (Iraklion)", "Status": "AI", "outflows": 23582.0 }, "geometry": { "type": "Point", "coordinates": [ 25.166666666666668, 35.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Greece", "Function": "1--4----", "LOCODE": "GRHER", "Name": "Iraklion (Heraklion)", "NameWoDiac": "Iraklion (Heraklion)", "Status": "AI", "outflows": 23582.0 }, "geometry": { "type": "Point", "coordinates": [ 25.166666666666668, 35.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Greece", "Function": "1-------", "LOCODE": "GRPIR", "Name": "Piraeus", "NameWoDiac": "Piraeus", "Status": "AI", "outflows": 25227137.508840002 }, "geometry": { "type": "Point", "coordinates": [ 23.616666666666667, 37.93333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Greece", "Function": "1--45---", "LOCODE": "GRSKG", "Name": "Thessaloníki", "NameWoDiac": "Thessaloniki", "Status": "AI", "outflows": 790815.99999000016 }, "geometry": { "type": "Point", "coordinates": [ 22.95, 40.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Greece", "Function": "1--4----", "LOCODE": "GRVOL", "Name": "Vólos", "NameWoDiac": "Volos", "Status": "AI", "outflows": 23582.0 }, "geometry": { "type": "Point", "coordinates": [ 22.95, 39.366666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Guatemala", "Function": "1-------", "LOCODE": "GTSTC", "Name": "Puerto Santo Tomás de Castilla", "NameWoDiac": "Puerto Santo Tomas de Castilla", "Status": "AI", "outflows": 1241734.0000599998 }, "geometry": { "type": "Point", "coordinates": [ -88.61666666666666, 15.7 ] } }, +{ "type": "Feature", "properties": { "Country": "Guam", "Function": "--3-----", "LOCODE": "GUPIT", "Name": "Piti", "NameWoDiac": "Piti", "Status": "RL", "outflows": 52903.5 }, "geometry": { "type": "Point", "coordinates": [ 144.683333333333337, 13.433333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Guinea-Bissau", "Function": "1-345---", "LOCODE": "GWOXB", "Name": "Bissau", "NameWoDiac": "Bissau", "Status": "AI", "outflows": 114309.0 }, "geometry": { "type": "Point", "coordinates": [ -15.583333333333334, 11.85 ] } }, +{ "type": "Feature", "properties": { "Country": "Croatia", "Function": "123-----", "LOCODE": "HRPLE", "Name": "Ploce", "NameWoDiac": "Ploce", "Status": "RL", "outflows": 136773.0 }, "geometry": { "type": "Point", "coordinates": [ 17.433333333333334, 43.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Croatia", "Function": "1234----", "LOCODE": "HRRJK", "Name": "Rijeka", "NameWoDiac": "Rijeka", "Status": "AI", "outflows": 3818455.3333799997 }, "geometry": { "type": "Point", "coordinates": [ 14.4, 45.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Croatia", "Function": "1234----", "LOCODE": "HRSPU", "Name": "Split", "NameWoDiac": "Split", "Status": "AI", "outflows": 63609.0 }, "geometry": { "type": "Point", "coordinates": [ 16.45, 43.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Haiti", "Function": "1--4----", "LOCODE": "HTCAP", "Name": "Cap-Haïtien", "NameWoDiac": "Cap-Haitien", "Status": "AI", "outflows": 47268.0 }, "geometry": { "type": "Point", "coordinates": [ -72.2, 19.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Haiti", "Function": "1-------", "LOCODE": "HTLFF", "Name": "Lafiteau", "NameWoDiac": "Lafiteau", "Status": "AI", "outflows": 1098127.3333000003 }, "geometry": { "type": "Point", "coordinates": [ -72.433333333333337, 18.483333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDBPN", "Name": "Balikpapan", "NameWoDiac": "Balikpapan", "Status": "AI", "outflows": 77320.75 }, "geometry": { "type": "Point", "coordinates": [ 116.833333333333329, -1.283333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-3-----", "LOCODE": "IDBTM", "Name": "Batam Island", "NameWoDiac": "Batam Island", "Status": "RL", "outflows": 7335.5 }, "geometry": { "type": "Point", "coordinates": [ 104.033333333333331, 1.083333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDBEN", "Name": "Benete", "NameWoDiac": "Benete", "Status": "RL", "outflows": 12681.75 }, "geometry": { "type": "Point", "coordinates": [ 116.716666666666669, -8.866666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDBOA", "Name": "Benoa", "NameWoDiac": "Benoa", "Status": "RL", "outflows": 6747.0 }, "geometry": { "type": "Point", "coordinates": [ 115.216666666666669, -8.766666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "12345---", "LOCODE": "IDJKT", "Name": "Jakarta, Java", "NameWoDiac": "Jakarta, Java", "Status": "AI", "outflows": 12060454.992969999 }, "geometry": { "type": "Point", "coordinates": [ 106.833333333333329, -6.133333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-345---", "LOCODE": "IDDJJ", "Name": "Jayapura, Irian Jaya", "NameWoDiac": "Jayapura, Irian Jaya", "Status": "AI", "outflows": 136162.0 }, "geometry": { "type": "Point", "coordinates": [ 140.7, -2.533333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-3-----", "LOCODE": "IDKUM", "Name": "Kumai", "NameWoDiac": "Kumai", "Status": "RL", "outflows": 4238.0 }, "geometry": { "type": "Point", "coordinates": [ 111.716666666666669, -2.733333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-3-----", "LOCODE": "IDMAK", "Name": "Makassar", "NameWoDiac": "Makassar", "Status": "RL", "outflows": 664450.0 }, "geometry": { "type": "Point", "coordinates": [ 119.4, -5.116666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1234----", "LOCODE": "IDPDG", "Name": "Padang", "NameWoDiac": "Padang", "Status": "AI", "outflows": 74470.25 }, "geometry": { "type": "Point", "coordinates": [ 100.35, -0.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-3-----", "LOCODE": "IDPER", "Name": "Perawang", "NameWoDiac": "Perawang", "Status": "RL", "outflows": 3627.0 }, "geometry": { "type": "Point", "coordinates": [ 102.86666666666666, 1.066666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-345---", "LOCODE": "IDSRG", "Name": "Semarang", "NameWoDiac": "Semarang", "Status": "AI", "outflows": 2529727.4165999996 }, "geometry": { "type": "Point", "coordinates": [ 110.483333333333334, -6.966666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "123456--", "LOCODE": "IDSUB", "Name": "Surabaya", "NameWoDiac": "Surabaya", "Status": "AI", "outflows": 5004081.1427500024 }, "geometry": { "type": "Point", "coordinates": [ 112.75, -7.233333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDTNJ", "Name": "Tanjungpinang", "NameWoDiac": "Tanjungpinang", "Status": "AI", "outflows": 3068.0 }, "geometry": { "type": "Point", "coordinates": [ 104.45, 0.916666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDTMK", "Name": "Timika", "NameWoDiac": "Timika", "Status": "RQ", "outflows": 3240.0 }, "geometry": { "type": "Point", "coordinates": [ 136.55, -4.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDTUA", "Name": "Tual", "NameWoDiac": "Tual", "Status": "RQ", "outflows": 12207.0 }, "geometry": { "type": "Point", "coordinates": [ 132.73333333333332, -5.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Ireland", "Function": "1-345---", "LOCODE": "IEWAT", "Name": "Waterford", "NameWoDiac": "Waterford", "Status": "AF", "outflows": 86515.0 }, "geometry": { "type": "Point", "coordinates": [ -7.1, 52.25 ] } }, +{ "type": "Feature", "properties": { "Country": "Israel", "Function": "1--45---", "LOCODE": "ILHFA", "Name": "Haifa", "NameWoDiac": "Haifa", "Status": "AI", "outflows": 8470527.0681299977 }, "geometry": { "type": "Point", "coordinates": [ 34.983333333333334, 32.8 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "12345---", "LOCODE": "INMAA", "Name": "Chennai (ex Madras)", "NameWoDiac": "Chennai (ex Madras)", "Status": "AA", "outflows": 2818763.3167999992 }, "geometry": { "type": "Point", "coordinates": [ 80.283333333333331, 13.083333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1234-6--", "LOCODE": "INCOK", "Name": "Cochin", "NameWoDiac": "Cochin", "Status": "AA", "outflows": 2453568.0832799999 }, "geometry": { "type": "Point", "coordinates": [ 76.233333333333334, 9.966666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "--3--6--", "LOCODE": "INHZR", "Name": "Hazira", "NameWoDiac": "Hazira", "Status": "RL", "outflows": 5911162.5861400003 }, "geometry": { "type": "Point", "coordinates": [ 72.62343557464672, 21.09641041428134 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1234-6--", "LOCODE": "INIXY", "Name": "Kandla", "NameWoDiac": "Kandla", "Status": "AA", "outflows": 817280.5 }, "geometry": { "type": "Point", "coordinates": [ 70.216666666666669, 23.033333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123-----", "LOCODE": "INKTP", "Name": "Kattupalli Port", "NameWoDiac": "Kattupalli Port", "Status": "RL", "outflows": 1964901.8999300003 }, "geometry": { "type": "Point", "coordinates": [ 80.38333333333334, 13.3 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1--45---", "LOCODE": "INCCU", "Name": "Kolkata (ex Calcutta)", "NameWoDiac": "Kolkata (ex Calcutta)", "Status": "AA", "outflows": 303853.53334000002 }, "geometry": { "type": "Point", "coordinates": [ 88.35, 22.566666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123-----", "LOCODE": "INMRM", "Name": "Marmagao (Marmugao)", "NameWoDiac": "Marmagao (Marmugao)", "Status": "AA", "outflows": 100178.0 }, "geometry": { "type": "Point", "coordinates": [ 73.783333333333331, 15.4 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123-----", "LOCODE": "INMRM", "Name": "Marmugao (Marmagao)", "NameWoDiac": "Marmugao (Marmagao)", "Status": "AA", "outflows": 100178.0 }, "geometry": { "type": "Point", "coordinates": [ 73.783333333333331, 15.4 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123456--", "LOCODE": "INBOM", "Name": "Mumbai (ex Bombay)", "NameWoDiac": "Mumbai (ex Bombay)", "Status": "AA", "outflows": 126915.25 }, "geometry": { "type": "Point", "coordinates": [ 72.816666666666663, 18.966666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123-----", "LOCODE": "INPRT", "Name": "Paradip Garh", "NameWoDiac": "Paradip Garh", "Status": "AA", "outflows": 28080.0 }, "geometry": { "type": "Point", "coordinates": [ 86.61666666666666, 20.316666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123-----", "LOCODE": "INPAV", "Name": "Pipavav (Victor) Port", "NameWoDiac": "Pipavav (Victor) Port", "Status": "AA", "outflows": 6333654.3638700033 }, "geometry": { "type": "Point", "coordinates": [ 71.55, 20.966666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "123--6--", "LOCODE": "INTUT", "Name": "Tuticorin", "NameWoDiac": "Tuticorin", "Status": "AA", "outflows": 1224891.0 }, "geometry": { "type": "Point", "coordinates": [ 78.13333333333334, 8.783333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1234-6--", "LOCODE": "INVTZ", "Name": "Visakhapatnam", "NameWoDiac": "Visakhapatnam", "Status": "AA", "outflows": 2172514.4999899995 }, "geometry": { "type": "Point", "coordinates": [ 83.3, 17.7 ] } }, +{ "type": "Feature", "properties": { "Country": "Iraq", "Function": "123-----", "LOCODE": "IQUQR", "Name": "Umm Qasr Port", "NameWoDiac": "Umm Qasr Port", "Status": "RL", "outflows": 3640547.5715799998 }, "geometry": { "type": "Point", "coordinates": [ 47.93333333333333, 30.033333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "Iran, Islamic Republic of", "Function": "1-3-----", "LOCODE": "IRASA", "Name": "Asaluyeh", "NameWoDiac": "Asaluyeh", "Status": "RL", "outflows": 3060.0 }, "geometry": { "type": "Point", "coordinates": [ 52.6, 27.466666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "Iran, Islamic Republic of", "Function": "1--4----", "LOCODE": "IRBND", "Name": "Bandar Abbas", "NameWoDiac": "Bandar Abbas", "Status": "AI", "outflows": 1154182.75 }, "geometry": { "type": "Point", "coordinates": [ 56.266666666666666, 27.183333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Iran, Islamic Republic of", "Function": "1-34----", "LOCODE": "IRBKM", "Name": "Bandar Khomeini", "NameWoDiac": "Bandar Khomeini", "Status": "RL", "outflows": 85644.0 }, "geometry": { "type": "Point", "coordinates": [ 49.1, 30.433333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Iran, Islamic Republic of", "Function": "1-34----", "LOCODE": "IRBUZ", "Name": "Bushehr", "NameWoDiac": "Bushehr", "Status": "AI", "outflows": 85644.0 }, "geometry": { "type": "Point", "coordinates": [ 50.833333333333336, 28.966666666666665 ] } }, +{ "type": "Feature", "properties": { "Country": "Iceland", "Function": "1-------", "LOCODE": "ISREY", "Name": "Reykjavík", "NameWoDiac": "Reykjavik", "Status": "AC", "outflows": 327138.50000099995 }, "geometry": { "type": "Point", "coordinates": [ -21.95, 64.15 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-34----", "LOCODE": "ITAOI", "Name": "Ancona", "NameWoDiac": "Ancona", "Status": "AI", "outflows": 1251219.6666600001 }, "geometry": { "type": "Point", "coordinates": [ 13.5, 43.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-34----", "LOCODE": "ITBRI", "Name": "Bari", "NameWoDiac": "Bari", "Status": "AI", "outflows": 123851.0 }, "geometry": { "type": "Point", "coordinates": [ 16.85, 41.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-34----", "LOCODE": "ITCAG", "Name": "Cagliari", "NameWoDiac": "Cagliari", "Status": "AI", "outflows": 61347.0 }, "geometry": { "type": "Point", "coordinates": [ 9.116666666666667, 39.216666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITCTA", "Name": "Catania", "NameWoDiac": "Catania", "Status": "AI", "outflows": 112515.0 }, "geometry": { "type": "Point", "coordinates": [ 15.1, 37.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITCVV", "Name": "Civitavecchia", "NameWoDiac": "Civitavecchia", "Status": "AI", "outflows": 2179445.6662 }, "geometry": { "type": "Point", "coordinates": [ 11.8, 42.1 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "12345---", "LOCODE": "ITGOA", "Name": "Genova", "NameWoDiac": "Genova", "Status": "AI", "outflows": 23896971.132049996 }, "geometry": { "type": "Point", "coordinates": [ 8.95, 44.416666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITGIT", "Name": "Gioia Tauro", "NameWoDiac": "Gioia Tauro", "Status": "AI", "outflows": 16628557.647730002 }, "geometry": { "type": "Point", "coordinates": [ 15.9, 38.416666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITSPE", "Name": "La Spezia", "NameWoDiac": "La Spezia", "Status": "AI", "outflows": 12785874.433700003 }, "geometry": { "type": "Point", "coordinates": [ 9.833333333333334, 44.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITLIV", "Name": "Livorno", "NameWoDiac": "Livorno", "Status": "AI", "outflows": 8253720.2853500005 }, "geometry": { "type": "Point", "coordinates": [ 10.316666666666666, 43.55 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1234----", "LOCODE": "ITNAP", "Name": "Napoli", "NameWoDiac": "Napoli", "Status": "AI", "outflows": 4010591.4281000006 }, "geometry": { "type": "Point", "coordinates": [ 14.25, 40.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1234----", "LOCODE": "ITOLB", "Name": "Olbia", "NameWoDiac": "Olbia", "Status": "RL", "outflows": 11076.0 }, "geometry": { "type": "Point", "coordinates": [ 9.516666666666667, 40.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1--4----", "LOCODE": "ITPMO", "Name": "Palermo", "NameWoDiac": "Palermo", "Status": "AI", "outflows": 35997.0 }, "geometry": { "type": "Point", "coordinates": [ 13.366666666666667, 38.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "123-----", "LOCODE": "ITSVN", "Name": "Savona", "NameWoDiac": "Savona", "Status": "AI", "outflows": 43661.0 }, "geometry": { "type": "Point", "coordinates": [ 8.5, 44.283333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1--4----", "LOCODE": "ITTPS", "Name": "Trapani", "NameWoDiac": "Trapani", "Status": "AI", "outflows": 41808.0 }, "geometry": { "type": "Point", "coordinates": [ 12.483333333333333, 38.016666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "123-----", "LOCODE": "ITVDL", "Name": "Vado Ligure", "NameWoDiac": "Vado Ligure", "Status": "RL", "outflows": 1281768.42842 }, "geometry": { "type": "Point", "coordinates": [ 8.45, 44.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "12345--B", "LOCODE": "ITVCE", "Name": "Venezia", "NameWoDiac": "Venezia", "Status": "AI", "outflows": 1408195.6666600001 }, "geometry": { "type": "Point", "coordinates": [ 12.333333333333334, 45.43333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Jordan", "Function": "1--4----", "LOCODE": "JOAQJ", "Name": "Al 'Aqabah", "NameWoDiac": "Al 'Aqabah", "Status": "RL", "outflows": 5019094.2318399996 }, "geometry": { "type": "Point", "coordinates": [ 35.0, 29.533333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "--3-----", "LOCODE": "JPHTD", "Name": "Hakata", "NameWoDiac": "Hakata", "Status": "RL", "outflows": 3054288.2499700007 }, "geometry": { "type": "Point", "coordinates": [ 133.1, 34.18333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "--3-----", "LOCODE": "JPISS", "Name": "Isa", "NameWoDiac": "Isa", "Status": "AF", "outflows": 362101.99997 }, "geometry": { "type": "Point", "coordinates": [ 130.6, 32.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "12345---", "LOCODE": "JPKKJ", "Name": "Kitakyushu", "NameWoDiac": "Kitakyushu", "Status": "AF", "outflows": 476762.0 }, "geometry": { "type": "Point", "coordinates": [ 130.833333333333343, 33.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "12345---", "LOCODE": "JPUKB", "Name": "Kobe", "NameWoDiac": "Kobe", "Status": "AF", "outflows": 16494507.892490005 }, "geometry": { "type": "Point", "coordinates": [ 135.166666666666657, 34.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "123-----", "LOCODE": "JPMJR", "Name": "Mitajiri", "NameWoDiac": "Mitajiri", "Status": "AF", "outflows": 18720.0 }, "geometry": { "type": "Point", "coordinates": [ 131.583333333333343, 34.033333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "123-5---", "LOCODE": "JPMOJ", "Name": "Moji\/Kitakyushu", "NameWoDiac": "Moji\/Kitakyushu", "Status": "AF", "outflows": 2497337.91658 }, "geometry": { "type": "Point", "coordinates": [ 130.966666666666669, 33.9 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--45---", "LOCODE": "JPOSA", "Name": "Osaka", "NameWoDiac": "Osaka", "Status": "AF", "outflows": 9088752.8333900012 }, "geometry": { "type": "Point", "coordinates": [ 135.5, 34.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPSEN", "Name": "Satsumasendai", "NameWoDiac": "Satsumasendai", "Status": "AF", "outflows": 1041560.0000199999 }, "geometry": { "type": "Point", "coordinates": [ 130.25, 31.816666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "12345---", "LOCODE": "JPTYO", "Name": "Tokyo", "NameWoDiac": "Tokyo", "Status": "AF", "outflows": 20969567.582899991 }, "geometry": { "type": "Point", "coordinates": [ 139.75, 35.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "12345---", "LOCODE": "JPYOK", "Name": "Yokohama", "NameWoDiac": "Yokohama", "Status": "AF", "outflows": 26921996.624540005 }, "geometry": { "type": "Point", "coordinates": [ 139.65, 35.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Cambodia", "Function": "1-34--7-", "LOCODE": "KHKOS", "Name": "Kâmpóng Saôm", "NameWoDiac": "Kampong Saom", "Status": "AI", "outflows": 1342444.99985 }, "geometry": { "type": "Point", "coordinates": [ 103.516666666666666, 10.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Comoros", "Function": "1-3-----", "LOCODE": "KMMUT", "Name": "Mutsamudu, Anjouan", "NameWoDiac": "Mutsamudu, Anjouan", "Status": "RL", "outflows": 143131.33335 }, "geometry": { "type": "Point", "coordinates": [ 44.383333333333333, -12.15 ] } }, +{ "type": "Feature", "properties": { "Country": "Saint Kitts and Nevis", "Function": "1--4----", "LOCODE": "KNCHA", "Name": "Charlestown", "NameWoDiac": "Charlestown", "Status": "RL", "outflows": 230958.0 }, "geometry": { "type": "Point", "coordinates": [ -62.616666666666667, 17.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "1234567-", "LOCODE": "KRPUS", "Name": "Busan", "NameWoDiac": "Busan", "Status": "AF", "outflows": 97226625.829958007 }, "geometry": { "type": "Point", "coordinates": [ 129.05, 35.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "1-------", "LOCODE": "KRTSN", "Name": "Daesan\/Seosan", "NameWoDiac": "Daesan\/Seosan", "Status": "AF", "outflows": 391261.0 }, "geometry": { "type": "Point", "coordinates": [ 126.36666666666666, 37.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "1-3-----", "LOCODE": "KRTJI", "Name": "Dangjin", "NameWoDiac": "Dangjin", "Status": "AF", "outflows": 80514.0 }, "geometry": { "type": "Point", "coordinates": [ 126.783333333333331, 36.966666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "1234----", "LOCODE": "KRKUV", "Name": "Gunsan", "NameWoDiac": "Gunsan", "Status": "AF", "outflows": 367380.0 }, "geometry": { "type": "Point", "coordinates": [ 126.716666666666669, 35.983333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "123-----", "LOCODE": "KRKAN", "Name": "Gwangyang", "NameWoDiac": "Gwangyang", "Status": "AF", "outflows": 16515872.093510004 }, "geometry": { "type": "Point", "coordinates": [ 127.7, 34.93333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "123-----", "LOCODE": "KRINC", "Name": "Incheon", "NameWoDiac": "Incheon", "Status": "AF", "outflows": 7323842.7736799996 }, "geometry": { "type": "Point", "coordinates": [ 126.61666666666666, 37.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "123-----", "LOCODE": "KRMAS", "Name": "Masan", "NameWoDiac": "Masan", "Status": "AF", "outflows": 292464.0 }, "geometry": { "type": "Point", "coordinates": [ 128.566666666666663, 35.2 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "123-----", "LOCODE": "KRMOK", "Name": "Mokpo", "NameWoDiac": "Mokpo", "Status": "AF", "outflows": 64792.0 }, "geometry": { "type": "Point", "coordinates": [ 126.38333333333334, 34.8 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "1234----", "LOCODE": "KRKPO", "Name": "Pohang", "NameWoDiac": "Pohang", "Status": "AF", "outflows": 704296.66661000007 }, "geometry": { "type": "Point", "coordinates": [ 129.366666666666674, 36.033333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "123--6--", "LOCODE": "KRPTK", "Name": "Pyeongtaek", "NameWoDiac": "Pyeongtaek", "Status": "AF", "outflows": 201565.00002000004 }, "geometry": { "type": "Point", "coordinates": [ 127.1, 36.966666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Korea, Republic of", "Function": "1234----", "LOCODE": "KRUSN", "Name": "Ulsan", "NameWoDiac": "Ulsan", "Status": "AF", "outflows": 4923083.7499700002 }, "geometry": { "type": "Point", "coordinates": [ 129.316666666666663, 35.533333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Kuwait", "Function": "1-3--6--", "LOCODE": "KWSAA", "Name": "Shuaiba", "NameWoDiac": "Shuaiba", "Status": "RL", "outflows": 770515.0 }, "geometry": { "type": "Point", "coordinates": [ 48.133333333333333, 29.033333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "Kuwait", "Function": "1-------", "LOCODE": "KWSWK", "Name": "Shuwaikh", "NameWoDiac": "Shuwaikh", "Status": "RL", "outflows": 272129.0 }, "geometry": { "type": "Point", "coordinates": [ 47.93333333333333, 29.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Cayman Islands", "Function": "1-34----", "LOCODE": "KYGEC", "Name": "Georgetown, Grand Cayman", "NameWoDiac": "Georgetown, Grand Cayman", "Status": "AI", "outflows": 20059.0 }, "geometry": { "type": "Point", "coordinates": [ -81.38333333333334, 19.3 ] } }, +{ "type": "Feature", "properties": { "Country": "Lebanon", "Function": "1--45---", "LOCODE": "LBBEY", "Name": "Beirut", "NameWoDiac": "Beirut", "Status": "AI", "outflows": 8332419.5043999981 }, "geometry": { "type": "Point", "coordinates": [ 35.483333333333334, 33.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Saint Lucia", "Function": "1-3-----", "LOCODE": "LCCAS", "Name": "Castries", "NameWoDiac": "Castries", "Status": "RL", "outflows": 395089.06669000001 }, "geometry": { "type": "Point", "coordinates": [ -60.966666666666669, 14.016666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Sri Lanka", "Function": "12345---", "LOCODE": "LKCMB", "Name": "Colombo", "NameWoDiac": "Colombo", "Status": "AI", "outflows": 40970827.24107001 }, "geometry": { "type": "Point", "coordinates": [ 79.85, 6.916666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Liberia", "Function": "1-345---", "LOCODE": "LRMLW", "Name": "Monrovia", "NameWoDiac": "Monrovia", "Status": "AI", "outflows": 467272.00002000009 }, "geometry": { "type": "Point", "coordinates": [ -10.8, 6.3 ] } }, +{ "type": "Feature", "properties": { "Country": "Libya", "Function": "1-3-----", "LOCODE": "LYKHO", "Name": "Al Khums", "NameWoDiac": "Al Khums", "Status": "RL", "outflows": 230254.00001 }, "geometry": { "type": "Point", "coordinates": [ 14.266666666666667, 32.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Morocco", "Function": "1--45---", "LOCODE": "MACAS", "Name": "Casablanca", "NameWoDiac": "Casablanca", "Status": "AI", "outflows": 2434027.9715000005 }, "geometry": { "type": "Point", "coordinates": [ -7.6, 33.583333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Moldova, Republic of", "Function": "1-3-----", "LOCODE": "MDGIU", "Name": "Giurgiulesti", "NameWoDiac": "Giurgiulesti", "Status": "RL", "outflows": 1560.0 }, "geometry": { "type": "Point", "coordinates": [ 28.183333333333334, 45.466666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Montenegro", "Function": "123-----", "LOCODE": "MEBAR", "Name": "Bar", "NameWoDiac": "Bar", "Status": "RL", "outflows": 257803.0 }, "geometry": { "type": "Point", "coordinates": [ 19.083333333333332, 42.083333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Madagascar", "Function": "1-------", "LOCODE": "MGEHL", "Name": "Ehoala", "NameWoDiac": "Ehoala", "Status": "RL", "outflows": 19864.0 }, "geometry": { "type": "Point", "coordinates": [ 46.95, -25.066666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Madagascar", "Function": "1-34----", "LOCODE": "MGNOS", "Name": "Nosy-Be", "NameWoDiac": "Nosy-Be", "Status": "AI", "outflows": 60888.0 }, "geometry": { "type": "Point", "coordinates": [ 48.25, -13.333333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Marshall Islands", "Function": "1--4----", "LOCODE": "MHMAJ", "Name": "Majuro", "NameWoDiac": "Majuro", "Status": "AI", "outflows": 238090.66668200004 }, "geometry": { "type": "Point", "coordinates": [ 171.383333333333326, 7.1 ] } }, +{ "type": "Feature", "properties": { "Country": "Myanmar", "Function": "123-----", "LOCODE": "MMTLA", "Name": "Thilawa", "NameWoDiac": "Thilawa", "Status": "RL", "outflows": 629785.00001999992 }, "geometry": { "type": "Point", "coordinates": [ 96.25, 16.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Myanmar", "Function": "123-----", "LOCODE": "MMTLA", "Name": "Thilawa", "NameWoDiac": "Thilawa", "Status": "RL", "outflows": 629785.00001999992 }, "geometry": { "type": "Point", "coordinates": [ 96.25, 16.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Malta", "Function": "1-------", "LOCODE": "MTMAR", "Name": "Marsaxlokk", "NameWoDiac": "Marsaxlokk", "Status": "AA", "outflows": 12264680.76361 }, "geometry": { "type": "Point", "coordinates": [ 14.533333333333333, 35.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Mauritius", "Function": "1-3-----", "LOCODE": "MUPMA", "Name": "Port Mathurin", "NameWoDiac": "Port Mathurin", "Status": "RL", "outflows": 3451.5 }, "geometry": { "type": "Point", "coordinates": [ 63.416666666666664, -19.683333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Maldives", "Function": "1--45---", "LOCODE": "MVMLE", "Name": "Male", "NameWoDiac": "Male", "Status": "AI", "outflows": 224938.42858000004 }, "geometry": { "type": "Point", "coordinates": [ 73.5, 4.166666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-3-----", "LOCODE": "MXATM", "Name": "Altamira", "NameWoDiac": "Altamira", "Status": "RL", "outflows": 6907067.8431760017 }, "geometry": { "type": "Point", "coordinates": [ -97.916666666666671, 22.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1--4----", "LOCODE": "MXCOA", "Name": "Coatzacoalcos", "NameWoDiac": "Coatzacoalcos", "Status": "AI", "outflows": 9100.0 }, "geometry": { "type": "Point", "coordinates": [ -94.4, 18.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1--4----", "LOCODE": "MXESE", "Name": "Ensenada", "NameWoDiac": "Ensenada", "Status": "AI", "outflows": 3482019.6660800003 }, "geometry": { "type": "Point", "coordinates": [ -116.6, 31.85 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1--4----", "LOCODE": "MXGYM", "Name": "Guaymas", "NameWoDiac": "Guaymas", "Status": "AI", "outflows": 15320.0 }, "geometry": { "type": "Point", "coordinates": [ -110.88333333333334, 27.916666666666668 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-------", "LOCODE": "MXLZC", "Name": "Lázaro Cárdenas", "NameWoDiac": "Lazaro Cardenas", "Status": "AI", "outflows": 9280527.0998299997 }, "geometry": { "type": "Point", "coordinates": [ -102.183333333333337, 17.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-34----", "LOCODE": "MXZLO", "Name": "Manzanillo", "NameWoDiac": "Manzanillo", "Status": "AI", "outflows": 14861828.233399997 }, "geometry": { "type": "Point", "coordinates": [ -104.3, 19.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1--4----", "LOCODE": "MXMZT", "Name": "Mazatlan", "NameWoDiac": "Mazatlan", "Status": "AI", "outflows": 258563.0 }, "geometry": { "type": "Point", "coordinates": [ -106.4, 23.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "--3-----", "LOCODE": "MXPRO", "Name": "Paraiso", "NameWoDiac": "Paraiso", "Status": "RL", "outflows": 771394.2 }, "geometry": { "type": "Point", "coordinates": [ -92.2, 18.183333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-3-----", "LOCODE": "MXPMD", "Name": "Puerto Madero", "NameWoDiac": "Puerto Madero", "Status": "AI", "outflows": 82680.0 }, "geometry": { "type": "Point", "coordinates": [ -92.416666666666671, 14.716666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-3-----", "LOCODE": "MXPMS", "Name": "Puerto Morelos", "NameWoDiac": "Puerto Morelos", "Status": "RL", "outflows": 13533.0 }, "geometry": { "type": "Point", "coordinates": [ -86.86666666666666, 20.833333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1--4----", "LOCODE": "MXTAM", "Name": "Tampico", "NameWoDiac": "Tampico", "Status": "AI", "outflows": 33951.0 }, "geometry": { "type": "Point", "coordinates": [ -97.86666666666666, 22.25 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-------", "LOCODE": "MXTUX", "Name": "Tuxpan", "NameWoDiac": "Tuxpan", "Status": "AI", "outflows": 21541.0 }, "geometry": { "type": "Point", "coordinates": [ -97.4, 20.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Mexico", "Function": "1-345---", "LOCODE": "MXVER", "Name": "Veracruz", "NameWoDiac": "Veracruz", "Status": "AI", "outflows": 8795504.2708560005 }, "geometry": { "type": "Point", "coordinates": [ -96.083333333333329, 19.2 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--4----", "LOCODE": "MYPEN", "Name": "Penang (Georgetown)", "NameWoDiac": "Penang (Georgetown)", "Status": "AI", "outflows": 3938506.0 }, "geometry": { "type": "Point", "coordinates": [ 100.316666666666663, 5.416666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "123-5---", "LOCODE": "MYPKG", "Name": "Port Klang (Pelabuhan Klang)", "NameWoDiac": "Port Klang (Pelabuhan Klang)", "Status": "RL", "outflows": 58866748.817210026 }, "geometry": { "type": "Point", "coordinates": [ 101.4, 3.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "123-----", "LOCODE": "MYTPP", "Name": "Tanjung Pelepas", "NameWoDiac": "Tanjung Pelepas", "Status": "RL", "outflows": 36861511.888539977 }, "geometry": { "type": "Point", "coordinates": [ 103.55, 1.366666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Namibia", "Function": "1--4----", "LOCODE": "NALUD", "Name": "Lüderitz", "NameWoDiac": "Luderitz", "Status": "AI", "outflows": 43992.0 }, "geometry": { "type": "Point", "coordinates": [ 15.166666666666666, -26.65 ] } }, +{ "type": "Feature", "properties": { "Country": "New Caledonia", "Function": "1--45---", "LOCODE": "NCNOU", "Name": "Nouméa", "NameWoDiac": "Noumea", "Status": "AI", "outflows": 1152154.3332800004 }, "geometry": { "type": "Point", "coordinates": [ 166.45, -22.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "New Caledonia", "Function": "1--45---", "LOCODE": "NCNOU", "Name": "Nouméa", "NameWoDiac": "Noumea", "Status": "AI", "outflows": 1152154.3332800004 }, "geometry": { "type": "Point", "coordinates": [ 166.45, -22.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Nigeria", "Function": "--3-----", "LOCODE": "NGLKK", "Name": "Lekki", "NameWoDiac": "Lekki", "Status": "RL", "outflows": 23036.0 }, "geometry": { "type": "Point", "coordinates": [ 3.1, 6.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Nigeria", "Function": "1-3-----", "LOCODE": "NGONN", "Name": "Onne", "NameWoDiac": "Onne", "Status": "RL", "outflows": 1341939.73318 }, "geometry": { "type": "Point", "coordinates": [ 7.15, 4.716666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Nicaragua", "Function": "1-3--6--", "LOCODE": "NIRAM", "Name": "Rama", "NameWoDiac": "Rama", "Status": "RL", "outflows": 9106.5 }, "geometry": { "type": "Point", "coordinates": [ -84.216666666666669, 12.15 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "12345---", "LOCODE": "NLAMS", "Name": "Amsterdam", "NameWoDiac": "Amsterdam", "Status": "AF", "outflows": 87949.333334999988 }, "geometry": { "type": "Point", "coordinates": [ 4.816666666666666, 52.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "1-3-----", "LOCODE": "NLBOT", "Name": "Botlek", "NameWoDiac": "Botlek", "Status": "AF", "outflows": 33735.0 }, "geometry": { "type": "Point", "coordinates": [ 4.283333333333333, 51.883333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "123-----", "LOCODE": "NLIJM", "Name": "IJmuiden\/Velsen", "NameWoDiac": "IJmuiden\/Velsen", "Status": "AF", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 4.6, 52.466666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "123-----", "LOCODE": "NLMOE", "Name": "Moerdijk", "NameWoDiac": "Moerdijk", "Status": "AF", "outflows": 172497.0 }, "geometry": { "type": "Point", "coordinates": [ 4.566666666666666, 51.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "12345---", "LOCODE": "NLRTM", "Name": "Rotterdam", "NameWoDiac": "Rotterdam", "Status": "AF", "outflows": 60986246.198820002 }, "geometry": { "type": "Point", "coordinates": [ 4.5, 51.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "1-3-----", "LOCODE": "NLTNZ", "Name": "Terneuzen", "NameWoDiac": "Terneuzen", "Status": "AF", "outflows": 24232.0 }, "geometry": { "type": "Point", "coordinates": [ 3.816666666666666, 51.466666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Netherlands", "Function": "123-----", "LOCODE": "NLVLI", "Name": "Vlissingen", "NameWoDiac": "Vlissingen", "Status": "AF", "outflows": 935022.40001200011 }, "geometry": { "type": "Point", "coordinates": [ 3.7, 51.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOAES", "Name": "Ålesund", "NameWoDiac": "Alesund", "Status": "AF", "outflows": 450729.5 }, "geometry": { "type": "Point", "coordinates": [ 6.15, 62.466666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOARD", "Name": "Årdalstangen", "NameWoDiac": "Ardalstangen", "Status": "AA", "outflows": 23400.0 }, "geometry": { "type": "Point", "coordinates": [ 7.7, 61.233333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-------", "LOCODE": "NOAVE", "Name": "Averøy", "NameWoDiac": "Averoy", "Status": "AA", "outflows": 34164.0 }, "geometry": { "type": "Point", "coordinates": [ 7.666666666666667, 63.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1234----", "LOCODE": "NOBGO", "Name": "Bergen", "NameWoDiac": "Bergen", "Status": "AA", "outflows": 330739.5 }, "geometry": { "type": "Point", "coordinates": [ 5.316666666666666, 60.383333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1234----", "LOCODE": "NOBOO", "Name": "Bodø", "NameWoDiac": "Bodo", "Status": "AA", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 14.366666666666667, 67.283333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOBVK", "Name": "Brevik", "NameWoDiac": "Brevik", "Status": "AA", "outflows": 50128.0 }, "geometry": { "type": "Point", "coordinates": [ 9.7, 59.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "123-----", "LOCODE": "NODRM", "Name": "Drammen", "NameWoDiac": "Drammen", "Status": "AA", "outflows": 145713.0 }, "geometry": { "type": "Point", "coordinates": [ 10.233333333333333, 59.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOEGE", "Name": "Egersund", "NameWoDiac": "Egersund", "Status": "AA", "outflows": 142428.0 }, "geometry": { "type": "Point", "coordinates": [ 6.0, 58.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOFRO", "Name": "Florø", "NameWoDiac": "Floro", "Status": "AA", "outflows": 203580.0 }, "geometry": { "type": "Point", "coordinates": [ 5.016666666666667, 61.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "123-----", "LOCODE": "NOFRK", "Name": "Fredrikstad", "NameWoDiac": "Fredrikstad", "Status": "AA", "outflows": 111033.0 }, "geometry": { "type": "Point", "coordinates": [ 10.916666666666666, 59.2 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-------", "LOCODE": "NOFUS", "Name": "Fusa", "NameWoDiac": "Fusa", "Status": "AA", "outflows": 99528.0 }, "geometry": { "type": "Point", "coordinates": [ 5.616666666666667, 60.2 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOGLO", "Name": "Glomfjord", "NameWoDiac": "Glomfjord", "Status": "AA", "outflows": 34164.0 }, "geometry": { "type": "Point", "coordinates": [ 13.933333333333334, 66.8 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOHFT", "Name": "Hammerfest", "NameWoDiac": "Hammerfest", "Status": "AA", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 23.666666666666668, 70.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOHRD", "Name": "Harstad", "NameWoDiac": "Harstad", "Status": "AA", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 16.533333333333335, 68.783333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOHAU", "Name": "Haugesund", "NameWoDiac": "Haugesund", "Status": "AA", "outflows": 337486.5 }, "geometry": { "type": "Point", "coordinates": [ 5.25, 59.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOHVI", "Name": "Håvik", "NameWoDiac": "Havik", "Status": "AA", "outflows": 116610.0 }, "geometry": { "type": "Point", "coordinates": [ 5.316666666666666, 59.3 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "--3-----", "LOCODE": "NOHLA", "Name": "Holla", "NameWoDiac": "Holla", "Status": "RL", "outflows": 45630.0 }, "geometry": { "type": "Point", "coordinates": [ 9.183333333333334, 59.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOHYR", "Name": "Høyanger", "NameWoDiac": "Hoyanger", "Status": "AA", "outflows": 39357.5 }, "geometry": { "type": "Point", "coordinates": [ 6.05, 61.216666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOHOY", "Name": "Husøy - Tønsberg", "NameWoDiac": "Husoy - Tonsberg", "Status": "AA", "outflows": 17160.0 }, "geometry": { "type": "Point", "coordinates": [ 10.45, 59.233333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOIKR", "Name": "Ikornnes", "NameWoDiac": "Ikornnes", "Status": "AA", "outflows": 69888.0 }, "geometry": { "type": "Point", "coordinates": [ 6.55, 62.383333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "123-----", "LOCODE": "NOKRS", "Name": "Kristiansand", "NameWoDiac": "Kristiansand", "Status": "AA", "outflows": 86460.0 }, "geometry": { "type": "Point", "coordinates": [ 7.983333333333333, 58.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "123-----", "LOCODE": "NOLAR", "Name": "Larvik", "NameWoDiac": "Larvik", "Status": "AA", "outflows": 123903.0 }, "geometry": { "type": "Point", "coordinates": [ 10.016666666666667, 59.033333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOMAY", "Name": "Måløy", "NameWoDiac": "Maloy", "Status": "AF", "outflows": 347613.5 }, "geometry": { "type": "Point", "coordinates": [ 5.1, 61.93333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOMOL", "Name": "Molde", "NameWoDiac": "Molde", "Status": "AA", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 7.15, 62.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1234----", "LOCODE": "NOMJF", "Name": "Mosjøen", "NameWoDiac": "Mosjoen", "Status": "AF", "outflows": 42276.0 }, "geometry": { "type": "Point", "coordinates": [ 13.2, 65.833333333333329 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "123-----", "LOCODE": "NOMSS", "Name": "Moss", "NameWoDiac": "Moss", "Status": "AA", "outflows": 51012.0 }, "geometry": { "type": "Point", "coordinates": [ 10.65, 59.416666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOODD", "Name": "Odda", "NameWoDiac": "Odda", "Status": "AA", "outflows": 19240.0 }, "geometry": { "type": "Point", "coordinates": [ 6.533333333333333, 60.06666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOORK", "Name": "Orkanger", "NameWoDiac": "Orkanger", "Status": "AA", "outflows": 132567.5 }, "geometry": { "type": "Point", "coordinates": [ 9.833333333333334, 63.31666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "12345---", "LOCODE": "NOOSL", "Name": "Oslo", "NameWoDiac": "Oslo", "Status": "AA", "outflows": 370877.0 }, "geometry": { "type": "Point", "coordinates": [ 10.733333333333333, 59.9 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOSAT", "Name": "Salten", "NameWoDiac": "Salten", "Status": "AA", "outflows": 34164.0 }, "geometry": { "type": "Point", "coordinates": [ 15.583333333333334, 67.36666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1234----", "LOCODE": "NOSVG", "Name": "Stavanger", "NameWoDiac": "Stavanger", "Status": "AI", "outflows": 99528.0 }, "geometry": { "type": "Point", "coordinates": [ 5.75, 58.966666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOSKN", "Name": "Stokmarknes", "NameWoDiac": "Stokmarknes", "Status": "AA", "outflows": 34164.0 }, "geometry": { "type": "Point", "coordinates": [ 14.9, 68.566666666666663 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOSUN", "Name": "Sunndalsøra", "NameWoDiac": "Sunndalsora", "Status": "AF", "outflows": 107250.0 }, "geometry": { "type": "Point", "coordinates": [ 8.55, 62.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOSVE", "Name": "Svelgen", "NameWoDiac": "Svelgen", "Status": "AA", "outflows": 34164.0 }, "geometry": { "type": "Point", "coordinates": [ 5.283333333333333, 61.766666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOSVJ", "Name": "Svolvær", "NameWoDiac": "Svolvar", "Status": "AA", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 14.55, 68.216666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-3-----", "LOCODE": "NOTAE", "Name": "Tananger", "NameWoDiac": "Tananger", "Status": "AA", "outflows": 348445.5 }, "geometry": { "type": "Point", "coordinates": [ 5.583333333333333, 58.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-34----", "LOCODE": "NOTOS", "Name": "Tromsø", "NameWoDiac": "Tromso", "Status": "AI", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 18.966666666666665, 69.666666666666671 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1234----", "LOCODE": "NOTRD", "Name": "Trondheim", "NameWoDiac": "Trondheim", "Status": "AA", "outflows": 9516.0 }, "geometry": { "type": "Point", "coordinates": [ 10.4, 63.43333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Nauru", "Function": "1--45---", "LOCODE": "NRINU", "Name": "Nauru Island", "NameWoDiac": "Nauru Island", "Status": "AI", "outflows": 3756.0 }, "geometry": { "type": "Point", "coordinates": [ 166.916666666666657, -0.55 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "12345---", "LOCODE": "NZAKL", "Name": "Auckland", "NameWoDiac": "Auckland", "Status": "AC", "outflows": 3839723.3548399992 }, "geometry": { "type": "Point", "coordinates": [ 174.8, -36.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "123-----", "LOCODE": "NZBLU", "Name": "Bluff", "NameWoDiac": "Bluff", "Status": "AC", "outflows": 537012.66663 }, "geometry": { "type": "Point", "coordinates": [ 168.316666666666663, -46.6 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1-3-----", "LOCODE": "NZLYT", "Name": "Lyttelton", "NameWoDiac": "Lyttelton", "Status": "AC", "outflows": 2992885.6903999997 }, "geometry": { "type": "Point", "coordinates": [ 172.716666666666669, -43.6 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1-3-----", "LOCODE": "NZMAP", "Name": "Marsden Point", "NameWoDiac": "Marsden Point", "Status": "AC", "outflows": 722904.00003 }, "geometry": { "type": "Point", "coordinates": [ 174.5, -35.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1--4----", "LOCODE": "NZNPE", "Name": "Napier", "NameWoDiac": "Napier", "Status": "AC", "outflows": 3423163.5692899991 }, "geometry": { "type": "Point", "coordinates": [ 176.9, -39.466666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1-34----", "LOCODE": "NZNSN", "Name": "Nelson", "NameWoDiac": "Nelson", "Status": "AC", "outflows": 1229461.9998700004 }, "geometry": { "type": "Point", "coordinates": [ 173.26666666666668, -41.25 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1-------", "LOCODE": "NZPOE", "Name": "Port Chalmers", "NameWoDiac": "Port Chalmers", "Status": "AC", "outflows": 1736542.9262700006 }, "geometry": { "type": "Point", "coordinates": [ 170.6, -45.81666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1234----", "LOCODE": "NZTRG", "Name": "Tauranga", "NameWoDiac": "Tauranga", "Status": "AI", "outflows": 6568750.5691900002 }, "geometry": { "type": "Point", "coordinates": [ 176.166666666666657, -37.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1234----", "LOCODE": "NZTIU", "Name": "Timaru", "NameWoDiac": "Timaru", "Status": "AC", "outflows": 1399570.2597300003 }, "geometry": { "type": "Point", "coordinates": [ 171.25, -44.383333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "New Zealand", "Function": "1234----", "LOCODE": "NZWLG", "Name": "Wellington", "NameWoDiac": "Wellington", "Status": "AC", "outflows": 1605903.3093099999 }, "geometry": { "type": "Point", "coordinates": [ 174.783333333333331, -41.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "1-345---", "LOCODE": "PAONX", "Name": "Colón", "NameWoDiac": "Colon", "Status": "AI", "outflows": 5425996.6880400013 }, "geometry": { "type": "Point", "coordinates": [ -79.86666666666666, 9.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "1-------", "LOCODE": "PACTB", "Name": "Cristóbal", "NameWoDiac": "Cristobal", "Status": "AI", "outflows": 7696418.2510899995 }, "geometry": { "type": "Point", "coordinates": [ -79.9, 9.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "1-345---", "LOCODE": "PAPTY", "Name": "Panamá, Ciudad de", "NameWoDiac": "Panama, Ciudad de", "Status": "AI", "outflows": 13494.0 }, "geometry": { "type": "Point", "coordinates": [ -79.533333333333331, 8.966666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "1-------", "LOCODE": "PAROD", "Name": "Rodman", "NameWoDiac": "Rodman", "Status": "RL", "outflows": 4784764.0453200005 }, "geometry": { "type": "Point", "coordinates": [ -79.566666666666663, 8.95 ] } }, +{ "type": "Feature", "properties": { "Country": "French Polynesia", "Function": "1--4----", "LOCODE": "PFBOB", "Name": "Bora Bora", "NameWoDiac": "Bora Bora", "Status": "AI", "outflows": 726.75 }, "geometry": { "type": "Point", "coordinates": [ -151.75, -16.45 ] } }, +{ "type": "Feature", "properties": { "Country": "French Polynesia", "Function": "1--45---", "LOCODE": "PFPPT", "Name": "Papeete", "NameWoDiac": "Papeete", "Status": "AI", "outflows": 1092395.0833000003 }, "geometry": { "type": "Point", "coordinates": [ -149.616666666666674, -17.55 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGMAG", "Name": "Madang", "NameWoDiac": "Madang", "Status": "AI", "outflows": 168130.0 }, "geometry": { "type": "Point", "coordinates": [ 145.783333333333331, -5.216666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1-------", "LOCODE": "PGMTK", "Name": "Motukea Island", "NameWoDiac": "Motukea Island", "Status": "RL", "outflows": 301007.5 }, "geometry": { "type": "Point", "coordinates": [ 147.1, -9.433333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1-3--6--", "LOCODE": "PHBTG", "Name": "Batangas\/Luzon", "NameWoDiac": "Batangas\/Luzon", "Status": "AI", "outflows": 1811559.5 }, "geometry": { "type": "Point", "coordinates": [ 121.05, 13.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1-34----", "LOCODE": "PHGES", "Name": "General Santos", "NameWoDiac": "General Santos", "Status": "AI", "outflows": 925870.83340999996 }, "geometry": { "type": "Point", "coordinates": [ 125.15, 6.116666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1-3-----", "LOCODE": "PHTGO", "Name": "Tagoloan", "NameWoDiac": "Tagoloan", "Status": "RL", "outflows": 12150.0 }, "geometry": { "type": "Point", "coordinates": [ 124.75, 8.533333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Poland", "Function": "123-----", "LOCODE": "PLGDY", "Name": "Gdynia", "NameWoDiac": "Gdynia", "Status": "RL", "outflows": 1377819.1666200003 }, "geometry": { "type": "Point", "coordinates": [ 18.55, 54.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Poland", "Function": "123-----", "LOCODE": "PLSWI", "Name": "Swinoujscie", "NameWoDiac": "Swinoujscie", "Status": "RL", "outflows": 16263.0 }, "geometry": { "type": "Point", "coordinates": [ 14.25, 53.9 ] } }, +{ "type": "Feature", "properties": { "Country": "Puerto Rico", "Function": "1--45---", "LOCODE": "PRSJU", "Name": "San Juan", "NameWoDiac": "San Juan", "Status": "AI", "outflows": 914875.50003 }, "geometry": { "type": "Point", "coordinates": [ -66.083333333333329, 18.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-3-----", "LOCODE": "PTCNL", "Name": "Caniçal", "NameWoDiac": "Canical", "Status": "RL", "outflows": 70018.0 }, "geometry": { "type": "Point", "coordinates": [ -16.733333333333334, 32.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "123-----", "LOCODE": "PTFDF", "Name": "Figueira da Foz", "NameWoDiac": "Figueira da Foz", "Status": "AI", "outflows": 26754.0 }, "geometry": { "type": "Point", "coordinates": [ -8.866666666666667, 40.15 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-34----", "LOCODE": "PTHOR", "Name": "Horta", "NameWoDiac": "Horta", "Status": "AI", "outflows": 32292.0 }, "geometry": { "type": "Point", "coordinates": [ -28.633333333333333, 38.533333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "123-----", "LOCODE": "PTLEI", "Name": "Leixões", "NameWoDiac": "Leixoes", "Status": "AI", "outflows": 1619530.783304 }, "geometry": { "type": "Point", "coordinates": [ -8.683333333333334, 41.18333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "12345---", "LOCODE": "PTLIS", "Name": "Lisboa", "NameWoDiac": "Lisboa", "Status": "AI", "outflows": 1373631.1667299997 }, "geometry": { "type": "Point", "coordinates": [ -9.133333333333333, 38.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "--3-----", "LOCODE": "PTPIC", "Name": "Pico", "NameWoDiac": "Pico", "Status": "RL", "outflows": 23192.0 }, "geometry": { "type": "Point", "coordinates": [ -8.416666666666666, 41.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-345---", "LOCODE": "PTPDL", "Name": "Ponta Delgada", "NameWoDiac": "Ponta Delgada", "Status": "AI", "outflows": 109096.0 }, "geometry": { "type": "Point", "coordinates": [ -25.666666666666668, 37.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1--4---B", "LOCODE": "PTPXO", "Name": "Porto Santo Island", "NameWoDiac": "Porto Santo Island", "Status": "AI", "outflows": 28236.0 }, "geometry": { "type": "Point", "coordinates": [ -16.333333333333332, 33.06666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-3-----", "LOCODE": "PTPRG", "Name": "Praia da Graciosa", "NameWoDiac": "Praia da Graciosa", "Status": "AI", "outflows": 19500.0 }, "geometry": { "type": "Point", "coordinates": [ -27.966666666666665, 39.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-3-----", "LOCODE": "PTPRV", "Name": "Praia da Vitória", "NameWoDiac": "Praia da Vitoria", "Status": "AI", "outflows": 109096.0 }, "geometry": { "type": "Point", "coordinates": [ -27.066666666666666, 38.733333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-3-----", "LOCODE": "PTSCF", "Name": "Santa Cruz das Flores", "NameWoDiac": "Santa Cruz das Flores", "Status": "RL", "outflows": 16146.0 }, "geometry": { "type": "Point", "coordinates": [ -31.116666666666667, 39.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "123-----", "LOCODE": "PTSET", "Name": "Setúbal", "NameWoDiac": "Setubal", "Status": "AI", "outflows": 443319.5 }, "geometry": { "type": "Point", "coordinates": [ -8.9, 38.533333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1234----", "LOCODE": "PTSIE", "Name": "Sines", "NameWoDiac": "Sines", "Status": "AI", "outflows": 11424189.365200002 }, "geometry": { "type": "Point", "coordinates": [ -8.866666666666667, 37.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-3-----", "LOCODE": "PTVEL", "Name": "Velas", "NameWoDiac": "Velas", "Status": "AI", "outflows": 47190.0 }, "geometry": { "type": "Point", "coordinates": [ -28.216666666666665, 38.68333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Portugal", "Function": "1-3-----", "LOCODE": "PTVDP", "Name": "Vila do Porto", "NameWoDiac": "Vila do Porto", "Status": "RL", "outflows": 13468.0 }, "geometry": { "type": "Point", "coordinates": [ -25.15, 36.93333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Paraguay", "Function": "1--45---", "LOCODE": "PYASU", "Name": "Asunción", "NameWoDiac": "Asuncion", "Status": "AI", "outflows": 13793.0 }, "geometry": { "type": "Point", "coordinates": [ -57.666666666666664, -25.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Qatar", "Function": "1-------", "LOCODE": "QAHMD", "Name": "BGN\/PCGN1956 - HAMAD", "NameWoDiac": "BGN\/PCGN1956 - HAMAD", "Status": "RL", "outflows": 11570563.360890001 }, "geometry": { "type": "Point", "coordinates": [ 51.616666666666667, 25.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Qatar", "Function": "1----6--", "LOCODE": "QAMES", "Name": "Mesaieed", "NameWoDiac": "Mesaieed", "Status": "RQ", "outflows": 87230.0 }, "geometry": { "type": "Point", "coordinates": [ 51.916666666666664, 25.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Romania", "Function": "1234-6--", "LOCODE": "ROCND", "Name": "Constanta", "NameWoDiac": "Constanta", "Status": "AI", "outflows": 4202750.0668100007 }, "geometry": { "type": "Point", "coordinates": [ 28.65, 44.18333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "123-----", "LOCODE": "RUBRK", "Name": "Lomonosov", "NameWoDiac": "Lomonosov", "Status": "RL", "outflows": 172926.0 }, "geometry": { "type": "Point", "coordinates": [ 29.733333333333334, 59.9 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "123--6--", "LOCODE": "RUNVS", "Name": "Novorossiysk", "NameWoDiac": "Novorossiysk", "Status": "RL", "outflows": 2856095.6668099994 }, "geometry": { "type": "Point", "coordinates": [ 37.766666666666666, 44.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "12345---", "LOCODE": "RULED", "Name": "Saint Petersburg (ex Leningrad)", "NameWoDiac": "Saint Petersburg (ex Leningrad)", "Status": "AI", "outflows": 2197863.9046789999 }, "geometry": { "type": "Point", "coordinates": [ 30.25, 59.883333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "123-----", "LOCODE": "RUULU", "Name": "Ust'-Luga", "NameWoDiac": "Ust'-Luga", "Status": "RL", "outflows": 217892.99998 }, "geometry": { "type": "Point", "coordinates": [ 28.316666666666666, 59.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1-------", "LOCODE": "RUVYP", "Name": "Vostochnyy Port", "NameWoDiac": "Vostochnyy Port", "Status": "RL", "outflows": 694044.00000000012 }, "geometry": { "type": "Point", "coordinates": [ 133.05, 42.766666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1-------", "LOCODE": "RUZAR", "Name": "Zarubino", "NameWoDiac": "Zarubino", "Status": "RL", "outflows": 8476.0 }, "geometry": { "type": "Point", "coordinates": [ 131.083333333333343, 42.616666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Saudi Arabia", "Function": "12345---", "LOCODE": "SADMM", "Name": "Ad Dammam", "NameWoDiac": "Ad Dammam", "Status": "RL", "outflows": 11255729.646892 }, "geometry": { "type": "Point", "coordinates": [ 50.1, 26.416666666666668 ] } }, +{ "type": "Feature", "properties": { "Country": "Saudi Arabia", "Function": "1--45---", "LOCODE": "SAJED", "Name": "Jeddah", "NameWoDiac": "Jeddah", "Status": "AI", "outflows": 28479677.911780011 }, "geometry": { "type": "Point", "coordinates": [ 39.166666666666664, 21.533333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "Saudi Arabia", "Function": "1-3-----", "LOCODE": "SAKAC", "Name": "King Abdullah City", "NameWoDiac": "King Abdullah City", "Status": "RQ", "outflows": 13582128.147299998 }, "geometry": { "type": "Point", "coordinates": [ 39.083333333333336, 22.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Saudi Arabia", "Function": "1-34----", "LOCODE": "SAYNB", "Name": "Yanbu al-Bahr", "NameWoDiac": "Yanbu al-Bahr", "Status": "AI", "outflows": 49257.0 }, "geometry": { "type": "Point", "coordinates": [ 38.033333333333331, 24.083333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "123-----", "LOCODE": "SEAHU", "Name": "Åhus", "NameWoDiac": "Ahus", "Status": "AA", "outflows": 33696.0 }, "geometry": { "type": "Point", "coordinates": [ 14.283333333333333, 55.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1--4----", "LOCODE": "SEGVX", "Name": "Gävle", "NameWoDiac": "Gavle", "Status": "AA", "outflows": 278876.0 }, "geometry": { "type": "Point", "coordinates": [ 17.166666666666668, 60.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "12345---", "LOCODE": "SEGOT", "Name": "Göteborg", "NameWoDiac": "Goteborg", "Status": "AA", "outflows": 3614371.4282800001 }, "geometry": { "type": "Point", "coordinates": [ 11.966666666666667, 57.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1234----", "LOCODE": "SEHAD", "Name": "Halmstad", "NameWoDiac": "Halmstad", "Status": "AA", "outflows": 48750.0 }, "geometry": { "type": "Point", "coordinates": [ 12.85, 56.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1--4----", "LOCODE": "SEKSD", "Name": "Karlstad", "NameWoDiac": "Karlstad", "Status": "AA", "outflows": 3312.0 }, "geometry": { "type": "Point", "coordinates": [ 13.5, 59.366666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1234----", "LOCODE": "SENRK", "Name": "Norrköping", "NameWoDiac": "Norrkoping", "Status": "AA", "outflows": 296309.0 }, "geometry": { "type": "Point", "coordinates": [ 16.183333333333334, 58.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "123-----", "LOCODE": "SEOSK", "Name": "Oskarshamn", "NameWoDiac": "Oskarshamn", "Status": "AA", "outflows": 84688.5 }, "geometry": { "type": "Point", "coordinates": [ 16.433333333333334, 57.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "123-----", "LOCODE": "SEOXE", "Name": "Oxelösund", "NameWoDiac": "Oxelosund", "Status": "AA", "outflows": 73031.833334999988 }, "geometry": { "type": "Point", "coordinates": [ 17.1, 58.666666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "123-----", "LOCODE": "SEPIT", "Name": "Piteå", "NameWoDiac": "Pitea", "Status": "AA", "outflows": 67392.0 }, "geometry": { "type": "Point", "coordinates": [ 21.5, 65.333333333333329 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "123--6--", "LOCODE": "SESOE", "Name": "Södertälje", "NameWoDiac": "Sodertalje", "Status": "AA", "outflows": 54799.333335000003 }, "geometry": { "type": "Point", "coordinates": [ 17.616666666666667, 59.2 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "12345---", "LOCODE": "SESTO", "Name": "Stockholm", "NameWoDiac": "Stockholm", "Status": "AA", "outflows": 227955.0 }, "geometry": { "type": "Point", "coordinates": [ 18.05, 59.333333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1-34----", "LOCODE": "SESDL", "Name": "Sundsvall", "NameWoDiac": "Sundsvall", "Status": "AA", "outflows": 51928.5 }, "geometry": { "type": "Point", "coordinates": [ 17.3, 62.383333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1234----", "LOCODE": "SEUME", "Name": "Umeå", "NameWoDiac": "Umea", "Status": "AI", "outflows": 51928.5 }, "geometry": { "type": "Point", "coordinates": [ 20.25, 63.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "1234----", "LOCODE": "SEVST", "Name": "Västerås", "NameWoDiac": "Vasteras", "Status": "AA", "outflows": 21103.333335000003 }, "geometry": { "type": "Point", "coordinates": [ 16.55, 59.616666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Syrian Arab Republic", "Function": "1--4----", "LOCODE": "SYLTK", "Name": "Latakia", "NameWoDiac": "Latakia", "Status": "AI", "outflows": 719300.0 }, "geometry": { "type": "Point", "coordinates": [ 35.783333333333331, 35.516666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Syrian Arab Republic", "Function": "1-3-----", "LOCODE": "SYTTS", "Name": "Tartus", "NameWoDiac": "Tartus", "Status": "RL", "outflows": 103493.0 }, "geometry": { "type": "Point", "coordinates": [ 35.9, 34.9 ] } }, +{ "type": "Feature", "properties": { "Country": "Thailand", "Function": "12345---", "LOCODE": "THBKK", "Name": "Bangkok", "NameWoDiac": "Bangkok", "Status": "AI", "outflows": 4526246.8335100003 }, "geometry": { "type": "Point", "coordinates": [ 100.516666666666666, 13.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Thailand", "Function": "1-3-----", "LOCODE": "THLCH", "Name": "Laem Chabang", "NameWoDiac": "Laem Chabang", "Status": "RL", "outflows": 21757591.196550008 }, "geometry": { "type": "Point", "coordinates": [ 100.88333333333334, 13.083333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Thailand", "Function": "---4----", "LOCODE": "THHKT", "Name": "Phuket International Apt", "NameWoDiac": "Phuket International Apt", "Status": "AA", "outflows": 44898.75 }, "geometry": { "type": "Point", "coordinates": [ 98.316666666666663, 8.116666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Thailand", "Function": "1-3-----", "LOCODE": "THSCS", "Name": "Sahathai Coastal Seaport", "NameWoDiac": "Sahathai Coastal Seaport", "Status": "RQ", "outflows": 91563.33335 }, "geometry": { "type": "Point", "coordinates": [ 100.533333333333331, 13.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Timor-Leste", "Function": "1-34----", "LOCODE": "TLDIL", "Name": "Dili", "NameWoDiac": "Dili", "Status": "RL", "outflows": 34187.75 }, "geometry": { "type": "Point", "coordinates": [ 125.566666666666663, -8.55 ] } }, +{ "type": "Feature", "properties": { "Country": "Tonga", "Function": "1--45---", "LOCODE": "TOTBU", "Name": "Nuku'alofa", "NameWoDiac": "Nuku'alofa", "Status": "AI", "outflows": 178599.5 }, "geometry": { "type": "Point", "coordinates": [ -175.2, -21.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "--3-----", "LOCODE": "TRPAM", "Name": "Ambarli", "NameWoDiac": "Ambarli", "Status": "RL", "outflows": 14411413.266529994 }, "geometry": { "type": "Point", "coordinates": [ 39.166666666666664, 41.033333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1234----", "LOCODE": "TRAYT", "Name": "Antalya", "NameWoDiac": "Antalya", "Status": "AI", "outflows": 111670.0 }, "geometry": { "type": "Point", "coordinates": [ 30.6, 36.833333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1234----", "LOCODE": "TRBDM", "Name": "Bandirma", "NameWoDiac": "Bandirma", "Status": "AI", "outflows": 19968.0 }, "geometry": { "type": "Point", "coordinates": [ 27.966666666666665, 40.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "--3-----", "LOCODE": "TRELI", "Name": "Eregli", "NameWoDiac": "Eregli", "Status": "RL", "outflows": 46215.0 }, "geometry": { "type": "Point", "coordinates": [ 34.05, 37.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TREYP", "Name": "Evyap Port \/Kocaeli", "NameWoDiac": "Evyap Port \/Kocaeli", "Status": "RL", "outflows": 2234864.6663000002 }, "geometry": { "type": "Point", "coordinates": [ 29.7, 40.766666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TRGEB", "Name": "Gebze", "NameWoDiac": "Gebze", "Status": "RL", "outflows": 3850254.1414999994 }, "geometry": { "type": "Point", "coordinates": [ 29.416666666666668, 40.783333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-------", "LOCODE": "TRGEM", "Name": "Gemlik", "NameWoDiac": "Gemlik", "Status": "RL", "outflows": 5852461.2414100012 }, "geometry": { "type": "Point", "coordinates": [ 29.15, 40.416666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TRISK", "Name": "Iskenderun", "NameWoDiac": "Iskenderun", "Status": "RL", "outflows": 5577045.5832400005 }, "geometry": { "type": "Point", "coordinates": [ 36.166666666666664, 36.583333333333336 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "12345---", "LOCODE": "TRIZM", "Name": "Izmir", "NameWoDiac": "Izmir", "Status": "AI", "outflows": 3559402.8750300007 }, "geometry": { "type": "Point", "coordinates": [ 27.15, 38.416666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TRIZT", "Name": "Izmit", "NameWoDiac": "Izmit", "Status": "RL", "outflows": 8619638.1665099971 }, "geometry": { "type": "Point", "coordinates": [ 29.95, 40.783333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TRKMX", "Name": "Kumport", "NameWoDiac": "Kumport", "Status": "RQ", "outflows": 829400.0 }, "geometry": { "type": "Point", "coordinates": [ 28.816666666666666, 40.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-------", "LOCODE": "TRLMA", "Name": "Limas", "NameWoDiac": "Limas", "Status": "RQ", "outflows": 31720.0 }, "geometry": { "type": "Point", "coordinates": [ 26.916666666666668, 38.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TRMAD", "Name": "Mardas", "NameWoDiac": "Mardas", "Status": "RQ", "outflows": 103532.0 }, "geometry": { "type": "Point", "coordinates": [ 28.95, 41.016666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "123-----", "LOCODE": "TRMER", "Name": "Mersin", "NameWoDiac": "Mersin", "Status": "RL", "outflows": 9929684.1327900011 }, "geometry": { "type": "Point", "coordinates": [ 34.633333333333333, 36.716666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1--4----", "LOCODE": "TRSSX", "Name": "Samsun", "NameWoDiac": "Samsun", "Status": "AI", "outflows": 105306.5 }, "geometry": { "type": "Point", "coordinates": [ 36.333333333333336, 41.283333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1234----", "LOCODE": "TRTEK", "Name": "Tekirdag", "NameWoDiac": "Tekirdag", "Status": "AI", "outflows": 4941615.3749799989 }, "geometry": { "type": "Point", "coordinates": [ 27.516666666666666, 40.966666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-34----", "LOCODE": "TRTZX", "Name": "Trabzon", "NameWoDiac": "Trabzon", "Status": "AI", "outflows": 14760.0 }, "geometry": { "type": "Point", "coordinates": [ 39.733333333333334, 41.0 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-3-----", "LOCODE": "TRYPO", "Name": "Yilport", "NameWoDiac": "Yilport", "Status": "RL", "outflows": 253751.33331 }, "geometry": { "type": "Point", "coordinates": [ 29.533333333333335, 40.766666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Trinidad and Tobago", "Function": "1--45---", "LOCODE": "TTPOS", "Name": "Port-of-Spain", "NameWoDiac": "Port-of-Spain", "Status": "AI", "outflows": 1136813.0 }, "geometry": { "type": "Point", "coordinates": [ -61.516666666666666, 10.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Trinidad and Tobago", "Function": "1--45---", "LOCODE": "TTPOS", "Name": "Port-of-Spain", "NameWoDiac": "Port-of-Spain", "Status": "AI", "outflows": 1136813.0 }, "geometry": { "type": "Point", "coordinates": [ -61.516666666666666, 10.65 ] } }, +{ "type": "Feature", "properties": { "Country": "Taiwan, Province of China", "Function": "1--45---", "LOCODE": "TWTPE", "Name": "Taipei", "NameWoDiac": "Taipei", "Status": "AI", "outflows": 10793107.077210007 }, "geometry": { "type": "Point", "coordinates": [ 121.516666666666666, 25.033333333333335 ] } }, +{ "type": "Feature", "properties": { "Country": "Tanzania, United Republic of", "Function": "12345---", "LOCODE": "TZDAR", "Name": "Dar es Salaam", "NameWoDiac": "Dar es Salaam", "Status": "AI", "outflows": 1404403.5674399997 }, "geometry": { "type": "Point", "coordinates": [ 39.283333333333331, -6.8 ] } }, +{ "type": "Feature", "properties": { "Country": "Ukraine", "Function": "123-----", "LOCODE": "UAILK", "Name": "Chornomorsk", "NameWoDiac": "Chornomorsk", "Status": "AA", "outflows": 1398819.4999800001 }, "geometry": { "type": "Point", "coordinates": [ 30.666666666666668, 46.31666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Ukraine", "Function": "1234-6--", "LOCODE": "UAODS", "Name": "Odesa", "NameWoDiac": "Odesa", "Status": "AA", "outflows": 2843490.8999800007 }, "geometry": { "type": "Point", "coordinates": [ 30.75, 46.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Ukraine", "Function": "1-------", "LOCODE": "UAYUZ", "Name": "Yuzhnyi", "NameWoDiac": "Yuzhnyi", "Status": "AA", "outflows": 1861645.5 }, "geometry": { "type": "Point", "coordinates": [ 31.016666666666666, 46.6 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "123-----", "LOCODE": "USBAL", "Name": "Baltimore", "NameWoDiac": "Baltimore", "Status": "RL", "outflows": 6053080.2448899997 }, "geometry": { "type": "Point", "coordinates": [ -76.61666666666666, 39.283333333333331 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "-23-----", "LOCODE": "USACL", "Name": "Chester", "NameWoDiac": "Chester", "Status": "RL", "outflows": 109902.0 }, "geometry": { "type": "Point", "coordinates": [ -72.583333333333329, 43.266666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "--3----B", "LOCODE": "USEPI", "Name": "Eastport", "NameWoDiac": "Eastport", "Status": "RN", "outflows": 28364.0 }, "geometry": { "type": "Point", "coordinates": [ -67.000460366215606, 44.918963897792032 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-3-----", "LOCODE": "USFEB", "Name": "Fernandina Beach", "NameWoDiac": "Fernandina Beach", "Status": "RL", "outflows": 2700.0 }, "geometry": { "type": "Point", "coordinates": [ -81.45, 30.666666666666668 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "--3--6--", "LOCODE": "USGFP", "Name": "Gulfport", "NameWoDiac": "Gulfport", "Status": "RQ", "outflows": 179625.33335 }, "geometry": { "type": "Point", "coordinates": [ -89.084906220322893, 30.378156457739781 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-345---", "LOCODE": "USHNL", "Name": "Honolulu", "NameWoDiac": "Honolulu", "Status": "AI", "outflows": 808514.83334000001 }, "geometry": { "type": "Point", "coordinates": [ -157.85, 21.3 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "-23--6--", "LOCODE": "USHKA", "Name": "Houston", "NameWoDiac": "Houston", "Status": "RL", "outflows": 14456458.251239998 }, "geometry": { "type": "Point", "coordinates": [ -149.816666666666663, 61.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1234----", "LOCODE": "USLGB", "Name": "Long Beach", "NameWoDiac": "Long Beach", "Status": "AI", "outflows": 12114713.79308 }, "geometry": { "type": "Point", "coordinates": [ -118.183333333333337, 33.766666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "12345---", "LOCODE": "USNYC", "Name": "New York", "NameWoDiac": "New York", "Status": "AI", "outflows": 27396473.865290001 }, "geometry": { "type": "Point", "coordinates": [ -74.0, 40.7 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "--3--6--", "LOCODE": "USNFF", "Name": "Norfolk", "NameWoDiac": "Norfolk", "Status": "RL", "outflows": 20779844.877009999 }, "geometry": { "type": "Point", "coordinates": [ -73.2, 42.0 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "-23-----", "LOCODE": "USKND", "Name": "Oakland", "NameWoDiac": "Oakland", "Status": "RL", "outflows": 17163885.235119998 }, "geometry": { "type": "Point", "coordinates": [ -122.220254629629636, 37.932904795821436 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "-23--6--", "LOCODE": "USPDP", "Name": "Philadelphia", "NameWoDiac": "Philadelphia", "Status": "RL", "outflows": 5743740.1835829979 }, "geometry": { "type": "Point", "coordinates": [ -75.716666666666669, 44.15 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-34----", "LOCODE": "USPEF", "Name": "Port Everglades", "NameWoDiac": "Port Everglades", "Status": "RN", "outflows": 3155879.7381200008 }, "geometry": { "type": "Point", "coordinates": [ -80.13333333333334, 26.1 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1234-6--", "LOCODE": "USNTD", "Name": "Port Hueneme", "NameWoDiac": "Port Hueneme", "Status": "AI", "outflows": 585733.2 }, "geometry": { "type": "Point", "coordinates": [ -119.183333333333337, 34.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-3-----", "LOCODE": "USPME", "Name": "Port Manatee", "NameWoDiac": "Port Manatee", "Status": "RL", "outflows": 88523.5 }, "geometry": { "type": "Point", "coordinates": [ -82.55, 27.633333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-34----", "LOCODE": "USSAN", "Name": "San Diego", "NameWoDiac": "San Diego", "Status": "AI", "outflows": 60060.0 }, "geometry": { "type": "Point", "coordinates": [ -117.15, 32.7 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-34----", "LOCODE": "USSCK", "Name": "Stockton", "NameWoDiac": "Stockton", "Status": "AI", "outflows": 27774.0 }, "geometry": { "type": "Point", "coordinates": [ -121.283333333333331, 37.95 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USILM", "Name": "Wilmington", "NameWoDiac": "Wilmington", "Status": "AI", "outflows": 2749421.5816000002 }, "geometry": { "type": "Point", "coordinates": [ -77.933333333333337, 34.216666666666669 ] } }, +{ "type": "Feature", "properties": { "Country": "Uruguay", "Function": "--3-----", "LOCODE": "UYPTP", "Name": "Punta Pereyra", "NameWoDiac": "Punta Pereyra", "Status": "RQ", "outflows": 7800.0 }, "geometry": { "type": "Point", "coordinates": [ -58.06666666666667, -34.233333333333334 ] } }, +{ "type": "Feature", "properties": { "Country": "Saint Vincent and the Grenadines", "Function": "1--45---", "LOCODE": "VCKTN", "Name": "Kingstown", "NameWoDiac": "Kingstown", "Status": "RL", "outflows": 225040.4 }, "geometry": { "type": "Point", "coordinates": [ -61.216666666666669, 13.133333333333333 ] } }, +{ "type": "Feature", "properties": { "Country": "Venezuela, Bolivarian Republic of", "Function": "1--4----", "LOCODE": "VEPLA", "Name": "Palúa", "NameWoDiac": "Palua", "Status": "AI", "outflows": 15540.0 }, "geometry": { "type": "Point", "coordinates": [ -62.666666666666664, 8.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Virgin Islands, U.S.", "Function": "1-------", "LOCODE": "VICTD", "Name": "Christiansted, Saint Croix", "NameWoDiac": "Christiansted, Saint Croix", "Status": "AI", "outflows": 11076.0 }, "geometry": { "type": "Point", "coordinates": [ -64.75, 17.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "--3-----", "LOCODE": "VNC8Q", "Name": "Chu Lai", "NameWoDiac": "Chu Lai", "Status": "RL", "outflows": 233142.0 }, "geometry": { "type": "Point", "coordinates": [ 108.7, 15.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "1--4----", "LOCODE": "VNDAD", "Name": "Da Nang", "NameWoDiac": "Da Nang", "Status": "AI", "outflows": 3019963.9167599995 }, "geometry": { "type": "Point", "coordinates": [ 108.216666666666669, 16.066666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "1-3456--", "LOCODE": "VNSGN", "Name": "Ho Chi Minh City", "NameWoDiac": "Ho Chi Minh City", "Status": "AI", "outflows": 12782452.750279998 }, "geometry": { "type": "Point", "coordinates": [ 106.666666666666671, 10.766666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "1-3-----", "LOCODE": "VNNGH", "Name": "Nghi Son", "NameWoDiac": "Nghi Son", "Status": "RL", "outflows": 43602.0 }, "geometry": { "type": "Point", "coordinates": [ 105.833333333333329, 19.333333333333332 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "1-34----", "LOCODE": "VNUIH", "Name": "Qui Nhon", "NameWoDiac": "Qui Nhon", "Status": "AI", "outflows": 418626.0 }, "geometry": { "type": "Point", "coordinates": [ 109.216666666666669, 13.766666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "1-34----", "LOCODE": "VNVUT", "Name": "Vung Tau", "NameWoDiac": "Vung Tau", "Status": "RL", "outflows": 21025136.034170005 }, "geometry": { "type": "Point", "coordinates": [ 107.066666666666663, 10.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Wallis and Futuna", "Function": "---4----", "LOCODE": "WFFUT", "Name": "Vele Futuna I. Apt", "NameWoDiac": "Vele Futuna I. Apt", "Status": "AI", "outflows": 10200.0 }, "geometry": { "type": "Point", "coordinates": [ -178.083333333333343, -14.316666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "Mayotte", "Function": "1-3-----", "LOCODE": "YTLON", "Name": "Longoni", "NameWoDiac": "Longoni", "Status": "AA", "outflows": 298158.99997999996 }, "geometry": { "type": "Point", "coordinates": [ 45.166666666666664, -12.716666666666667 ] } }, +{ "type": "Feature", "properties": { "Country": "South Africa", "Function": "12345---", "LOCODE": "ZACPT", "Name": "Cape Town", "NameWoDiac": "Cape Town", "Status": "AF", "outflows": 4902763.6243000003 }, "geometry": { "type": "Point", "coordinates": [ 18.416666666666668, -33.916666666666664 ] } }, +{ "type": "Feature", "properties": { "Country": "South Africa", "Function": "-----6--", "LOCODE": "ZAZBA", "Name": "Coega", "NameWoDiac": "Coega", "Status": "RL", "outflows": 3467734.6668099998 }, "geometry": { "type": "Point", "coordinates": [ 25.666666666666668, -33.766666666666666 ] } }, +{ "type": "Feature", "properties": { "Country": "South Africa", "Function": "12345---", "LOCODE": "ZADUR", "Name": "Durban", "NameWoDiac": "Durban", "Status": "AI", "outflows": 8754191.1218599975 }, "geometry": { "type": "Point", "coordinates": [ 31.016666666666666, -29.85 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-3-----", "LOCODE": "AEAJM", "Name": "Ajman", "NameWoDiac": "Ajman", "Status": "RL", "outflows": 73567.0 }, "geometry": { "type": "Point", "coordinates": [ 55.47878, 25.40177 ] } }, +{ "type": "Feature", "properties": { "Country": "United Arab Emirates", "Function": "1-------", "LOCODE": "AEJEA", "Name": "Jebel Ali", "NameWoDiac": "Jebel Ali", "Status": "QQ", "outflows": 44524119.850148 }, "geometry": { "type": "Point", "coordinates": [ 55.10811, 25.00255 ] } }, +{ "type": "Feature", "properties": { "Country": "Anguilla", "Function": "---45---", "LOCODE": "AIAXA", "Name": "Anguilla", "NameWoDiac": "Anguilla", "Status": "AI", "outflows": 230958.0 }, "geometry": { "type": "Point", "coordinates": [ -63.09375, 18.17648 ] } }, +{ "type": "Feature", "properties": { "Country": "Albania", "Function": "1-------", "LOCODE": "ALDRZ", "Name": "Durrës", "NameWoDiac": "Durres", "Status": "RL", "outflows": 134307.0 }, "geometry": { "type": "Point", "coordinates": [ 19.45469, 41.32355 ] } }, +{ "type": "Feature", "properties": { "Country": "Albania", "Function": "1-------", "LOCODE": "ALDRZ", "Name": "Durrës", "NameWoDiac": "Durres", "Status": "RL", "outflows": 134307.0 }, "geometry": { "type": "Point", "coordinates": [ 19.45469, 41.32355 ] } }, +{ "type": "Feature", "properties": { "Country": "Angola", "Function": "1--4----", "LOCODE": "AOCAB", "Name": "Cabinda", "NameWoDiac": "Cabinda", "Status": "AI", "outflows": 2673.25 }, "geometry": { "type": "Point", "coordinates": [ 12.2, -5.55 ] } }, +{ "type": "Feature", "properties": { "Country": "Angola", "Function": "1---5---", "LOCODE": "AOLOB", "Name": "Lobito", "NameWoDiac": "Lobito", "Status": "RL", "outflows": 210369.4 }, "geometry": { "type": "Point", "coordinates": [ 13.53601, -12.3644 ] } }, +{ "type": "Feature", "properties": { "Country": "Angola", "Function": "1--45---", "LOCODE": "AOLAD", "Name": "Luanda", "NameWoDiac": "Luanda", "Status": "AI", "outflows": 2439604.518850001 }, "geometry": { "type": "Point", "coordinates": [ 13.23432, -8.83682 ] } }, +{ "type": "Feature", "properties": { "Country": "Angola", "Function": "0-------", "LOCODE": "AOMAL", "Name": "Malongo", "NameWoDiac": "Malongo", "Status": "RQ", "outflows": 8707.5 }, "geometry": { "type": "Point", "coordinates": [ 12.19802179783948, -5.396406481852449 ] } }, +{ "type": "Feature", "properties": { "Country": "Angola", "Function": "1--4----", "LOCODE": "AOMSZ", "Name": "Namibe", "NameWoDiac": "Namibe", "Status": "AI", "outflows": 61242.5 }, "geometry": { "type": "Point", "coordinates": [ 12.15222, -15.19611 ] } }, +{ "type": "Feature", "properties": { "Country": "Angola", "Function": "1--4----", "LOCODE": "AOSZA", "Name": "Soyo", "NameWoDiac": "Soyo", "Status": "AI", "outflows": 79583.4 }, "geometry": { "type": "Point", "coordinates": [ 12.36894, -6.1349 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "123-----", "LOCODE": "AUBEL", "Name": "Bell Bay", "NameWoDiac": "Bell Bay", "Status": "AC", "outflows": 537012.66663 }, "geometry": { "type": "Point", "coordinates": [ 146.87, -41.13 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUBWT", "Name": "Burnie", "NameWoDiac": "Burnie", "Status": "AC", "outflows": 54600.0 }, "geometry": { "type": "Point", "coordinates": [ 145.90375, -41.05584 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUCNS", "Name": "Cairns", "NameWoDiac": "Cairns", "Status": "AC", "outflows": 806.0 }, "geometry": { "type": "Point", "coordinates": [ 145.76613, -16.92366 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1-------", "LOCODE": "AUDAM", "Name": "Dampier", "NameWoDiac": "Dampier", "Status": "AC", "outflows": 2273.75 }, "geometry": { "type": "Point", "coordinates": [ 116.71256, -20.66275 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUDPO", "Name": "Devonport", "NameWoDiac": "Devonport", "Status": "AC", "outflows": 11960.0 }, "geometry": { "type": "Point", "coordinates": [ 146.35152, -41.17695 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUFRE", "Name": "Fremantle", "NameWoDiac": "Fremantle", "Status": "AC", "outflows": 4485214.6003799979 }, "geometry": { "type": "Point", "coordinates": [ 115.74557, -32.05632 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUGEX", "Name": "Geelong", "NameWoDiac": "Geelong", "Status": "AC", "outflows": 3084.0 }, "geometry": { "type": "Point", "coordinates": [ 144.36069, -38.14711 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUNTL", "Name": "Newcastle", "NameWoDiac": "Newcastle", "Status": "AI", "outflows": 69717.0 }, "geometry": { "type": "Point", "coordinates": [ 151.7801, -32.92953 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "123-----", "LOCODE": "AUPBT", "Name": "Port Botany", "NameWoDiac": "Port Botany", "Status": "AC", "outflows": 47151.0 }, "geometry": { "type": "Point", "coordinates": [ 151.22277, -33.97447 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUPKL", "Name": "Port Kembla", "NameWoDiac": "Port Kembla", "Status": "AC", "outflows": 33267.0 }, "geometry": { "type": "Point", "coordinates": [ 150.9012, -34.4818 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUTSV", "Name": "Townsville", "NameWoDiac": "Townsville", "Status": "AI", "outflows": 227206.58331800002 }, "geometry": { "type": "Point", "coordinates": [ 146.80569, -19.26639 ] } }, +{ "type": "Feature", "properties": { "Country": "Australia", "Function": "1--4----", "LOCODE": "AUWEI", "Name": "Weipa", "NameWoDiac": "Weipa", "Status": "AC", "outflows": 806.0 }, "geometry": { "type": "Point", "coordinates": [ 141.87883, -12.62346 ] } }, +{ "type": "Feature", "properties": { "Country": "Aruba", "Function": "1---5---", "LOCODE": "AWORJ", "Name": "Oranjestad", "NameWoDiac": "Oranjestad", "Status": "AI", "outflows": 721990.3 }, "geometry": { "type": "Point", "coordinates": [ -70.02703, 12.52398 ] } }, +{ "type": "Feature", "properties": { "Country": "Barbados", "Function": "1--45---", "LOCODE": "BBBGI", "Name": "Bridgetown", "NameWoDiac": "Bridgetown", "Status": "AI", "outflows": 687251.06668999989 }, "geometry": { "type": "Point", "coordinates": [ -59.62021, 13.10732 ] } }, +{ "type": "Feature", "properties": { "Country": "Bangladesh", "Function": "1-------", "LOCODE": "BDMGL", "Name": "Mongla", "NameWoDiac": "Mongla", "Status": "RQ", "outflows": 65143.0 }, "geometry": { "type": "Point", "coordinates": [ 89.61095, 22.47223 ] } }, +{ "type": "Feature", "properties": { "Country": "Bulgaria", "Function": "1-------", "LOCODE": "BGBOJ", "Name": "Burgas", "NameWoDiac": "Burgas", "Status": "AC", "outflows": 535001.99997999996 }, "geometry": { "type": "Point", "coordinates": [ 27.46781, 42.50606 ] } }, +{ "type": "Feature", "properties": { "Country": "Bulgaria", "Function": "1--4----", "LOCODE": "BGVAR", "Name": "Varna", "NameWoDiac": "Varna", "Status": "AI", "outflows": 147810.0 }, "geometry": { "type": "Point", "coordinates": [ 27.91667, 43.21667 ] } }, +{ "type": "Feature", "properties": { "Country": "Benin", "Function": "1--45---", "LOCODE": "BJCOO", "Name": "Cotonou", "NameWoDiac": "Cotonou", "Status": "AI", "outflows": 4812454.6643299991 }, "geometry": { "type": "Point", "coordinates": [ 2.41833, 6.36536 ] } }, +{ "type": "Feature", "properties": { "Country": "Bermuda", "Function": "1--45---", "LOCODE": "BMBDA", "Name": "Hamilton", "NameWoDiac": "Hamilton", "Status": "AI", "outflows": 13100.0 }, "geometry": { "type": "Point", "coordinates": [ -64.78303, 32.2949 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRFOR", "Name": "Fortaleza", "NameWoDiac": "Fortaleza", "Status": "AI", "outflows": 278482.75 }, "geometry": { "type": "Point", "coordinates": [ -38.54306, -3.71722 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRIOS", "Name": "Ilheus", "NameWoDiac": "Ilheus", "Status": "AI", "outflows": 36877.75 }, "geometry": { "type": "Point", "coordinates": [ -39.03949, -14.79364 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-------", "LOCODE": "BRIBB", "Name": "Imbituba", "NameWoDiac": "Imbituba", "Status": "AI", "outflows": 378681.33330999996 }, "geometry": { "type": "Point", "coordinates": [ -48.67028, -28.24 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRITJ", "Name": "Itajai", "NameWoDiac": "Itajai", "Status": "AI", "outflows": 4871215.6998899989 }, "geometry": { "type": "Point", "coordinates": [ -48.66194, -26.90778 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRMAO", "Name": "Manaus", "NameWoDiac": "Manaus", "Status": "AI", "outflows": 1385527.97796 }, "geometry": { "type": "Point", "coordinates": [ -60.025, -3.10194 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRNAT", "Name": "Natal", "NameWoDiac": "Natal", "Status": "AI", "outflows": 241605.0 }, "geometry": { "type": "Point", "coordinates": [ -35.20944, -5.795 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRRIG", "Name": "Rio Grande", "NameWoDiac": "Rio Grande", "Status": "AI", "outflows": 10184119.863509998 }, "geometry": { "type": "Point", "coordinates": [ -43.18223, -22.90642 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1--4----", "LOCODE": "BRSSA", "Name": "Salvador", "NameWoDiac": "Salvador", "Status": "AI", "outflows": 8800539.5732199997 }, "geometry": { "type": "Point", "coordinates": [ -38.51083, -12.97111 ] } }, +{ "type": "Feature", "properties": { "Country": "Brazil", "Function": "1-------", "LOCODE": "BRSUA", "Name": "Suape", "NameWoDiac": "Suape", "Status": "RQ", "outflows": 5878585.3904299997 }, "geometry": { "type": "Point", "coordinates": [ -38.62083, -12.74083 ] } }, +{ "type": "Feature", "properties": { "Country": "Belize", "Function": "1--45---", "LOCODE": "BZBZE", "Name": "Belize City", "NameWoDiac": "Belize City", "Status": "AI", "outflows": 469495.0 }, "geometry": { "type": "Point", "coordinates": [ -88.19756, 17.49952 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1--4----", "LOCODE": "CAHAL", "Name": "Halifax", "NameWoDiac": "Halifax", "Status": "AS", "outflows": 4454972.4670409998 }, "geometry": { "type": "Point", "coordinates": [ -63.57291, 44.6464 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1--45---", "LOCODE": "CAMTR", "Name": "Montreal", "NameWoDiac": "Montreal", "Status": "AS", "outflows": 2304234.075 }, "geometry": { "type": "Point", "coordinates": [ -73.58781, 45.50884 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1-------", "LOCODE": "CANWE", "Name": "New Westminster", "NameWoDiac": "New Westminster", "Status": "AS", "outflows": 27774.0 }, "geometry": { "type": "Point", "coordinates": [ -122.91092, 49.20678 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1--4----", "LOCODE": "CAPRR", "Name": "Prince Rupert", "NameWoDiac": "Prince Rupert", "Status": "AS", "outflows": 2510218.7498600003 }, "geometry": { "type": "Point", "coordinates": [ -130.32098, 54.31507 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1--4----", "LOCODE": "CASQA", "Name": "Squamish", "NameWoDiac": "Squamish", "Status": "AS", "outflows": 9606.0 }, "geometry": { "type": "Point", "coordinates": [ -122.95396, 50.11817 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1--45---", "LOCODE": "CATOR", "Name": "Toronto", "NameWoDiac": "Toronto", "Status": "AS", "outflows": 5720.0 }, "geometry": { "type": "Point", "coordinates": [ -79.4163, 43.70011 ] } }, +{ "type": "Feature", "properties": { "Country": "Canada", "Function": "1--45---", "LOCODE": "CAVAN", "Name": "Vancouver", "NameWoDiac": "Vancouver", "Status": "AS", "outflows": 11959843.503790002 }, "geometry": { "type": "Point", "coordinates": [ -123.11934, 49.24966 ] } }, +{ "type": "Feature", "properties": { "Country": "Cook Islands", "Function": "1--45---", "LOCODE": "CKAIT", "Name": "Aitutaki", "NameWoDiac": "Aitutaki", "Status": "AI", "outflows": 40320.0 }, "geometry": { "type": "Point", "coordinates": [ -159.79293, -18.85195 ] } }, +{ "type": "Feature", "properties": { "Country": "Cook Islands", "Function": "1--45---", "LOCODE": "CKRAR", "Name": "Rarotonga", "NameWoDiac": "Rarotonga", "Status": "AI", "outflows": 41157.0 }, "geometry": { "type": "Point", "coordinates": [ -159.77545, -21.2075 ] } }, +{ "type": "Feature", "properties": { "Country": "Cameroon", "Function": "1--45---", "LOCODE": "CMDLA", "Name": "Douala", "NameWoDiac": "Douala", "Status": "AI", "outflows": 1089387.80006 }, "geometry": { "type": "Point", "coordinates": [ 9.70428, 4.04827 ] } }, +{ "type": "Feature", "properties": { "Country": "Cameroon", "Function": "1--4----", "LOCODE": "CMKBI", "Name": "Kribi", "NameWoDiac": "Kribi", "Status": "AI", "outflows": 1338743.54556 }, "geometry": { "type": "Point", "coordinates": [ 9.90765, 2.93725 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--45---", "LOCODE": "COBAQ", "Name": "Barranquilla", "NameWoDiac": "Barranquilla", "Status": "AI", "outflows": 1238849.9999530001 }, "geometry": { "type": "Point", "coordinates": [ -74.78132, 10.96854 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--4----", "LOCODE": "COBUN", "Name": "Buenaventura", "NameWoDiac": "Buenaventura", "Status": "AI", "outflows": 12125518.600159997 }, "geometry": { "type": "Point", "coordinates": [ -77.03116, 3.8801 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--4----", "LOCODE": "COCTG", "Name": "Cartagena", "NameWoDiac": "Cartagena", "Status": "AI", "outflows": 16624367.157963 }, "geometry": { "type": "Point", "coordinates": [ -75.51444, 10.39972 ] } }, +{ "type": "Feature", "properties": { "Country": "Colombia", "Function": "1--4----", "LOCODE": "COSMR", "Name": "Santa Marta", "NameWoDiac": "Santa Marta", "Status": "AI", "outflows": 1906046.5665720007 }, "geometry": { "type": "Point", "coordinates": [ -74.19904, 11.24079 ] } }, +{ "type": "Feature", "properties": { "Country": "Cuba", "Function": "---4----", "LOCODE": "CUMOA", "Name": "Moa", "NameWoDiac": "Moa", "Status": "AI", "outflows": 65431.8 }, "geometry": { "type": "Point", "coordinates": [ -74.95075, 20.65776 ] } }, +{ "type": "Feature", "properties": { "Country": "Cuba", "Function": "1--4----", "LOCODE": "CUSCU", "Name": "Santiago de Cuba", "NameWoDiac": "Santiago de Cuba", "Status": "AI", "outflows": 63230.0 }, "geometry": { "type": "Point", "coordinates": [ -75.82667, 20.02083 ] } }, +{ "type": "Feature", "properties": { "Country": "Cabo Verde", "Function": "0-------", "LOCODE": "CVPAL", "Name": "Palmeira", "NameWoDiac": "Palmeira", "Status": "RQ", "outflows": 13234.0 }, "geometry": { "type": "Point", "coordinates": [ -22.98348, 16.75754 ] } }, +{ "type": "Feature", "properties": { "Country": "Cabo Verde", "Function": "1--4----", "LOCODE": "CVRAI", "Name": "Praia", "NameWoDiac": "Praia", "Status": "AI", "outflows": 114309.0 }, "geometry": { "type": "Point", "coordinates": [ -23.51254, 14.93152 ] } }, +{ "type": "Feature", "properties": { "Country": "Cabo Verde", "Function": "0-------", "LOCODE": "CVSAR", "Name": "Sal Rei", "NameWoDiac": "Sal Rei", "Status": "RQ", "outflows": 25421.5 }, "geometry": { "type": "Point", "coordinates": [ -22.91722, 16.17611 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "12345---", "LOCODE": "DEBRE", "Name": "Bremen", "NameWoDiac": "Bremen", "Status": "AF", "outflows": 197153.69999199998 }, "geometry": { "type": "Point", "coordinates": [ 8.80717, 53.07582 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "1234----", "LOCODE": "DEBRV", "Name": "Bremerhaven", "NameWoDiac": "Bremerhaven", "Status": "AF", "outflows": 21710907.495360006 }, "geometry": { "type": "Point", "coordinates": [ 8.59298, 53.53615 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "12345---", "LOCODE": "DEHAM", "Name": "Hamburg", "NameWoDiac": "Hamburg", "Status": "AF", "outflows": 42669313.486039981 }, "geometry": { "type": "Point", "coordinates": [ 9.99302, 53.55073 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "12345---", "LOCODE": "DELBC", "Name": "Lübeck", "NameWoDiac": "Lubeck", "Status": "AF", "outflows": 295233.5 }, "geometry": { "type": "Point", "coordinates": [ 10.68729, 53.86893 ] } }, +{ "type": "Feature", "properties": { "Country": "Germany", "Function": "123-----", "LOCODE": "DETRV", "Name": "Travemünde", "NameWoDiac": "Travemunde", "Status": "AF", "outflows": 73746.0 }, "geometry": { "type": "Point", "coordinates": [ 10.8709, 53.96304 ] } }, +{ "type": "Feature", "properties": { "Country": "Djibouti", "Function": "1--45---", "LOCODE": "DJJIB", "Name": "Djibouti", "NameWoDiac": "Djibouti", "Status": "AI", "outflows": 4852561.0352500007 }, "geometry": { "type": "Point", "coordinates": [ 43.14503, 11.58901 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "12345---", "LOCODE": "DKAAL", "Name": "Aalborg", "NameWoDiac": "Aalborg", "Status": "AF", "outflows": 74932.0 }, "geometry": { "type": "Point", "coordinates": [ 9.9187, 57.048 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "1234----", "LOCODE": "DKEBJ", "Name": "Esbjerg", "NameWoDiac": "Esbjerg", "Status": "AF", "outflows": 28620.0 }, "geometry": { "type": "Point", "coordinates": [ 8.45187, 55.47028 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "12--5---", "LOCODE": "DKFRC", "Name": "Fredericia", "NameWoDiac": "Fredericia", "Status": "AF", "outflows": 245869.0 }, "geometry": { "type": "Point", "coordinates": [ 9.75257, 55.56568 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "123-----", "LOCODE": "DKGRE", "Name": "Grenaa", "NameWoDiac": "Grenaa", "Status": "AF", "outflows": 16263.0 }, "geometry": { "type": "Point", "coordinates": [ 10.87825, 56.41578 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "123-----", "LOCODE": "DKHUN", "Name": "Hundested", "NameWoDiac": "Hundested", "Status": "AF", "outflows": 16263.0 }, "geometry": { "type": "Point", "coordinates": [ 11.85044, 55.96397 ] } }, +{ "type": "Feature", "properties": { "Country": "Denmark", "Function": "12------", "LOCODE": "DKSKA", "Name": "Skagen", "NameWoDiac": "Skagen", "Status": "AF", "outflows": 56420.0 }, "geometry": { "type": "Point", "coordinates": [ 10.58394, 57.72093 ] } }, +{ "type": "Feature", "properties": { "Country": "Dominica", "Function": "1-------", "LOCODE": "DMRSU", "Name": "Roseau", "NameWoDiac": "Roseau", "Status": "AI", "outflows": 370965.4 }, "geometry": { "type": "Point", "coordinates": [ -61.38808, 15.30174 ] } }, +{ "type": "Feature", "properties": { "Country": "Dominican Republic", "Function": "1-------", "LOCODE": "DOBCC", "Name": "Boca Chica", "NameWoDiac": "Boca Chica", "Status": "AI", "outflows": 333493.3333 }, "geometry": { "type": "Point", "coordinates": [ -69.6, 18.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Dominican Republic", "Function": "1-------", "LOCODE": "DOPOP", "Name": "Puerto Plata", "NameWoDiac": "Puerto Plata", "Status": "AI", "outflows": 712651.3333000001 }, "geometry": { "type": "Point", "coordinates": [ -70.6884, 19.79344 ] } }, +{ "type": "Feature", "properties": { "Country": "Algeria", "Function": "1-------", "LOCODE": "DZMOS", "Name": "Mostaganem", "NameWoDiac": "Mostaganem", "Status": "QQ", "outflows": 20553.75 }, "geometry": { "type": "Point", "coordinates": [ 0.08918, 35.93115 ] } }, +{ "type": "Feature", "properties": { "Country": "Algeria", "Function": "1--4----", "LOCODE": "DZORN", "Name": "Oran", "NameWoDiac": "Oran", "Status": "AI", "outflows": 210402.15 }, "geometry": { "type": "Point", "coordinates": [ -0.63588, 35.69906 ] } }, +{ "type": "Feature", "properties": { "Country": "Egypt", "Function": "1-------", "LOCODE": "EGEDK", "Name": "El Dekheila", "NameWoDiac": "El Dekheila", "Status": "RQ", "outflows": 265833.75 }, "geometry": { "type": "Point", "coordinates": [ 29.82126, 31.13133 ] } }, +{ "type": "Feature", "properties": { "Country": "Egypt", "Function": "1--4----", "LOCODE": "EGPSD", "Name": "Port Said", "NameWoDiac": "Port Said", "Status": "AI", "outflows": 20587604.955879994 }, "geometry": { "type": "Point", "coordinates": [ 32.3019, 31.26531 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1-------", "LOCODE": "ESALG", "Name": "Algeciras", "NameWoDiac": "Algeciras", "Status": "AI", "outflows": 27490011.70193002 }, "geometry": { "type": "Point", "coordinates": [ -5.45051, 36.13326 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "12345---", "LOCODE": "ESALC", "Name": "Alicante", "NameWoDiac": "Alicante", "Status": "AI", "outflows": 317642.0 }, "geometry": { "type": "Point", "coordinates": [ -0.48149, 38.34517 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "12345---", "LOCODE": "ESBCN", "Name": "Barcelona", "NameWoDiac": "Barcelona", "Status": "AI", "outflows": 22873062.028563999 }, "geometry": { "type": "Point", "coordinates": [ 2.15899, 41.38879 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1-------", "LOCODE": "ESCAD", "Name": "Cadiz", "NameWoDiac": "Cadiz", "Status": "AI", "outflows": 248618.5 }, "geometry": { "type": "Point", "coordinates": [ -6.2891, 36.52672 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1-------", "LOCODE": "ESCEU", "Name": "Ceuta", "NameWoDiac": "Ceuta", "Status": "AI", "outflows": 45500.0 }, "geometry": { "type": "Point", "coordinates": [ -5.32042, 35.88919 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "123-----", "LOCODE": "ESHUV", "Name": "Huelva", "NameWoDiac": "Huelva", "Status": "AI", "outflows": 191763.0 }, "geometry": { "type": "Point", "coordinates": [ -6.94004, 37.26638 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1--4----", "LOCODE": "ESFUE", "Name": "Puerto del Rosario-Fuerteventura", "NameWoDiac": "Puerto del Rosario-Fuerteventura", "Status": "AI", "outflows": 219128.0 }, "geometry": { "type": "Point", "coordinates": [ -13.86272, 28.50038 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1---5---", "LOCODE": "ESSCT", "Name": "Santa Cruz de Tenerife", "NameWoDiac": "Santa Cruz de Tenerife", "Status": "AI", "outflows": 640000.0 }, "geometry": { "type": "Point", "coordinates": [ -16.25462, 28.46824 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1234----", "LOCODE": "ESSDR", "Name": "Santander", "NameWoDiac": "Santander", "Status": "AI", "outflows": 23634.0 }, "geometry": { "type": "Point", "coordinates": [ -3.80444, 43.46472 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "12345---", "LOCODE": "ESSVQ", "Name": "Sevilla", "NameWoDiac": "Sevilla", "Status": "AI", "outflows": 49842.0 }, "geometry": { "type": "Point", "coordinates": [ -5.97317, 37.38283 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1234----", "LOCODE": "ESTAR", "Name": "Tarragona", "NameWoDiac": "Tarragona", "Status": "AI", "outflows": 977262.0 }, "geometry": { "type": "Point", "coordinates": [ 1.25, 41.11667 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "12345---", "LOCODE": "ESVLC", "Name": "Valencia", "NameWoDiac": "Valencia", "Status": "AI", "outflows": 32174699.419024002 }, "geometry": { "type": "Point", "coordinates": [ -0.37739, 39.46975 ] } }, +{ "type": "Feature", "properties": { "Country": "Spain", "Function": "1--4----", "LOCODE": "ESVGO", "Name": "Vigo", "NameWoDiac": "Vigo", "Status": "AI", "outflows": 929140.33332400001 }, "geometry": { "type": "Point", "coordinates": [ -8.72264, 42.23282 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FIHKO", "Name": "Hangö (Hanko)", "NameWoDiac": "Hango (Hanko)", "Status": "AI", "outflows": 134144.0 }, "geometry": { "type": "Point", "coordinates": [ 22.95, 59.83333 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FIHKO", "Name": "Hanko (Hangö)", "NameWoDiac": "Hanko (Hango)", "Status": "AI", "outflows": 134144.0 }, "geometry": { "type": "Point", "coordinates": [ 22.95, 59.83333 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FIHEL", "Name": "Helsingfors (Helsinki)", "NameWoDiac": "Helsingfors (Helsinki)", "Status": "AI", "outflows": 745328.99995000008 }, "geometry": { "type": "Point", "coordinates": [ 24.93545, 60.16952 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-------", "LOCODE": "FIHEL", "Name": "Helsinki (Helsingfors)", "NameWoDiac": "Helsinki (Helsingfors)", "Status": "AI", "outflows": 745328.99995000008 }, "geometry": { "type": "Point", "coordinates": [ 24.93545, 60.16952 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-3-----", "LOCODE": "FIVKO", "Name": "Valko (Valkom)", "NameWoDiac": "Valko (Valkom)", "Status": "AC", "outflows": 84688.5 }, "geometry": { "type": "Point", "coordinates": [ 26.24664, 60.41392 ] } }, +{ "type": "Feature", "properties": { "Country": "Finland", "Function": "1-3-----", "LOCODE": "FIVKO", "Name": "Valkom (Valko)", "NameWoDiac": "Valkom (Valko)", "Status": "AC", "outflows": 84688.5 }, "geometry": { "type": "Point", "coordinates": [ 26.24664, 60.41392 ] } }, +{ "type": "Feature", "properties": { "Country": "Gabon", "Function": "1--45---", "LOCODE": "GALBV", "Name": "Libreville", "NameWoDiac": "Libreville", "Status": "AI", "outflows": 414222.00002999994 }, "geometry": { "type": "Point", "coordinates": [ 9.45356, 0.39241 ] } }, +{ "type": "Feature", "properties": { "Country": "Gabon", "Function": "1--45---", "LOCODE": "GAPOG", "Name": "Port Gentil", "NameWoDiac": "Port Gentil", "Status": "AI", "outflows": 148566.9 }, "geometry": { "type": "Point", "coordinates": [ 8.78151, -0.71933 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBBLY", "Name": "Blyth", "NameWoDiac": "Blyth", "Status": "AF", "outflows": 13208.0 }, "geometry": { "type": "Point", "coordinates": [ -1.50856, 55.12708 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1234----", "LOCODE": "GBBRS", "Name": "Bristol", "NameWoDiac": "Bristol", "Status": "AF", "outflows": 213286.66665 }, "geometry": { "type": "Point", "coordinates": [ -2.59665, 51.45523 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1---5---", "LOCODE": "GBDVR", "Name": "Dover", "NameWoDiac": "Dover", "Status": "AF", "outflows": 17290.0 }, "geometry": { "type": "Point", "coordinates": [ 1.31257, 51.12598 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBFXT", "Name": "Felixstowe", "NameWoDiac": "Felixstowe", "Status": "AF", "outflows": 23949484.180700015 }, "geometry": { "type": "Point", "coordinates": [ 1.3511, 51.96375 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBFOY", "Name": "Fowey", "NameWoDiac": "Fowey", "Status": "AF", "outflows": 4941.0 }, "geometry": { "type": "Point", "coordinates": [ -4.6386, 50.33634 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBHRW", "Name": "Harwich", "NameWoDiac": "Harwich", "Status": "AF", "outflows": 61540.0 }, "geometry": { "type": "Point", "coordinates": [ 1.28437, 51.94194 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBPOO", "Name": "Poole", "NameWoDiac": "Poole", "Status": "AF", "outflows": 8502.0 }, "geometry": { "type": "Point", "coordinates": [ -1.98458, 50.71429 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1--4----", "LOCODE": "GBPME", "Name": "Portsmouth", "NameWoDiac": "Portsmouth", "Status": "AF", "outflows": 142997.400009 }, "geometry": { "type": "Point", "coordinates": [ -1.09125, 50.79899 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBSCR", "Name": "Scrabster", "NameWoDiac": "Scrabster", "Status": "AF", "outflows": 9204.0 }, "geometry": { "type": "Point", "coordinates": [ -3.54627, 58.61277 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBSHS", "Name": "Sheerness", "NameWoDiac": "Sheerness", "Status": "AF", "outflows": 21112.0 }, "geometry": { "type": "Point", "coordinates": [ 0.76252, 51.44042 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1--4----", "LOCODE": "GBSOU", "Name": "Southampton", "NameWoDiac": "Southampton", "Status": "AF", "outflows": 12580879.097799998 }, "geometry": { "type": "Point", "coordinates": [ -1.40428, 50.90395 ] } }, +{ "type": "Feature", "properties": { "Country": "United Kingdom", "Function": "1-------", "LOCODE": "GBTIL", "Name": "Tilbury", "NameWoDiac": "Tilbury", "Status": "AF", "outflows": 1408139.0 }, "geometry": { "type": "Point", "coordinates": [ 0.35856, 51.46248 ] } }, +{ "type": "Feature", "properties": { "Country": "Grenada", "Function": "1-------", "LOCODE": "GDSTG", "Name": "Saint George's", "NameWoDiac": "Saint George's", "Status": "AI", "outflows": 454265.06669000001 }, "geometry": { "type": "Point", "coordinates": [ -61.75226, 12.05288 ] } }, +{ "type": "Feature", "properties": { "Country": "Georgia", "Function": "1--4----", "LOCODE": "GEBUS", "Name": "Batumi", "NameWoDiac": "Batumi", "Status": "AI", "outflows": 176479.99998 }, "geometry": { "type": "Point", "coordinates": [ 41.63392, 41.64228 ] } }, +{ "type": "Feature", "properties": { "Country": "Georgia", "Function": "1-------", "LOCODE": "GEPTI", "Name": "Poti", "NameWoDiac": "Poti", "Status": "QQ", "outflows": 241566.0 }, "geometry": { "type": "Point", "coordinates": [ 41.67384, 42.14272 ] } }, +{ "type": "Feature", "properties": { "Country": "Ghana", "Function": "1--45---", "LOCODE": "GHTKD", "Name": "Takoradi", "NameWoDiac": "Takoradi", "Status": "AI", "outflows": 343811.4 }, "geometry": { "type": "Point", "coordinates": [ -1.76029, 4.89816 ] } }, +{ "type": "Feature", "properties": { "Country": "Ghana", "Function": "1-------", "LOCODE": "GHTEM", "Name": "Tema", "NameWoDiac": "Tema", "Status": "QQ", "outflows": 7407893.3644899996 }, "geometry": { "type": "Point", "coordinates": [ -0.01657, 5.6698 ] } }, +{ "type": "Feature", "properties": { "Country": "Gibraltar", "Function": "1--45---", "LOCODE": "GIGIB", "Name": "Gibraltar", "NameWoDiac": "Gibraltar", "Status": "AI", "outflows": 67977.0 }, "geometry": { "type": "Point", "coordinates": [ -5.35257, 36.14474 ] } }, +{ "type": "Feature", "properties": { "Country": "Greenland", "Function": "1--4----", "LOCODE": "GLJHS", "Name": "Sisimiut (Holsteinsborg)", "NameWoDiac": "Sisimiut (Holsteinsborg)", "Status": "AI", "outflows": 23426.0 }, "geometry": { "type": "Point", "coordinates": [ -53.6735, 66.93946 ] } }, +{ "type": "Feature", "properties": { "Country": "Gambia", "Function": "1--45---", "LOCODE": "GMBJL", "Name": "Banjul", "NameWoDiac": "Banjul", "Status": "AI", "outflows": 184275.0 }, "geometry": { "type": "Point", "coordinates": [ -16.57803, 13.45274 ] } }, +{ "type": "Feature", "properties": { "Country": "Guinea", "Function": "1--45---", "LOCODE": "GNCKY", "Name": "Conakry", "NameWoDiac": "Conakry", "Status": "AI", "outflows": 676607.90476000018 }, "geometry": { "type": "Point", "coordinates": [ -13.67729, 9.53795 ] } }, +{ "type": "Feature", "properties": { "Country": "Equatorial Guinea", "Function": "1--45---", "LOCODE": "GQBSG", "Name": "Bata", "NameWoDiac": "Bata", "Status": "RQ", "outflows": 454067.0 }, "geometry": { "type": "Point", "coordinates": [ 9.76582, 1.86391 ] } }, +{ "type": "Feature", "properties": { "Country": "Equatorial Guinea", "Function": "1--4----", "LOCODE": "GQSSG", "Name": "Malabo", "NameWoDiac": "Malabo", "Status": "AI", "outflows": 133795.9 }, "geometry": { "type": "Point", "coordinates": [ 8.78166, 3.75578 ] } }, +{ "type": "Feature", "properties": { "Country": "Guatemala", "Function": "1--4----", "LOCODE": "GTPBR", "Name": "Puerto Barrios", "NameWoDiac": "Puerto Barrios", "Status": "AI", "outflows": 547993.33336599998 }, "geometry": { "type": "Point", "coordinates": [ -88.59444, 15.72778 ] } }, +{ "type": "Feature", "properties": { "Country": "Guyana", "Function": "1--45---", "LOCODE": "GYGEO", "Name": "Georgetown", "NameWoDiac": "Georgetown", "Status": "AI", "outflows": 428041.33332200005 }, "geometry": { "type": "Point", "coordinates": [ -58.15527, 6.80448 ] } }, +{ "type": "Feature", "properties": { "Country": "Hong Kong", "Function": "1--45---", "LOCODE": "HKHKG", "Name": "Hong Kong", "NameWoDiac": "Hong Kong", "Status": "AI", "outflows": 80530648.252739042 }, "geometry": { "type": "Point", "coordinates": [ 114.17469, 22.27832 ] } }, +{ "type": "Feature", "properties": { "Country": "Honduras", "Function": "1-------", "LOCODE": "HNPCA", "Name": "Puerto Castilla", "NameWoDiac": "Puerto Castilla", "Status": "RQ", "outflows": 75387.0 }, "geometry": { "type": "Point", "coordinates": [ -85.96667, 16.01667 ] } }, +{ "type": "Feature", "properties": { "Country": "Honduras", "Function": "1---5---", "LOCODE": "HNPCR", "Name": "Puerto Cortés", "NameWoDiac": "Puerto Cortes", "Status": "AI", "outflows": 1674222.3333919998 }, "geometry": { "type": "Point", "coordinates": [ -87.92968, 15.82562 ] } }, +{ "type": "Feature", "properties": { "Country": "Honduras", "Function": "1-------", "LOCODE": "HNSLO", "Name": "San Lorenzo", "NameWoDiac": "San Lorenzo", "Status": "RQ", "outflows": 67860.0 }, "geometry": { "type": "Point", "coordinates": [ -87.44722, 13.42417 ] } }, +{ "type": "Feature", "properties": { "Country": "Haiti", "Function": "1--45---", "LOCODE": "HTPAP", "Name": "Port-au-Prince", "NameWoDiac": "Port-au-Prince", "Status": "AI", "outflows": 783664.91664000018 }, "geometry": { "type": "Point", "coordinates": [ -72.33881, 18.54349 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDBDJ", "Name": "Banjarmasin", "NameWoDiac": "Banjarmasin", "Status": "AI", "outflows": 17848.0 }, "geometry": { "type": "Point", "coordinates": [ 114.59075, -3.31987 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDBLW", "Name": "Belawan, Sumatra", "NameWoDiac": "Belawan, Sumatra", "Status": "QQ", "outflows": 494328.25003 }, "geometry": { "type": "Point", "coordinates": [ 98.6832, 3.7755 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDBIT", "Name": "Bitung, Sulawesi", "NameWoDiac": "Bitung, Sulawesi", "Status": "QQ", "outflows": 215154.58334000001 }, "geometry": { "type": "Point", "coordinates": [ 125.12824, 1.44059 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDGTO", "Name": "Gorontalo, Sulawesi", "NameWoDiac": "Gorontalo, Sulawesi", "Status": "AI", "outflows": 42718.00001 }, "geometry": { "type": "Point", "coordinates": [ 123.3908, -0.8985 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDKDI", "Name": "Kendari, Sulawesi", "NameWoDiac": "Kendari, Sulawesi", "Status": "AI", "outflows": 7988.5 }, "geometry": { "type": "Point", "coordinates": [ 122.51507, -3.9778 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDLUW", "Name": "Luwuk", "NameWoDiac": "Luwuk", "Status": "AI", "outflows": 720.0 }, "geometry": { "type": "Point", "coordinates": [ 122.7875, -0.9516 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--45---", "LOCODE": "IDMES", "Name": "Medan, Sumatra", "NameWoDiac": "Medan, Sumatra", "Status": "AI", "outflows": 45136.0 }, "geometry": { "type": "Point", "coordinates": [ 98.66667, 3.58333 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDPLM", "Name": "Palembang, Sumatra", "NameWoDiac": "Palembang, Sumatra", "Status": "AI", "outflows": 106646.75 }, "geometry": { "type": "Point", "coordinates": [ 104.7458, -2.91673 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDPNJ", "Name": "Panjang", "NameWoDiac": "Panjang", "Status": "RQ", "outflows": 1532041.4998899996 }, "geometry": { "type": "Point", "coordinates": [ 100.6199, 0.3087 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--45---", "LOCODE": "IDPNK", "Name": "Pontianak, Kalimantan", "NameWoDiac": "Pontianak, Kalimantan", "Status": "AI", "outflows": 35776.0 }, "geometry": { "type": "Point", "coordinates": [ 109.325, -0.03194 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDSRI", "Name": "Samarinda, Kalimantan", "NameWoDiac": "Samarinda, Kalimantan", "Status": "AI", "outflows": 34320.0 }, "geometry": { "type": "Point", "coordinates": [ 117.14583, -0.49167 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDSOQ", "Name": "Sorong", "NameWoDiac": "Sorong", "Status": "AI", "outflows": 125268.0 }, "geometry": { "type": "Point", "coordinates": [ 131.26104, -0.87956 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1-------", "LOCODE": "IDTRK", "Name": "Tarakan, Kalimantan", "NameWoDiac": "Tarakan, Kalimantan", "Status": "QQ", "outflows": 5213.0 }, "geometry": { "type": "Point", "coordinates": [ 117.59152, 3.31332 ] } }, +{ "type": "Feature", "properties": { "Country": "Indonesia", "Function": "1--4----", "LOCODE": "IDTLI", "Name": "Tolitoli", "NameWoDiac": "Tolitoli", "Status": "AI", "outflows": 3328.0 }, "geometry": { "type": "Point", "coordinates": [ 121.1679, 1.2718 ] } }, +{ "type": "Feature", "properties": { "Country": "Ireland", "Function": "1--45---", "LOCODE": "IEORK", "Name": "Cork", "NameWoDiac": "Cork", "Status": "AF", "outflows": 316459.0 }, "geometry": { "type": "Point", "coordinates": [ -8.47061, 51.89797 ] } }, +{ "type": "Feature", "properties": { "Country": "Ireland", "Function": "12-45---", "LOCODE": "IEDUB", "Name": "Dublin", "NameWoDiac": "Dublin", "Status": "AF", "outflows": 453417.25 }, "geometry": { "type": "Point", "coordinates": [ -6.24889, 53.33306 ] } }, +{ "type": "Feature", "properties": { "Country": "Israel", "Function": "1-------", "LOCODE": "ILASH", "Name": "Ashdod", "NameWoDiac": "Ashdod", "Status": "QQ", "outflows": 5463055.0830800012 }, "geometry": { "type": "Point", "coordinates": [ 34.64966, 31.79213 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1-------", "LOCODE": "INENR", "Name": "Ennore", "NameWoDiac": "Ennore", "Status": "AA", "outflows": 263657.33331999998 }, "geometry": { "type": "Point", "coordinates": [ 80.32835, 13.24751 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1-------", "LOCODE": "INHAL", "Name": "Haldia", "NameWoDiac": "Haldia", "Status": "AA", "outflows": 182909.25 }, "geometry": { "type": "Point", "coordinates": [ 88.10975, 22.06046 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1-------", "LOCODE": "INKRI", "Name": "Krishnapatnam", "NameWoDiac": "Krishnapatnam", "Status": "AA", "outflows": 2290663.6664799997 }, "geometry": { "type": "Point", "coordinates": [ 80.12388, 14.28874 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1--4----", "LOCODE": "INIXE", "Name": "Mangalore", "NameWoDiac": "Mangalore", "Status": "AA", "outflows": 139500.0 }, "geometry": { "type": "Point", "coordinates": [ 74.85603, 12.91723 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1-------", "LOCODE": "INMUN", "Name": "Mundra", "NameWoDiac": "Mundra", "Status": "AA", "outflows": 19811914.337299995 }, "geometry": { "type": "Point", "coordinates": [ 69.7219, 22.83918 ] } }, +{ "type": "Feature", "properties": { "Country": "India", "Function": "1--4----", "LOCODE": "INIXZ", "Name": "Port Blair", "NameWoDiac": "Port Blair", "Status": "AA", "outflows": 14150.5 }, "geometry": { "type": "Point", "coordinates": [ 92.74635, 11.66613 ] } }, +{ "type": "Feature", "properties": { "Country": "Iraq", "Function": "1-------", "LOCODE": "IQALF", "Name": "Abu Al Fulus", "NameWoDiac": "Abu Al Fulus", "Status": "RQ", "outflows": 14131.0 }, "geometry": { "type": "Point", "coordinates": [ 48.04246, 30.44783 ] } }, +{ "type": "Feature", "properties": { "Country": "Iraq", "Function": "1-------", "LOCODE": "IQBSR", "Name": "Basra", "NameWoDiac": "Basra", "Status": "AI", "outflows": 7524.0 }, "geometry": { "type": "Point", "coordinates": [ 47.7804, 30.50852 ] } }, +{ "type": "Feature", "properties": { "Country": "Iceland", "Function": "1-------", "LOCODE": "ISGRF", "Name": "Grundarfjørdur", "NameWoDiac": "Grundarfjordur", "Status": "AC", "outflows": 280000.5 }, "geometry": { "type": "Point", "coordinates": [ -23.26313, 64.92427 ] } }, +{ "type": "Feature", "properties": { "Country": "Iceland", "Function": "1-------", "LOCODE": "ISRFJ", "Name": "Reydarfjørdur", "NameWoDiac": "Reydarfjordur", "Status": "AC", "outflows": 157748.5 }, "geometry": { "type": "Point", "coordinates": [ -14.21832, 65.03164 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITMDC", "Name": "Marina di Carrara", "NameWoDiac": "Marina di Carrara", "Status": "AI", "outflows": 164793.0 }, "geometry": { "type": "Point", "coordinates": [ 10.04142, 44.03837 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITMNF", "Name": "Monfalcone", "NameWoDiac": "Monfalcone", "Status": "AI", "outflows": 23587.5 }, "geometry": { "type": "Point", "coordinates": [ 13.53292, 45.80463 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITPOZ", "Name": "Pozzuoli", "NameWoDiac": "Pozzuoli", "Status": "AI", "outflows": 42042.0 }, "geometry": { "type": "Point", "coordinates": [ 14.0952, 40.84394 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-------", "LOCODE": "ITRAN", "Name": "Ravenna", "NameWoDiac": "Ravenna", "Status": "AI", "outflows": 1216610.5 }, "geometry": { "type": "Point", "coordinates": [ 12.20121, 44.41344 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1-3-----", "LOCODE": "ITSAL", "Name": "Salerno", "NameWoDiac": "Salerno", "Status": "AI", "outflows": 2238415.25 }, "geometry": { "type": "Point", "coordinates": [ 14.79328, 40.67545 ] } }, +{ "type": "Feature", "properties": { "Country": "Italy", "Function": "1--4----", "LOCODE": "ITTRS", "Name": "Trieste", "NameWoDiac": "Trieste", "Status": "AI", "outflows": 4531748.0 }, "geometry": { "type": "Point", "coordinates": [ 13.77678, 45.64953 ] } }, +{ "type": "Feature", "properties": { "Country": "Jamaica", "Function": "1--45---", "LOCODE": "JMKIN", "Name": "Kingston", "NameWoDiac": "Kingston", "Status": "AI", "outflows": 8626072.544909995 }, "geometry": { "type": "Point", "coordinates": [ -76.79358, 17.99702 ] } }, +{ "type": "Feature", "properties": { "Country": "Jamaica", "Function": "1--4----", "LOCODE": "JMMBJ", "Name": "Montego Bay", "NameWoDiac": "Montego Bay", "Status": "AI", "outflows": 628021.3333000001 }, "geometry": { "type": "Point", "coordinates": [ -77.91883, 18.47116 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPABU", "Name": "Aburatsu", "NameWoDiac": "Aburatsu", "Status": "AF", "outflows": 53352.0 }, "geometry": { "type": "Point", "coordinates": [ 144.26971, 44.02127 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPAXT", "Name": "Akita", "NameWoDiac": "Akita", "Status": "AF", "outflows": 278377.66667000001 }, "geometry": { "type": "Point", "coordinates": [ 140.11667, 39.71667 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPCHB", "Name": "Chiba", "NameWoDiac": "Chiba", "Status": "AF", "outflows": 607568.0 }, "geometry": { "type": "Point", "coordinates": [ 140.11667, 35.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPFKY", "Name": "Fukuyama, Hiroshima", "NameWoDiac": "Fukuyama, Hiroshima", "Status": "AF", "outflows": 508612.0 }, "geometry": { "type": "Point", "coordinates": [ 133.36667, 34.48333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPHHE", "Name": "Hachinohe", "NameWoDiac": "Hachinohe", "Status": "AF", "outflows": 291243.33335000003 }, "geometry": { "type": "Point", "coordinates": [ 141.5, 40.5 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPHIJ", "Name": "Hiroshima", "NameWoDiac": "Hiroshima", "Status": "AF", "outflows": 658970.0 }, "geometry": { "type": "Point", "coordinates": [ 132.45, 34.4 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPHTC", "Name": "Hitachi", "NameWoDiac": "Hitachi", "Status": "AF", "outflows": 110110.0 }, "geometry": { "type": "Point", "coordinates": [ 140.65, 36.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPHSM", "Name": "Hososhima", "NameWoDiac": "Hososhima", "Status": "AF", "outflows": 354289.0 }, "geometry": { "type": "Point", "coordinates": [ 131.66667, 32.43333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPIMB", "Name": "Imabari", "NameWoDiac": "Imabari", "Status": "AF", "outflows": 83772.0 }, "geometry": { "type": "Point", "coordinates": [ 133.00023, 34.07001 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPIMI", "Name": "Imari", "NameWoDiac": "Imari", "Status": "AF", "outflows": 232752.0 }, "geometry": { "type": "Point", "coordinates": [ 129.87877, 33.27362 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPIWK", "Name": "Iwakuni", "NameWoDiac": "Iwakuni", "Status": "AF", "outflows": 248404.0 }, "geometry": { "type": "Point", "coordinates": [ 132.22, 34.16297 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPKNZ", "Name": "Kanazawa", "NameWoDiac": "Kanazawa", "Status": "AF", "outflows": 500785.99996999995 }, "geometry": { "type": "Point", "coordinates": [ 136.61667, 36.6 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPKSM", "Name": "Kashima, Ibaraki", "NameWoDiac": "Kashima, Ibaraki", "Status": "AF", "outflows": 103584.0 }, "geometry": { "type": "Point", "coordinates": [ 140.64474, 35.96536 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPKWS", "Name": "Kawasaki", "NameWoDiac": "Kawasaki", "Status": "AF", "outflows": 1377583.9999500001 }, "geometry": { "type": "Point", "coordinates": [ 139.71722, 35.52056 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPKCZ", "Name": "Kochi", "NameWoDiac": "Kochi", "Status": "AF", "outflows": 97578.0 }, "geometry": { "type": "Point", "coordinates": [ 133.53333, 33.55 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPKMJ", "Name": "Kumamoto", "NameWoDiac": "Kumamoto", "Status": "AF", "outflows": 44460.0 }, "geometry": { "type": "Point", "coordinates": [ 130.69181, 32.80589 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPMAI", "Name": "Maizuru", "NameWoDiac": "Maizuru", "Status": "AF", "outflows": 113464.0 }, "geometry": { "type": "Point", "coordinates": [ 135.33333, 35.45 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPMYJ", "Name": "Matsuyama", "NameWoDiac": "Matsuyama", "Status": "AF", "outflows": 213629.0 }, "geometry": { "type": "Point", "coordinates": [ 132.76574, 33.83916 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPMII", "Name": "Miike, Fukuoka", "NameWoDiac": "Miike, Fukuoka", "Status": "AF", "outflows": 16640.0 }, "geometry": { "type": "Point", "coordinates": [ 130.47791, 33.05207 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPMIZ", "Name": "Mizushima", "NameWoDiac": "Mizushima", "Status": "AF", "outflows": 727415.0 }, "geometry": { "type": "Point", "coordinates": [ 133.73896, 34.5298 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPMUR", "Name": "Muroran", "NameWoDiac": "Muroran", "Status": "AF", "outflows": 115517.99996999998 }, "geometry": { "type": "Point", "coordinates": [ 140.98806, 42.31722 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPNGS", "Name": "Nagasaki", "NameWoDiac": "Nagasaki", "Status": "AF", "outflows": 44460.0 }, "geometry": { "type": "Point", "coordinates": [ 129.88333, 32.75 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--45---", "LOCODE": "JPNGO", "Name": "Nagoya, Aichi", "NameWoDiac": "Nagoya, Aichi", "Status": "AF", "outflows": 14485316.083789002 }, "geometry": { "type": "Point", "coordinates": [ 136.90641, 35.18147 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--45---", "LOCODE": "JPNAH", "Name": "Naha, Okinawa", "NameWoDiac": "Naha, Okinawa", "Status": "AF", "outflows": 770354.0 }, "geometry": { "type": "Point", "coordinates": [ 127.68333, 26.21667 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPNAO", "Name": "Naoetsu", "NameWoDiac": "Naoetsu", "Status": "AF", "outflows": 166443.33335 }, "geometry": { "type": "Point", "coordinates": [ 138.25, 37.18333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPKIJ", "Name": "Niigata", "NameWoDiac": "Niigata", "Status": "AF", "outflows": 632488.99997 }, "geometry": { "type": "Point", "coordinates": [ 139.00589, 37.88637 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPOIT", "Name": "Oita", "NameWoDiac": "Oita", "Status": "AF", "outflows": 336869.0 }, "geometry": { "type": "Point", "coordinates": [ 131.6, 33.23333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPOMZ", "Name": "Omaezaki", "NameWoDiac": "Omaezaki", "Status": "AF", "outflows": 642421.0 }, "geometry": { "type": "Point", "coordinates": [ 138.21934, 34.59882 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPONA", "Name": "Onahama", "NameWoDiac": "Onahama", "Status": "AF", "outflows": 204940.6667 }, "geometry": { "type": "Point", "coordinates": [ 140.9, 36.95 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPOTK", "Name": "Otake", "NameWoDiac": "Otake", "Status": "AF", "outflows": 36348.0 }, "geometry": { "type": "Point", "coordinates": [ 132.22063, 34.20754 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPOTR", "Name": "Otaru", "NameWoDiac": "Otaru", "Status": "AF", "outflows": 78000.0 }, "geometry": { "type": "Point", "coordinates": [ 141.00222, 43.18944 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPSMN", "Name": "Sakaiminato", "NameWoDiac": "Sakaiminato", "Status": "AF", "outflows": 329679.99997 }, "geometry": { "type": "Point", "coordinates": [ 133.23094, 35.53774 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPSKT", "Name": "Sakata", "NameWoDiac": "Sakata", "Status": "AF", "outflows": 421338.66667000001 }, "geometry": { "type": "Point", "coordinates": [ 139.855, 38.91667 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPSBS", "Name": "Shibushi", "NameWoDiac": "Shibushi", "Status": "AF", "outflows": 490971.0 }, "geometry": { "type": "Point", "coordinates": [ 131.10114, 31.476 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPSMZ", "Name": "Shimizu", "NameWoDiac": "Shimizu", "Status": "AF", "outflows": 5351577.999760001 }, "geometry": { "type": "Point", "coordinates": [ 142.88472, 43.00611 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPTAK", "Name": "Takamatsu", "NameWoDiac": "Takamatsu", "Status": "AF", "outflows": 188292.0 }, "geometry": { "type": "Point", "coordinates": [ 134.05, 34.33333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPTKS", "Name": "Tokushima", "NameWoDiac": "Tokushima", "Status": "AF", "outflows": 148044.0 }, "geometry": { "type": "Point", "coordinates": [ 134.56667, 34.06667 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPTKY", "Name": "Tokuyama", "NameWoDiac": "Tokuyama", "Status": "AF", "outflows": 456888.25 }, "geometry": { "type": "Point", "coordinates": [ 131.81667, 34.05 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPTMK", "Name": "Tomakomai", "NameWoDiac": "Tomakomai", "Status": "AF", "outflows": 929244.33331999998 }, "geometry": { "type": "Point", "coordinates": [ 141.60333, 42.63694 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPTHS", "Name": "Toyohashi", "NameWoDiac": "Toyohashi", "Status": "AF", "outflows": 181584.0 }, "geometry": { "type": "Point", "coordinates": [ 137.38333, 34.76667 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPTRG", "Name": "Tsuruga", "NameWoDiac": "Tsuruga", "Status": "AF", "outflows": 121550.0 }, "geometry": { "type": "Point", "coordinates": [ 136.0558, 35.64547 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1--4----", "LOCODE": "JPUBJ", "Name": "Ube", "NameWoDiac": "Ube", "Status": "AF", "outflows": 22490.0 }, "geometry": { "type": "Point", "coordinates": [ 131.25111, 33.94306 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPWAK", "Name": "Wakayama", "NameWoDiac": "Wakayama", "Status": "AF", "outflows": 63765.0 }, "geometry": { "type": "Point", "coordinates": [ 135.16667, 34.23333 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPYAT", "Name": "Yatsushiro", "NameWoDiac": "Yatsushiro", "Status": "AF", "outflows": 61100.0 }, "geometry": { "type": "Point", "coordinates": [ 130.59952, 32.50439 ] } }, +{ "type": "Feature", "properties": { "Country": "Japan", "Function": "1-------", "LOCODE": "JPYKK", "Name": "Yokkaichi", "NameWoDiac": "Yokkaichi", "Status": "AF", "outflows": 3523652.1667400002 }, "geometry": { "type": "Point", "coordinates": [ 136.61667, 34.96667 ] } }, +{ "type": "Feature", "properties": { "Country": "Kenya", "Function": "1--45---", "LOCODE": "KEMBA", "Name": "Mombasa", "NameWoDiac": "Mombasa", "Status": "AI", "outflows": 2290456.6388300001 }, "geometry": { "type": "Point", "coordinates": [ 39.66359, -4.05466 ] } }, +{ "type": "Feature", "properties": { "Country": "Kiribati", "Function": "1--4----", "LOCODE": "KITRW", "Name": "Tarawa", "NameWoDiac": "Tarawa", "Status": "AI", "outflows": 136326.0 }, "geometry": { "type": "Point", "coordinates": [ 172.97696, 1.3278 ] } }, +{ "type": "Feature", "properties": { "Country": "Comoros", "Function": "1--45---", "LOCODE": "KMYVA", "Name": "Moroni", "NameWoDiac": "Moroni", "Status": "AI", "outflows": 131275.33335 }, "geometry": { "type": "Point", "coordinates": [ 43.25506, -11.70216 ] } }, +{ "type": "Feature", "properties": { "Country": "Lebanon", "Function": "1--4----", "LOCODE": "LBKYE", "Name": "Tripoli", "NameWoDiac": "Tripoli", "Status": "AI", "outflows": 2038156.25 }, "geometry": { "type": "Point", "coordinates": [ 35.84415, 34.43352 ] } }, +{ "type": "Feature", "properties": { "Country": "Lithuania", "Function": "1--4----", "LOCODE": "LTKLJ", "Name": "Klaipeda", "NameWoDiac": "Klaipeda", "Status": "AI", "outflows": 1242325.5 }, "geometry": { "type": "Point", "coordinates": [ 21.13912, 55.7068 ] } }, +{ "type": "Feature", "properties": { "Country": "Latvia", "Function": "1--45---", "LOCODE": "LVRIX", "Name": "Riga", "NameWoDiac": "Riga", "Status": "AI", "outflows": 944970.0 }, "geometry": { "type": "Point", "coordinates": [ 24.10589, 56.946 ] } }, +{ "type": "Feature", "properties": { "Country": "Libya", "Function": "1--45---", "LOCODE": "LYBEN", "Name": "Bingazi (Benghazi)", "NameWoDiac": "Bingazi (Benghazi)", "Status": "AI", "outflows": 296981.0 }, "geometry": { "type": "Point", "coordinates": [ 20.06859, 32.11486 ] } }, +{ "type": "Feature", "properties": { "Country": "Libya", "Function": "1--4----", "LOCODE": "LYMRA", "Name": "Misurata", "NameWoDiac": "Misurata", "Status": "AI", "outflows": 757750.00001000008 }, "geometry": { "type": "Point", "coordinates": [ 15.09254, 32.37535 ] } }, +{ "type": "Feature", "properties": { "Country": "Libya", "Function": "1--4----", "LOCODE": "LYTIP", "Name": "Tripoli", "NameWoDiac": "Tripoli", "Status": "AI", "outflows": 281045.0 }, "geometry": { "type": "Point", "coordinates": [ 13.18733, 32.88743 ] } }, +{ "type": "Feature", "properties": { "Country": "Morocco", "Function": "1--4----", "LOCODE": "MAAGA", "Name": "Agadir", "NameWoDiac": "Agadir", "Status": "AI", "outflows": 593660.57139000006 }, "geometry": { "type": "Point", "coordinates": [ -9.59815, 30.42018 ] } }, +{ "type": "Feature", "properties": { "Country": "Morocco", "Function": "1-------", "LOCODE": "MANDR", "Name": "Nador", "NameWoDiac": "Nador", "Status": "AI", "outflows": 45500.0 }, "geometry": { "type": "Point", "coordinates": [ -2.93352, 35.16813 ] } }, +{ "type": "Feature", "properties": { "Country": "Morocco", "Function": "123-----", "LOCODE": "MAPTM", "Name": "Tanger Med", "NameWoDiac": "Tanger Med", "Status": "AI", "outflows": 29213268.307420008 }, "geometry": { "type": "Point", "coordinates": [ -5.56323, 35.82674 ] } }, +{ "type": "Feature", "properties": { "Country": "Madagascar", "Function": "1--4----", "LOCODE": "MGDIE", "Name": "Antsiranana", "NameWoDiac": "Antsiranana", "Status": "AI", "outflows": 113468.0 }, "geometry": { "type": "Point", "coordinates": [ 49.29188, -12.31732 ] } }, +{ "type": "Feature", "properties": { "Country": "Madagascar", "Function": "1--4----", "LOCODE": "MGMJN", "Name": "Majunga (Mahajanga)", "NameWoDiac": "Majunga (Mahajanga)", "Status": "AI", "outflows": 125324.0 }, "geometry": { "type": "Point", "coordinates": [ 46.31667, -15.71667 ] } }, +{ "type": "Feature", "properties": { "Country": "Madagascar", "Function": "1--45---", "LOCODE": "MGTMM", "Name": "Tamatave (Toamasina)", "NameWoDiac": "Tamatave (Toamasina)", "Status": "AI", "outflows": 396084.0 }, "geometry": { "type": "Point", "coordinates": [ 49.40234, -18.1492 ] } }, +{ "type": "Feature", "properties": { "Country": "Madagascar", "Function": "1--4----", "LOCODE": "MGTLE", "Name": "Tulear (Toliara)", "NameWoDiac": "Tulear (Toliara)", "Status": "AI", "outflows": 19864.0 }, "geometry": { "type": "Point", "coordinates": [ 43.66667, -23.35 ] } }, +{ "type": "Feature", "properties": { "Country": "Marshall Islands", "Function": "---4----", "LOCODE": "MHKWA", "Name": "Kwajalein", "NameWoDiac": "Kwajalein", "Status": "AI", "outflows": 48316.66667 }, "geometry": { "type": "Point", "coordinates": [ 167.73919, 8.77479 ] } }, +{ "type": "Feature", "properties": { "Country": "Myanmar", "Function": "1--45---", "LOCODE": "MMRGN", "Name": "Yangon", "NameWoDiac": "Yangon", "Status": "AI", "outflows": 937558.00004999992 }, "geometry": { "type": "Point", "coordinates": [ 96.15611, 16.80528 ] } }, +{ "type": "Feature", "properties": { "Country": "Myanmar", "Function": "1--45---", "LOCODE": "MMRGN", "Name": "Yangon", "NameWoDiac": "Yangon", "Status": "AI", "outflows": 937558.00004999992 }, "geometry": { "type": "Point", "coordinates": [ 96.15611, 16.80528 ] } }, +{ "type": "Feature", "properties": { "Country": "Martinique", "Function": "1-345---", "LOCODE": "MQFDF", "Name": "Fort-de-France", "NameWoDiac": "Fort-de-France", "Status": "AI", "outflows": 1924423.5832689998 }, "geometry": { "type": "Point", "coordinates": [ -61.07418, 14.60365 ] } }, +{ "type": "Feature", "properties": { "Country": "Mauritania", "Function": "1--4----", "LOCODE": "MRNDB", "Name": "Nouadhibou", "NameWoDiac": "Nouadhibou", "Status": "AI", "outflows": 197029.5 }, "geometry": { "type": "Point", "coordinates": [ -17.03842, 20.94188 ] } }, +{ "type": "Feature", "properties": { "Country": "Mauritania", "Function": "1--45---", "LOCODE": "MRNKC", "Name": "Nouakchott", "NameWoDiac": "Nouakchott", "Status": "AI", "outflows": 334524.0 }, "geometry": { "type": "Point", "coordinates": [ -15.9785, 18.08581 ] } }, +{ "type": "Feature", "properties": { "Country": "Montserrat", "Function": "1---5---", "LOCODE": "MSPLY", "Name": "Plymouth", "NameWoDiac": "Plymouth", "Status": "RQ", "outflows": 230958.0 }, "geometry": { "type": "Point", "coordinates": [ -62.21292, 16.70555 ] } }, +{ "type": "Feature", "properties": { "Country": "Mauritius", "Function": "1--4----", "LOCODE": "MUPLU", "Name": "Port Louis", "NameWoDiac": "Port Louis", "Status": "QQ", "outflows": 7415942.3854999971 }, "geometry": { "type": "Point", "coordinates": [ 57.49889, -20.16194 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1-------", "LOCODE": "MYBTU", "Name": "Bintulu, Sarawak", "NameWoDiac": "Bintulu, Sarawak", "Status": "AI", "outflows": 670234.5 }, "geometry": { "type": "Point", "coordinates": [ 113.03333, 3.16667 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1-345---", "LOCODE": "MYBKI", "Name": "Kota Kinabalu, Sabah", "NameWoDiac": "Kota Kinabalu, Sabah", "Status": "AI", "outflows": 710049.1667 }, "geometry": { "type": "Point", "coordinates": [ 116.0724, 5.9749 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--45---", "LOCODE": "MYKCH", "Name": "Kuching, Sarawak", "NameWoDiac": "Kuching, Sarawak", "Status": "AI", "outflows": 276603.6 }, "geometry": { "type": "Point", "coordinates": [ 110.33333, 1.55 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--4----", "LOCODE": "MYLBU", "Name": "Labuan, Sabah", "NameWoDiac": "Labuan, Sabah", "Status": "AI", "outflows": 68835.0 }, "geometry": { "type": "Point", "coordinates": [ 115.26924, 5.28883 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--4----", "LOCODE": "MYMKZ", "Name": "Malacca", "NameWoDiac": "Malacca", "Status": "AI", "outflows": 2862.0 }, "geometry": { "type": "Point", "coordinates": [ 102.2405, 2.196 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1-------", "LOCODE": "MYPGU", "Name": "Pasir Gudang, Johor", "NameWoDiac": "Pasir Gudang, Johor", "Status": "QQ", "outflows": 3893274.6667500003 }, "geometry": { "type": "Point", "coordinates": [ 103.878, 1.4726 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--4----", "LOCODE": "MYSDK", "Name": "Sandakan, Sabah", "NameWoDiac": "Sandakan, Sabah", "Status": "AI", "outflows": 18720.0 }, "geometry": { "type": "Point", "coordinates": [ 118.1179, 5.8402 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--4----", "LOCODE": "MYSBW", "Name": "Sibu, Sarawak", "NameWoDiac": "Sibu, Sarawak", "Status": "AI", "outflows": 2250.0 }, "geometry": { "type": "Point", "coordinates": [ 111.81667, 2.3 ] } }, +{ "type": "Feature", "properties": { "Country": "Malaysia", "Function": "1--4----", "LOCODE": "MYTWU", "Name": "Tawau, Sabah", "NameWoDiac": "Tawau, Sabah", "Status": "AI", "outflows": 241236.6667 }, "geometry": { "type": "Point", "coordinates": [ 117.89115, 4.24482 ] } }, +{ "type": "Feature", "properties": { "Country": "Mozambique", "Function": "1--45---", "LOCODE": "MZBEW", "Name": "Beira", "NameWoDiac": "Beira", "Status": "AI", "outflows": 862537.00003 }, "geometry": { "type": "Point", "coordinates": [ 34.83889, -19.84361 ] } }, +{ "type": "Feature", "properties": { "Country": "Mozambique", "Function": "1--45---", "LOCODE": "MZMPM", "Name": "Maputo", "NameWoDiac": "Maputo", "Status": "AI", "outflows": 871116.20004999987 }, "geometry": { "type": "Point", "coordinates": [ 32.58322, -25.96553 ] } }, +{ "type": "Feature", "properties": { "Country": "Mozambique", "Function": "1--4----", "LOCODE": "MZMNC", "Name": "Nacala", "NameWoDiac": "Nacala", "Status": "AI", "outflows": 668056.99998000008 }, "geometry": { "type": "Point", "coordinates": [ 40.68538, -14.56257 ] } }, +{ "type": "Feature", "properties": { "Country": "Mozambique", "Function": "1--4----", "LOCODE": "MZUEL", "Name": "Quelimane", "NameWoDiac": "Quelimane", "Status": "AI", "outflows": 8034.0 }, "geometry": { "type": "Point", "coordinates": [ 36.88833, -17.87861 ] } }, +{ "type": "Feature", "properties": { "Country": "Namibia", "Function": "1-------", "LOCODE": "NAWVB", "Name": "Walvis Bay", "NameWoDiac": "Walvis Bay", "Status": "QQ", "outflows": 2144542.8666100004 }, "geometry": { "type": "Point", "coordinates": [ 14.50528, -22.9575 ] } }, +{ "type": "Feature", "properties": { "Country": "Nigeria", "Function": "1-------", "LOCODE": "NGAPP", "Name": "Apapa", "NameWoDiac": "Apapa", "Status": "QQ", "outflows": 1959193.7340199992 }, "geometry": { "type": "Point", "coordinates": [ 3.35901, 6.4488 ] } }, +{ "type": "Feature", "properties": { "Country": "Nigeria", "Function": "1--4----", "LOCODE": "NGCBQ", "Name": "Calabar", "NameWoDiac": "Calabar", "Status": "AI", "outflows": 7150.0 }, "geometry": { "type": "Point", "coordinates": [ 8.32695, 4.95893 ] } }, +{ "type": "Feature", "properties": { "Country": "Nigeria", "Function": "1--45---", "LOCODE": "NGLOS", "Name": "Lagos", "NameWoDiac": "Lagos", "Status": "AI", "outflows": 1767326.6668199997 }, "geometry": { "type": "Point", "coordinates": [ 3.39467, 6.45407 ] } }, +{ "type": "Feature", "properties": { "Country": "Nigeria", "Function": "1--4----", "LOCODE": "NGPHC", "Name": "Port Harcourt", "NameWoDiac": "Port Harcourt", "Status": "AI", "outflows": 46634.9 }, "geometry": { "type": "Point", "coordinates": [ 7.0134, 4.77742 ] } }, +{ "type": "Feature", "properties": { "Country": "Nicaragua", "Function": "1---5---", "LOCODE": "NICIO", "Name": "Corinto", "NameWoDiac": "Corinto", "Status": "AI", "outflows": 510767.4 }, "geometry": { "type": "Point", "coordinates": [ -87.17304, 12.4825 ] } }, +{ "type": "Feature", "properties": { "Country": "Norway", "Function": "1-------", "LOCODE": "NOGJM", "Name": "Gjemnes", "NameWoDiac": "Gjemnes", "Status": "AI", "outflows": 135486.0 }, "geometry": { "type": "Point", "coordinates": [ 8.08604, 62.89225 ] } }, +{ "type": "Feature", "properties": { "Country": "Oman", "Function": "1--4----", "LOCODE": "OMSLL", "Name": "Salalah", "NameWoDiac": "Salalah", "Status": "AI", "outflows": 20488113.65606999 }, "geometry": { "type": "Point", "coordinates": [ 54.09237, 17.01505 ] } }, +{ "type": "Feature", "properties": { "Country": "Oman", "Function": "1-------", "LOCODE": "OMSOH", "Name": "Sohar", "NameWoDiac": "Sohar", "Status": "QQ", "outflows": 5253518.9085 }, "geometry": { "type": "Point", "coordinates": [ 56.70937, 24.34745 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "1-------", "LOCODE": "PAPAM", "Name": "Almirante", "NameWoDiac": "Almirante", "Status": "AI", "outflows": 265850.0 }, "geometry": { "type": "Point", "coordinates": [ -82.4018, 9.30091 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "1-------", "LOCODE": "PABLB", "Name": "Balboa", "NameWoDiac": "Balboa", "Status": "AI", "outflows": 13017890.895410001 }, "geometry": { "type": "Point", "coordinates": [ -79.56672, 8.94814 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "--3-----", "LOCODE": "PACSO", "Name": "Coco Solo", "NameWoDiac": "Coco Solo", "Status": "RQ", "outflows": 340795.0 }, "geometry": { "type": "Point", "coordinates": [ -79.88168, 9.37091 ] } }, +{ "type": "Feature", "properties": { "Country": "Panama", "Function": "123-----", "LOCODE": "PAMIT", "Name": "Manzanillo", "NameWoDiac": "Manzanillo", "Status": "AI", "outflows": 13509667.606659999 }, "geometry": { "type": "Point", "coordinates": [ -81.16667, 7.53667 ] } }, +{ "type": "Feature", "properties": { "Country": "Peru", "Function": "1-------", "LOCODE": "PECLL", "Name": "Callao", "NameWoDiac": "Callao", "Status": "AI", "outflows": 15247664.791890001 }, "geometry": { "type": "Point", "coordinates": [ -77.11814, -12.05659 ] } }, +{ "type": "Feature", "properties": { "Country": "Peru", "Function": "1--4----", "LOCODE": "PEILQ", "Name": "Ilo", "NameWoDiac": "Ilo", "Status": "AI", "outflows": 83616.0 }, "geometry": { "type": "Point", "coordinates": [ -71.34108, -17.63185 ] } }, +{ "type": "Feature", "properties": { "Country": "Peru", "Function": "1--4----", "LOCODE": "PEIQT", "Name": "Iquitos", "NameWoDiac": "Iquitos", "Status": "AI", "outflows": 9675.0 }, "geometry": { "type": "Point", "coordinates": [ -73.25383, -3.74912 ] } }, +{ "type": "Feature", "properties": { "Country": "Peru", "Function": "1-------", "LOCODE": "PEMRI", "Name": "Matarani", "NameWoDiac": "Matarani", "Status": "AI", "outflows": 98962.5 }, "geometry": { "type": "Point", "coordinates": [ -72.10563, -16.99639 ] } }, +{ "type": "Feature", "properties": { "Country": "Peru", "Function": "1-------", "LOCODE": "PEPAI", "Name": "Paita", "NameWoDiac": "Paita", "Status": "AI", "outflows": 1763103.4120800004 }, "geometry": { "type": "Point", "coordinates": [ -81.11444, -5.08917 ] } }, +{ "type": "Feature", "properties": { "Country": "Peru", "Function": "1--4----", "LOCODE": "PEPIO", "Name": "Pisco", "NameWoDiac": "Pisco", "Status": "AI", "outflows": 121628.0 }, "geometry": { "type": "Point", "coordinates": [ -76.20538, -13.71029 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGGUR", "Name": "Alotau", "NameWoDiac": "Alotau", "Status": "AI", "outflows": 15808.0 }, "geometry": { "type": "Point", "coordinates": [ 150.45742, -10.31509 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGBUA", "Name": "Buka", "NameWoDiac": "Buka", "Status": "AI", "outflows": 15808.0 }, "geometry": { "type": "Point", "coordinates": [ 154.67098, -5.43261 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1-------", "LOCODE": "PGKIM", "Name": "Kimbe", "NameWoDiac": "Kimbe", "Status": "QQ", "outflows": 99364.0 }, "geometry": { "type": "Point", "coordinates": [ 150.13766, -5.55085 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGLAE", "Name": "Lae", "NameWoDiac": "Lae", "Status": "AI", "outflows": 836183.91665300005 }, "geometry": { "type": "Point", "coordinates": [ 146.99611, -6.72333 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGPOM", "Name": "Port Moresby", "NameWoDiac": "Port Moresby", "Status": "AI", "outflows": 402247.08331199997 }, "geometry": { "type": "Point", "coordinates": [ 147.15089, -9.47723 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGRAB", "Name": "Rabaul", "NameWoDiac": "Rabaul", "Status": "AI", "outflows": 115172.0 }, "geometry": { "type": "Point", "coordinates": [ 152.16297, -4.20037 ] } }, +{ "type": "Feature", "properties": { "Country": "Papua New Guinea", "Function": "1--4----", "LOCODE": "PGWWK", "Name": "Wewak", "NameWoDiac": "Wewak", "Status": "AI", "outflows": 43795.0 }, "geometry": { "type": "Point", "coordinates": [ 143.63229, -3.54964 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHBCD", "Name": "Bacolod, Negros", "NameWoDiac": "Bacolod, Negros", "Status": "AI", "outflows": 18806.0 }, "geometry": { "type": "Point", "coordinates": [ 122.95, 10.66667 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHCGY", "Name": "Cagayan de Oro, Mindanao", "NameWoDiac": "Cagayan de Oro, Mindanao", "Status": "AI", "outflows": 1437089.1667599997 }, "geometry": { "type": "Point", "coordinates": [ 124.64722, 8.48222 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHCEB", "Name": "Cebu", "NameWoDiac": "Cebu", "Status": "AI", "outflows": 1378464.0 }, "geometry": { "type": "Point", "coordinates": [ 123.89071, 10.31672 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHCBO", "Name": "Cotabato, Mindanao", "NameWoDiac": "Cotabato, Mindanao", "Status": "AI", "outflows": 29328.0 }, "geometry": { "type": "Point", "coordinates": [ 124.24639, 7.22361 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHDGT", "Name": "Dumaguete", "NameWoDiac": "Dumaguete", "Status": "AI", "outflows": 27546.0 }, "geometry": { "type": "Point", "coordinates": [ 123.30261, 9.30722 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--45---", "LOCODE": "PHMNL", "Name": "Manila", "NameWoDiac": "Manila", "Status": "AI", "outflows": 7135131.1431800006 }, "geometry": { "type": "Point", "coordinates": [ 120.9822, 14.6042 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHOZC", "Name": "Ozamis, Mindanao", "NameWoDiac": "Ozamis, Mindanao", "Status": "AI", "outflows": 10976.0 }, "geometry": { "type": "Point", "coordinates": [ 123.8405, 8.1481 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1-3-----", "LOCODE": "PHPLC", "Name": "Polloc", "NameWoDiac": "Polloc", "Status": "RQ", "outflows": 11193.0 }, "geometry": { "type": "Point", "coordinates": [ 124.22088, 7.3534 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHPPS", "Name": "Puerto Princesa, Palawan", "NameWoDiac": "Puerto Princesa, Palawan", "Status": "AI", "outflows": 9100.0 }, "geometry": { "type": "Point", "coordinates": [ 118.73528, 9.73917 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHSFS", "Name": "Subic Bay", "NameWoDiac": "Subic Bay", "Status": "AI", "outflows": 1621178.0 }, "geometry": { "type": "Point", "coordinates": [ 120.27987, 14.78899 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHTAG", "Name": "Tagbilaran, Bohol", "NameWoDiac": "Tagbilaran, Bohol", "Status": "AI", "outflows": 4320.0 }, "geometry": { "type": "Point", "coordinates": [ 123.85219, 9.65556 ] } }, +{ "type": "Feature", "properties": { "Country": "Philippines", "Function": "1--4----", "LOCODE": "PHZAM", "Name": "Zamboanga", "NameWoDiac": "Zamboanga", "Status": "AI", "outflows": 67509.0 }, "geometry": { "type": "Point", "coordinates": [ 122.07389, 6.91028 ] } }, +{ "type": "Feature", "properties": { "Country": "Pakistan", "Function": "1-34----", "LOCODE": "PKGWD", "Name": "Gwadar", "NameWoDiac": "Gwadar", "Status": "AI", "outflows": 145535.0 }, "geometry": { "type": "Point", "coordinates": [ 62.32541, 25.12163 ] } }, +{ "type": "Feature", "properties": { "Country": "Pakistan", "Function": "12345---", "LOCODE": "PKKHI", "Name": "Karachi", "NameWoDiac": "Karachi", "Status": "AI", "outflows": 11738106.441340001 }, "geometry": { "type": "Point", "coordinates": [ 67.0104, 24.8608 ] } }, +{ "type": "Feature", "properties": { "Country": "Poland", "Function": "1--4----", "LOCODE": "PLGDN", "Name": "Gdansk", "NameWoDiac": "Gdansk", "Status": "AI", "outflows": 6373121.0499060033 }, "geometry": { "type": "Point", "coordinates": [ 18.64912, 54.35227 ] } }, +{ "type": "Feature", "properties": { "Country": "Poland", "Function": "1--45---", "LOCODE": "PLSZZ", "Name": "Szczecin", "NameWoDiac": "Szczecin", "Status": "AI", "outflows": 101530.0 }, "geometry": { "type": "Point", "coordinates": [ 14.55302, 53.42894 ] } }, +{ "type": "Feature", "properties": { "Country": "Palau", "Function": "1--4----", "LOCODE": "PWROR", "Name": "Koror", "NameWoDiac": "Koror", "Status": "AI", "outflows": 30420.0 }, "geometry": { "type": "Point", "coordinates": [ 134.47326, 7.33978 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1--4----", "LOCODE": "RUARH", "Name": "Arkhangelsk", "NameWoDiac": "Arkhangelsk", "Status": "AI", "outflows": 390.0 }, "geometry": { "type": "Point", "coordinates": [ 40.5433, 64.5401 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1-------", "LOCODE": "RUDUD", "Name": "Dudinka", "NameWoDiac": "Dudinka", "Status": "QQ", "outflows": 16796.0 }, "geometry": { "type": "Point", "coordinates": [ 86.17778, 69.40583 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1--4----", "LOCODE": "RUKGD", "Name": "Kaliningrad", "NameWoDiac": "Kaliningrad", "Status": "AI", "outflows": 133061.5 }, "geometry": { "type": "Point", "coordinates": [ 20.51095, 54.70649 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1-------", "LOCODE": "RUKOR", "Name": "Korsakov", "NameWoDiac": "Korsakov", "Status": "QQ", "outflows": 19067.0 }, "geometry": { "type": "Point", "coordinates": [ 142.77722, 46.6342 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "---4----", "LOCODE": "RUGDX", "Name": "Magadan", "NameWoDiac": "Magadan", "Status": "AI", "outflows": 27664.0 }, "geometry": { "type": "Point", "coordinates": [ 150.80347, 59.5638 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1--4----", "LOCODE": "RUPKC", "Name": "Petropavlovsk-Kamchatskiy", "NameWoDiac": "Petropavlovsk-Kamchatskiy", "Status": "AI", "outflows": 10478.0 }, "geometry": { "type": "Point", "coordinates": [ 158.65076, 53.04444 ] } }, +{ "type": "Feature", "properties": { "Country": "Russian Federation", "Function": "1--4----", "LOCODE": "RUVVO", "Name": "Vladivostok", "NameWoDiac": "Vladivostok", "Status": "AI", "outflows": 1273681.4999099998 }, "geometry": { "type": "Point", "coordinates": [ 131.87353, 43.10562 ] } }, +{ "type": "Feature", "properties": { "Country": "Saudi Arabia", "Function": "1-------", "LOCODE": "SAJUB", "Name": "Jubail", "NameWoDiac": "Jubail", "Status": "QQ", "outflows": 6234394.5950499978 }, "geometry": { "type": "Point", "coordinates": [ 49.62251, 27.0174 ] } }, +{ "type": "Feature", "properties": { "Country": "Seychelles", "Function": "1-------", "LOCODE": "SCPOV", "Name": "Port Victoria", "NameWoDiac": "Port Victoria", "Status": "QQ", "outflows": 611771.76191000012 }, "geometry": { "type": "Point", "coordinates": [ 55.45501, -4.62001 ] } }, +{ "type": "Feature", "properties": { "Country": "Sudan", "Function": "1--45---", "LOCODE": "SDPZU", "Name": "Port Sudan", "NameWoDiac": "Port Sudan", "Status": "AI", "outflows": 308535.0 }, "geometry": { "type": "Point", "coordinates": [ 37.21644, 19.61745 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "12-4----", "LOCODE": "SEHEL", "Name": "Helsingborg", "NameWoDiac": "Helsingborg", "Status": "AI", "outflows": 634088.0 }, "geometry": { "type": "Point", "coordinates": [ 12.69437, 56.04673 ] } }, +{ "type": "Feature", "properties": { "Country": "Sweden", "Function": "123-----", "LOCODE": "SEVAG", "Name": "Varberg", "NameWoDiac": "Varberg", "Status": "AA", "outflows": 82628.0 }, "geometry": { "type": "Point", "coordinates": [ 12.25078, 57.10557 ] } }, +{ "type": "Feature", "properties": { "Country": "Singapore", "Function": "1--45---", "LOCODE": "SGSIN", "Name": "Singapore", "NameWoDiac": "Singapore", "Status": "AI", "outflows": 126673817.40886995 }, "geometry": { "type": "Point", "coordinates": [ 103.85007, 1.28967 ] } }, +{ "type": "Feature", "properties": { "Country": "Slovenia", "Function": "1-------", "LOCODE": "SIKOP", "Name": "Koper", "NameWoDiac": "Koper", "Status": "RL", "outflows": 4814941.1666899994 }, "geometry": { "type": "Point", "coordinates": [ 13.72944, 45.54694 ] } }, +{ "type": "Feature", "properties": { "Country": "Sierra Leone", "Function": "1--45---", "LOCODE": "SLFNA", "Name": "Freetown", "NameWoDiac": "Freetown", "Status": "AI", "outflows": 292305.0 }, "geometry": { "type": "Point", "coordinates": [ -13.2356, 8.48714 ] } }, +{ "type": "Feature", "properties": { "Country": "Senegal", "Function": "1--45---", "LOCODE": "SNDKR", "Name": "Dakar", "NameWoDiac": "Dakar", "Status": "AI", "outflows": 2417263.262 }, "geometry": { "type": "Point", "coordinates": [ -17.44406, 14.6937 ] } }, +{ "type": "Feature", "properties": { "Country": "Somalia", "Function": "1--4----", "LOCODE": "SOBBO", "Name": "Berbera", "NameWoDiac": "Berbera", "Status": "AI", "outflows": 215094.5 }, "geometry": { "type": "Point", "coordinates": [ 45.01432, 10.43959 ] } }, +{ "type": "Feature", "properties": { "Country": "Somalia", "Function": "1--4----", "LOCODE": "SOKMU", "Name": "Kismayu", "NameWoDiac": "Kismayu", "Status": "AI", "outflows": 188773.0 }, "geometry": { "type": "Point", "coordinates": [ 42.54536, -0.35817 ] } }, +{ "type": "Feature", "properties": { "Country": "Somalia", "Function": "1--45---", "LOCODE": "SOMGQ", "Name": "Mogadishu", "NameWoDiac": "Mogadishu", "Status": "AI", "outflows": 437501.99997999996 }, "geometry": { "type": "Point", "coordinates": [ 45.34375, 2.03711 ] } }, +{ "type": "Feature", "properties": { "Country": "Suriname", "Function": "1--45---", "LOCODE": "SRPBM", "Name": "Paramaribo", "NameWoDiac": "Paramaribo", "Status": "AI", "outflows": 538931.33332199999 }, "geometry": { "type": "Point", "coordinates": [ -55.16682, 5.86638 ] } }, +{ "type": "Feature", "properties": { "Country": "Suriname", "Function": "1--45---", "LOCODE": "SRPBM", "Name": "Paramaribo", "NameWoDiac": "Paramaribo", "Status": "AI", "outflows": 538931.33332199999 }, "geometry": { "type": "Point", "coordinates": [ -55.16682, 5.86638 ] } }, +{ "type": "Feature", "properties": { "Country": "El Salvador", "Function": "1-3-----", "LOCODE": "SVAQJ", "Name": "Acajutla", "NameWoDiac": "Acajutla", "Status": "AI", "outflows": 495947.4 }, "geometry": { "type": "Point", "coordinates": [ -89.8275, 13.59278 ] } }, +{ "type": "Feature", "properties": { "Country": "El Salvador", "Function": "1--45---", "LOCODE": "SVSAL", "Name": "San Salvador", "NameWoDiac": "San Salvador", "Status": "AI", "outflows": 388752.0 }, "geometry": { "type": "Point", "coordinates": [ -89.18718, 13.68935 ] } }, +{ "type": "Feature", "properties": { "Country": "Togo", "Function": "1--45---", "LOCODE": "TGLFW", "Name": "Lome", "NameWoDiac": "Lome", "Status": "AI", "outflows": 6445382.4134400021 }, "geometry": { "type": "Point", "coordinates": [ 1.22154, 6.12874 ] } }, +{ "type": "Feature", "properties": { "Country": "Thailand", "Function": "1-------", "LOCODE": "THSRI", "Name": "Sriracha", "NameWoDiac": "Sriracha", "Status": "QQ", "outflows": 58522.5 }, "geometry": { "type": "Point", "coordinates": [ 100.93111, 13.17372 ] } }, +{ "type": "Feature", "properties": { "Country": "Tunisia", "Function": "1234----", "LOCODE": "TNBIZ", "Name": "Bizerte", "NameWoDiac": "Bizerte", "Status": "QQ", "outflows": 106117.5 }, "geometry": { "type": "Point", "coordinates": [ 9.87391, 37.27442 ] } }, +{ "type": "Feature", "properties": { "Country": "Tunisia", "Function": "1234----", "LOCODE": "TNSFA", "Name": "Sfax", "NameWoDiac": "Sfax", "Status": "AI", "outflows": 72212.33334 }, "geometry": { "type": "Point", "coordinates": [ 10.76028, 34.74056 ] } }, +{ "type": "Feature", "properties": { "Country": "Tunisia", "Function": "1234----", "LOCODE": "TNSUS", "Name": "Sousse", "NameWoDiac": "Sousse", "Status": "QQ", "outflows": 43545.0 }, "geometry": { "type": "Point", "coordinates": [ 10.63699, 35.82539 ] } }, +{ "type": "Feature", "properties": { "Country": "Tunisia", "Function": "12345---", "LOCODE": "TNTUN", "Name": "Tunis", "NameWoDiac": "Tunis", "Status": "AI", "outflows": 59748.0 }, "geometry": { "type": "Point", "coordinates": [ 10.16579, 36.81897 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-------", "LOCODE": "TRALI", "Name": "Aliaga", "NameWoDiac": "Aliaga", "Status": "RL", "outflows": 8740753.932889998 }, "geometry": { "type": "Point", "coordinates": [ 26.97203, 38.79975 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-3-----", "LOCODE": "TRDRC", "Name": "Derince", "NameWoDiac": "Derince", "Status": "QQ", "outflows": 303927.0 }, "geometry": { "type": "Point", "coordinates": [ 29.81472, 40.75694 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-3-----", "LOCODE": "TRHAY", "Name": "Haydarpasa", "NameWoDiac": "Haydarpasa", "Status": "QQ", "outflows": 220592.66669000004 }, "geometry": { "type": "Point", "coordinates": [ 29.02459, 40.99596 ] } }, +{ "type": "Feature", "properties": { "Country": "Turkey", "Function": "1-------", "LOCODE": "TRYAR", "Name": "Yarimca", "NameWoDiac": "Yarimca", "Status": "QQ", "outflows": 895813.99998000008 }, "geometry": { "type": "Point", "coordinates": [ 31.14194, 39.08361 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--45---", "LOCODE": "USANC", "Name": "Anchorage", "NameWoDiac": "Anchorage", "Status": "AI", "outflows": 61671.99999 }, "geometry": { "type": "Point", "coordinates": [ -149.90028, 61.21806 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USBPT", "Name": "Beaumont", "NameWoDiac": "Beaumont", "Status": "AI", "outflows": 34041.0 }, "geometry": { "type": "Point", "coordinates": [ -94.10185, 30.08605 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--45---", "LOCODE": "USBOS", "Name": "Boston", "NameWoDiac": "Boston", "Status": "AI", "outflows": 1565893.3335999998 }, "geometry": { "type": "Point", "coordinates": [ -71.05977, 42.35843 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "--3-----", "LOCODE": "USBCK", "Name": "Brunswick", "NameWoDiac": "Brunswick", "Status": "RL", "outflows": 48681.0 }, "geometry": { "type": "Point", "coordinates": [ -74.45182, 40.48622 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "--3-----", "LOCODE": "USCAT", "Name": "Camden", "NameWoDiac": "Camden", "Status": "RQ", "outflows": 176498.0 }, "geometry": { "type": "Point", "coordinates": [ -75.11962, 39.92595 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USCHS", "Name": "Charleston", "NameWoDiac": "Charleston", "Status": "AI", "outflows": 23192728.69687001 }, "geometry": { "type": "Point", "coordinates": [ -79.924426675273111, 32.785017342562952 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "--3-----", "LOCODE": "USCAV", "Name": "Cleveland", "NameWoDiac": "Cleveland", "Status": "RQ", "outflows": 1974.0 }, "geometry": { "type": "Point", "coordinates": [ -81.69541, 41.4995 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USCRP", "Name": "Corpus Christi", "NameWoDiac": "Corpus Christi", "Status": "AI", "outflows": 53712.0 }, "geometry": { "type": "Point", "coordinates": [ -97.39638, 27.80058 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USDUT", "Name": "Dutch Harbor", "NameWoDiac": "Dutch Harbor", "Status": "AI", "outflows": 378795.99998999998 }, "geometry": { "type": "Point", "coordinates": [ -166.5422, 53.8898 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-34----", "LOCODE": "USPAE", "Name": "Everett", "NameWoDiac": "Everett", "Status": "AI", "outflows": 152295.00003000002 }, "geometry": { "type": "Point", "coordinates": [ -122.20208, 47.97898 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "---4----", "LOCODE": "USFEP", "Name": "Freeport", "NameWoDiac": "Freeport", "Status": "AI", "outflows": 751787.11118999997 }, "geometry": { "type": "Point", "coordinates": [ -70.10311, 43.85702 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USGLS", "Name": "Galveston", "NameWoDiac": "Galveston", "Status": "AI", "outflows": 47326.5 }, "geometry": { "type": "Point", "coordinates": [ -94.7977, 29.30135 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-3-----", "LOCODE": "USGLC", "Name": "Gloucester City", "NameWoDiac": "Gloucester City", "Status": "RN", "outflows": 59686.5 }, "geometry": { "type": "Point", "coordinates": [ -70.66313, 42.61405 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "---4----", "LOCODE": "USIJX", "Name": "Jacksonville", "NameWoDiac": "Jacksonville", "Status": "AI", "outflows": 5087986.3044199999 }, "geometry": { "type": "Point", "coordinates": [ -81.65565, 30.33218 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "---4----", "LOCODE": "USADQ", "Name": "Kodiak", "NameWoDiac": "Kodiak", "Status": "AI", "outflows": 61671.99999 }, "geometry": { "type": "Point", "coordinates": [ -152.40533, 57.78852 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--45---", "LOCODE": "USLAX", "Name": "Los Angeles", "NameWoDiac": "Los Angeles", "Status": "AI", "outflows": 12755714.048839999 }, "geometry": { "type": "Point", "coordinates": [ -118.24368, 34.05223 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--45---", "LOCODE": "USMIA", "Name": "Miami", "NameWoDiac": "Miami", "Status": "AI", "outflows": 6651073.40288 }, "geometry": { "type": "Point", "coordinates": [ -80.19366, 25.77427 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USMOB", "Name": "Mobile", "NameWoDiac": "Mobile", "Status": "AI", "outflows": 3378854.4003 }, "geometry": { "type": "Point", "coordinates": [ -88.04305, 30.69436 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-3-----", "LOCODE": "USMRH", "Name": "Morehead City", "NameWoDiac": "Morehead City", "Status": "RN", "outflows": 44898.75 }, "geometry": { "type": "Point", "coordinates": [ -76.72604, 34.72294 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "12345---", "LOCODE": "USMSY", "Name": "New Orleans", "NameWoDiac": "New Orleans", "Status": "AI", "outflows": 8818359.6138159968 }, "geometry": { "type": "Point", "coordinates": [ -90.07507, 29.95465 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USPFN", "Name": "Panama City", "NameWoDiac": "Panama City", "Status": "AI", "outflows": 82722.0 }, "geometry": { "type": "Point", "coordinates": [ -85.65983, 30.15946 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USPWM", "Name": "Portland", "NameWoDiac": "Portland", "Status": "AI", "outflows": 27248.000001 }, "geometry": { "type": "Point", "coordinates": [ -122.67621, 45.52345 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USPDX", "Name": "Portland", "NameWoDiac": "Portland", "Status": "AI", "outflows": 336570.0 }, "geometry": { "type": "Point", "coordinates": [ -122.67621, 45.52345 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USSAV", "Name": "Savannah", "NameWoDiac": "Savannah", "Status": "AI", "outflows": 26558703.755599998 }, "geometry": { "type": "Point", "coordinates": [ -81.09983, 32.08354 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--45---", "LOCODE": "USSEA", "Name": "Seattle", "NameWoDiac": "Seattle", "Status": "AI", "outflows": 10283805.920580002 }, "geometry": { "type": "Point", "coordinates": [ -122.33207, 47.60621 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USTIW", "Name": "Tacoma", "NameWoDiac": "Tacoma", "Status": "AI", "outflows": 4139226.6189899999 }, "geometry": { "type": "Point", "coordinates": [ -122.44429, 47.25288 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--45---", "LOCODE": "USTPA", "Name": "Tampa", "NameWoDiac": "Tampa", "Status": "AI", "outflows": 1911998.4003 }, "geometry": { "type": "Point", "coordinates": [ -82.45843, 27.94752 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1-3-----", "LOCODE": "USVAN", "Name": "Vancouver", "NameWoDiac": "Vancouver", "Status": "RN", "outflows": 65700.0 }, "geometry": { "type": "Point", "coordinates": [ -122.66149, 45.63873 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USPBI", "Name": "West Palm Beach", "NameWoDiac": "West Palm Beach", "Status": "AI", "outflows": 222144.0 }, "geometry": { "type": "Point", "coordinates": [ -80.05337, 26.71534 ] } }, +{ "type": "Feature", "properties": { "Country": "United States", "Function": "1--4----", "LOCODE": "USILG", "Name": "Wilmington", "NameWoDiac": "Wilmington", "Status": "AI", "outflows": 290589.0 }, "geometry": { "type": "Point", "coordinates": [ -75.54659, 39.74595 ] } }, +{ "type": "Feature", "properties": { "Country": "Uruguay", "Function": "1--45---", "LOCODE": "UYMVD", "Name": "Montevideo", "NameWoDiac": "Montevideo", "Status": "AF", "outflows": 11543641.215 }, "geometry": { "type": "Point", "coordinates": [ -56.18816, -34.90328 ] } }, +{ "type": "Feature", "properties": { "Country": "Virgin Islands, U.S.", "Function": "1-------", "LOCODE": "VICHA", "Name": "Charlotte Amalie, Saint Thomas", "NameWoDiac": "Charlotte Amalie, Saint Thomas", "Status": "AI", "outflows": 307918.0 }, "geometry": { "type": "Point", "coordinates": [ -64.9307, 18.3419 ] } }, +{ "type": "Feature", "properties": { "Country": "Viet Nam", "Function": "1-------", "LOCODE": "VNHPH", "Name": "Haiphong", "NameWoDiac": "Haiphong", "Status": "AI", "outflows": 10072807.932540001 }, "geometry": { "type": "Point", "coordinates": [ 106.68345, 20.86481 ] } }, +{ "type": "Feature", "properties": { "Country": "Vanuatu", "Function": "1--45---", "LOCODE": "VUVLI", "Name": "Port Vila", "NameWoDiac": "Port Vila", "Status": "AI", "outflows": 453739.0 }, "geometry": { "type": "Point", "coordinates": [ 168.31366, -17.73648 ] } }, +{ "type": "Feature", "properties": { "Country": "Vanuatu", "Function": "1-------", "LOCODE": "VUSAN", "Name": "Santo", "NameWoDiac": "Santo", "Status": "RQ", "outflows": 206498.5 }, "geometry": { "type": "Point", "coordinates": [ 167.16235, -15.51989 ] } }, +{ "type": "Feature", "properties": { "Country": "Samoa", "Function": "1--45---", "LOCODE": "WSAPW", "Name": "Apia", "NameWoDiac": "Apia", "Status": "AI", "outflows": 339021.5 }, "geometry": { "type": "Point", "coordinates": [ -171.76666, -13.83333 ] } }, +{ "type": "Feature", "properties": { "Country": "Yemen", "Function": "1--45---", "LOCODE": "YEADE", "Name": "Aden", "NameWoDiac": "Aden", "Status": "AI", "outflows": 126082.5 }, "geometry": { "type": "Point", "coordinates": [ 45.03667, 12.77944 ] } }, +{ "type": "Feature", "properties": { "Country": "Yemen", "Function": "1--4----", "LOCODE": "YEMKX", "Name": "Mukalla", "NameWoDiac": "Mukalla", "Status": "AI", "outflows": 30745.0 }, "geometry": { "type": "Point", "coordinates": [ 49.12424, 14.54248 ] } }, +{ "type": "Feature", "properties": { "Country": "South Africa", "Function": "1234----", "LOCODE": "ZAELS", "Name": "East London", "NameWoDiac": "East London", "Status": "AF", "outflows": 15600.0 }, "geometry": { "type": "Point", "coordinates": [ 27.91162, -33.01529 ] } }, +{ "type": "Feature", "properties": { "Country": "South Africa", "Function": "1--45---", "LOCODE": "ZAPLZ", "Name": "Port Elizabeth", "NameWoDiac": "Port Elizabeth", "Status": "AF", "outflows": 2557154.4621100002 }, "geometry": { "type": "Point", "coordinates": [ 25.61494, -33.96109 ] } }, +{ "type": "Feature", "properties": { "Country": "South Africa", "Function": "1--4----", "LOCODE": "ZARCB", "Name": "Richards Bay", "NameWoDiac": "Richards Bay", "Status": "AF", "outflows": 164538.86664000002 }, "geometry": { "type": "Point", "coordinates": [ 32.03768, -28.78301 ] } } +] +} diff --git a/scripts/build_shipping_demand.py b/scripts/build_shipping_demand.py new file mode 100644 index 00000000..18335c9f --- /dev/null +++ b/scripts/build_shipping_demand.py @@ -0,0 +1,48 @@ +"""Build regional demand for international navigation based on outflow volume of ports.""" + +import pandas as pd +import geopandas as gpd +import json + +if __name__ == '__main__': + if 'snakemake' not in globals(): + from helper import mock_snakemake + snakemake = mock_snakemake( + 'build_shipping_demand_per_node', + simpl='', + clusters=48, + ) + + scope = gpd.read_file(snakemake.input.scope).geometry[0] + regions = gpd.read_file(snakemake.input.regions).set_index('name') + demand = pd.read_csv(snakemake.input.demand, index_col=0)["total international navigation"] + + # read port data into GeoDataFrame + with open(snakemake.input.ports, 'r', encoding='latin_1') as f: + ports = json.load(f) + ports = pd.json_normalize(ports, "features", sep="_") + coordinates = ports.geometry_coordinates + geometry = gpd.points_from_xy(coordinates.str[0], coordinates.str[1]) + ports = gpd.GeoDataFrame(ports, geometry=geometry, crs=4326) + + # filter global port data by European ports + european_ports = ports[ports.within(scope)] + + # assign ports to nearest region + p = european_ports.to_crs(3857) + r = regions.to_crs(3857) + outflows = p.sjoin_nearest(r).groupby("index_right").properties_outflows.sum().div(1e3) + + # calculate fraction of each country's port outflows + countries = outflows.index.str[:2] + outflows_per_country = outflows.groupby(countries).sum() + fraction = outflows / countries.map(outflows_per_country) + + # distribute per-country demands to nodes based on these fractions + nodal_demand = demand.loc[countries].fillna(0.) + nodal_demand.index = fraction.index + nodal_demand = nodal_demand.multiply(fraction, axis=0) + nodal_demand = nodal_demand.reindex(regions.index, fill_value=0) + + # export nodal international navigation demands + nodal_demand.to_csv(snakemake.output[0]) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 244f615b..2d8189f2 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2154,24 +2154,29 @@ def add_industry(n, costs): else: shipping_bus = nodes + " H2" - all_navigation = ["total international navigation", "total domestic navigation"] - efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"] - shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year) - p_set = shipping_hydrogen_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 * efficiency / 8760 + domestic_navigation = pop_weighted_energy_totals.loc[nodes, "total domestic navigation"] + international_navigation = pd.read_csv(snakemake.input.shipping_demand, index_col=0) + all_navigation = domestic_navigation + international_navigation - n.madd("Load", - nodes, - suffix=" H2 for shipping", - bus=shipping_bus, - carrier="H2 for shipping", - p_set=p_set - ) + if shipping_hydrogen_share > 0: + + efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"] + shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year) + p_set = shipping_hydrogen_share * all_navigation * 1e6 * efficiency / 8760 + + n.madd("Load", + nodes, + suffix=" H2 for shipping", + bus=shipping_bus, + carrier="H2 for shipping", + p_set=p_set + ) if shipping_hydrogen_share < 1: shipping_oil_share = 1 - shipping_hydrogen_share - p_set = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760. + p_set = shipping_oil_share * all_navigation * 1e6 / 8760. n.madd("Load", nodes, @@ -2181,7 +2186,7 @@ def add_industry(n, costs): p_set=p_set ) - co2 = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum().sum() * 1e6 / 8760 * costs.at["oil", "CO2 intensity"] + co2 = shipping_oil_share * all_navigation.sum() * 1e6 / 8760 * costs.at["oil", "CO2 intensity"] n.add("Load", "shipping oil emissions", From 16a92477f0ffd6b31bba7d6bf1cd96e045ccfef3 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sun, 13 Nov 2022 18:25:32 +0100 Subject: [PATCH 12/56] methanol in shipping --- config.default.yaml | 4 ++++ scripts/prepare_sector_network.py | 37 ++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/config.default.yaml b/config.default.yaml index 4cf7f5fa..1cd4c271 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -193,6 +193,10 @@ sector: agriculture_machinery_electric_share: 0 agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use agriculture_machinery_electric_efficiency: 0.3 # electricity per use + shipping_methanol: true + MWh_MeOH_per_MWh_H2: 0.8787 # https://github.com/euronion/trace/blob/main/data/efficiencies.csv + MWh_MeOH_per_tCO2: 4.0321 # https://github.com/euronion/trace/blob/main/data/efficiencies.csv + MWh_MeOH_per_MWh_e: 3.6907 # https://github.com/euronion/trace/blob/main/data/efficiencies.csv shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands shipping_hydrogen_share: # 1 means all hydrogen FC diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 244f615b..3a2a7de9 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -106,6 +106,16 @@ def define_spatial(nodes, options): spatial.ammonia.df = pd.DataFrame(vars(spatial.ammonia), index=nodes) + # hydrogen + spatial.h2 = SimpleNamespace() + spatial.h2.nodes = nodes + " H2" + spatial.h2.locations = nodes + + # methanol + spatial.methanol = SimpleNamespace() + spatial.methanol.nodes = ["EU methanol"] + spatial.methanol.locations = ["EU"] + # oil spatial.oil = SimpleNamespace() spatial.oil.nodes = ["EU oil"] @@ -2154,6 +2164,31 @@ def add_industry(n, costs): else: shipping_bus = nodes + " H2" + if options.get("shipping_methanol"): + + n.madd("Bus", + spatial.methanol.nodes, + carrier="methanol", + location=spatial.methanol.locations, + unit="MWh_LHV" + ) + + # methanolisation + n.madd( + spatial.h2.locations + "methanolisation", + bus0=spatial.h2.nodes, + bus1=spatial.methanol.nodes, + bus2=nodes, + bus3=spatial.co2.nodes, + carrier="methanolisation", + p_nom_extendable=True, + capital_cost=costs.at["methanolisation", 'fixed'] * 0.8787, # EUR/MW_H2/a + lifetime=costs.at["methanolisation", 'lifetime'], + efficiency=options["MWh_MeOH_per_MWh_H2"], + efficiency2=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_tCO2"], + efficiency3=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_MWh_e"], + ) + all_navigation = ["total international navigation", "total domestic navigation"] efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"] shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year) @@ -2245,7 +2280,7 @@ def add_industry(n, costs): bus2=spatial.co2.nodes, carrier="Fischer-Tropsch", efficiency=costs.at["Fischer-Tropsch", 'efficiency'], - capital_cost=costs.at["Fischer-Tropsch", 'fixed'], + capital_cost=costs.at["Fischer-Tropsch", 'fixed'] * costs.at["Fischer-Tropsch", 'efficiency'], # EUR/MW_H2/a efficiency2=-costs.at["oil", 'CO2 intensity'] * costs.at["Fischer-Tropsch", 'efficiency'], p_nom_extendable=True, lifetime=costs.at['Fischer-Tropsch', 'lifetime'] From c44f1d61c7c6d7e7bb4a75b177b3ad09c35399b1 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sun, 27 Nov 2022 18:28:57 +0100 Subject: [PATCH 13/56] remove hard-coded methanol efficiency --- scripts/prepare_sector_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 3a2a7de9..7787d007 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2182,7 +2182,7 @@ def add_industry(n, costs): bus3=spatial.co2.nodes, carrier="methanolisation", p_nom_extendable=True, - capital_cost=costs.at["methanolisation", 'fixed'] * 0.8787, # EUR/MW_H2/a + capital_cost=costs.at["methanolisation", 'fixed'] * options["MWh_MeOH_per_MWh_H2"], # EUR/MW_H2/a lifetime=costs.at["methanolisation", 'lifetime'], efficiency=options["MWh_MeOH_per_MWh_H2"], efficiency2=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_tCO2"], From 7208d9603964ef83b5f661c8d4117a796392d863 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Thu, 1 Dec 2022 17:18:48 +0100 Subject: [PATCH 14/56] Update config.default.yaml Co-authored-by: euronion <42553970+euronion@users.noreply.github.com> --- config.default.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 1cd4c271..e56a4dd6 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -194,9 +194,9 @@ sector: agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use agriculture_machinery_electric_efficiency: 0.3 # electricity per use shipping_methanol: true - MWh_MeOH_per_MWh_H2: 0.8787 # https://github.com/euronion/trace/blob/main/data/efficiencies.csv - MWh_MeOH_per_tCO2: 4.0321 # https://github.com/euronion/trace/blob/main/data/efficiencies.csv - MWh_MeOH_per_MWh_e: 3.6907 # https://github.com/euronion/trace/blob/main/data/efficiencies.csv + MWh_MeOH_per_MWh_H2: 0.8787 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. + MWh_MeOH_per_tCO2: 4.0321 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. + MWh_MeOH_per_MWh_e: 3.6907 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands shipping_hydrogen_share: # 1 means all hydrogen FC From 2eefba3b9520532eca4fa3d6e3039cf3867e090b Mon Sep 17 00:00:00 2001 From: Adam-Dvorak1 <92300992+Adam-Dvorak1@users.noreply.github.com> Date: Fri, 2 Dec 2022 15:58:57 +0100 Subject: [PATCH 15/56] Start refining Fixing typos --- doc/supply_demand.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/supply_demand.rst b/doc/supply_demand.rst index 71d79cf5..ca7db739 100644 --- a/doc/supply_demand.rst +++ b/doc/supply_demand.rst @@ -427,7 +427,7 @@ We assume that the primary route can be replaced by a third route in 2050, using FeO + H_2 \xrightarrow{} Fe + H_2O -This circumvents the process emissions associated with the use of coke. For hydrogen- based DRI, we assume energy requirements of 1.7 MWh :math:`_{H_2}` /t steel (Vogl et. al) `_ and 0.322 MWh :math:`_{el}`/t steel `(HYBRIT 2016) `_. +This circumvents the process emissions associated with the use of coke. For hydrogen- based DRI, we assume energy requirements of 1.7 MWh :math:`_{H_2}` /t steel `(Vogl et. al) `_ and 0.322 MWh :math:`_{el}`/t steel `(HYBRIT 2016) `_. The share of steel produced via the primary route is exogenously set in the `config file `_. The share of steel obtained via hydrogen-based DRI plus EAF is also set exogenously in the `config file `_. The remaining share is manufactured through the secondary route using scrap metal in EAF. Bioenergy as alternative to coke in blast furnaces is not considered in the model (`Mandova et.al `_, `Suopajärvi et.al `_). @@ -453,7 +453,7 @@ Statistics for the production of ammonia, which is commonly used as a fertilizer The Haber-Bosch process is not explicitly represented in the model, such that demand for ammonia enters the model as a demand for hydrogen ( 6.5 MWh :math:`_{H_2}` / t :math:`_{NH_3}` ) and electricity ( 1.17 MWh :math:`_{el}` /t :math:`_{NH_3}` ) (see `Wang et. al `_). Today, natural gas dominates in Europe as the source for the hydrogen used in the Haber-Bosch process, but the model can choose among the various hydrogen supply options described in the hydrogen section (see :ref:`Hydrogen supply`) -The total production and specific energy consumption of chlorine and methanol is taken from a `DECHEMA report `_. According to this source, the production of chlorine amounts to 9.58 MtCl/a, which is assumed to require electricity at 3.6 MWh `:math:`_{el}`/t of chlorine and yield hydrogen at 0.937 MWh :math:`_{H_2}`/t of chlorine in the chloralkali process. The production of methanol adds up to 1.5 MtMeOH/a, requiring electricity at 0.167 MWh :math:`_{el}`/t of methanol and methane at 10.25 MWh :math:`_{CH_4}`/t of methanol. +The total production and specific energy consumption of chlorine and methanol is taken from a `DECHEMA report `_. According to this source, the production of chlorine amounts to 9.58 MtCl/a, which is assumed to require electricity at 3.6 MWh :math:`_{el}`/t of chlorine and yield hydrogen at 0.937 MWh :math:`_{H_2}`/t of chlorine in the chloralkali process. The production of methanol adds up to 1.5 MtMeOH/a, requiring electricity at 0.167 MWh :math:`_{el}`/t of methanol and methane at 10.25 MWh :math:`_{CH_4}`/t of methanol. The production of ammonia, methanol, and chlorine production is deducted from the JRC IDEES basic chemicals, leaving the production totals of high-value chemicals. For this, we assume that the liquid hydrocarbon feedstock comes from synthetic or fossil- origin naphtha (14 MWh :math:`_{naphtha}`/t of HVC, similar to `Lechtenböhmer et al `_), ignoring the methanol-to-olefin route. Furthermore, we assume the following transformations of the energy-consuming processes in the production of plastics: the final energy consumption in steam processing is converted to methane since requires temperature above 500 °C (4.1 MWh :math:`_{CH_4}` /t of HVC, see `Rehfeldt et al. `_); and the remaining processes are electrified using the current efficiency of microwave for high-enthalpy heat processing, electric furnaces, electric process cooling and electric generic processes (2.85 MWh :math:`_{el}`/t of HVC). @@ -461,7 +461,7 @@ The production of ammonia, methanol, and chlorine production is deducted from th The process emissions from feedstock in the chemical industry are as high as 0.369 t :math:`_{CO_2}`/t of ethylene equivalent. We consider process emissions for all the material output, which is a conservative approach since it assumes that all plastic-embedded :math:`CO_2` will eventually be released into the atmosphere. However, plastic disposal in landfilling will avoid, or at least delay, associated :math:`CO_2` emissions. Circular economy practices drastically reduce the amount of primary feedstock needed for the production of plastics in the model (see `Kullmann et al. `_, `Meys et al. (2021) `_, `Meys et al. (2020) `_, `Gu et al. `_) and consequently, also the energy demands and level of process emission. The percentage of plastics that are assumed to be mechanically recycled can be selected in the `config file `_, as well as -the percentage that is chemically recycled, see `config file `_ The energy consumption for those recycling processes are respectively 0.547 MWh :math:`_{el}`/t of HVC (as indicated in the `config file `_) (`Meys et al. (2020) `_), and 6.9 MWh :math:`_{el}`/t of HVC (as indicated in the config file ``_) based on pyrolysis and electric steam cracking (see `Materials Economics `_ report). +the percentage that is chemically recycled, see `config file `_ The energy consumption for those recycling processes are respectively 0.547 MWh :math:`_{el}`/t of HVC (as indicated in the `config file `_) (`Meys et al. (2020) `_), and 6.9 MWh :math:`_{el}`/t of HVC (as indicated in the `config file `_) based on pyrolysis and electric steam cracking (see `Materials Economics `_ report). **Non-metallic Mineral Products** @@ -486,7 +486,7 @@ With the exception of electricity demand and biomass demand for low-temperature *Ceramics* -The ceramics sector is assumed to be fully electrified based on the current efficiency of already electrified processes which include microwave drying and sintering of raw materials, electric kilns for primary production processes, electric furnaces for the `product finishing `_. In total, the final electricity consumption is 0.44 MWh/t of ceramic. The manufacturing of ceramics includes process emissions of 0.03 t :math:`_{CO_2} `/t of ceramic. For a detailed overview of the ceramics industry sector see `Furszyfer Del Rio et al `_. +The ceramics sector is assumed to be fully electrified based on the current efficiency of already electrified processes which include microwave drying and sintering of raw materials, electric kilns for primary production processes, electric furnaces for the `product finishing `_. In total, the final electricity consumption is 0.44 MWh/t of ceramic. The manufacturing of ceramics includes process emissions of 0.03 t :math:`_{CO_2}`/t of ceramic. For a detailed overview of the ceramics industry sector see `Furszyfer Del Rio et al `_. *Glass* From bf0b52b8ae0b4304a5556898528629e860543b95 Mon Sep 17 00:00:00 2001 From: Adam-Dvorak1 <92300992+Adam-Dvorak1@users.noreply.github.com> Date: Fri, 2 Dec 2022 16:15:28 +0100 Subject: [PATCH 16/56] More refining --- doc/supply_demand.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/supply_demand.rst b/doc/supply_demand.rst index ca7db739..ce9f21dc 100644 --- a/doc/supply_demand.rst +++ b/doc/supply_demand.rst @@ -490,7 +490,7 @@ The ceramics sector is assumed to be fully electrified based on the current effi *Glass* -The production of glass is assumed to be fully electrified based on the current efficiency of electric melting tanks and electric annealing which adds up to an electricity demand of 2.07 MWh :math:`_{el}l/t` of `glass `_. The manufacturing of glass incurs process emissions of 0.1 t :math:`_{CO_2} `/t of glass. Potential efficiency improvements, which according to `Lechtenböhmer et al `_ could reduce energy demands to 0.85 MW :math:`_{el}`/t of glass, have not been considered. For a detailed overview of the glass industry sector see `Furszyfer Del Rio et al `_. +The production of glass is assumed to be fully electrified based on the current efficiency of electric melting tanks and electric annealing which adds up to an electricity demand of 2.07 MWh :math:`_{el}`/t of `glass `_. The manufacturing of glass incurs process emissions of 0.1 t :math:`_{CO_2}`/t of glass. Potential efficiency improvements, which according to `Lechtenböhmer et al `_ could reduce energy demands to 0.85 MW :math:`_{el}`/t of glass, have not been considered. For a detailed overview of the glass industry sector see `Furszyfer Del Rio et al `_. **Non-ferrous Metals** From 0c62bfc9ee1cb737f983fed54e842dd5fe7f4fd0 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sat, 3 Dec 2022 12:22:05 +0100 Subject: [PATCH 17/56] complete methanol for shipping --- config.default.yaml | 15 +-- scripts/prepare_sector_network.py | 169 +++++++++++++++++------------- 2 files changed, 104 insertions(+), 80 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index e56a4dd6..ce078fb5 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -193,20 +193,15 @@ sector: agriculture_machinery_electric_share: 0 agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use agriculture_machinery_electric_efficiency: 0.3 # electricity per use - shipping_methanol: true MWh_MeOH_per_MWh_H2: 0.8787 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. MWh_MeOH_per_tCO2: 4.0321 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. MWh_MeOH_per_MWh_e: 3.6907 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. - shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011 shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands - shipping_hydrogen_share: # 1 means all hydrogen FC - 2020: 0 - 2025: 0 - 2030: 0.05 - 2035: 0.15 - 2040: 0.3 - 2045: 0.6 - 2050: 1 + shipping_hydrogen_share: 0 + shippint_methanol_share: 1 + shipping_oil_share: 0 + shipping_methanol_efficiency: 0.46 # 10-15% higher https://www.iea-amf.org/app/webroot/files/file/Annex%20Reports/AMF_Annex_56.pdf, https://users.ugent.be/~lsileghe/documents/extended_abstract.pdf + shipping_oil_efficiency: 0.40 #For conversion of fuel oil to propulsion in 2011 time_dep_hp_cop: true #time dependent heat pump coefficient of performance heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py # conservatively high to cover hot water and space heating in poorly-insulated buildings diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 7787d007..39904a20 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2139,32 +2139,56 @@ def add_industry(n, costs): p_set=industrial_demand.loc[nodes, "hydrogen"] / 8760 ) - if options["shipping_hydrogen_liquefaction"]: + shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year) + shipping_methanol_share = get(options['shipping_methanol_share'], investment_year) + shipping_oil_share = get(options['shipping_oil_share'], investment_year) - n.madd("Bus", + total_share = shipping_hydrogen_share + shipping_methanol_share + shipping_oil_share + if total_share != 1: + logger.warning(f"Total shipping shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.") + + all_navigation = ["total international navigation", "total domestic navigation"] + p_set = pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760 + + if shipping_hydrogen_share: + + if options["shipping_hydrogen_liquefaction"]: + + n.madd("Bus", + nodes, + suffix=" H2 liquid", + carrier="H2 liquid", + location=nodes, + unit="MWh_LHV" + ) + + n.madd("Link", + nodes + " H2 liquefaction", + bus0=nodes + " H2", + bus1=nodes + " H2 liquid", + carrier="H2 liquefaction", + efficiency=costs.at["H2 liquefaction", 'efficiency'], + capital_cost=costs.at["H2 liquefaction", 'fixed'], + p_nom_extendable=True, + lifetime=costs.at['H2 liquefaction', 'lifetime'] + ) + + shipping_bus = nodes + " H2 liquid" + else: + shipping_bus = nodes + " H2" + + efficiency = options['shipping_oil_efficiency'] / costs.at["fuel cell", "efficiency"] + p_set_hydrogen = shipping_hydrogen_share * p_set * efficiency + + n.madd("Load", nodes, - suffix=" H2 liquid", - carrier="H2 liquid", - location=nodes, - unit="MWh_LHV" + suffix=" H2 for shipping", + bus=shipping_bus, + carrier="H2 for shipping", + p_set=p_set_hydrogen ) - n.madd("Link", - nodes + " H2 liquefaction", - bus0=nodes + " H2", - bus1=nodes + " H2 liquid", - carrier="H2 liquefaction", - efficiency=costs.at["H2 liquefaction", 'efficiency'], - capital_cost=costs.at["H2 liquefaction", 'fixed'], - p_nom_extendable=True, - lifetime=costs.at['H2 liquefaction', 'lifetime'] - ) - - shipping_bus = nodes + " H2 liquid" - else: - shipping_bus = nodes + " H2" - - if options.get("shipping_methanol"): + if shipping_methanol_share: n.madd("Bus", spatial.methanol.nodes, @@ -2173,7 +2197,6 @@ def add_industry(n, costs): unit="MWh_LHV" ) - # methanolisation n.madd( spatial.h2.locations + "methanolisation", bus0=spatial.h2.nodes, @@ -2185,38 +2208,44 @@ def add_industry(n, costs): capital_cost=costs.at["methanolisation", 'fixed'] * options["MWh_MeOH_per_MWh_H2"], # EUR/MW_H2/a lifetime=costs.at["methanolisation", 'lifetime'], efficiency=options["MWh_MeOH_per_MWh_H2"], - efficiency2=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_tCO2"], - efficiency3=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_MWh_e"], + efficiency2=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_MWh_e"], + efficiency3=- options["MWh_MeOH_per_MWh_H2"] / options["MWh_MeOH_per_tCO2"], ) - all_navigation = ["total international navigation", "total domestic navigation"] - efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"] - shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year) - p_set = shipping_hydrogen_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 * efficiency / 8760 - - n.madd("Load", - nodes, - suffix=" H2 for shipping", - bus=shipping_bus, - carrier="H2 for shipping", - p_set=p_set - ) - - if shipping_hydrogen_share < 1: - - shipping_oil_share = 1 - shipping_hydrogen_share - - p_set = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum(axis=1) * 1e6 / 8760. + efficiency = options["shipping_oil_efficiency"] / options["shipping_methanol_efficiency"] + p_set_methanol = shipping_methanol_share * p_set.sum() * efficiency n.madd("Load", - nodes, + spatial.methanol.nodes, + suffix=" shipping methanol", + bus=spatial.methanol.nodes, + carrier="shipping methanol", + p_set=p_set_methanol, + ) + + # CO2 intensity methanol based on stoichiometric calculation with 22.7 GJ/t methanol (32 g/mol), CO2 (44 g/mol), 277.78 MWh/TJ = 0.218 t/MWh + co2 = p_set_methanol / options["MWh_MeOH_per_tCO2"] + + n.add("Load" + "shipping methanol emissions", + bus="co2 atmosphere", + carrier="shipping methanol emissions", + p_set=-co2, + ) + + if shipping_oil_share: + + p_set_oil = shipping_oil_share * p_set.sum() + + n.madd("Load", + spatial.oil.nodes, suffix=" shipping oil", bus=spatial.oil.nodes, carrier="shipping oil", - p_set=p_set + p_set=p_set_oil ) - co2 = shipping_oil_share * pop_weighted_energy_totals.loc[nodes, all_navigation].sum().sum() * 1e6 / 8760 * costs.at["oil", "CO2 intensity"] + co2 = p_set_oil * costs.at["oil", "CO2 intensity"] n.add("Load", "shipping oil emissions", @@ -2225,34 +2254,34 @@ def add_industry(n, costs): p_set=-co2 ) - if "oil" not in n.buses.carrier.unique(): - n.madd("Bus", - spatial.oil.nodes, - location=spatial.oil.locations, - carrier="oil", - unit="MWh_LHV" - ) + if "oil" not in n.buses.carrier.unique(): + n.madd("Bus", + spatial.oil.nodes, + location=spatial.oil.locations, + carrier="oil", + unit="MWh_LHV" + ) - if "oil" not in n.stores.carrier.unique(): + if "oil" not in n.stores.carrier.unique(): - #could correct to e.g. 0.001 EUR/kWh * annuity and O&M - n.madd("Store", - [oil_bus + " Store" for oil_bus in spatial.oil.nodes], - bus=spatial.oil.nodes, - e_nom_extendable=True, - e_cyclic=True, - carrier="oil", - ) + #could correct to e.g. 0.001 EUR/kWh * annuity and O&M + n.madd("Store", + [oil_bus + " Store" for oil_bus in spatial.oil.nodes], + bus=spatial.oil.nodes, + e_nom_extendable=True, + e_cyclic=True, + carrier="oil", + ) - if "oil" not in n.generators.carrier.unique(): + if "oil" not in n.generators.carrier.unique(): - n.madd("Generator", - spatial.oil.nodes, - bus=spatial.oil.nodes, - p_nom_extendable=True, - carrier="oil", - marginal_cost=costs.at["oil", 'fuel'] - ) + n.madd("Generator", + spatial.oil.nodes, + bus=spatial.oil.nodes, + p_nom_extendable=True, + carrier="oil", + marginal_cost=costs.at["oil", 'fuel'] + ) if options["oil_boilers"]: From 985cd8bae118d9dd94da19749f5c283f2afacdce Mon Sep 17 00:00:00 2001 From: Adam-Dvorak1 <92300992+Adam-Dvorak1@users.noreply.github.com> Date: Fri, 9 Dec 2022 10:37:41 +0100 Subject: [PATCH 18/56] Refine math in myopic.rst --- doc/myopic.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/myopic.rst b/doc/myopic.rst index af67fac7..bd51331d 100644 --- a/doc/myopic.rst +++ b/doc/myopic.rst @@ -81,12 +81,12 @@ Conventional carriers indicate carriers used in the existing conventional techno Options ============= The total carbon budget for the entire transition path can be indicated in the `sector_opts `_ in ``config.yaml``. The carbon budget can be split among the ``planning_horizons`` following an exponential or beta decay. -E.g. ``'cb40ex0'`` splits a carbon budget equal to 40 GtCO_2 following an exponential decay whose initial linear growth rate $r$ is zero. +E.g. ``'cb40ex0'`` splits a carbon budget equal to 40 Gt :math:`_{CO_2}` following an exponential decay whose initial linear growth rate r is zero. They can also follow some user-specified path, if defined `here `_. The paper `Speed of technological transformations required in Europe to achieve different climate goals (2022) `__ defines CO_2 budgets corresponding to global temperature increases (1.5C – 2C) as response to the emissions. Here, global carbon budgets are converted to European budgets assuming equal-per capita distribution which translates into a 6.43% share for Europe. The carbon budgets are in this paper distributed throughout the transition paths assuming an exponential decay. Emissions e(t) in every year t are limited by .. math:: - e(t) = e_0 (1+ (r+m)t) e^(-mt) + e(t) = e_0 (1+ (r+m)t) e^{-mt} where r is the initial linear growth rate, which here is assumed to be r=0, and the decay parameter m is determined by imposing the integral of the path to be equal to the budget for Europe. Following this approach, the CO_2 budget is defined. Following the same approach as in this paper, add the following to the ``scenario.sector_opts`` E.g. ``-cb25.7ex0`` (1.5C increase) From 3999afdb5a71d69f98563fbebf67d94625c07f93 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 12:19:20 +0100 Subject: [PATCH 19/56] fixes to methanol implementation --- config.default.yaml | 2 +- scripts/prepare_sector_network.py | 52 +++++++++++++++---------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index ce078fb5..58be20ff 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -198,7 +198,7 @@ sector: MWh_MeOH_per_MWh_e: 3.6907 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands shipping_hydrogen_share: 0 - shippint_methanol_share: 1 + shipping_methanol_share: 1 shipping_oil_share: 0 shipping_methanol_efficiency: 0.46 # 10-15% higher https://www.iea-amf.org/app/webroot/files/file/Annex%20Reports/AMF_Annex_56.pdf, https://users.ugent.be/~lsileghe/documents/extended_abstract.pdf shipping_oil_efficiency: 0.40 #For conversion of fuel oil to propulsion in 2011 diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 40578a1b..f16c26db 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2202,7 +2202,7 @@ def add_industry(n, costs): unit="MWh_LHV" ) - n.madd( + n.madd("Link", spatial.h2.locations + "methanolisation", bus0=spatial.h2.nodes, bus1=spatial.methanol.nodes, @@ -2231,7 +2231,7 @@ def add_industry(n, costs): # CO2 intensity methanol based on stoichiometric calculation with 22.7 GJ/t methanol (32 g/mol), CO2 (44 g/mol), 277.78 MWh/TJ = 0.218 t/MWh co2 = p_set_methanol / options["MWh_MeOH_per_tCO2"] - n.add("Load" + n.add("Load", "shipping methanol emissions", bus="co2 atmosphere", carrier="shipping methanol emissions", @@ -2259,34 +2259,34 @@ def add_industry(n, costs): p_set=-co2 ) - if "oil" not in n.buses.carrier.unique(): - n.madd("Bus", - spatial.oil.nodes, - location=spatial.oil.locations, - carrier="oil", - unit="MWh_LHV" - ) + if "oil" not in n.buses.carrier.unique(): + n.madd("Bus", + spatial.oil.nodes, + location=spatial.oil.locations, + carrier="oil", + unit="MWh_LHV" + ) - if "oil" not in n.stores.carrier.unique(): + if "oil" not in n.stores.carrier.unique(): - #could correct to e.g. 0.001 EUR/kWh * annuity and O&M - n.madd("Store", - [oil_bus + " Store" for oil_bus in spatial.oil.nodes], - bus=spatial.oil.nodes, - e_nom_extendable=True, - e_cyclic=True, - carrier="oil", - ) + #could correct to e.g. 0.001 EUR/kWh * annuity and O&M + n.madd("Store", + [oil_bus + " Store" for oil_bus in spatial.oil.nodes], + bus=spatial.oil.nodes, + e_nom_extendable=True, + e_cyclic=True, + carrier="oil", + ) - if "oil" not in n.generators.carrier.unique(): + if "oil" not in n.generators.carrier.unique(): - n.madd("Generator", - spatial.oil.nodes, - bus=spatial.oil.nodes, - p_nom_extendable=True, - carrier="oil", - marginal_cost=costs.at["oil", 'fuel'] - ) + n.madd("Generator", + spatial.oil.nodes, + bus=spatial.oil.nodes, + p_nom_extendable=True, + carrier="oil", + marginal_cost=costs.at["oil", 'fuel'] + ) if options["oil_boilers"]: From 097d054f0604b62764f01e605153d48824e4cbbc Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 12:20:34 +0100 Subject: [PATCH 20/56] build_temperatur_profiles: parallelize --- Snakefile | 15 ++++-------- scripts/build_temperature_profiles.py | 35 ++++++++++++++++----------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Snakefile b/Snakefile index 61bf072b..2f338813 100644 --- a/Snakefile +++ b/Snakefile @@ -177,19 +177,14 @@ rule build_heat_demands: rule build_temperature_profiles: input: - pop_layout_total="resources/pop_layout_total.nc", - pop_layout_urban="resources/pop_layout_urban.nc", - pop_layout_rural="resources/pop_layout_rural.nc", + pop_layout="resources/pop_layout_{scope}.nc", regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson") output: - temp_soil_total="resources/temp_soil_total_elec_s{simpl}_{clusters}.nc", - temp_soil_rural="resources/temp_soil_rural_elec_s{simpl}_{clusters}.nc", - temp_soil_urban="resources/temp_soil_urban_elec_s{simpl}_{clusters}.nc", - temp_air_total="resources/temp_air_total_elec_s{simpl}_{clusters}.nc", - temp_air_rural="resources/temp_air_rural_elec_s{simpl}_{clusters}.nc", - temp_air_urban="resources/temp_air_urban_elec_s{simpl}_{clusters}.nc" + temp_soil="resources/temp_soil_{scope}_elec_s{simpl}_{clusters}.nc", + temp_air="resources/temp_air_{scope}_elec_s{simpl}_{clusters}.nc", resources: mem_mb=20000 - benchmark: "benchmarks/build_temperature_profiles/s{simpl}_{clusters}" + threads: 8 + benchmark: "benchmarks/build_temperature_profiles/{scope}_s{simpl}_{clusters}" script: "scripts/build_temperature_profiles.py" diff --git a/scripts/build_temperature_profiles.py b/scripts/build_temperature_profiles.py index ebb9e843..a056fca0 100644 --- a/scripts/build_temperature_profiles.py +++ b/scripts/build_temperature_profiles.py @@ -5,6 +5,7 @@ import atlite import pandas as pd import xarray as xr import numpy as np +from dask.distributed import Client, LocalCluster if __name__ == '__main__': if 'snakemake' not in globals(): @@ -15,6 +16,10 @@ if __name__ == '__main__': clusters=48, ) + nprocesses = int(snakemake.threads) + cluster = LocalCluster(n_workers=nprocesses, threads_per_worker=1) + client = Client(cluster, asynchronous=True) + time = pd.date_range(freq='h', **snakemake.config['snapshots']) cutout_config = snakemake.config['atlite']['cutout'] cutout = atlite.Cutout(cutout_config).sel(time=time) @@ -24,23 +29,25 @@ if __name__ == '__main__': I = cutout.indicatormatrix(clustered_regions) - for area in ["total", "rural", "urban"]: + pop_layout = xr.open_dataarray(snakemake.input.pop_layout) - pop_layout = xr.open_dataarray(snakemake.input[f'pop_layout_{area}']) + stacked_pop = pop_layout.stack(spatial=('y', 'x')) + M = I.T.dot(np.diag(I.dot(stacked_pop))) - stacked_pop = pop_layout.stack(spatial=('y', 'x')) - M = I.T.dot(np.diag(I.dot(stacked_pop))) + nonzero_sum = M.sum(axis=0, keepdims=True) + nonzero_sum[nonzero_sum == 0.] = 1. + M_tilde = M / nonzero_sum - nonzero_sum = M.sum(axis=0, keepdims=True) - nonzero_sum[nonzero_sum == 0.] = 1. - M_tilde = M / nonzero_sum + temp_air = cutout.temperature( + matrix=M_tilde.T, index=clustered_regions.index, + dask_kwargs=dict(scheduler=client), + show_progress=False) - temp_air = cutout.temperature( - matrix=M_tilde.T, index=clustered_regions.index) + temp_air.to_netcdf(snakemake.output.temp_air) - temp_air.to_netcdf(snakemake.output[f"temp_air_{area}"]) + temp_soil = cutout.soil_temperature( + matrix=M_tilde.T, index=clustered_regions.index, + dask_kwargs=dict(scheduler=client), + show_progress=False) - temp_soil = cutout.soil_temperature( - matrix=M_tilde.T, index=clustered_regions.index) - - temp_soil.to_netcdf(snakemake.output[f"temp_soil_{area}"]) + temp_soil.to_netcdf(snakemake.output.temp_soil) From 494d3010ebb8cb0095cc9d1cf029e9283c3a1a86 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 12:21:00 +0100 Subject: [PATCH 21/56] build_heat_demand: parallelize --- Snakefile | 11 ++++------- scripts/build_heat_demand.py | 28 ++++++++++++---------------- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/Snakefile b/Snakefile index 2f338813..7ce29b4f 100644 --- a/Snakefile +++ b/Snakefile @@ -162,16 +162,13 @@ else: rule build_heat_demands: input: - pop_layout_total="resources/pop_layout_total.nc", - pop_layout_urban="resources/pop_layout_urban.nc", - pop_layout_rural="resources/pop_layout_rural.nc", + pop_layout="resources/pop_layout_{scope}.nc", regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson") output: - heat_demand_urban="resources/heat_demand_urban_elec_s{simpl}_{clusters}.nc", - heat_demand_rural="resources/heat_demand_rural_elec_s{simpl}_{clusters}.nc", - heat_demand_total="resources/heat_demand_total_elec_s{simpl}_{clusters}.nc" + heat_demand="resources/heat_demand_{scope}_elec_s{simpl}_{clusters}.nc" resources: mem_mb=20000 - benchmark: "benchmarks/build_heat_demands/s{simpl}_{clusters}" + threads: 8 + benchmark: "benchmarks/build_heat_demands/{scope}_s{simpl}_{clusters}" script: "scripts/build_heat_demand.py" diff --git a/scripts/build_heat_demand.py b/scripts/build_heat_demand.py index ed8a10b9..1c49f80d 100644 --- a/scripts/build_heat_demand.py +++ b/scripts/build_heat_demand.py @@ -5,6 +5,7 @@ import atlite import pandas as pd import xarray as xr import numpy as np +from dask.distributed import Client, LocalCluster if __name__ == '__main__': if 'snakemake' not in globals(): @@ -15,14 +16,9 @@ if __name__ == '__main__': clusters=48, ) - if 'snakemake' not in globals(): - from vresutils import Dict - import yaml - snakemake = Dict() - with open('config.yaml') as f: - snakemake.config = yaml.safe_load(f) - snakemake.input = Dict() - snakemake.output = Dict() + nprocesses = int(snakemake.threads) + cluster = LocalCluster(n_workers=nprocesses, threads_per_worker=1) + client = Client(cluster, asynchronous=True) time = pd.date_range(freq='h', **snakemake.config['snapshots']) cutout_config = snakemake.config['atlite']['cutout'] @@ -33,14 +29,14 @@ if __name__ == '__main__': I = cutout.indicatormatrix(clustered_regions) - for area in ["rural", "urban", "total"]: + pop_layout = xr.open_dataarray(snakemake.input.pop_layout) - pop_layout = xr.open_dataarray(snakemake.input[f'pop_layout_{area}']) + stacked_pop = pop_layout.stack(spatial=('y', 'x')) + M = I.T.dot(np.diag(I.dot(stacked_pop))) - stacked_pop = pop_layout.stack(spatial=('y', 'x')) - M = I.T.dot(np.diag(I.dot(stacked_pop))) + heat_demand = cutout.heat_demand( + matrix=M.T, index=clustered_regions.index, + dask_kwargs=dict(scheduler=client), + show_progress=False) - heat_demand = cutout.heat_demand( - matrix=M.T, index=clustered_regions.index) - - heat_demand.to_netcdf(snakemake.output[f"heat_demand_{area}"]) + heat_demand.to_netcdf(snakemake.output.heat_demand) From d37ffddd4fd64c1479026cf860ab207c48b18075 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 12:21:46 +0100 Subject: [PATCH 22/56] build_solar_thermal_profiles: parallelize --- Snakefile | 11 +++----- scripts/build_solar_thermal_profiles.py | 34 +++++++++++-------------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/Snakefile b/Snakefile index 7ce29b4f..f22546ba 100644 --- a/Snakefile +++ b/Snakefile @@ -207,16 +207,13 @@ rule build_cop_profiles: rule build_solar_thermal_profiles: input: - pop_layout_total="resources/pop_layout_total.nc", - pop_layout_urban="resources/pop_layout_urban.nc", - pop_layout_rural="resources/pop_layout_rural.nc", + pop_layout="resources/pop_layout_{scope}.nc", regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson") output: - solar_thermal_total="resources/solar_thermal_total_elec_s{simpl}_{clusters}.nc", - solar_thermal_urban="resources/solar_thermal_urban_elec_s{simpl}_{clusters}.nc", - solar_thermal_rural="resources/solar_thermal_rural_elec_s{simpl}_{clusters}.nc" + solar_thermal="resources/solar_thermal_{scope}_elec_s{simpl}_{clusters}.nc", resources: mem_mb=20000 - benchmark: "benchmarks/build_solar_thermal_profiles/s{simpl}_{clusters}" + threads: 16 + benchmark: "benchmarks/build_solar_thermal_profiles/{scope}_s{simpl}_{clusters}" script: "scripts/build_solar_thermal_profiles.py" diff --git a/scripts/build_solar_thermal_profiles.py b/scripts/build_solar_thermal_profiles.py index f6d05859..0fb8b6e6 100644 --- a/scripts/build_solar_thermal_profiles.py +++ b/scripts/build_solar_thermal_profiles.py @@ -5,6 +5,7 @@ import atlite import pandas as pd import xarray as xr import numpy as np +from dask.distributed import Client, LocalCluster if __name__ == '__main__': if 'snakemake' not in globals(): @@ -15,14 +16,9 @@ if __name__ == '__main__': clusters=48, ) - if 'snakemake' not in globals(): - from vresutils import Dict - import yaml - snakemake = Dict() - with open('config.yaml') as f: - snakemake.config = yaml.safe_load(f) - snakemake.input = Dict() - snakemake.output = Dict() + nprocesses = int(snakemake.threads) + cluster = LocalCluster(n_workers=nprocesses, threads_per_worker=1) + client = Client(cluster, asynchronous=True) config = snakemake.config['solar_thermal'] @@ -35,18 +31,18 @@ if __name__ == '__main__': I = cutout.indicatormatrix(clustered_regions) - for area in ["total", "rural", "urban"]: + pop_layout = xr.open_dataarray(snakemake.input.pop_layout) - pop_layout = xr.open_dataarray(snakemake.input[f'pop_layout_{area}']) + stacked_pop = pop_layout.stack(spatial=('y', 'x')) + M = I.T.dot(np.diag(I.dot(stacked_pop))) - stacked_pop = pop_layout.stack(spatial=('y', 'x')) - M = I.T.dot(np.diag(I.dot(stacked_pop))) + nonzero_sum = M.sum(axis=0, keepdims=True) + nonzero_sum[nonzero_sum == 0.] = 1. + M_tilde = M / nonzero_sum - nonzero_sum = M.sum(axis=0, keepdims=True) - nonzero_sum[nonzero_sum == 0.] = 1. - M_tilde = M / nonzero_sum + solar_thermal = cutout.solar_thermal(**config, matrix=M_tilde.T, + index=clustered_regions.index, + dask_kwargs=dict(scheduler=client), + show_progress=False) - solar_thermal = cutout.solar_thermal(**config, matrix=M_tilde.T, - index=clustered_regions.index) - - solar_thermal.to_netcdf(snakemake.output[f"solar_thermal_{area}"]) + solar_thermal.to_netcdf(snakemake.output.solar_thermal) From 138d151c8b403999f4f81569e5c464a722a33e3e Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 12:48:51 +0100 Subject: [PATCH 23/56] only compute solar thermal profiles if technology is included --- Snakefile | 6 +++--- scripts/prepare_sector_network.py | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Snakefile b/Snakefile index f22546ba..254b1cb1 100644 --- a/Snakefile +++ b/Snakefile @@ -500,9 +500,9 @@ rule prepare_sector_network: cop_air_total="resources/cop_air_total_elec_s{simpl}_{clusters}.nc", cop_air_rural="resources/cop_air_rural_elec_s{simpl}_{clusters}.nc", cop_air_urban="resources/cop_air_urban_elec_s{simpl}_{clusters}.nc", - solar_thermal_total="resources/solar_thermal_total_elec_s{simpl}_{clusters}.nc", - solar_thermal_urban="resources/solar_thermal_urban_elec_s{simpl}_{clusters}.nc", - solar_thermal_rural="resources/solar_thermal_rural_elec_s{simpl}_{clusters}.nc", + solar_thermal_total="resources/solar_thermal_total_elec_s{simpl}_{clusters}.nc" if config["sector"]["solar_thermal"] else [], + solar_thermal_urban="resources/solar_thermal_urban_elec_s{simpl}_{clusters}.nc" if config["sector"]["solar_thermal"] else [], + solar_thermal_rural="resources/solar_thermal_rural_elec_s{simpl}_{clusters}.nc" if config["sector"]["solar_thermal"] else [], **build_retro_cost_output, **build_biomass_transport_costs_output, **gas_infrastructure diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 560d624e..011eb97e 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -1452,9 +1452,10 @@ def add_heat(n, costs): "ground": xr.open_dataarray(snakemake.input.cop_soil_total).to_pandas().reindex(index=n.snapshots) } - solar_thermal = xr.open_dataarray(snakemake.input.solar_thermal_total).to_pandas().reindex(index=n.snapshots) - # 1e3 converts from W/m^2 to MW/(1000m^2) = kW/m^2 - solar_thermal = options['solar_cf_correction'] * solar_thermal / 1e3 + if options["solar_thermal"]: + solar_thermal = xr.open_dataarray(snakemake.input.solar_thermal_total).to_pandas().reindex(index=n.snapshots) + # 1e3 converts from W/m^2 to MW/(1000m^2) = kW/m^2 + solar_thermal = options['solar_cf_correction'] * solar_thermal / 1e3 for name in heat_systems: From 292ec9d5a1210da4652247a35d2b5c31d41ba1ff Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 13:45:42 +0100 Subject: [PATCH 24/56] fix computation of shipping demands --- scripts/prepare_sector_network.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index d41bb184..b40c2084 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2148,8 +2148,8 @@ def add_industry(n, costs): if total_share != 1: logger.warning(f"Total shipping shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.") - domestic_navigation = pop_weighted_energy_totals.loc[nodes, "total domestic navigation"] - international_navigation = pd.read_csv(snakemake.input.shipping_demand, index_col=0) + domestic_navigation = pop_weighted_energy_totals.loc[nodes, "total domestic navigation"].squeeze() + international_navigation = pd.read_csv(snakemake.input.shipping_demand, index_col=0).squeeze() all_navigation = domestic_navigation + international_navigation p_set = all_navigation * 1e6 / 8760 @@ -2204,7 +2204,7 @@ def add_industry(n, costs): ) n.madd("Link", - spatial.h2.locations + "methanolisation", + spatial.h2.locations + " methanolisation", bus0=spatial.h2.nodes, bus1=spatial.methanol.nodes, bus2=nodes, From c4717854489e82e48e8d490a3de56b3210c13a90 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 13:45:57 +0100 Subject: [PATCH 25/56] add colors for methanolisation --- config.default.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config.default.yaml b/config.default.yaml index 58be20ff..6875c4ef 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -604,6 +604,9 @@ plotting: liquid: '#25c49a' kerosene for aviation: '#a1ffe6' naphtha for industry: '#57ebc4' + methanolisation: '#83d6d5' + methanol: '#468c8b' + shipping methanol: '#468c8b' # co2 CC: '#f29dae' CCS: '#f29dae' @@ -620,6 +623,7 @@ plotting: process emissions to atmosphere: '#888888' oil emissions: '#aaaaaa' shipping oil emissions: "#555555" + shipping methanol emissions: '#666666' land transport oil emissions: '#777777' agriculture machinery oil emissions: '#333333' # other From b9c1fdb65ebd2cf454562db1e2b456992b4912a8 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 13:46:31 +0100 Subject: [PATCH 26/56] include methanolisation in PtL --- scripts/plot_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 11cfc84e..caedb335 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -29,7 +29,7 @@ def rename_techs_tyndp(tech): return "gas-to-power/heat" elif "solar" in tech: return "solar" - elif tech == "Fischer-Tropsch": + elif tech in ["Fischer-Tropsch", "methanolisation"]: return "power-to-liquid" elif "offshore wind" in tech: return "offshore wind" From 8bab9300ec5197a0cfc36b24a005ce4d7538b24b Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 13:50:55 +0100 Subject: [PATCH 27/56] add release note --- doc/release_notes.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/release_notes.rst b/doc/release_notes.rst index be66a9ba..918f885c 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -78,6 +78,8 @@ incorporates retrofitting options to hydrogen. carrier can be nodally resolved or copperplated across Europe. This feature is controlled by ``sector: ammonia:``. +* Add methanol as energy carrier, methanolisation as process, and option for methanol demand in shipping sector. + * Updated `data bundle `_ that includes the hydrogan salt cavern storage potentials. * Updated and extended documentation in @@ -89,6 +91,8 @@ incorporates retrofitting options to hydrogen. * The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version) caused a failure to read in the shadow prices of other global constraints. +* Correct capital cost of Fischer-Tropsch according to new units in ``technology-data``. + PyPSA-Eur-Sec 0.6.0 (4 October 2021) ==================================== From 520cad53a2e90d9af0b871f3360e8ff8df065d71 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 14:11:47 +0100 Subject: [PATCH 28/56] address sum(level) deprecation --- scripts/plot_network.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 521da448..257b565f 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -119,8 +119,6 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator tech_colors = snakemake.config['plotting']['tech_colors'] - tech_colors = snakemake.config['plotting']['tech_colors'] - n = network.copy() assign_location(n) # Drop non-electric buses so they don't clutter the plot @@ -173,7 +171,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator costs.index = pd.MultiIndex.from_tuples(costs.index.values) threshold = 100e6 # 100 mEUR/a - carriers = costs.sum(level=1) + carriers = costs.groupby(level=1).sum() carriers = carriers.where(carriers > threshold).dropna() carriers = list(carriers.index) From 6f901f4c500ec53c614e6cca5ea79597ccacc33a Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 15:43:43 +0100 Subject: [PATCH 29/56] restore compatibility with latest master version --- Snakefile | 2 +- matplotlibrc | 1 - scripts/helper.py | 2 + scripts/plot_network.py | 117 ++++++++++------------------------------ 4 files changed, 30 insertions(+), 92 deletions(-) diff --git a/Snakefile b/Snakefile index b21d01e7..77f5fdd6 100644 --- a/Snakefile +++ b/Snakefile @@ -517,7 +517,7 @@ rule plot_network: input: overrides="data/override_component_attrs", network=RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", - regions='../pypsa-eur/resources/regions_onshore_elec_s{simpl}_{clusters}.geojson' + regions=pypsaeur('resources/regions_onshore_elec_s{simpl}_{clusters}.geojson') output: map=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", today=RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}-today.pdf" diff --git a/matplotlibrc b/matplotlibrc index db5e7ce8..57754c44 100644 --- a/matplotlibrc +++ b/matplotlibrc @@ -1,4 +1,3 @@ -backend: Agg font.family: sans-serif font.sans-serif: Ubuntu, DejaVu Sans image.cmap: viridis \ No newline at end of file diff --git a/scripts/helper.py b/scripts/helper.py index 4161c126..e6ddfd4a 100644 --- a/scripts/helper.py +++ b/scripts/helper.py @@ -45,7 +45,9 @@ def mock_snakemake(rulename, **wildcards): This function is expected to be executed from the 'scripts'-directory of ' the snakemake project. It returns a snakemake.script.Snakemake object, based on the Snakefile. + If a rule has wildcards, you have to specify them in **wildcards. + Parameters ---------- rulename: str diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 257b565f..386a45b7 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -1,14 +1,11 @@ import pypsa -import numpy as np import pandas as pd import geopandas as gpd import matplotlib.pyplot as plt import cartopy.crs as ccrs -from matplotlib.legend_handler import HandlerPatch -from matplotlib.patches import Circle, Patch -from pypsa.plot import projected_area_factor +from pypsa.plot import add_legend_circles, add_legend_patches, add_legend_lines from make_summary import assign_carriers from plot_summary import rename_techs, preferred_order @@ -40,69 +37,6 @@ def rename_techs_tyndp(tech): else: return tech -class HandlerCircle(HandlerPatch): - """ - Legend Handler used to create circles for legend entries. - - This handler resizes the circles in order to match the same dimensional - scaling as in the applied axis. - """ - def create_artists( - self, legend, orig_handle, xdescent, ydescent, width, height, fontsize, trans - ): - fig = legend.get_figure() - ax = legend.axes - - unit = np.diff(ax.transData.transform([(0, 0), (1, 1)]), axis=0)[0][1] - radius = orig_handle.get_radius() * unit * (72 / fig.dpi) - center = 5 - xdescent, 3 - ydescent - p = plt.Circle(center, radius) - self.update_prop(p, orig_handle, legend) - p.set_transform(trans) - return [p] - - -def add_legend_circles(ax, sizes, labels, scale=1, srid=None, patch_kw={}, legend_kw={}): - - if srid is not None: - area_correction = projected_area_factor(ax, n.srid)**2 - sizes = [s * area_correction for s in sizes] - - handles = make_legend_circles_for(sizes, scale, **patch_kw) - - legend = ax.legend( - handles, labels, - handler_map={Circle: HandlerCircle()}, - **legend_kw - ) - - ax.add_artist(legend) - - -def add_legend_lines(ax, sizes, labels, scale=1, patch_kw={}, legend_kw={}): - - handles = [plt.Line2D([0], [0], linewidth=s/scale, **patch_kw) for s in sizes] - - legend = ax.legend( - handles, labels, - **legend_kw - ) - - ax.add_artist(legend) - - -def add_legend_patches(ax, colors, labels, patch_kw={}, legend_kw={}): - - handles = [Patch(facecolor=c, **patch_kw) for c in colors] - - legend = ax.legend(handles, labels, **legend_kw) - - ax.add_artist(legend) - - -def make_legend_circles_for(sizes, scale=1.0, **kw): - return [Circle((0, 0), radius=(s / scale)**0.5, **kw) for s in sizes] - def assign_location(n): for c in n.iterate_components(n.one_port_components | n.branch_components): @@ -186,23 +120,23 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator # should be zero line_widths = n.lines.s_nom_opt - n.lines.s_nom link_widths = n.links.p_nom_opt - n.links.p_nom - title = "Added grid" + title = "added grid" if transmission: line_widths = n.lines.s_nom_opt link_widths = n.links.p_nom_opt linewidth_factor = 2e3 line_lower_threshold = 0. - title = "Today's grid" + title = "current grid" else: line_widths = n.lines.s_nom_opt - n.lines.s_nom_min link_widths = n.links.p_nom_opt - n.links.p_nom_min - title = "Added grid" + title = "added grid" if transmission: line_widths = n.lines.s_nom_opt link_widths = n.links.p_nom_opt - title = "Total grid" + title = "total grid" line_widths[line_widths < line_lower_threshold] = 0. link_widths[link_widths < line_lower_threshold] = 0. @@ -233,7 +167,7 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator labelspacing=0.8, frameon=False, handletextpad=0, - title='System cost', + title='system cost', ) add_legend_circles( @@ -247,6 +181,8 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator sizes = [10, 5] labels = [f"{s} GW" for s in sizes] + scale = 1e3 / linewidth_factor + sizes = [s*scale for s in sizes] legend_kw = dict( loc="upper left", @@ -261,7 +197,6 @@ def plot_map(network, components=["links", "stores", "storage_units", "generator ax, sizes, labels, - scale=linewidth_factor/1e3, patch_kw=dict(color='lightgrey'), legend_kw=legend_kw ) @@ -312,8 +247,6 @@ def group_pipes(df, drop_direction=False): def plot_h2_map(network, regions): - tech_colors = snakemake.config['plotting']['tech_colors'] - n = network.copy() if "H2 pipeline" not in n.links.carrier.unique(): return @@ -345,9 +278,11 @@ def plot_h2_map(network, regions): h2_new = n.links.loc[n.links.carrier=="H2 pipeline"] h2_retro = n.links.loc[n.links.carrier=='H2 pipeline retrofitted'] - # sum capacitiy for pipelines from different investment periods - h2_new = group_pipes(h2_new) - h2_retro = group_pipes(h2_retro, drop_direction=True).reindex(h2_new.index).fillna(0) + + if snakemake.config['foresight'] == 'myopic': + # sum capacitiy for pipelines from different investment periods + h2_new = group_pipes(h2_new) + h2_retro = group_pipes(h2_retro, drop_direction=True).reindex(h2_new.index).fillna(0) if not h2_retro.empty: @@ -419,6 +354,7 @@ def plot_h2_map(network, regions): ) n.plot( + geomap=True, bus_sizes=0, link_colors=color_retrofit, link_widths=link_widths_retro, @@ -461,8 +397,10 @@ def plot_h2_map(network, regions): legend_kw=legend_kw ) - sizes = [50, 10] + sizes = [30, 10] labels = [f"{s} GW" for s in sizes] + scale = 1e3 / linewidth_factor + sizes = [s*scale for s in sizes] legend_kw = dict( loc="upper left", @@ -476,7 +414,6 @@ def plot_h2_map(network, regions): ax, sizes, labels, - scale=linewidth_factor/1e3, patch_kw=dict(color='lightgrey'), legend_kw=legend_kw, ) @@ -498,7 +435,6 @@ def plot_h2_map(network, regions): legend_kw=legend_kw ) - plt.gca().outline_patch.set_visible(False) ax.set_facecolor("white") fig.savefig( @@ -564,7 +500,7 @@ def plot_ch4_map(network): pipe_colors = { "gas pipeline": "#f08080", "gas pipeline new": "#c46868", - "gas pipeline (2020)": 'lightgrey', + "gas pipeline (in 2020)": 'lightgrey', "gas pipeline (available)": '#e8d1d1', } @@ -584,7 +520,7 @@ def plot_ch4_map(network): n.plot( bus_sizes=bus_sizes, bus_colors=bus_colors, - link_colors=pipe_colors['gas pipeline (2020)'], + link_colors=pipe_colors['gas pipeline (in 2020)'], link_widths=link_widths_orig, branch_components=["Link"], ax=ax, @@ -621,7 +557,7 @@ def plot_ch4_map(network): labelspacing=0.8, frameon=False, handletextpad=1, - title='Gas Sources', + title='gas sources', ) add_legend_circles( @@ -635,6 +571,8 @@ def plot_ch4_map(network): sizes = [50, 10] labels = [f"{s} GW" for s in sizes] + scale = 1e3 / linewidth_factor + sizes = [s*scale for s in sizes] legend_kw = dict( loc="upper left", @@ -642,14 +580,13 @@ def plot_ch4_map(network): frameon=False, labelspacing=0.8, handletextpad=1, - title='Gas Pipeline' + title='gas pipeline' ) add_legend_lines( ax, sizes, labels, - scale=linewidth_factor/1e3, patch_kw=dict(color='lightgrey'), legend_kw=legend_kw, ) @@ -740,7 +677,7 @@ def plot_map_without(network): for s in (10, 5): handles.append(plt.Line2D([0], [0], color=ac_color, linewidth=s * 1e3 / linewidth_factor)) - labels.append("{} GW".format(s)) + labels.append(f"{s} GW") l1_1 = ax.legend(handles, labels, loc="upper left", bbox_to_anchor=(0.05, 1.01), frameon=False, @@ -890,10 +827,10 @@ if __name__ == "__main__": snakemake = mock_snakemake( 'plot_network', simpl='', - clusters="45", - lv=1.0, + clusters="181", + lv='opt', opts='', - sector_opts='168H-T-H-B-I-A-solar+p3-dist1', + sector_opts='Co2L0-730H-T-H-B-I-A-solar+p3-linemaxext10', planning_horizons="2050", ) From 8edc9042b9db35c04b2253ed5021a609d9d8952a Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 28 Dec 2022 15:46:11 +0100 Subject: [PATCH 30/56] add release note --- doc/release_notes.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 918f885c..ef92357a 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -86,6 +86,8 @@ incorporates retrofitting options to hydrogen. * Shipping demand now defaults to (synthetic) oil rather than liquefied hydrogen until 2050. +* Improved network plots including better legends, hydrogen retrofitting network display, and change to EqualEarth projection. + **Bugfixes** * The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version) From 27414ac0103fd314a519357802f7fcec4e57ecd6 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Thu, 29 Dec 2022 11:46:57 +0100 Subject: [PATCH 31/56] new config options for demand in aviation + HVC, control of ICE shares in land transport and agriculture --- config.default.yaml | 12 ++++++++-- doc/release_notes.rst | 5 ++++ scripts/prepare_sector_network.py | 39 ++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index fecf222a..ee1c5059 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -178,19 +178,25 @@ sector: bev_avail_mean: 0.8 v2g: true #allows feed-in to grid from EV battery #what is not EV or FCEV is oil-fuelled ICE - land_transport_fuel_cell_share: # 1 means all FCEVs + land_transport_fuel_cell_share: 2020: 0 2030: 0.05 2040: 0.1 2050: 0.15 - land_transport_electric_share: # 1 means all EVs + land_transport_electric_share: 2020: 0 2030: 0.25 2040: 0.6 2050: 0.85 + land_transport_ice_share: + 2020: 1 + 2030: 0.7 + 2040: 0.3 + 2050: 0 transport_fuel_cell_efficiency: 0.5 transport_internal_combustion_efficiency: 0.3 agriculture_machinery_electric_share: 0 + agriculture_machinery_oil_share: 1 agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use agriculture_machinery_electric_efficiency: 0.3 # electricity per use MWh_MeOH_per_MWh_H2: 0.8787 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64. @@ -202,6 +208,8 @@ sector: shipping_oil_share: 0 shipping_methanol_efficiency: 0.46 # 10-15% higher https://www.iea-amf.org/app/webroot/files/file/Annex%20Reports/AMF_Annex_56.pdf, https://users.ugent.be/~lsileghe/documents/extended_abstract.pdf shipping_oil_efficiency: 0.40 #For conversion of fuel oil to propulsion in 2011 + aviation_demand_factor: 1. # relative aviation demand compared to today + HVC_demand_factor: 1. # relative HVC demand compared to today time_dep_hp_cop: true #time dependent heat pump coefficient of performance heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py # conservatively high to cover hot water and space heating in poorly-insulated buildings diff --git a/doc/release_notes.rst b/doc/release_notes.rst index ef92357a..fd9a3549 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -88,6 +88,11 @@ incorporates retrofitting options to hydrogen. * Improved network plots including better legends, hydrogen retrofitting network display, and change to EqualEarth projection. +* New config options for changing energy demands in aviation + (``aviation_demand_factor``) and HVC industry (``HVC_demand_factor``), as well + as explicit ICE shares for land transport (``land_transport_ice_share``) and + agriculture machinery (``agriculture_machinery_oil_share``). + **Bugfixes** * The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index b40c2084..491c44dc 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -1273,13 +1273,15 @@ def add_land_transport(n, costs): fuel_cell_share = get(options["land_transport_fuel_cell_share"], investment_year) electric_share = get(options["land_transport_electric_share"], investment_year) - ice_share = 1 - fuel_cell_share - electric_share + ice_share = get(options["land_transport_ice_share"], investment_year) + + total_share = fuel_cell_share + electric_share + ice_share + if total_share != 1: + logger.warning(f"Total land transport shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.") - print("FCEV share", fuel_cell_share) - print("EV share", electric_share) - print("ICEV share", ice_share) - - assert ice_share >= 0, "Error, more FCEV and EV share than 1." + logger.info(f"FCEV share: {fuel_cell_share*100}%") + logger.info(f"EV share: {electric_share*100}%") + logger.info(f"ICEV share: {ice_share*100}%") nodes = pop_layout.index @@ -2321,15 +2323,23 @@ def add_industry(n, costs): lifetime=costs.at['Fischer-Tropsch', 'lifetime'] ) + demand_factor = options.get("HVC_demand_factor", 1) + p_set = demand_factor * industrial_demand.loc[nodes, "naphtha"].sum() / 8760 + if demand_factor != 1: + logger.warning(f"Changing HVC demand by {demand_factor*100-100:+.2f}%.") + n.madd("Load", ["naphtha for industry"], bus=spatial.oil.nodes, carrier="naphtha for industry", - p_set=industrial_demand.loc[nodes, "naphtha"].sum() / 8760 + p_set=p_set ) + demand_factor = options.get("aviation_demand_factor", 1) all_aviation = ["total international aviation", "total domestic aviation"] - p_set = pop_weighted_energy_totals.loc[nodes, all_aviation].sum(axis=1).sum() * 1e6 / 8760 + p_set = demand_factor * pop_weighted_energy_totals.loc[nodes, all_aviation].sum(axis=1).sum() * 1e6 / 8760 + if demand_factor != 1: + logger.warning(f"Changing aviation demand by {demand_factor*100-100:+.2f}%.") n.madd("Load", ["kerosene for aviation"], @@ -2480,8 +2490,11 @@ def add_agriculture(n, costs): # machinery electric_share = get(options["agriculture_machinery_electric_share"], investment_year) - assert electric_share <= 1. - ice_share = 1 - electric_share + oil_share = get(options["agriculture_machinery_oil_share"], investment_year) + + total_share = electric_share + oil_share + if total_share != 1: + logger.warning(f"Total agriculture machinery shares sum up to {total_share*100}%, corresponding to increased or decreased demand assumptions.") machinery_nodal_energy = pop_weighted_energy_totals.loc[nodes, "total agriculture machinery"] @@ -2497,16 +2510,16 @@ def add_agriculture(n, costs): p_set=electric_share / efficiency_gain * machinery_nodal_energy * 1e6 / 8760, ) - if ice_share > 0: + if oil_share > 0: n.madd("Load", ["agriculture machinery oil"], bus=spatial.oil.nodes, carrier="agriculture machinery oil", - p_set=ice_share * machinery_nodal_energy.sum() * 1e6 / 8760 + p_set=oil_share * machinery_nodal_energy.sum() * 1e6 / 8760 ) - co2 = ice_share * machinery_nodal_energy.sum() * 1e6 / 8760 * costs.at["oil", 'CO2 intensity'] + co2 = oil_share * machinery_nodal_energy.sum() * 1e6 / 8760 * costs.at["oil", 'CO2 intensity'] n.add("Load", "agriculture machinery oil emissions", From 383aef7e1c541e1240ebb0d85636224e6240e226 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 3 Jan 2023 08:38:10 +0100 Subject: [PATCH 32/56] rename shipping_average_efficiency to shipping_oil_efficiency --- scripts/prepare_sector_network.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 491c44dc..e46b2471 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2157,7 +2157,8 @@ def add_industry(n, costs): if shipping_hydrogen_share: - efficiency = options['shipping_average_efficiency'] / costs.at["fuel cell", "efficiency"] + oil_efficiency = options.get('shipping_oil_efficiency', options.get('shipping_average_efficiency', 0.4)) + efficiency = oil_efficiency / costs.at["fuel cell", "efficiency"] shipping_hydrogen_share = get(options['shipping_hydrogen_share'], investment_year) if options["shipping_hydrogen_liquefaction"]: From ddcaff0b5b7d352392fac34507de3b822c3786b5 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 3 Jan 2023 13:14:16 +0100 Subject: [PATCH 33/56] plot_network: do not plot very small pipelines --- scripts/plot_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 386a45b7..5472ee69 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -260,7 +260,7 @@ def plot_h2_map(network, regions): bus_size_factor = 1e5 linewidth_factor = 1e4 # MW below which not drawn - line_lower_threshold = 1e2 + line_lower_threshold = 1e3 # Drop non-electric buses so they don't clutter the plot n.buses.drop(n.buses.index[n.buses.carrier != "AC"], inplace=True) From 64969c2deebc888261e838682a0bd38cceb549d2 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Thu, 5 Jan 2023 13:42:01 +0100 Subject: [PATCH 34/56] add methanol store --- scripts/prepare_sector_network.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index e46b2471..b6c052be 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2206,6 +2206,15 @@ def add_industry(n, costs): unit="MWh_LHV" ) + n.madd("Store", + spatial.methanol.nodes, + suffix=" Store", + bus=spatial.methanol.nodes, + e_nom_extendable=True, + e_cyclic=True, + carrier="methanol", + ) + n.madd("Link", spatial.h2.locations + " methanolisation", bus0=spatial.h2.nodes, From 433514b1687b1f4e0acdb34de95922c93a54781e Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sat, 7 Jan 2023 13:23:12 +0100 Subject: [PATCH 35/56] add a collection rule plot_all_networks --- Snakefile | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Snakefile b/Snakefile index 77f5fdd6..90fcfb56 100644 --- a/Snakefile +++ b/Snakefile @@ -44,6 +44,13 @@ rule prepare_sector_networks: expand(RDIR + "/prenetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", **config['scenario']) + +rule plot_all_networks: + input: + expand(RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + **config['scenario']) + + datafiles = [ "data/eea/UNFCCC_v23.csv", "data/switzerland-sfoe/switzerland-new_format.csv", @@ -245,9 +252,9 @@ rule build_biomass_potentials: enspreso_biomass=HTTP.remote("https://cidportal.jrc.ec.europa.eu/ftp/jrc-opendata/ENSPRESO/ENSPRESO_BIOMASS.xlsx", keep_local=True), nuts2="data/nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson", # https://gisco-services.ec.europa.eu/distribution/v2/nuts/download/#nuts21 regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"), - nuts3_population=pypsaeur("data/bundle/nama_10r_3popgdp.tsv.gz"), - swiss_cantons=pypsaeur("data/bundle/ch_cantons.csv"), - swiss_population=pypsaeur("data/bundle/je-e-21.03.02.xls"), + nuts3_population="../pypsa-eur/data/bundle/nama_10r_3popgdp.tsv.gz", + swiss_cantons="../pypsa-eur/data/bundle/ch_cantons.csv", + swiss_population="../pypsa-eur/data/bundle/je-e-21.03.02.xls", country_shapes=pypsaeur('resources/country_shapes.geojson') output: biomass_potentials_all='resources/biomass_potentials_all_s{simpl}_{clusters}.csv', @@ -602,7 +609,7 @@ if config["foresight"] == "overnight": network=RDIR + "/prenetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", costs=CDIR + "costs_{}.csv".format(config['costs']['year']), config=SDIR + '/configs/config.yaml', - env=SDIR + '/configs/environment.yaml', + #env=SDIR + '/configs/environment.yaml', output: RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc" shadow: "shallow" log: From 8bafaf25f762bde0b16a35d8ff53b462030d9836 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sat, 7 Jan 2023 13:23:33 +0100 Subject: [PATCH 36/56] plot_network: adjust limits and thresholds --- scripts/plot_network.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 5472ee69..53c52187 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -258,9 +258,9 @@ def plot_h2_map(network, regions): regions["H2"] = regions["H2"].where(regions["H2"] > 0.1) bus_size_factor = 1e5 - linewidth_factor = 1e4 + linewidth_factor = 7e3 # MW below which not drawn - line_lower_threshold = 1e3 + line_lower_threshold = 750 # Drop non-electric buses so they don't clutter the plot n.buses.drop(n.buses.index[n.buses.carrier != "AC"], inplace=True) @@ -370,7 +370,7 @@ def plot_h2_map(network, regions): cmap='Blues', linewidths=0, legend=True, - vmax=10, + vmax=6, vmin=0, legend_kwds={ "label": "Hydrogen Storage [TWh]", @@ -455,7 +455,7 @@ def plot_ch4_map(network): bus_size_factor = 8e7 linewidth_factor = 1e4 # MW below which not drawn - line_lower_threshold = 500 + line_lower_threshold = 1e3 # Drop non-electric buses so they don't clutter the plot n.buses.drop(n.buses.index[n.buses.carrier != "AC"], inplace=True) From 71e2a4943cfa0a04ad094f70fe656840b20c4e22 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 24 Jan 2023 18:44:39 +0100 Subject: [PATCH 37/56] carbon management --- Snakefile | 20 +++++++++- config.default.yaml | 5 ++- scripts/build_sequestration_potentials.py | 48 +++++++++++++++++++++++ scripts/helper.py | 2 +- scripts/prepare_sector_network.py | 27 +++++++++---- 5 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 scripts/build_sequestration_potentials.py diff --git a/Snakefile b/Snakefile index 90fcfb56..cf829322 100644 --- a/Snakefile +++ b/Snakefile @@ -280,6 +280,23 @@ else: build_biomass_transport_costs_output = {} +if config["sector"].get("sequestration_potential", False): + rule build_sequestration_potentials: + input: + sequestration_potential="data/complete_map_2020_unit_Mt.geojson", + regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions_offshore=pypsaeur("resources/regions_offshore_elec_s{simpl}_{clusters}.geojson"), + output: + sequestration_potential="resources/co2_sequestration_potential_elec_s{simpl}_{clusters}.csv" + threads: 1 + resources: mem_mb=4000 + benchmark: "benchmarks/build_sequestration_potentials_s{simpl}_{clusters}" + script: "scripts/build_sequestration_potentials.py" + build_sequestration_potentials_output = rules.build_sequestration_potentials.output +else: + build_sequestration_potentials_output = {} + + rule build_salt_cavern_potentials: input: salt_caverns="data/h2_salt_caverns_GWh_per_sqkm.geojson", @@ -512,7 +529,8 @@ rule prepare_sector_network: solar_thermal_rural="resources/solar_thermal_rural_elec_s{simpl}_{clusters}.nc" if config["sector"]["solar_thermal"] else [], **build_retro_cost_output, **build_biomass_transport_costs_output, - **gas_infrastructure + **gas_infrastructure, + **build_sequestration_potentials_output output: RDIR + '/prenetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc' threads: 1 resources: mem_mb=2000 diff --git a/config.default.yaml b/config.default.yaml index ee1c5059..5fa072d4 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -250,9 +250,11 @@ sector: dac: true co2_vent: false SMR: true + sequestration_potential: true # geological co2 storage potential co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2 - co2_network: false + co2_spatial: false + co2network: false cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture hydrogen_underground_storage: true hydrogen_underground_storage_locations: @@ -275,6 +277,7 @@ sector: gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation gas_distribution_grid: true gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv + biomass_spatial: false # biomass transport between nodes biomass_transport: false # biomass transport between nodes conventional_generation: # generator : carrier OCGT: gas diff --git a/scripts/build_sequestration_potentials.py b/scripts/build_sequestration_potentials.py new file mode 100644 index 00000000..cf8ab6d6 --- /dev/null +++ b/scripts/build_sequestration_potentials.py @@ -0,0 +1,48 @@ +import pandas as pd +import geopandas as gpd + +def area(gdf): + """Returns area of GeoDataFrame geometries in square kilometers.""" + return gdf.to_crs(epsg=3035).area.div(1e6) + + +def allocate_sequestration_potential(gdf, regions, attr='conservative estimate Mt', threshold=3): + gdf = gdf.loc[gdf[attr] > threshold, [attr, "geometry"]] + gdf["area_sqkm"] = area(gdf) + overlay = gpd.overlay(regions, gdf, keep_geom_type=True) + overlay["share"] = area(overlay) / overlay["area_sqkm"] + adjust_cols = overlay.columns.difference({"name", "area_sqkm", "geometry", "share"}) + overlay[adjust_cols] = overlay[adjust_cols].multiply(overlay["share"], axis=0) + gdf_regions = overlay.groupby("name").sum() + gdf_regions.drop(["area_sqkm", "share"], axis=1, inplace=True) + return gdf_regions.squeeze() + + +if __name__ == "__main__": + if 'snakemake' not in globals(): + from helper import mock_snakemake + snakemake = mock_snakemake( + 'build_sequestration_potentials', + simpl='', + clusters="181" + ) + + # TODO move to config.yaml + threshold = 3 + include_onshore = False + + gdf = gpd.read_file(snakemake.input.sequestration_potential) + + regions = gpd.read_file(snakemake.input.regions_offshore) + if include_onshore: + onregions = gpd.read_file(snakemake.input.regions_onshore) + regions = pd.concat([regions, onregions]).dissolve(by='name').reset_index() + + attr = snakemake.config['sector']["sequestration_potential"] + kwargs = dict(attr=attr, threshold=threshold) if isinstance(attr, str) else {} + + s = allocate_sequestration_potential(gdf, regions, **kwargs) + + s = s.where(s>threshold).dropna() + + s.to_csv(snakemake.output.sequestration_potential) diff --git a/scripts/helper.py b/scripts/helper.py index e6ddfd4a..62ae33c0 100644 --- a/scripts/helper.py +++ b/scripts/helper.py @@ -138,6 +138,6 @@ def parse(l): def update_config_with_sector_opts(config, sector_opts): for o in sector_opts.split("-"): - if o.startswith("CF:"): + if o.startswith("CF+"): l = o.split("+")[1:] update_config(config, parse(l)) \ No newline at end of file diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index b6c052be..76b71fc8 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -44,7 +44,7 @@ def define_spatial(nodes, options): spatial.biomass = SimpleNamespace() - if options["biomass_transport"]: + if options.get("biomass_spatial", options["biomass_transport"]): spatial.biomass.nodes = nodes + " solid biomass" spatial.biomass.locations = nodes spatial.biomass.industry = nodes + " solid biomass for industry" @@ -61,7 +61,7 @@ def define_spatial(nodes, options): spatial.co2 = SimpleNamespace() - if options["co2_network"]: + if options.get("co2_spatial", options["co2network"]): spatial.co2.nodes = nodes + " co2 stored" spatial.co2.locations = nodes spatial.co2.vents = nodes + " co2 vent" @@ -88,8 +88,11 @@ def define_spatial(nodes, options): spatial.gas.locations = ["EU"] spatial.gas.biogas = ["EU biogas"] spatial.gas.industry = ["gas for industry"] - spatial.gas.industry_cc = ["gas for industry CC"] spatial.gas.biogas_to_gas = ["EU biogas to gas"] + if options.get("co2_spatial", options["co2network"]): + spatial.gas.industry_cc = nodes + " gas for industry CC" + else: + spatial.gas.industry_cc = ["gas for industry CC"] spatial.gas.df = pd.DataFrame(vars(spatial.gas), index=nodes) @@ -507,10 +510,18 @@ def add_co2_tracking(n, options): unit="t_co2" ) + if options["sequestration_potential"]: + # TODO make configurable options + upper_limit = 25000 # Mt + annualiser = 25 # TODO research suitable value + e_nom_max = pd.read_csv(snakemake.input.sequestration_potential, index_col=0).squeeze() + e_nom_max = e_nom_max.reindex(spatial.co2.locations).fillna(0.).clip(upper=upper_limit).mul(1e6) / annualiser # t + e_nom_max = e_nom_max.rename(index=lambda x: x + " co2 stored") + n.madd("Store", spatial.co2.nodes, e_nom_extendable=True, - e_nom_max=np.inf, + e_nom_max=e_nom_max, capital_cost=options['co2_sequestration_cost'], carrier="co2 stored", bus=spatial.co2.nodes @@ -1218,7 +1229,7 @@ def add_storage_and_grids(n, costs): bus0=spatial.coal.nodes, bus1=spatial.nodes, bus2="co2 atmosphere", - bus3="co2 stored", + bus3=spatial.co2.nodes, marginal_cost=costs.at['coal', 'efficiency'] * costs.at['coal', 'VOM'], #NB: VOM is per MWel capital_cost=costs.at['coal', 'efficiency'] * costs.at['coal', 'fixed'] + costs.at['biomass CHP capture', 'fixed'] * costs.at['coal', 'CO2 intensity'], #NB: fixed cost is per MWel p_nom_extendable=True, @@ -1828,7 +1839,7 @@ def add_biomass(n, costs): else: biogas_potentials_spatial = biomass_potentials["biogas"].sum() - if options["biomass_transport"]: + if options.get("biomass_spatial", options["biomass_transport"]): solid_biomass_potentials_spatial = biomass_potentials["solid biomass"].rename(index=lambda x: x + " solid biomass") else: solid_biomass_potentials_spatial = biomass_potentials["solid biomass"].sum() @@ -2052,7 +2063,7 @@ def add_industry(n, costs): unit="MWh_LHV" ) - if options["biomass_transport"]: + if options.get("biomass_spatial", options["biomass_transport"]): p_set = industrial_demand.loc[spatial.biomass.locations, "solid biomass"].rename(index=lambda x: x + " solid biomass for industry") / 8760 else: p_set = industrial_demand["solid biomass"].sum() / 8760 @@ -2775,7 +2786,7 @@ if __name__ == "__main__": if "noH2network" in opts: remove_h2_network(n) - if options["co2_network"]: + if options["co2network"]: add_co2_network(n, costs) solver_name = snakemake.config["solving"]["solver"]["name"] From 9411cad98b9430fd0ce628915fa1ee401c711a1f Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 24 Jan 2023 18:47:34 +0100 Subject: [PATCH 38/56] add sequestration potential data link --- Snakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Snakefile b/Snakefile index cf829322..c4680c81 100644 --- a/Snakefile +++ b/Snakefile @@ -283,7 +283,7 @@ else: if config["sector"].get("sequestration_potential", False): rule build_sequestration_potentials: input: - sequestration_potential="data/complete_map_2020_unit_Mt.geojson", + sequestration_potential=HTTP.remote("https://raw.githubusercontent.com/ericzhou571/Co2Storage/main/resources/complete_map_2020_unit_Mt.geojson", keep_local=True), regions_onshore=pypsaeur("resources/regions_onshore_elec_s{simpl}_{clusters}.geojson"), regions_offshore=pypsaeur("resources/regions_offshore_elec_s{simpl}_{clusters}.geojson"), output: From 697be2d9e3f7cccd9300ebaa089ba77c898d9a46 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 25 Jan 2023 08:41:08 +0100 Subject: [PATCH 39/56] fix capacities of biomass transport The biomass transport links are split into either direction because they have a marginal cost associated with the transport. With p_nom_extendable, many decision variables are created. This commit tries another way where capacities are non-extendable and set to sufficiently high values. --- scripts/prepare_sector_network.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 76b71fc8..7fcadacb 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -1911,10 +1911,10 @@ def add_biomass(n, costs): biomass_transport.index, bus0=biomass_transport.bus0 + " solid biomass", bus1=biomass_transport.bus1 + " solid biomass", - p_nom_extendable=True, + p_nom_extendable=False, + p_nom=5e4, length=biomass_transport.length.values, marginal_cost=biomass_transport.costs * biomass_transport.length.values, - capital_cost=1, carrier="solid biomass transport" ) From 0681cf93ab4641ea081a5b112927e48afc4e2c15 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 25 Jan 2023 09:08:51 +0100 Subject: [PATCH 40/56] fix hydrogen network plotting without retrofitting --- scripts/plot_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 53c52187..3d0641d5 100644 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -310,7 +310,7 @@ def plot_h2_map(network, regions): else: - h2_total = h2_new + h2_total = h2_new.p_nom_opt link_widths_total = h2_total / linewidth_factor From a870b603f45f30c35291f6fb4a5a8c5b6add0032 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sat, 28 Jan 2023 08:15:43 +0100 Subject: [PATCH 41/56] automatically retrieve technology-data, no git clone --- .github/workflows/ci.yaml | 3 +-- Snakefile | 24 ++++++++++++++++-------- config.default.yaml | 3 ++- doc/installation.rst | 9 --------- test/config.myopic.yaml | 3 ++- test/config.overnight.yaml | 3 ++- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index da984fd3..648e5cc2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -52,10 +52,9 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Clone pypsa-eur and technology-data repositories + - name: Clone pypsa-eur subworkflow run: | git clone https://github.com/pypsa/pypsa-eur ../pypsa-eur - git clone https://github.com/pypsa/technology-data ../technology-data cp ../pypsa-eur/test/config.test1.yaml ../pypsa-eur/config.yaml - name: Setup secrets diff --git a/Snakefile b/Snakefile index 90fcfb56..95e79502 100644 --- a/Snakefile +++ b/Snakefile @@ -1,6 +1,6 @@ from os.path import exists -from shutil import copyfile +from shutil import copyfile, move from snakemake.remote.HTTP import RemoteProvider as HTTPRemoteProvider HTTP = HTTPRemoteProvider() @@ -21,7 +21,6 @@ wildcard_constraints: SDIR = config['summary_dir'] + '/' + config['run'] RDIR = config['results_dir'] + config['run'] -CDIR = config['costs_dir'] subworkflow pypsaeur: @@ -72,6 +71,15 @@ if config.get('retrieve_sector_databundle', True): script: 'scripts/retrieve_sector_databundle.py' +if config.get("retrieve_cost_data", True): + rule retrieve_cost_data: + input: HTTP.remote("raw.githubusercontent.com/PyPSA/technology-data/{}/outputs/".format(config['costs']['version']) + "costs_{year}.csv", keep_local=True) + output: "data/costs_{year}.csv" + log: "logs/" + RDIR + "retrieve_cost_data_{year}.log", + resources: mem_mb=1000, + run: move(input[0], output[0]) + + rule build_population_layouts: input: nuts3_shapes=pypsaeur('resources/nuts3_shapes.geojson'), @@ -483,7 +491,7 @@ rule prepare_sector_network: co2="data/eea/UNFCCC_v23.csv", biomass_potentials='resources/biomass_potentials_s{simpl}_{clusters}.csv', heat_profile="data/heat_load_profile_BDEW.csv", - costs=CDIR + "costs_{}.csv".format(config['costs']['year']) if config["foresight"] == "overnight" else CDIR + "costs_{planning_horizons}.csv", + costs="data/costs_{}.csv".format(config['costs']['year']) if config["foresight"] == "overnight" else "data/costs_{planning_horizons}.csv", profile_offwind_ac=pypsaeur("resources/profile_offwind-ac.nc"), profile_offwind_dc=pypsaeur("resources/profile_offwind-dc.nc"), h2_cavern="resources/salt_cavern_potentials_s{simpl}_{clusters}.csv", @@ -557,7 +565,7 @@ rule make_summary: RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", **config['scenario'] ), - costs=CDIR + "costs_{}.csv".format(config['costs']['year']) if config["foresight"] == "overnight" else CDIR + "costs_{}.csv".format(config['scenario']['planning_horizons'][0]), + costs="data/costs_{}.csv".format(config['costs']['year']) if config["foresight"] == "overnight" else "data/costs_{}.csv".format(config['scenario']['planning_horizons'][0]), plots=expand( RDIR + "/maps/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", **config['scenario'] @@ -607,7 +615,7 @@ if config["foresight"] == "overnight": input: overrides="data/override_component_attrs", network=RDIR + "/prenetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", - costs=CDIR + "costs_{}.csv".format(config['costs']['year']), + costs="data/costs_{}.csv".format(config['costs']['year']), config=SDIR + '/configs/config.yaml', #env=SDIR + '/configs/environment.yaml', output: RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc" @@ -632,7 +640,7 @@ if config["foresight"] == "myopic": busmap_s=pypsaeur("resources/busmap_elec_s{simpl}.csv"), busmap=pypsaeur("resources/busmap_elec_s{simpl}_{clusters}.csv"), clustered_pop_layout="resources/pop_layout_elec_s{simpl}_{clusters}.csv", - costs=CDIR + "costs_{}.csv".format(config['scenario']['planning_horizons'][0]), + costs="data/costs_{}.csv".format(config['scenario']['planning_horizons'][0]), cop_soil_total="resources/cop_soil_total_elec_s{simpl}_{clusters}.nc", cop_air_total="resources/cop_air_total_elec_s{simpl}_{clusters}.nc", existing_heating='data/existing_infrastructure/existing_heating_raw.csv', @@ -661,7 +669,7 @@ if config["foresight"] == "myopic": overrides="data/override_component_attrs", network=RDIR + '/prenetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc', network_p=solved_previous_horizon, #solved network at previous time step - costs=CDIR + "costs_{planning_horizons}.csv", + costs="data/costs_{planning_horizons}.csv", cop_soil_total="resources/cop_soil_total_elec_s{simpl}_{clusters}.nc", cop_air_total="resources/cop_air_total_elec_s{simpl}_{clusters}.nc" output: RDIR + "/prenetworks-brownfield/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc" @@ -678,7 +686,7 @@ if config["foresight"] == "myopic": input: overrides="data/override_component_attrs", network=RDIR + "/prenetworks-brownfield/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc", - costs=CDIR + "costs_{planning_horizons}.csv", + costs="data/costs_{planning_horizons}.csv", config=SDIR + '/configs/config.yaml' output: RDIR + "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_{planning_horizons}.nc" shadow: "shallow" diff --git a/config.default.yaml b/config.default.yaml index ee1c5059..27cbcba7 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -3,10 +3,10 @@ version: 0.6.0 logging_level: INFO retrieve_sector_databundle: true +retrieve_cost_data: true results_dir: results/ summary_dir: results -costs_dir: ../technology-data/outputs/ run: your-run-name # use this to keep track of runs with different settings foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) # if you use myopic or perfect foresight, set the investment years in "planning_horizons" below @@ -338,6 +338,7 @@ industry: costs: year: 2030 + version: v0.4.0 lifetime: 25 #default lifetime # From a Lion Hirth paper, also reflects average of Noothout et al 2016 discountrate: 0.07 diff --git a/doc/installation.rst b/doc/installation.rst index f5cb7c7a..029f06ee 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -25,15 +25,6 @@ then download and unpack all the PyPSA-Eur data files by running the following s projects/pypsa-eur % snakemake -j 1 retrieve_databundle -Clone technology-data repository -================================ - -Next install the technology assumptions database `technology-data `_ by creating a parallel directory: - -.. code:: bash - - projects % git clone https://github.com/PyPSA/technology-data.git - Clone PyPSA-Eur-Sec repository ============================== diff --git a/test/config.myopic.yaml b/test/config.myopic.yaml index d0a6a918..934a4527 100644 --- a/test/config.myopic.yaml +++ b/test/config.myopic.yaml @@ -3,10 +3,10 @@ version: 0.6.0 logging_level: INFO retrieve_sector_databundle: true +retrieve_cost_data: true results_dir: results/ summary_dir: results -costs_dir: ../technology-data/outputs/ run: test-myopic # use this to keep track of runs with different settings foresight: myopic # options are overnight, myopic, perfect (perfect is not yet implemented) # if you use myopic or perfect foresight, set the investment years in "planning_horizons" below @@ -320,6 +320,7 @@ industry: costs: year: 2030 + version: v0.4.0 lifetime: 25 #default lifetime # From a Lion Hirth paper, also reflects average of Noothout et al 2016 discountrate: 0.07 diff --git a/test/config.overnight.yaml b/test/config.overnight.yaml index 1dc314dd..a92596e4 100644 --- a/test/config.overnight.yaml +++ b/test/config.overnight.yaml @@ -3,10 +3,10 @@ version: 0.6.0 logging_level: INFO retrieve_sector_databundle: true +retrieve_cost_data: true results_dir: results/ summary_dir: results -costs_dir: ../technology-data/outputs/ run: test-overnight # use this to keep track of runs with different settings foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented) # if you use myopic or perfect foresight, set the investment years in "planning_horizons" below @@ -318,6 +318,7 @@ industry: costs: year: 2030 + version: v0.4.0 lifetime: 25 #default lifetime # From a Lion Hirth paper, also reflects average of Noothout et al 2016 discountrate: 0.07 From 984ab9350c4c05ecad3f9a3be7c628a4d478be59 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Mon, 30 Jan 2023 11:54:19 +0100 Subject: [PATCH 42/56] Update scripts/prepare_sector_network.py --- scripts/prepare_sector_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index e07c672f..89d774ca 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2920,7 +2920,7 @@ if __name__ == "__main__": first_year_myopic = ((snakemake.config["foresight"] == 'myopic') and (snakemake.config["scenario"]["planning_horizons"][0]==investment_year)) - if options["cluster_heat_buses"] and not first_year_myopic: + if options.get("cluster_heat_buses", False) and not first_year_myopic: cluster_heat_buses(n) From 4a2da0a5f4d51c3bb725348a4c6bf14def11bd35 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Mon, 30 Jan 2023 11:55:40 +0100 Subject: [PATCH 43/56] Update scripts/add_existing_baseyear.py --- scripts/add_existing_baseyear.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/add_existing_baseyear.py b/scripts/add_existing_baseyear.py index 3618f441..8e274d62 100644 --- a/scripts/add_existing_baseyear.py +++ b/scripts/add_existing_baseyear.py @@ -563,6 +563,9 @@ if __name__ == "__main__": add_heating_capacities_installed_before_baseyear(n, baseyear, grouping_years_heat, ashp_cop, gshp_cop, time_dep_hp_cop, costs, default_lifetime) + if options.get("cluster_heat_buses", False): + cluster_heat_buses(n) + n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards))) n.export_to_netcdf(snakemake.output[0]) From 7982a37b6de6d85cb531ad14e185c988c85b2e9f Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Mon, 30 Jan 2023 11:56:01 +0100 Subject: [PATCH 44/56] Update config.default.yaml --- config.default.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.default.yaml b/config.default.yaml index 5ab444e3..e165e895 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -160,7 +160,7 @@ sector: 2040: 0.6 2050: 1.0 district_heating_loss: 0.15 - cluster_heat_buses: False # cluster residential and service heat buses to one to save memory + cluster_heat_buses: false # cluster residential and service heat buses to one to save memory bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value transport_heating_deadband_upper: 20. From a0b18a8fcdb24ef4cae7ded90e140e233cb10794 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Mon, 6 Feb 2023 09:46:24 +0100 Subject: [PATCH 45/56] manage process emissions in spatial --- scripts/prepare_sector_network.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 7fcadacb..26d2b2d3 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -65,10 +65,12 @@ def define_spatial(nodes, options): spatial.co2.nodes = nodes + " co2 stored" spatial.co2.locations = nodes spatial.co2.vents = nodes + " co2 vent" + spatial.co2.process_emissions = nodes + " process emissions" else: spatial.co2.nodes = ["co2 stored"] spatial.co2.locations = ["EU"] spatial.co2.vents = ["co2 vent"] + spatial.co2.process_emissions = ["process emissions"] spatial.co2.df = pd.DataFrame(vars(spatial.co2), index=nodes) @@ -2408,8 +2410,8 @@ def add_industry(n, costs): ) n.add("Bus", - "process emissions", - location="EU", + spatial.co2.process_emissions, + location=spatial.co2.locations, carrier="process emissions", unit="t_co2" ) @@ -2417,15 +2419,15 @@ def add_industry(n, costs): # this should be process emissions fossil+feedstock # then need load on atmosphere for feedstock emissions that are currently going to atmosphere via Link Fischer-Tropsch demand n.add("Load", - "process emissions", - bus="process emissions", + spatial.co2.process_emissions, + bus=spatial.co2.process_emissions, carrier="process emissions", p_set=-industrial_demand.loc[nodes,["process emission", "process emission from feedstock"]].sum(axis=1).sum() / 8760 ) n.add("Link", - "process emissions", - bus0="process emissions", + spatial.co2.process_emissions, + bus0=spatial.co2.process_emissions, bus1="co2 atmosphere", carrier="process emissions", p_nom_extendable=True, @@ -2436,7 +2438,7 @@ def add_industry(n, costs): n.madd("Link", spatial.co2.locations, suffix=" process emissions CC", - bus0="process emissions", + bus0=spatial.co2.process_emissions, bus1="co2 atmosphere", bus2=spatial.co2.nodes, carrier="process emissions CC", From ad8ccf3b25d72b3635cc6668b75572319bac539c Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Mon, 6 Feb 2023 09:52:35 +0100 Subject: [PATCH 46/56] fix process emission localisation with co2 (not) spatially resolved --- scripts/prepare_sector_network.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 26d2b2d3..7a7edc25 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2416,13 +2416,19 @@ def add_industry(n, costs): unit="t_co2" ) + sel = ["process emission", "process emission from feedstock"] + if options.get("co2_spatial", options["co2network"]): + p_set = -industrial_demand.loc[nodes, sel].sum(axis=1).rename(index=lambda x: x + " process emissions") / 8760 + else: + p_set = -industrial_demand.loc[nodes, sel].sum(axis=1).sum() / 8760 + # this should be process emissions fossil+feedstock # then need load on atmosphere for feedstock emissions that are currently going to atmosphere via Link Fischer-Tropsch demand n.add("Load", spatial.co2.process_emissions, bus=spatial.co2.process_emissions, carrier="process emissions", - p_set=-industrial_demand.loc[nodes,["process emission", "process emission from feedstock"]].sum(axis=1).sum() / 8760 + p_set=p_set, ) n.add("Link", From fcf527d946506b90db1829799f1e73e1a4748326 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 7 Feb 2023 09:50:44 +0100 Subject: [PATCH 47/56] update gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index a7049efe..9371d303 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,9 @@ gurobi.log /data/Industrial_Database.csv /data/retro/tabula-calculator-calcsetbuilding.csv /data/nuts* +data/gas_network/scigrid-gas/ +dask-worker-space/ +publications.jrc.ec.europa.eu/ *.org From 94fb6c646cdd06fbc3bc5f9276c7968e5bb647bb Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 8 Feb 2023 22:57:01 +0100 Subject: [PATCH 48/56] prepare sector: add allam cycle build sequestration: fix input for new snakemake versions --- scripts/build_sequestration_potentials.py | 2 +- scripts/make_summary.py | 4 +-- scripts/prepare_sector_network.py | 34 +++++++++++++++++++---- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/scripts/build_sequestration_potentials.py b/scripts/build_sequestration_potentials.py index cf8ab6d6..3b06f665 100644 --- a/scripts/build_sequestration_potentials.py +++ b/scripts/build_sequestration_potentials.py @@ -31,7 +31,7 @@ if __name__ == "__main__": threshold = 3 include_onshore = False - gdf = gpd.read_file(snakemake.input.sequestration_potential) + gdf = gpd.read_file(snakemake.input.sequestration_potential[0]) regions = gpd.read_file(snakemake.input.regions_offshore) if include_onshore: diff --git a/scripts/make_summary.py b/scripts/make_summary.py index f9c74c89..06680cb4 100644 --- a/scripts/make_summary.py +++ b/scripts/make_summary.py @@ -273,7 +273,7 @@ def calculate_supply(n, label, supply): for end in [col[3:] for col in c.df.columns if col[:3] == "bus"]: - items = c.df.index[c.df["bus" + end].map(bus_map, na_action=None)] + items = c.df.index[c.df["bus" + end].map(bus_map).fillna(False)] if len(items) == 0: continue @@ -318,7 +318,7 @@ def calculate_supply_energy(n, label, supply_energy): for end in [col[3:] for col in c.df.columns if col[:3] == "bus"]: - items = c.df.index[c.df["bus" + str(end)].map(bus_map, na_action=None)] + items = c.df.index[c.df["bus" + str(end)].map(bus_map).fillna(False)] if len(items) == 0: continue diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 7a7edc25..4fcdbf84 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -61,7 +61,7 @@ def define_spatial(nodes, options): spatial.co2 = SimpleNamespace() - if options.get("co2_spatial", options["co2network"]): + if options["co2_spatial"]: spatial.co2.nodes = nodes + " co2 stored" spatial.co2.locations = nodes spatial.co2.vents = nodes + " co2 vent" @@ -433,6 +433,7 @@ def add_carrier_buses(n, carrier, nodes=None): e_nom_extendable=True, e_cyclic=True, carrier=carrier, + capital_cost=0.2 * costs.at[carrier, "discount rate"] # preliminary value to avoid zeros ) n.madd("Generator", @@ -563,6 +564,28 @@ def add_co2_network(n, costs): ) +def add_allam(n, costs): + + logger.info("Adding Allam cycle generators") + + nodes = pop_layout.index + + n.madd("Link", + nodes + " allam", + bus0=spatial.gas.df.loc[nodes, "nodes"].values, + bus1=nodes, + bus2=spatial.co2.df.loc[nodes, "nodes"].values, + carrier="allam", + p_nom_extendable=True, + # TODO: add costs to technology-data + capital_cost=0.6*1.5e6*0.1, # efficiency * EUR/MW * annuity + marginal_cost=2, + efficiency=0.6, + efficiency2=costs.at['gas', 'CO2 intensity'], + lifetime=30., + ) + + def add_dac(n, costs): heat_carriers = ["urban central heat", "services urban decentral heat"] @@ -2409,7 +2432,7 @@ def add_industry(n, costs): p_set=industrial_demand.loc[nodes, "electricity"] / 8760 ) - n.add("Bus", + n.madd("Bus", spatial.co2.process_emissions, location=spatial.co2.locations, carrier="process emissions", @@ -2417,21 +2440,21 @@ def add_industry(n, costs): ) sel = ["process emission", "process emission from feedstock"] - if options.get("co2_spatial", options["co2network"]): + if options["co2_spatial"] or options["co2network"]: p_set = -industrial_demand.loc[nodes, sel].sum(axis=1).rename(index=lambda x: x + " process emissions") / 8760 else: p_set = -industrial_demand.loc[nodes, sel].sum(axis=1).sum() / 8760 # this should be process emissions fossil+feedstock # then need load on atmosphere for feedstock emissions that are currently going to atmosphere via Link Fischer-Tropsch demand - n.add("Load", + n.madd("Load", spatial.co2.process_emissions, bus=spatial.co2.process_emissions, carrier="process emissions", p_set=p_set, ) - n.add("Link", + n.madd("Link", spatial.co2.process_emissions, bus0=spatial.co2.process_emissions, bus1="co2 atmosphere", @@ -2796,6 +2819,7 @@ if __name__ == "__main__": if options["co2network"]: add_co2_network(n, costs) + add_allam(n, costs) solver_name = snakemake.config["solving"]["solver"]["name"] n = set_temporal_aggregation(n, opts, solver_name) From 01db4f4408434ae705e88874b452e49740ec1e0d Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Fri, 10 Feb 2023 07:49:45 +0100 Subject: [PATCH 49/56] compatibility with technology-data v0.5 --- config.default.yaml | 2 +- scripts/prepare_sector_network.py | 2 +- test/config.myopic.yaml | 2 +- test/config.overnight.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 458309f6..f9698f9f 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -339,7 +339,7 @@ industry: costs: year: 2030 - version: v0.4.0 + version: v0.5.0 lifetime: 25 #default lifetime # From a Lion Hirth paper, also reflects average of Noothout et al 2016 discountrate: 0.07 diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 89d774ca..a4e9f790 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -997,7 +997,7 @@ def add_storage_and_grids(n, costs): ) # hydrogen stored overground (where not already underground) - h2_capital_cost = costs.at["hydrogen storage tank incl. compressor", "fixed"] + h2_capital_cost = costs.at["hydrogen storage tank type 1 including compressor", "fixed"] nodes_overground = h2_caverns.index.symmetric_difference(nodes) n.madd("Store", diff --git a/test/config.myopic.yaml b/test/config.myopic.yaml index 934a4527..0228c47a 100644 --- a/test/config.myopic.yaml +++ b/test/config.myopic.yaml @@ -320,7 +320,7 @@ industry: costs: year: 2030 - version: v0.4.0 + version: v0.5.0 lifetime: 25 #default lifetime # From a Lion Hirth paper, also reflects average of Noothout et al 2016 discountrate: 0.07 diff --git a/test/config.overnight.yaml b/test/config.overnight.yaml index a92596e4..d50489f3 100644 --- a/test/config.overnight.yaml +++ b/test/config.overnight.yaml @@ -318,7 +318,7 @@ industry: costs: year: 2030 - version: v0.4.0 + version: v0.5.0 lifetime: 25 #default lifetime # From a Lion Hirth paper, also reflects average of Noothout et al 2016 discountrate: 0.07 From d54894eecc9198a955d202f8e57fa942d8f181dd Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Sat, 11 Feb 2023 09:37:09 +0100 Subject: [PATCH 50/56] pandas update: closed to inclusive --- config.default.yaml | 2 +- test/config.myopic.yaml | 2 +- test/config.overnight.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 458309f6..272b9c12 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -66,7 +66,7 @@ snapshots: # arguments to pd.date_range start: "2013-01-01" end: "2014-01-01" - closed: left # end is not inclusive + inclusive: left # end is not inclusive atlite: cutout: ../pypsa-eur/cutouts/europe-2013-era5.nc diff --git a/test/config.myopic.yaml b/test/config.myopic.yaml index 934a4527..35217c5f 100644 --- a/test/config.myopic.yaml +++ b/test/config.myopic.yaml @@ -61,7 +61,7 @@ snapshots: # arguments to pd.date_range start: "2013-03-01" end: "2013-04-01" - closed: left # end is not inclusive + inclusive: left # end is not inclusive atlite: cutout: ../pypsa-eur/cutouts/be-03-2013-era5.nc diff --git a/test/config.overnight.yaml b/test/config.overnight.yaml index a92596e4..bba37adb 100644 --- a/test/config.overnight.yaml +++ b/test/config.overnight.yaml @@ -59,7 +59,7 @@ snapshots: # arguments to pd.date_range start: "2013-03-01" end: "2013-04-01" - closed: left # end is not inclusive + inclusive: left # end is not inclusive atlite: cutout: ../pypsa-eur/cutouts/be-03-2013-era5.nc From 5d08dfc2ec9ee3f3e2a3653d67d7e273e9294b10 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 15 Feb 2023 13:47:57 +0100 Subject: [PATCH 51/56] add min part load for FT and methanolisation via p_min_pu --- config.default.yaml | 2 ++ doc/release_notes.rst | 2 ++ scripts/prepare_sector_network.py | 2 ++ 3 files changed, 6 insertions(+) diff --git a/config.default.yaml b/config.default.yaml index e939f9c0..092fafa4 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -261,6 +261,8 @@ sector: - nearshore # within 50 km of sea # - offshore ammonia: false # can be false (no NH3 carrier), true (copperplated NH3), "regional" (regionalised NH3 without network) + min_part_load_fischer_tropsch: 0.9 # p_min_pu + min_part_load_methanolisation: 0.5 # p_min_pu use_fischer_tropsch_waste_heat: true use_fuel_cell_waste_heat: true electricity_distribution_grid: true diff --git a/doc/release_notes.rst b/doc/release_notes.rst index fd9a3549..1eef24cb 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -65,6 +65,8 @@ incorporates retrofitting options to hydrogen. * Add option for BtL (Biomass to liquid fuel/oil) with and without CC +* Add option for minimum part load for Fischer-Tropsch plants (default: 90%) and methanolisation plants (default: 50%). + * Units are assigned to the buses. These only provide a better understanding. The specifications of the units are not taken into account in the optimisation, which means that no automatic conversion of units takes place. * Option ``retrieve_sector_databundle`` to automatically retrieve and extract data bundle. diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index a4e9f790..5507a201 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2227,6 +2227,7 @@ def add_industry(n, costs): bus3=spatial.co2.nodes, carrier="methanolisation", p_nom_extendable=True, + p_min_pu=options.get("min_part_load_methanolisation", 0), capital_cost=costs.at["methanolisation", 'fixed'] * options["MWh_MeOH_per_MWh_H2"], # EUR/MW_H2/a lifetime=costs.at["methanolisation", 'lifetime'], efficiency=options["MWh_MeOH_per_MWh_H2"], @@ -2334,6 +2335,7 @@ def add_industry(n, costs): capital_cost=costs.at["Fischer-Tropsch", 'fixed'] * costs.at["Fischer-Tropsch", 'efficiency'], # EUR/MW_H2/a efficiency2=-costs.at["oil", 'CO2 intensity'] * costs.at["Fischer-Tropsch", 'efficiency'], p_nom_extendable=True, + p_min_pu=options.get("min_part_load_fischer_tropsch", 0), lifetime=costs.at['Fischer-Tropsch', 'lifetime'] ) From b1b289fc454ff01641dde8298f4fca8061fbf700 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 15 Feb 2023 14:01:00 +0100 Subject: [PATCH 52/56] add option to use electrolysis waste heat in district heating --- config.default.yaml | 1 + scripts/prepare_sector_network.py | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/config.default.yaml b/config.default.yaml index e939f9c0..e639938a 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -263,6 +263,7 @@ sector: ammonia: false # can be false (no NH3 carrier), true (copperplated NH3), "regional" (regionalised NH3 without network) use_fischer_tropsch_waste_heat: true use_fuel_cell_waste_heat: true + use_electrolysis_waste_heat: false electricity_distribution_grid: true electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv electricity_grid_connection: true # only applies to onshore wind and utility PV diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index a4e9f790..f5c3e225 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2470,6 +2470,11 @@ def add_waste_heat(n): n.links.loc[urban_central + " Fischer-Tropsch", "bus3"] = urban_central + " urban central heat" n.links.loc[urban_central + " Fischer-Tropsch", "efficiency3"] = 0.95 - n.links.loc[urban_central + " Fischer-Tropsch", "efficiency"] + # TODO integrate useable waste heat efficiency into technology-data from DEA + if options.get('use_electrolysis_waste_heat', False): + n.links.loc[urban_central + " H2 Electrolysis", "bus2"] = urban_central + " urban central heat" + n.links.loc[urban_central + " H2 Electrolysis", "efficiency2"] = 0.84 - n.links.loc[urban_central + " H2 Electrolysis", "efficiency"] + if options['use_fuel_cell_waste_heat']: n.links.loc[urban_central + " H2 Fuel Cell", "bus2"] = urban_central + " urban central heat" n.links.loc[urban_central + " H2 Fuel Cell", "efficiency2"] = 0.95 - n.links.loc[urban_central + " H2 Fuel Cell", "efficiency"] From d2f2af9245a2f750c09092caeb362c862230a87f Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 15 Feb 2023 19:04:52 +0100 Subject: [PATCH 53/56] add release note --- doc/release_notes.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/release_notes.rst b/doc/release_notes.rst index fd9a3549..966cdc88 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -69,6 +69,8 @@ incorporates retrofitting options to hydrogen. * Option ``retrieve_sector_databundle`` to automatically retrieve and extract data bundle. +* Add option to use waste heat of electrolysis in district heating networks (``use_electrolysis_waste_heat``). + * Add regionalised hydrogen salt cavern storage potentials from `Technical Potential of Salt Caverns for Hydrogen Storage in Europe `_. * Add option to sweep the global CO2 sequestration potentials with keyword ``seq200`` in the ``{sector_opts}`` wildcard (for limit of 200 Mt CO2). From ccde2e7f931ee1a6a74a10ccb0b32f80039a90b9 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Thu, 16 Feb 2023 17:21:58 +0100 Subject: [PATCH 54/56] make sequestration options configurable --- .gitignore | 4 +++ Snakefile | 2 +- config.default.yaml | 13 ++++++-- scripts/build_sequestration_potentials.py | 13 +++----- scripts/prepare_sector_network.py | 38 ++++++++++++----------- 5 files changed, 39 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 9371d303..e3f625c3 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,7 @@ doc/_build *.xls *.geojson + +*.ipynb + +data/costs_* \ No newline at end of file diff --git a/Snakefile b/Snakefile index ef1ed840..b14adacf 100644 --- a/Snakefile +++ b/Snakefile @@ -288,7 +288,7 @@ else: build_biomass_transport_costs_output = {} -if config["sector"].get("sequestration_potential", False): +if config["sector"]["regional_co2_sequestration_potential"]["enable"]: rule build_sequestration_potentials: input: sequestration_potential=HTTP.remote("https://raw.githubusercontent.com/ericzhou571/Co2Storage/main/resources/complete_map_2020_unit_Mt.geojson", keep_local=True), diff --git a/config.default.yaml b/config.default.yaml index d09ff950..c1172bd1 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -250,8 +250,15 @@ sector: coal_cc: false dac: true co2_vent: false + allam_cycle: false SMR: true - sequestration_potential: true # geological co2 storage potential + regional_co2_sequestration_potential: + enable: false # enable regionally resolved geological co2 storage potential + attribute: 'conservative estimate Mt' + include_onshore: false # include onshore sequestration potentials + min_size: 3 # Gt, sites with lower potential will be excluded + max_size: 25 # Gt, max sequestration potential for any one site, TODO research suitable value + years_of_storage: 25 # years until potential exhausted at optimised annual rate co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2 co2_spatial: false @@ -281,8 +288,8 @@ sector: gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation gas_distribution_grid: true gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv - biomass_spatial: false # biomass transport between nodes - biomass_transport: false # biomass transport between nodes + biomass_spatial: false # regionally resolve biomass (e.g. potentials) + biomass_transport: false # allow transport of solid biomass between nodes conventional_generation: # generator : carrier OCGT: gas biomass_to_liquid: false diff --git a/scripts/build_sequestration_potentials.py b/scripts/build_sequestration_potentials.py index 3b06f665..4983640b 100644 --- a/scripts/build_sequestration_potentials.py +++ b/scripts/build_sequestration_potentials.py @@ -27,22 +27,17 @@ if __name__ == "__main__": clusters="181" ) - # TODO move to config.yaml - threshold = 3 - include_onshore = False + cf = snakemake.config["sector"]["regional_co2_sequestration_potential"] gdf = gpd.read_file(snakemake.input.sequestration_potential[0]) regions = gpd.read_file(snakemake.input.regions_offshore) - if include_onshore: + if cf["include_onshore"]: onregions = gpd.read_file(snakemake.input.regions_onshore) regions = pd.concat([regions, onregions]).dissolve(by='name').reset_index() - attr = snakemake.config['sector']["sequestration_potential"] - kwargs = dict(attr=attr, threshold=threshold) if isinstance(attr, str) else {} + s = allocate_sequestration_potential(gdf, regions, attr=cf["attribute"], threshold=cf["min_size"]) - s = allocate_sequestration_potential(gdf, regions, **kwargs) - - s = s.where(s>threshold).dropna() + s = s.where(s>cf["min_size"]).dropna() s.to_csv(snakemake.output.sequestration_potential) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 5348a79e..a47c5710 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -517,10 +517,9 @@ def add_co2_tracking(n, options): unit="t_co2" ) - if options["sequestration_potential"]: - # TODO make configurable options - upper_limit = 25000 # Mt - annualiser = 25 # TODO research suitable value + if options["regional_co2_sequestration_potential"]["enable"]: + upper_limit = options["regional_co2_sequestration_potential"]["max_size"] * 1e3 # Mt + annualiser = options["regional_co2_sequestration_potential"]["years_of_storage"] e_nom_max = pd.read_csv(snakemake.input.sequestration_potential, index_col=0).squeeze() e_nom_max = e_nom_max.reindex(spatial.co2.locations).fillna(0.).clip(upper=upper_limit).mul(1e6) / annualiser # t e_nom_max = e_nom_max.rename(index=lambda x: x + " co2 stored") @@ -570,24 +569,25 @@ def add_co2_network(n, costs): def add_allam(n, costs): - logger.info("Adding Allam cycle generators") + logger.info("Adding Allam cycle gas power plants.") nodes = pop_layout.index n.madd("Link", - nodes + " allam", - bus0=spatial.gas.df.loc[nodes, "nodes"].values, - bus1=nodes, - bus2=spatial.co2.df.loc[nodes, "nodes"].values, - carrier="allam", - p_nom_extendable=True, - # TODO: add costs to technology-data - capital_cost=0.6*1.5e6*0.1, # efficiency * EUR/MW * annuity - marginal_cost=2, - efficiency=0.6, - efficiency2=costs.at['gas', 'CO2 intensity'], - lifetime=30., - ) + nodes, + suffix=" allam", + bus0=spatial.gas.df.loc[nodes, "nodes"].values, + bus1=nodes, + bus2=spatial.co2.df.loc[nodes, "nodes"].values, + carrier="allam", + p_nom_extendable=True, + # TODO: add costs to technology-data + capital_cost=0.6*1.5e6*0.1, # efficiency * EUR/MW * annuity + marginal_cost=2, + efficiency=0.6, + efficiency2=costs.at['gas', 'CO2 intensity'], + lifetime=30., + ) def add_dac(n, costs): @@ -2923,6 +2923,8 @@ if __name__ == "__main__": if options["co2network"]: add_co2_network(n, costs) + + if options["allam_cycle"]: add_allam(n, costs) solver_name = snakemake.config["solving"]["solver"]["name"] From b2ea0576cdbe7b034b20ce6b819a72bfde12a1e4 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Thu, 16 Feb 2023 17:32:36 +0100 Subject: [PATCH 55/56] add release note --- doc/release_notes.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 210de55a..4700f27b 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -97,6 +97,30 @@ incorporates retrofitting options to hydrogen. as explicit ICE shares for land transport (``land_transport_ice_share``) and agriculture machinery (``agriculture_machinery_oil_share``). +* Add option to spatially resolve carrier representing stored carbon dioxide + (``co2_spatial``). This allows for more detailed modelling of CCUTS, e.g. + regarding the capturing of industrial process emissions, usage as feedstock + for electrofuels, transport of carbon dioxide, and geological sequestration sites. + +* Add option for planning a new carbon dioxide network (``co2network``). + + +* Add option for regionally-resolved geological carbon dioxide sequestration + potentials through new rule ``build_sequestration_potentials`` based on + `CO2StoP `_. This + can be controlled in the section ``regional_co2_sequestration_potential`` of + the ``config.yaml``. It includes options to select the level of conservatism, + whether onshore potentials should be included, the respective upper and lower + limits per region, and an annualisation parameter for the cumulative + potential. The defaults are preliminary and will be validated the next + release. + +* Separate option to regionally resolve biomass (``biomass_spatial``) from + option to allow biomass transport (``biomass_transport``). + +* Add option to include `Allam cycle gas power plants + `_ (``allam_cycle``). + **Bugfixes** * The CO2 sequestration limit implemented as GlobalConstraint (introduced in the previous version) From 126a5be729516d4c3e61dbf48d147346e7c91969 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Thu, 16 Feb 2023 17:34:13 +0100 Subject: [PATCH 56/56] add new options to test config files --- test/config.myopic.yaml | 2 ++ test/config.overnight.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/test/config.myopic.yaml b/test/config.myopic.yaml index 3719921e..255d6734 100644 --- a/test/config.myopic.yaml +++ b/test/config.myopic.yaml @@ -235,6 +235,8 @@ sector: dac: true co2_vent: true SMR: true + regional_co2_sequestration_potential: + enable: false co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2 co2_network: false diff --git a/test/config.overnight.yaml b/test/config.overnight.yaml index 6663d393..a68ad540 100644 --- a/test/config.overnight.yaml +++ b/test/config.overnight.yaml @@ -233,6 +233,8 @@ sector: dac: true co2_vent: true SMR: true + regional_co2_sequestration_potential: + enable: false co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2 co2_network: false