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

Use powerplantmatching IRENASTAT for renewable capacities in add_existing_baseyear #1018

Merged
merged 7 commits into from
Apr 30, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion config/config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ enable:
retrieve_sector_databundle: true
retrieve_cost_data: true
build_cutout: false
retrieve_irena: false
retrieve_cutout: true
build_natura_raster: false
retrieve_natura_raster: true
Expand Down
34 changes: 0 additions & 34 deletions data/existing_infrastructure/offwind_capacity_IRENA.csv

This file was deleted.

34 changes: 0 additions & 34 deletions data/existing_infrastructure/onwind_capacity_IRENA.csv

This file was deleted.

34 changes: 0 additions & 34 deletions data/existing_infrastructure/solar_capacity_IRENA.csv

This file was deleted.

1 change: 0 additions & 1 deletion doc/configtables/enable.csv
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ retrieve_databundle,bool,"{true, false}","Switch to retrieve databundle from zen
retrieve_sector_databundle,bool,"{true, false}","Switch to retrieve sector databundle from zenodo via the rule :mod:`retrieve_sector_databundle` or whether to keep a custom databundle located in the corresponding folder."
retrieve_cost_data,bool,"{true, false}","Switch to retrieve technology cost data from `technology-data repository <https://github.com/PyPSA/technology-data>`_."
build_cutout,bool,"{true, false}","Switch to enable the building of cutouts via the rule :mod:`build_cutout`."
retrieve_irena,bool,"{true, false}",Switch to enable the retrieval of ``existing_capacities`` from IRENASTAT with :mod:`retrieve_irena`.
retrieve_cutout,bool,"{true, false}","Switch to enable the retrieval of cutouts from zenodo with :mod:`retrieve_cutout`."
build_natura_raster,bool,"{true, false}","Switch to enable the creation of the raster ``natura.tiff`` via the rule :mod:`build_natura_raster`."
retrieve_natura_raster,bool,"{true, false}","Switch to enable the retrieval of ``natura.tiff`` from zenodo with :mod:`retrieve_natura_raster`."
Expand Down
2 changes: 2 additions & 0 deletions doc/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,8 @@ Upcoming Release

* Fix custom busmap read in `cluster_network`.

* Data on existing renewable capacities is now consistently taken from powerplantmatching (instead of being retrieved separately); the dataset has also been updated to include 2023 values.

* Added shapes to .nc file for different stages of the network object in `base_network`, `build_bus_regions`, and `cluster_network`.

