From 70c795e059070f5d638ec1c5a9e81393e46ec649 Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Wed, 11 Dec 2024 16:47:31 +0100 Subject: [PATCH 01/11] Read in nodal_capacities for all years --- src/egon/data/datasets/scenario_capacities.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 609e1b16f..a1474da02 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -682,8 +682,9 @@ def eGon100_capacities(): / sources["eGon100RE"]["capacities"] ) - df = pd.read_csv(target_file, skiprows=5) - df.columns = ["component", "country", "carrier", "p_nom"] + df = pd.read_csv(target_file, delimiter=",", skiprows=3) + df.columns = ["component", "country", "carrier", "p_nom_2025", + "p_nom_2030", "p_nom_2035", "p_nom_2045"] df.set_index("carrier", inplace=True) From d1040a61542a321d8fd91f938229dd32e2c32b3f Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Wed, 11 Dec 2024 16:48:22 +0100 Subject: [PATCH 02/11] Rename heat technologies --- src/egon/data/datasets/scenario_capacities.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index a1474da02..292dd5e1c 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -704,12 +704,12 @@ def eGon100_capacities(): "H2", "Li ion", "home battery", - "residential rural water tanks charger", - "residential rural water tanks discharger", - "services rural water tanks charger", - "services rural water tanks discharger", - "residential rural water tanks", - "services rural water tanks", + "rural water tanks charger", + "rural water tanks discharger", + "urban decentral water tanks charger", + "urban decentral water tanks discharger", + "rural water tanks", + "urban decentral water tanks", "urban central water tanks", "urban central water tanks charger", "urban central water tanks discharger", From 8ef8d41cc69b1c2bca65ac09a47e185fedf8058e Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Wed, 11 Dec 2024 16:51:05 +0100 Subject: [PATCH 03/11] Insert data for all years in scenario capacities table --- src/egon/data/datasets/scenario_capacities.py | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 292dd5e1c..d98abc6f8 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -788,29 +788,35 @@ def eGon100_capacities(): # Reset index df = df.reset_index() - # Rename columns - df.rename( - {"p_nom": "capacity", "index": "carrier"}, axis="columns", inplace=True - ) + # Insert target capacities for all years + for year in ["2025", "2030", "2035", "2045"]: + df_year = df.rename( + {f"p_nom_{year}": "capacity", "index": "carrier"}, axis="columns" + ) + df_year.drop(df_year.columns[~df_year.columns.isin(["carrier", 'component', "capacity"])], axis="columns") - df["scenario_name"] = "eGon100RE" - df["nuts"] = "DE" + if year == "2045": + df_year["scenario_name"] = "eGon100RE" + else: + df_year["scenario_name"] = f"powerd{year}" - db.execute_sql( - f""" - DELETE FROM - {targets['scenario_capacities']['schema']}.{targets['scenario_capacities']['table']} - WHERE scenario_name='eGon100RE' - """ - ) + df_year["nuts"] = "DE" - df.to_sql( - targets["scenario_capacities"]["table"], - schema=targets["scenario_capacities"]["schema"], - con=db.engine(), - if_exists="append", - index=False, - ) + db.execute_sql( + f""" + DELETE FROM + {targets['scenario_capacities']['schema']}.{targets['scenario_capacities']['table']} + WHERE scenario_name='{df_year["scenario_name"].unique()[0]}' + """ + ) + + df_year.to_sql( + targets["scenario_capacities"]["table"], + schema=targets["scenario_capacities"]["schema"], + con=db.engine(), + if_exists="append", + index=False, + ) tasks = (create_table,) From f0b3b817c31c97160593a2fb06770f94e3b98209 Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Wed, 11 Dec 2024 16:52:34 +0100 Subject: [PATCH 04/11] Aggreagte rural heat and urban decentral heat Before this change, residential rural and services rural heat were combined here. But that is now part of pypsa-eur and not needed here anymore. --- src/egon/data/datasets/scenario_capacities.py | 45 +++++++------------ 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index d98abc6f8..044b4fc17 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -740,34 +740,23 @@ def eGon100_capacities(): df.p_nom[carrier] += df.p_nom[f"{carrier}_CC"] df = df.drop([f"{carrier}_CC"]) - # Aggregate residential and services rural heat supply - for merge_carrier in [ - "rural_resistive_heater", - "rural_ground_heat_pump", - "rural_gas_boiler", - "rural_solar_thermal", - ]: - if f"residential_{merge_carrier}" in df.index: - df = pd.concat( - [ - df, - pd.DataFrame( - index=[merge_carrier], - data={ - "p_nom": ( - df.p_nom[f"residential_{merge_carrier}"] - + df.p_nom[f"services_{merge_carrier}"] - ), - "component": df.component[ - f"residential_{merge_carrier}" - ], - }, - ), - ] - ) - df = df.drop( - [f"residential_{merge_carrier}", f"services_{merge_carrier}"] - ) + # Aggregate urban decentral and rural heat supply + for merge_carrier in df.index[ + df.index.str.startswith("urban_decentral")]: + + # Add capacity of urban decentral to coresponding rural technology + df.loc[ + merge_carrier.replace("urban_decentral", "rural")] += df.loc[ + merge_carrier] + + # Avoid summing up of component names + df.loc[ + merge_carrier.replace("urban_decentral", "rural"), + "component"] = df.loc[ + merge_carrier, "component"] + + # Drop urban decentral technology + df = df.drop(merge_carrier) # Rename carriers df.rename( From f90afe8056931be55a06b055f99f6397babafee7 Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Wed, 11 Dec 2024 16:53:50 +0100 Subject: [PATCH 05/11] Aggregate wind offshore technologies for scenario path --- src/egon/data/datasets/scenario_capacities.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 044b4fc17..160866279 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -721,19 +721,9 @@ def eGon100_capacities(): df.index = df.index.str.replace(" ", "_") # Aggregate offshore wind - df = pd.concat( - [ - df, - pd.DataFrame( - index=["wind_offshore"], - data={ - "p_nom": (df.p_nom["offwind-ac"] + df.p_nom["offwind-dc"]), - "component": df.component["offwind-ac"], - }, - ), - ] - ) - df = df.drop(["offwind-ac", "offwind-dc"]) + df.loc["wind_offshore"] = df[df.index.str.startswith("offwind")].sum(numeric_only=True) + df.loc["wind_offshore", "component"] = "generator" + df = df.drop(df.index[df.index.str.startswith("offwind")]) # Aggregate technologies with and without carbon_capture (CC) for carrier in ["SMR", "urban_central_gas_CHP"]: From b5c08a42b97ae12302b22c1216c082034078836d Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Wed, 11 Dec 2024 16:54:32 +0100 Subject: [PATCH 06/11] Aggregate _CC technologies for scenario path --- src/egon/data/datasets/scenario_capacities.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 160866279..238849449 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -726,8 +726,12 @@ def eGon100_capacities(): df = df.drop(df.index[df.index.str.startswith("offwind")]) # Aggregate technologies with and without carbon_capture (CC) - for carrier in ["SMR", "urban_central_gas_CHP"]: - df.p_nom[carrier] += df.p_nom[f"{carrier}_CC"] + for carrier in ["SMR", "urban_central_gas_CHP", "urban_central_solid_biomass_CHP"]: + df.loc[ + carrier, + ["p_nom_2025", "p_nom_2030", "p_nom_2035", "p_nom_2045"]] += df.loc[ + f"{carrier}_CC", + ["p_nom_2025", "p_nom_2030", "p_nom_2035", "p_nom_2045"]] df = df.drop([f"{carrier}_CC"]) # Aggregate urban decentral and rural heat supply From d520354a28600f1e1cbba85133f5266d3a7b09a8 Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Thu, 12 Dec 2024 10:32:48 +0100 Subject: [PATCH 07/11] Additional updates on new carriers from pypsa-eur --- src/egon/data/datasets/scenario_capacities.py | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 238849449..745a5ac7b 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -714,6 +714,23 @@ def eGon100_capacities(): "urban central water tanks charger", "urban central water tanks discharger", "H2 Fuel Cell", + "gas", + "SMR", + "SMR CC", + "Sabatier", + "biogas to gas", + "biogas to gas CC", + "gas for industry", + "gas for industry CC", + "methanolisation", + "EV battery", + "H2 Store", + "battery", + "battery charger", + "battery discharger", + "unsustainable biogas", + "biogas", + "Fischer-Tropsch", ] df = df[~df.index.isin(unused_carrier)] @@ -725,8 +742,18 @@ def eGon100_capacities(): df.loc["wind_offshore", "component"] = "generator" df = df.drop(df.index[df.index.str.startswith("offwind")]) + # Aggregate OCGT and CCGT + df.loc["gas"] = df[df.index.str.endswith("CGT")].sum(numeric_only=True) + df.loc["gas", "component"] = "link" + df = df.drop(df.index[df.index.str.endswith("CGT")]) + + # Aggregate hydro and pumped_hydro + df.loc["pumped_hydro"] = df.loc["PHS"] + df.loc["hydro"] + df.loc["pumped_hydro", "component"] = "storage_units" + df = df.drop(["PHS", "hydro"]) + # Aggregate technologies with and without carbon_capture (CC) - for carrier in ["SMR", "urban_central_gas_CHP", "urban_central_solid_biomass_CHP"]: + for carrier in ["urban_central_gas_CHP", "urban_central_solid_biomass_CHP"]: df.loc[ carrier, ["p_nom_2025", "p_nom_2030", "p_nom_2035", "p_nom_2045"]] += df.loc[ @@ -757,9 +784,6 @@ def eGon100_capacities(): { "onwind": "wind_onshore", "ror": "run_of_river", - "PHS": "pumped_hydro", - "OCGT": "gas", - "rural_ground_heat_pump": "residential_rural_heat_pump", "urban_central_air_heat_pump": "urban_central_heat_pump", "urban_central_solar_thermal": ( "urban_central_solar_thermal_collector" From 77b7aa53532734d97660fc293708273582792131 Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Thu, 12 Dec 2024 10:44:21 +0100 Subject: [PATCH 08/11] Aggregate solar and solar-hsat --- src/egon/data/datasets/scenario_capacities.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 745a5ac7b..aa465acd1 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -752,6 +752,11 @@ def eGon100_capacities(): df.loc["pumped_hydro", "component"] = "storage_units" df = df.drop(["PHS", "hydro"]) + # Aggregate solar and solar-hsat + df.loc["solar"] = df.loc["solar"] + df.loc["solar-hsat"] + df.loc["solar", "component"] = "generator" + df = df.drop(["solar-hsat"]) + # Aggregate technologies with and without carbon_capture (CC) for carrier in ["urban_central_gas_CHP", "urban_central_solid_biomass_CHP"]: df.loc[ From aef3ee0a0bbcac1128b4de47934143588073302e Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Mon, 13 Jan 2025 13:44:06 +0100 Subject: [PATCH 09/11] Aggregate rural_air_heat_pump and rural_ground_heat_pump --- src/egon/data/datasets/scenario_capacities.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index aa465acd1..2c251e84a 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -784,6 +784,12 @@ def eGon100_capacities(): # Drop urban decentral technology df = df.drop(merge_carrier) + # Aggregate rural air and rural ground heat pump + df.loc["rural_heat_pump"] = df.loc[ + "rural_air_heat_pump"] + df.loc["rural_ground_heat_pump"] + df.loc["rural_heat_pump", "component"] = "links" + df = df.drop(["rural_air_heat_pump", "rural_ground_heat_pump"]) + # Rename carriers df.rename( { From f120adc04327bd9b77f80172bf9be5c39b26c0f9 Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Mon, 13 Jan 2025 13:45:31 +0100 Subject: [PATCH 10/11] Standardize naming of components --- src/egon/data/datasets/scenario_capacities.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 2c251e84a..5eff94419 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -739,12 +739,12 @@ def eGon100_capacities(): # Aggregate offshore wind df.loc["wind_offshore"] = df[df.index.str.startswith("offwind")].sum(numeric_only=True) - df.loc["wind_offshore", "component"] = "generator" + df.loc["wind_offshore", "component"] = "generators" df = df.drop(df.index[df.index.str.startswith("offwind")]) # Aggregate OCGT and CCGT df.loc["gas"] = df[df.index.str.endswith("CGT")].sum(numeric_only=True) - df.loc["gas", "component"] = "link" + df.loc["gas", "component"] = "links" df = df.drop(df.index[df.index.str.endswith("CGT")]) # Aggregate hydro and pumped_hydro @@ -754,7 +754,7 @@ def eGon100_capacities(): # Aggregate solar and solar-hsat df.loc["solar"] = df.loc["solar"] + df.loc["solar-hsat"] - df.loc["solar", "component"] = "generator" + df.loc["solar", "component"] = "generators" df = df.drop(["solar-hsat"]) # Aggregate technologies with and without carbon_capture (CC) From 1e4516fa722784e1be4c93481424b474aeec232f Mon Sep 17 00:00:00 2001 From: ClaraBuettner Date: Mon, 13 Jan 2025 13:46:17 +0100 Subject: [PATCH 11/11] Update version number --- src/egon/data/datasets/scenario_capacities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/egon/data/datasets/scenario_capacities.py b/src/egon/data/datasets/scenario_capacities.py index 5eff94419..4f31f5d11 100755 --- a/src/egon/data/datasets/scenario_capacities.py +++ b/src/egon/data/datasets/scenario_capacities.py @@ -857,7 +857,7 @@ class ScenarioCapacities(Dataset): def __init__(self, dependencies): super().__init__( name="ScenarioCapacities", - version="0.0.15", + version="0.0.16", dependencies=dependencies, tasks=tasks, )