Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add control parameter for generators and storage units #577

Open
wants to merge 8 commits into
base: dev
Choose a base branch
from
3 changes: 2 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ Changed
`#545 <https://github.com/openego/eGon-data/issues/545>`_
* Integrate fuel and CO2 costs for eGon2035 to scenario parameters
`#549 <https://github.com/openego/eGon-data/issues/549>`_

* Add control parameter to scenario parameter
`#572 <https://github.com/openego/eGon-data/issues/572>`_

Bug fixes
---------
Expand Down
1 change: 1 addition & 0 deletions src/egon/data/airflow/dags/pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@
scenario_capacities,
Vg250MvGridDistricts,
chp,
scenario_parameters,
]
)

Expand Down
29 changes: 24 additions & 5 deletions src/egon/data/datasets/fill_etrago_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

from egon.data import db
from egon.data.datasets import Dataset
from egon.data.datasets.scenario_parameters import get_sector_parameters
import egon.data.config


class Egon_etrago_gen(Dataset):
def __init__(self, dependencies):
super().__init__(
name="etrago_generators",
version="0.0.3",
version="0.0.5",
dependencies=dependencies,
tasks=(fill_etrago_generators,),
)
Expand All @@ -22,7 +24,7 @@ def fill_etrago_generators():
cfg = egon.data.config.datasets()["generators_etrago"]

# Delete power plants from previous iterations of this script
delete_previuos_gen(cfg)
delete_previuos_gen(cfg)

# Load required tables
(
Expand Down Expand Up @@ -80,7 +82,7 @@ def group_power_plants(power_plants, renew_feedin, etrago_gen_orig, cfg):
func=agg_func
)
etrago_pp = etrago_pp.reset_index(drop=True)

if np.isnan(etrago_gen_orig["generator_id"].max()):
max_id = 0
else:
Expand All @@ -102,6 +104,24 @@ def fill_etrago_gen_table(etrago_pp2, etrago_gen_orig, cfg, con):
}
)

# Set marginal_cost according to scenario parameters
marginal_cost = pd.Series(
get_sector_parameters("electricity", "eGon2035")["marginal_cost"]
)
etrago_pp[etrago_pp.carrier.isin(marginal_cost.index)][
"marginal_cost_fixed"
] = marginal_cost[
etrago_pp[etrago_pp.carrier.isin(marginal_cost.index)].carrier
].values

# Set control according to scenario parameters
control = pd.Series(
get_sector_parameters("electricity", "eGon2035")["control"]
)
etrago_pp["control"] = control[
etrago_pp[etrago_pp.carrier.isin(control.index)].carrier
].values

etrago_pp = etrago_pp.reindex(columns=etrago_gen_orig.columns)
etrago_pp = etrago_pp.drop(columns="generator_id")
etrago_pp.to_sql(
Expand Down Expand Up @@ -157,7 +177,7 @@ def fill_etrago_gen_time_table(
return etrago_pp


def load_tables(con, cfg, scenario='eGon2035'):
def load_tables(con, cfg, scenario="eGon2035"):
sql = f"""
SELECT * FROM
{cfg['sources']['power_plants']['schema']}.
Expand Down Expand Up @@ -281,4 +301,3 @@ def timeseries(pp):
####################### DELETE THIS EXCEPTION #############################
###########################################################################
return timeseries

9 changes: 8 additions & 1 deletion src/egon/data/datasets/power_plants/pv_rooftop.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import pandas as pd

from egon.data import config, db
from egon.data.datasets.scenario_parameters import get_sector_parameters


def next_id(component):
Expand Down Expand Up @@ -58,7 +59,7 @@ def pv_rooftop_per_mv_grid(scenario="eGon2035", level="federal_state"):
f"""
DELETE FROM {targets['generators']['schema']}.
{targets['generators']['table']}
WHERE carrier IN ('solar_thermal_collector', 'geo_thermal')
WHERE carrier IN ('solar_rooftop')
AND scn_name = '{scenario}'
"""
)
Expand Down Expand Up @@ -148,6 +149,12 @@ def pv_rooftop_per_mv_grid(scenario="eGon2035", level="federal_state"):
"bus": demand.index,
"p_nom": capacities,
"generator_id": range(new_id, new_id + len(demand)),
"marginal_cost_fixed": get_sector_parameters(
"electricity", "eGon2035"
)["marginal_cost"]["pv"],
"control": get_sector_parameters("electricity", "eGon2035")[
"control"
]["pv_rooftop"],
}
)

Expand Down
2 changes: 1 addition & 1 deletion src/egon/data/datasets/scenario_parameters/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ class ScenarioParameters(Dataset):
def __init__(self, dependencies):
super().__init__(
name="ScenarioParameters",
version="0.0.4",
version="0.0.5",
dependencies=dependencies,
tasks=(create_table, download_pypsa_technology_data, insert_scenarios),
)
24 changes: 21 additions & 3 deletions src/egon/data/datasets/scenario_parameters/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ def read_csv(year):
"data_dir"
]

return pd.read_csv(
f"{source}costs_{year}.csv"
)
return pd.read_csv(f"{source}costs_{year}.csv")


def read_costs(df, technology, parameter, value_only=True):
Expand Down Expand Up @@ -206,6 +204,26 @@ def electricity(scenario):
"OCGT": read_costs(costs, "OCGT", "VOM"),
}

# Insert control strategies for generators and storage units
# According to 'Technische Anschlussbedingungen Mittelspannung,
# Westnetz, 2019' all power plants with an installed capacity > 475kW(p)
# have to be able to be PV-controlled.
# Assuming that only pv rooftop plants are < 475kWp, pv rooftop is
# 'PQ'-controlled, all other carriers get control='PV'.
parameters["control"] = {
"oil": "PV",
"other_non_renewable": "PV",
"wind_offshore": "PV",
"wind_onshore": "PV",
"pv": "PV",
"pv_rooftop": "PQ",
"run_of_river": "PV",
"reservoir": "PV",
"gas": "PV",
"biomass": "PV",
"pumped_hydro": "PV",
}

elif scenario == "eGon100RE":
parameters = {"grid_topology": "Status Quo"}

Expand Down
5 changes: 4 additions & 1 deletion src/egon/data/datasets/storages_etrago/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class StorageEtrago(Dataset):
def __init__(self, dependencies):
super().__init__(
name="StorageEtrago",
version="0.0.4",
version="0.0.5",
dependencies=dependencies,
tasks=(insert_PHES, extendable_batteries),
)
Expand Down Expand Up @@ -64,6 +64,9 @@ def insert_PHES():
phes["efficiency_store"] = parameters["store"]
phes["efficiency_dispatch"] = parameters["dispatch"]
phes["standing_loss"] = parameters["standing_loss"]
phes["control"] = scenario_parameters.electricity("eGon2035")["control"][
"pumped_hydro"
]

# Write data to db
phes.to_sql(
Expand Down