build_biomass_potentials: link to planning_horizons wildcard, interpolate missing years
This commit is contained in:
parent
445892dd87
commit
5006bc4877
@ -20,6 +20,10 @@ Upcoming Release
|
|||||||
|
|
||||||
* Files extracted from sector-coupled data bundle have been moved from ``data/`` to ``data/sector-bundle``.
|
* Files extracted from sector-coupled data bundle have been moved from ``data/`` to ``data/sector-bundle``.
|
||||||
|
|
||||||
|
* It is now possible to specify years for biomass potentials which do not exist
|
||||||
|
in the JRC-ENSPRESO database, e.g. 2037. These are linearly interpolated.
|
||||||
|
|
||||||
|
* In pathway mode, the biomass potential is linked to the investment year.
|
||||||
|
|
||||||
**Bugs and Compatibility**
|
**Bugs and Compatibility**
|
||||||
|
|
||||||
|
@ -280,15 +280,15 @@ rule build_biomass_potentials:
|
|||||||
country_shapes=RESOURCES + "country_shapes.geojson",
|
country_shapes=RESOURCES + "country_shapes.geojson",
|
||||||
output:
|
output:
|
||||||
biomass_potentials_all=RESOURCES
|
biomass_potentials_all=RESOURCES
|
||||||
+ "biomass_potentials_all_s{simpl}_{clusters}.csv",
|
+ "biomass_potentials_all_s{simpl}_{clusters}_{planning_horizons}.csv",
|
||||||
biomass_potentials=RESOURCES + "biomass_potentials_s{simpl}_{clusters}.csv",
|
biomass_potentials=RESOURCES + "biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.csv",
|
||||||
threads: 1
|
threads: 1
|
||||||
resources:
|
resources:
|
||||||
mem_mb=1000,
|
mem_mb=1000,
|
||||||
log:
|
log:
|
||||||
LOGS + "build_biomass_potentials_s{simpl}_{clusters}.log",
|
LOGS + "build_biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.log",
|
||||||
benchmark:
|
benchmark:
|
||||||
BENCHMARKS + "build_biomass_potentials_s{simpl}_{clusters}"
|
BENCHMARKS + "build_biomass_potentials_s{simpl}_{clusters}_{planning_horizons}"
|
||||||
conda:
|
conda:
|
||||||
"../envs/environment.yaml"
|
"../envs/environment.yaml"
|
||||||
script:
|
script:
|
||||||
@ -735,7 +735,9 @@ rule prepare_sector_network:
|
|||||||
dsm_profile=RESOURCES + "dsm_profile_s{simpl}_{clusters}.csv",
|
dsm_profile=RESOURCES + "dsm_profile_s{simpl}_{clusters}.csv",
|
||||||
co2_totals_name=RESOURCES + "co2_totals.csv",
|
co2_totals_name=RESOURCES + "co2_totals.csv",
|
||||||
co2="data/bundle-sector/eea/UNFCCC_v23.csv",
|
co2="data/bundle-sector/eea/UNFCCC_v23.csv",
|
||||||
biomass_potentials=RESOURCES + "biomass_potentials_s{simpl}_{clusters}.csv",
|
biomass_potentials=RESOURCES + "biomass_potentials_s{simpl}_{clusters}_" + "{}.csv".format(config["biomass"]["year"])
|
||||||
|
if config["foresight"] == "overnight"
|
||||||
|
else RESOURCES + "biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.csv",
|
||||||
heat_profile="data/heat_load_profile_BDEW.csv",
|
heat_profile="data/heat_load_profile_BDEW.csv",
|
||||||
costs="data/costs_{}.csv".format(config["costs"]["year"])
|
costs="data/costs_{}.csv".format(config["costs"]["year"])
|
||||||
if config["foresight"] == "overnight"
|
if config["foresight"] == "overnight"
|
||||||
|
@ -7,9 +7,15 @@ Compute biogas and solid biomass potentials for each clustered model region
|
|||||||
using data from JRC ENSPRESO.
|
using data from JRC ENSPRESO.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
import geopandas as gpd
|
import geopandas as gpd
|
||||||
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
|
AVAILABLE_BIOMASS_YEARS = [2010, 2020, 2030, 2040, 2050]
|
||||||
|
|
||||||
|
|
||||||
def build_nuts_population_data(year=2013):
|
def build_nuts_population_data(year=2013):
|
||||||
pop = pd.read_csv(
|
pop = pd.read_csv(
|
||||||
@ -208,12 +214,40 @@ if __name__ == "__main__":
|
|||||||
if "snakemake" not in globals():
|
if "snakemake" not in globals():
|
||||||
from _helpers import mock_snakemake
|
from _helpers import mock_snakemake
|
||||||
|
|
||||||
snakemake = mock_snakemake("build_biomass_potentials", simpl="", clusters="5")
|
snakemake = mock_snakemake(
|
||||||
|
"build_biomass_potentials",
|
||||||
|
simpl="",
|
||||||
|
clusters="5",
|
||||||
|
planning_horizons=2050,
|
||||||
|
)
|
||||||
|
|
||||||
|
overnight = snakemake.config["foresight"] == "overnight"
|
||||||
params = snakemake.params.biomass
|
params = snakemake.params.biomass
|
||||||
year = params["year"]
|
investment_year = int(snakemake.wildcards.planning_horizons)
|
||||||
|
year = params["year"] if overnight else investment_year
|
||||||
scenario = params["scenario"]
|
scenario = params["scenario"]
|
||||||
|
|
||||||
|
if year > 2050:
|
||||||
|
logger.info("No biomass potentials for years after 2050, using 2050.")
|
||||||
|
max_year = max(AVAILABLE_BIOMASS_YEARS)
|
||||||
|
enspreso = enspreso_biomass_potentials(max_year, scenario)
|
||||||
|
|
||||||
|
elif year not in AVAILABLE_BIOMASS_YEARS:
|
||||||
|
before = int(np.floor(year / 10) * 10)
|
||||||
|
after = int(np.ceil(year / 10) * 10)
|
||||||
|
logger.info(
|
||||||
|
f"No biomass potentials for {year}, interpolating linearly between {before} and {after}."
|
||||||
|
)
|
||||||
|
|
||||||
|
enspreso_before = enspreso_biomass_potentials(before, scenario)
|
||||||
|
enspreso_after = enspreso_biomass_potentials(after, scenario)
|
||||||
|
|
||||||
|
fraction = (year - before) / (after - before)
|
||||||
|
|
||||||
|
enspreso = enspreso_before + fraction * (enspreso_after - enspreso_before)
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.info(f"Using biomass potentials for {year}.")
|
||||||
enspreso = enspreso_biomass_potentials(year, scenario)
|
enspreso = enspreso_biomass_potentials(year, scenario)
|
||||||
|
|
||||||
enspreso = disaggregate_nuts0(enspreso)
|
enspreso = disaggregate_nuts0(enspreso)
|
||||||
|
Loading…
Reference in New Issue
Block a user