pypsa-eur/rules/postprocess.smk

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

277 lines
9.3 KiB
Plaintext
Raw Normal View History

# SPDX-FileCopyrightText: : 2023-2024 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
2023-03-08 16:46:14 +00:00
if config["foresight"] != "perfect":
rule plot_power_network_clustered:
params:
plotting=config_provider("plotting"),
input:
network=resources("networks/base_s_{clusters}.nc"),
regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"),
output:
map=resources("maps/power-network-s-{clusters}.pdf"),
threads: 1
resources:
mem_mb=4000,
benchmark:
benchmarks("plot_power_network_clustered/base_s_{clusters}")
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_power_network_clustered.py"
rule plot_power_network:
2023-08-22 09:01:00 +00:00
params:
plotting=config_provider("plotting"),
2023-08-22 09:01:00 +00:00
input:
network=RESULTS
+ "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
regions=resources("regions_onshore_base_s_{clusters}.geojson"),
2023-08-22 09:01:00 +00:00
output:
map=RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf",
2023-08-22 09:01:00 +00:00
threads: 2
resources:
mem_mb=10000,
2024-02-07 16:53:10 +00:00
log:
RESULTS
+ "logs/plot_power_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log",
2023-08-22 09:01:00 +00:00
benchmark:
(
RESULTS
+ "benchmarks/plot_power_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}"
)
2023-08-22 09:01:00 +00:00
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_power_network.py"
rule plot_hydrogen_network:
params:
plotting=config_provider("plotting"),
foresight=config_provider("foresight"),
input:
network=RESULTS
+ "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
regions=resources("regions_onshore_base_s_{clusters}.geojson"),
output:
map=RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf",
threads: 2
resources:
mem_mb=10000,
2024-02-07 16:53:10 +00:00
log:
RESULTS
+ "logs/plot_hydrogen_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log",
benchmark:
(
RESULTS
+ "benchmarks/plot_hydrogen_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}"
)
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_hydrogen_network.py"
rule plot_gas_network:
params:
plotting=config_provider("plotting"),
input:
network=RESULTS
+ "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
regions=resources("regions_onshore_base_s_{clusters}.geojson"),
output:
map=RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf",
threads: 2
resources:
mem_mb=10000,
2024-02-07 16:53:10 +00:00
log:
RESULTS
+ "logs/plot_gas_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log",
benchmark:
(
RESULTS
+ "benchmarks/plot_gas_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}"
)
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_gas_network.py"
if config["foresight"] == "perfect":
def output_map_year(w):
return {
f"map_{year}": RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_"
+ f"{year}.pdf"
for year in config_provider("scenario", "planning_horizons")(w)
}
rule plot_power_network_perfect:
2023-08-22 09:01:00 +00:00
params:
plotting=config_provider("plotting"),
2023-08-22 09:01:00 +00:00
input:
network=RESULTS
+ "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
regions=resources("regions_onshore_base_s_{clusters}.geojson"),
2023-08-22 09:01:00 +00:00
output:
unpack(output_map_year),
2023-08-22 09:01:00 +00:00
threads: 2
resources:
mem_mb=10000,
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_power_network_perfect.py"
rule make_summary:
params:
2023-08-15 13:02:41 +00:00
foresight=config_provider("foresight"),
costs=config_provider("costs"),
snapshots=config_provider("snapshots"),
2024-03-14 17:52:25 +00:00
drop_leap_day=config_provider("enable", "drop_leap_day"),
2023-08-15 13:02:41 +00:00
scenario=config_provider("scenario"),
RDIR=RDIR,
input:
networks=expand(
RESULTS
+ "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc",
2023-08-15 13:02:41 +00:00
**config["scenario"],
allow_missing=True,
),
costs=lambda w: (
2024-02-16 10:17:00 +00:00
resources("costs_{}.csv".format(config_provider("costs", "year")(w)))
if config_provider("foresight")(w) == "overnight"
else resources(
"costs_{}.csv".format(
config_provider("scenario", "planning_horizons", 0)(w)
)
)
),
2024-01-26 16:07:19 +00:00
ac_plot=expand(
resources("maps/power-network-s-{clusters}.pdf"),
**config["scenario"],
allow_missing=True,
),
costs_plot=expand(
RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf",
2023-08-15 13:02:41 +00:00
**config["scenario"],
allow_missing=True,
),
h2_plot=lambda w: expand(
(
RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf"
if config_provider("sector", "H2_network")(w)
else []
),
**config["scenario"],
allow_missing=True,
),
ch4_plot=lambda w: expand(
(
RESULTS
+ "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf"
if config_provider("sector", "gas_network")(w)
else []
),
**config["scenario"],
allow_missing=True,
),
output:
nodal_costs=RESULTS + "csvs/nodal_costs.csv",
nodal_capacities=RESULTS + "csvs/nodal_capacities.csv",
nodal_cfs=RESULTS + "csvs/nodal_cfs.csv",
cfs=RESULTS + "csvs/cfs.csv",
costs=RESULTS + "csvs/costs.csv",
capacities=RESULTS + "csvs/capacities.csv",
curtailment=RESULTS + "csvs/curtailment.csv",
energy=RESULTS + "csvs/energy.csv",
supply=RESULTS + "csvs/supply.csv",
supply_energy=RESULTS + "csvs/supply_energy.csv",
nodal_supply_energy=RESULTS + "csvs/nodal_supply_energy.csv",
prices=RESULTS + "csvs/prices.csv",
weighted_prices=RESULTS + "csvs/weighted_prices.csv",
market_values=RESULTS + "csvs/market_values.csv",
price_statistics=RESULTS + "csvs/price_statistics.csv",
metrics=RESULTS + "csvs/metrics.csv",
threads: 2
resources:
mem_mb=10000,
2023-03-08 18:22:00 +00:00
log:
2024-02-16 10:17:00 +00:00
RESULTS + "logs/make_summary.log",
2023-03-08 16:46:14 +00:00
conda:
"../envs/environment.yaml"
script:
"../scripts/make_summary.py"
rule plot_summary:
params:
2023-08-15 13:02:41 +00:00
countries=config_provider("countries"),
planning_horizons=config_provider("scenario", "planning_horizons"),
emissions_scope=config_provider("energy", "emissions"),
2023-08-15 13:02:41 +00:00
plotting=config_provider("plotting"),
foresight=config_provider("foresight"),
co2_budget=config_provider("co2_budget"),
sector=config_provider("sector"),
RDIR=RDIR,
input:
costs=RESULTS + "csvs/costs.csv",
energy=RESULTS + "csvs/energy.csv",
balances=RESULTS + "csvs/supply_energy.csv",
2024-05-21 13:59:46 +00:00
eurostat="data/eurostat/Balances-April2023",
2024-04-15 12:48:34 +00:00
co2="data/bundle/eea/UNFCCC_v23.csv",
output:
costs=RESULTS + "graphs/costs.svg",
energy=RESULTS + "graphs/energy.svg",
balances=RESULTS + "graphs/balances-energy.svg",
threads: 2
resources:
mem_mb=10000,
2023-03-08 18:22:00 +00:00
log:
2024-02-16 10:17:00 +00:00
RESULTS + "logs/plot_summary.log",
2023-03-08 16:46:14 +00:00
conda:
"../envs/environment.yaml"
script:
2023-03-08 16:46:14 +00:00
"../scripts/plot_summary.py"
STATISTICS_BARPLOTS = [
"capacity_factor",
"installed_capacity",
"optimal_capacity",
"capital_expenditure",
"operational_expenditure",
"curtailment",
"supply",
"withdrawal",
"market_value",
]
rule plot_base_statistics:
params:
2023-08-15 13:02:41 +00:00
plotting=config_provider("plotting"),
barplots=STATISTICS_BARPLOTS,
input:
network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc",
output:
**{
f"{plot}_bar": RESULTS
+ f"figures/statistics_{plot}_bar_base_s_{{clusters}}_elec_l{{ll}}_{{opts}}.pdf"
for plot in STATISTICS_BARPLOTS
},
barplots_touch=RESULTS
+ "figures/.statistics_plots_base_s_{clusters}_elec_l{ll}_{opts}",
script:
"../scripts/plot_statistics.py"