* Fix p_nom_min of renewables generators for myopic approach and add check of existing capacities in `add_land_use_constraint_m`.
Expand Down
5 changes: 0 additions & 5 deletions doc/retrieve.rst
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,6 @@ This rule downloads techno-economic assumptions from the `technology-data reposi

- ``resources/costs.csv``

Rule ``retrieve_irena``
================================

.. automodule:: retrieve_irena

Rule ``retrieve_ship_raster``
================================

Expand Down
10 changes: 5 additions & 5 deletions rules/build_electricity.smk
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ rule add_electricity:
else resources("networks/base.nc")
),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
regions=resources("regions_onshore.geojson"),
powerplants=resources("powerplants.csv"),
Expand Down Expand Up @@ -478,7 +478,7 @@ rule simplify_network:
input:
network=resources("networks/elec.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
regions_onshore=resources("regions_onshore.geojson"),
regions_offshore=resources("regions_offshore.geojson"),
Expand Down Expand Up @@ -526,7 +526,7 @@ rule cluster_network:
else []
),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
output:
network=resources("networks/elec_s{simpl}_{clusters}.nc"),
Expand Down Expand Up @@ -555,7 +555,7 @@ rule add_extra_components:
input:
network=resources("networks/elec_s{simpl}_{clusters}.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
output:
resources("networks/elec_s{simpl}_{clusters}_ec.nc"),
Expand Down Expand Up @@ -590,7 +590,7 @@ rule prepare_network:
input:
resources("networks/elec_s{simpl}_{clusters}_ec.nc"),
tech_costs=lambda w: resources(
f"costs_{config_provider('costs', 'year')(w)}.csv"
f"costs_{config_provider('costs', 'year') (w)}.csv"
),
co2_price=lambda w: resources("co2_price.csv") if "Ept" in w.opts else [],
output:
Expand Down
18 changes: 0 additions & 18 deletions rules/retrieve.smk
Original file line number Diff line number Diff line change
Expand Up @@ -42,24 +42,6 @@ if config["enable"]["retrieve"] and config["enable"].get("retrieve_databundle",
"../scripts/retrieve_databundle.py"


if config["enable"].get("retrieve_irena"):

rule retrieve_irena:
output:
offwind="data/existing_infrastructure/offwind_capacity_IRENA.csv",
onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
log:
"logs/retrieve_irena.log",
resources:
mem_mb=1000,
retries: 2
conda:
"../envs/retrieve.yaml"
script:
"../scripts/retrieve_irena.py"


if config["enable"]["retrieve"] and config["enable"].get("retrieve_cutout", True):

rule retrieve_cutout:
Expand Down
3 changes: 0 additions & 3 deletions rules/solve_myopic.smk
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ rule add_existing_baseyear:
existing_heating_distribution=resources(
"existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv"
),
existing_solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
existing_onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
existing_offwind="data/existing_infrastructure/offwind_capacity_IRENA.csv",
output:
RESULTS
+ "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
Expand Down
3 changes: 0 additions & 3 deletions rules/solve_perfect.smk
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ rule add_existing_baseyear:
"existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv"
),
existing_heating="data/existing_infrastructure/existing_heating_raw.csv",
existing_solar="data/existing_infrastructure/solar_capacity_IRENA.csv",
existing_onwind="data/existing_infrastructure/onwind_capacity_IRENA.csv",
existing_offwind="data/existing_infrastructure/offwind_capacity_IRENA.csv",
output:
RESULTS
+ "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
Expand Down
29 changes: 20 additions & 9 deletions scripts/add_existing_baseyear.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import country_converter as coco
import numpy as np
import pandas as pd
import powerplantmatching as pm
import pypsa
import xarray as xr
from _helpers import (
Expand Down Expand Up @@ -60,14 +61,22 @@ def add_existing_renewables(df_agg, costs):
Append existing renewables to the df_agg pd.DataFrame with the conventional
power plants.
"""
carriers = {"solar": "solar", "onwind": "onwind", "offwind": "offwind-ac"}
tech_map = {"solar": "PV", "onwind": "Onshore", "offwind": "Offshore"}

for tech in ["solar", "onwind", "offwind"]:
carrier = carriers[tech]
countries = snakemake.config["countries"]
irena = pm.data.IRENASTAT().powerplant.convert_country_to_alpha2()
irena = irena.query("Country in @countries")
irena = irena.groupby(["Technology", "Country", "Year"]).Capacity.sum()

df = pd.read_csv(snakemake.input[f"existing_{tech}"], index_col=0).fillna(0.0)
irena = irena.unstack().reset_index()

for carrier, tech in tech_map.items():
df = (
irena[irena.Technology.str.contains(tech)]
.drop(columns=["Technology"])
.set_index("Country")
)
df.columns = df.columns.astype(int)
df.index = cc.convert(df.index, to="iso2")

# calculate yearly differences
df.insert(loc=0, value=0.0, column="1999")
Expand Down Expand Up @@ -97,14 +106,16 @@ def add_existing_renewables(df_agg, costs):

for year in nodal_df.columns:
for node in nodal_df.index:
name = f"{node}-{tech}-{year}"
name = f"{node}-{carrier}-{year}"
capacity = nodal_df.loc[node, year]
if capacity > 0.0:
df_agg.at[name, "Fueltype"] = tech
df_agg.at[name, "Fueltype"] = carrier
df_agg.at[name, "Capacity"] = capacity
df_agg.at[name, "DateIn"] = year
df_agg.at[name, "lifetime"] = costs.at[tech, "lifetime"]
df_agg.at[name, "DateOut"] = year + costs.at[tech, "lifetime"] - 1
df_agg.at[name, "lifetime"] = costs.at[carrier, "lifetime"]
df_agg.at[name, "DateOut"] = (
year + costs.at[carrier, "lifetime"] - 1
)
df_agg.at[name, "cluster_bus"] = node


Expand Down
Loading
Loading