Skip to content

Commit

Permalink
Merge pull request #1080 from openego/fixes/-#1079_ogct_abroad
Browse files Browse the repository at this point in the history
Add gas turbines in foreign countries
  • Loading branch information
AmeliaNadal committed Feb 20, 2023
2 parents 7a7ea34 + b62e779 commit eb04d6d
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 3 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,8 @@ Bug Fixes
`#1015 <https://github.com/openego/eGon-data/issues/1015>`_
* Fix installed capacity per individual heat pump
`#1058 <https://github.com/openego/eGon-data/issues/1058>`_
* Add missing gas turbines abroad
`#1079 <https://github.com/openego/eGon-data/issues/1079>`_
* Fix gas generators abroad (marginal cost and e_nom_max)
`#1075 <https://github.com/openego/eGon-data/issues/1075>`_
* Fix gas pipelines isolated of the German grid
Expand Down
8 changes: 6 additions & 2 deletions src/egon/data/datasets/gas_neighbours/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
)
from egon.data.datasets.gas_neighbours.eGon2035 import (
grid,
insert_ocgt_abroad,
tyndp_gas_demand,
tyndp_gas_generation,
)
Expand All @@ -16,10 +17,13 @@ class GasNeighbours(Dataset):
def __init__(self, dependencies):
super().__init__(
name="GasNeighbours",
version="0.0.3",
version="0.0.4",
dependencies=dependencies,
tasks=(
{tyndp_gas_generation, tyndp_gas_demand, grid},
tyndp_gas_generation,
tyndp_gas_demand,
grid,
insert_ocgt_abroad,
insert_gas_neigbours_eGon100RE,
),
)
125 changes: 124 additions & 1 deletion src/egon/data/datasets/gas_neighbours/eGon2035.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
def get_foreign_gas_bus_id(carrier="CH4"):
"""Calculate the etrago bus id based on the geometry
Mapp node_ids from TYNDP and etragos bus_id
Map node_ids from TYNDP and etragos bus_id
Parameters
----------
Expand Down Expand Up @@ -1440,3 +1440,126 @@ def grid():
insert_gas_grid_capacities(
Neighbouring_pipe_capacities_list, scn_name="eGon2035"
)


def calculate_ocgt_capacities():
"""Calculate gas turbine capacities abroad for eGon2035
Calculate gas turbine capacities abroad for eGon2035 based on TYNDP
2020, scenario "Distributed Energy", interpolated between 2030 and 2040
Returns
-------
df_ocgt: pandas.DataFrame
Gas turbine capacities per foreign node
"""
sources = config.datasets()["gas_neighbours"]["sources"]

# insert installed capacities
file = zipfile.ZipFile(f"tyndp/{sources['tyndp_capacities']}")
df = pd.read_excel(
file.open("TYNDP-2020-Scenario-Datafile.xlsx").read(),
sheet_name="Capacity",
)

df_ocgt = df[
[
"Node/Line",
"Scenario",
"Climate Year",
"Generator_ID",
"Year",
"Value",
]
]
df_ocgt = df_ocgt[
(df_ocgt["Scenario"] == "Distributed Energy")
& (df_ocgt["Climate Year"] == 1984)
]
df_ocgt = df_ocgt[df_ocgt["Generator_ID"].str.contains("Gas")]
df_ocgt = df_ocgt[df_ocgt["Year"].isin([2030, 2040])]

df_ocgt = (
df_ocgt.groupby(["Node/Line", "Year"])["Value"].sum().reset_index()
)
df_ocgt = df_ocgt.groupby([df_ocgt["Node/Line"], "Year"]).sum()
df_ocgt = df_ocgt.groupby("Node/Line")["Value"].mean()
df_ocgt = pd.DataFrame(df_ocgt, columns=["Value"]).rename(
columns={"Value": "p_nom"}
)

# Choose capacities for considered countries
df_ocgt = df_ocgt[df_ocgt.index.str[:2].isin(countries)]

# Attribute bus0 and bus1
df_ocgt["bus0"] = get_foreign_gas_bus_id()[df_ocgt.index]
df_ocgt["bus1"] = get_foreign_bus_id()[df_ocgt.index]
df_ocgt = df_ocgt.groupby(by=["bus0", "bus1"], as_index=False).sum()

return df_ocgt


def insert_ocgt_abroad():
"""Insert gas turbine capicities abroad for eGon2035 in the database
This function inserts data in the database and has no return.
Parameters
----------
df_ocgt: pandas.DataFrame
Gas turbine capacities per foreign node
"""
scn_name = "eGon2035"
carrier = "OCGT"

# Connect to local database
engine = db.engine()

df_ocgt = calculate_ocgt_capacities()

df_ocgt["p_nom_extendable"] = False
df_ocgt["carrier"] = carrier
df_ocgt["scn_name"] = scn_name

buses = tuple(
db.select_dataframe(
f"""SELECT bus_id FROM grid.egon_etrago_bus
WHERE scn_name = '{scn_name}' AND country != 'DE';
"""
)["bus_id"]
)

# Delete old entries
db.execute_sql(
f"""
DELETE FROM grid.egon_etrago_link WHERE "carrier" = '{carrier}'
AND scn_name = '{scn_name}'
AND bus0 IN {buses} AND bus1 IN {buses};
"""
)

# read carrier information from scnario parameter data
scn_params = get_sector_parameters("gas", scn_name)
df_ocgt["efficiency"] = scn_params["efficiency"][carrier]
df_ocgt["marginal_cost"] = (
scn_params["marginal_cost"][carrier]
/ scn_params["efficiency"][carrier]
)

# Adjust p_nom
df_ocgt["p_nom"] = df_ocgt["p_nom"] / scn_params["efficiency"][carrier]

# Select next id value
new_id = db.next_etrago_id("link")
df_ocgt["link_id"] = range(new_id, new_id + len(df_ocgt))

# Insert data to db
df_ocgt.to_sql(
"egon_etrago_link",
engine,
schema="grid",
index=False,
if_exists="append",
)

0 comments on commit eb04d6d

Please sign in to comment.