Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
16 changes: 0 additions & 16 deletions config/config.tyndp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -408,19 +408,3 @@ cba:
cyclic_carriers:
- battery
- home battery

# Merged into top-level solving options
solving:
options:
horizon: 168
overlap: 0
load_shedding: true
io_api: direct # 20% faster than default lp mode for rolling horizon

solver:
name: highs
options: highs-simplex

solver_options:
highs-simplex:
parallel: "off" # does not speed up solution
83 changes: 79 additions & 4 deletions config/scenarios.tyndp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ DE:
2045: 0.3 # interpolation
2050: 0.16
# EV demand scaling (temporary approach):
# Currently scaled to match PLEXOS demand values from:
# Currently scaled to match PLEXOS demand values from:
# EV-Modelling-Inputs/EV Modelling Inputs/EV_VEHICLES.xlsx (PLEXOS DEMAND [TWh])
#
# Why scaling is needed:
# - Using Eurostat vehicle numbers instead of TYNDP projections
# - Assuming historic km/vehicle patterns rather than future increases
# - These assumptions can result in scaling factors > 1.0
#
# Note: Final EV electricity demand differs between scenarios (DE/GA)
# Note: Final EV electricity demand differs between scenarios (DE/GA)
# due to varying assumptions on vehicle efficiency and total km driven
land_transport_electric_share:
2030: 0.207
Expand Down Expand Up @@ -109,15 +109,15 @@ GA:
2045: 0.34 # interpolation
2050: 0.17
# EV demand scaling (temporary approach):
# Currently scaled to match PLEXOS demand values from:
# Currently scaled to match PLEXOS demand values from:
# EV-Modelling-Inputs/EV Modelling Inputs/EV_VEHICLES.xlsx (PLEXOS DEMAND [TWh])
#
# Why scaling is needed:
# - Using Eurostat vehicle numbers instead of TYNDP projections
# - Assuming historic km/vehicle patterns rather than future increases
# - These assumptions can result in scaling factors > 1.0
#
# Note: Final EV electricity demand differs between scenarios (DE/GA)
# Note: Final EV electricity demand differs between scenarios (DE/GA)
# due to varying assumptions on vehicle efficiency and total km driven
land_transport_electric_share:
2030: 0.111
Expand Down Expand Up @@ -153,3 +153,78 @@ GA:
2050: 400
costs:
custom_cost_scn: GA


.cba-common: &cba-common
# Merged into top-level solving options
solving:
options:
horizon: 168
overlap: 0
load_shedding: true

solver:
name: highs
options: highs-simplex

solver_options:
highs-simplex:
parallel: "off" # does not speed up solution


cba-NT-cy1995:
<<: *cba-common
snapshots:
start: "1995-01-01"
end: "1996-01-01"

atlite:
default_cutout: europe-1995-sarah3-era5

cba:
sb_scenario: NT

cba-NT-cy2008:
<<: *cba-common
snapshots:
start: "2008-01-01"
end: "2009-01-01"

atlite:
default_cutout: europe-2008-sarah3-era5

cba:
sb_scenario: NT

cba-NT-cy2009:
<<: *cba-common
snapshots:
start: "2009-01-01"
end: "2010-01-01"

atlite:
default_cutout: europe-2009-sarah3-era5

cba:
sb_scenario: NT


cba-DE-cy2009:
<<: *cba-common
cba:
sb_scenario: DE

snapshots:
start: "2009-01-01"
end: "2010-01-01"

atlite:
default_cutout: europe-2009-sarah3-era5

cba-NT:
cba:
scenarios: [cba-NT-cy2009, cba-NT-cy2008, cba-NT-cy1995]

cba-DE:
cba:
scenarios: [cba-DE-cy2009]
39 changes: 34 additions & 5 deletions rules/cba.smk
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,16 @@ checkpoint clean_projects:
"../scripts/cba/clean_projects.py"


def input_sb_network(w):
def input_sb_network(w, run=None):
scenario = config_provider("scenario")(w)
expanded_wildcards = {
"clusters": scenario["clusters"],
"opts": scenario["opts"],
"sector_opts": scenario["sector_opts"],
}
if run is not None:
expanded_wildcards["run"] = run

match config_provider("foresight")(w):
case "perfect":
expanded_wildcards["planning_horizons"] = "all"
Expand All @@ -87,6 +90,9 @@ rule simplify_sb_network:
cyclic_carriers=config_provider("cba", "storage", "cyclic_carriers"),
input:
network=input_sb_network,
sb_network=lambda w: input_sb_network(
w, run=config_provider("cba", "sb_scenario")(w)
),
output:
network=resources("cba/networks/simple_{planning_horizons}.nc"),
script:
Expand Down Expand Up @@ -158,7 +164,6 @@ rule prepare_pint_project:
rule solve_cba_network:
params:
solving=config_provider("solving"),
cba_solving=config_provider("cba", "solving"),
foresight=config_provider("foresight"),
time_resolution=config_provider("clustering", "temporal", "resolution_sector"),
custom_extra_functionality=None,
Expand Down Expand Up @@ -229,6 +234,20 @@ rule collect_indicators:
"../scripts/cba/collect_indicators.py"


rule average_indicators:
input:
indicators=lambda w: expand(
rules.collect_indicators.output.indicators,
run=config_provider("cba", "scenarios")(w),
allow_missing=True,
),
output:
indicators=RESULTS
+ "cba/{cba_method}/ensemble_indicators_{planning_horizons}.csv",
script:
"../scripts/cba/average_indicators.py"


rule plot_indicators:
params:
plotting=config_provider("plotting"),
Expand All @@ -242,17 +261,27 @@ rule plot_indicators:


# pseudo-rule, to run enable running cba with snakemake cba --configfile config/config.tyndp.yaml


def cba_scenarios(w):
return [
name
for name in config["run"]["name"]
if scenario_config(name).get("cba", {}).get("scenarios") is not None
]


rule cba:
input:
lambda w: expand(
rules.collect_indicators.output.indicators,
rules.average_indicators.output.indicators,
cba_method=config_provider("cba", "methods")(w),
planning_horizons=config_provider("cba", "planning_horizons")(w),
run=config_provider("run", "name")(w),
run=cba_scenarios(w),
),
lambda w: expand(
rules.plot_indicators.output.plot_dir,
cba_method=config_provider("cba", "methods")(w),
planning_horizons=config_provider("cba", "planning_horizons")(w),
run=config_provider("run", "name")(w),
run=cba_scenarios(w),
),
3 changes: 0 additions & 3 deletions scripts/cba/solve_cba_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import pandas as pd
import pypsa
from linopy.remote.oetc import OetcCredentials, OetcHandler, OetcSettings
from snakemake.utils import update_config
from tqdm.auto import tqdm

from scripts._benchmark import memory_logger
Expand Down Expand Up @@ -282,8 +281,6 @@ def solve_network(
update_config_from_wildcards(snakemake.config, snakemake.wildcards)

solving = snakemake.params.solving
update_config(solving, snakemake.params.cba_solving)

np.random.seed(solving["options"].get("seed", 123))

n = pypsa.Network(snakemake.input.network)
Expand Down
Loading