adjust to new pypsa-eur syntax

This commit is contained in:
lisazeyen 2023-04-03 17:39:47 +02:00
parent 952a6ba1b5
commit 247c504604
3 changed files with 92 additions and 88 deletions

View File

@ -65,6 +65,13 @@ rule solve_sector_networks:
**config["scenario"] **config["scenario"]
), ),
rule solve_sector_networks_perfect:
input:
expand(
RESULTS
+ "/postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
**config["scenario"]
),
rule plot_networks: rule plot_networks:
input: input:

View File

@ -68,32 +68,27 @@ rule add_brownfield:
"../scripts/add_brownfield.py" "../scripts/add_brownfield.py"
ruleorder: add_existing_baseyear > add_brownfield
rule prepare_perfect_foresight: rule prepare_perfect_foresight:
input: input:
**{ **{
f"network_{year}": RDIR f"network_{year}": RESULTS
+ "/prenetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_" + "/prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_"
+ f"{year}.nc" + f"{year}.nc"
for year in config["scenario"]["planning_horizons"][1:] for year in config["scenario"]["planning_horizons"][1:]
}, },
brownfield_network=lambda w: ( brownfield_network=lambda w: (
RDIR RESULTS
+ "/prenetworks-brownfield/" + "/prenetworks-brownfield/"
+ "elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_" + "elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_"
+ "{}.nc".format(str(config["scenario"]["planning_horizons"][0])) + "{}.nc".format(str(config["scenario"]["planning_horizons"][0]))
), ),
overrides="data/override_component_attrs", overrides="data/override_component_attrs",
output: output:
RDIR RESULTS
+ "/prenetworks-brownfield/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years.nc", + "/prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
threads: 2 threads: 2
resources: resources:
mem_mb=10000, mem_mb=10000,
script:
"../scripts/prepare_perfect_foresight.py"
log: log:
LOGS LOGS
+ "prepare_perfect_foresight{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}.log", + "prepare_perfect_foresight{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}.log",
@ -108,84 +103,84 @@ rule prepare_perfect_foresight:
"../scripts/prepare_perfect_foresight.py" "../scripts/prepare_perfect_foresight.py"
rule solve_network_perfect: rule solve_sector_network_perfect:
input: input:
overrides="data/override_component_attrs", overrides="data/override_component_attrs",
network=RDIR network=RESULTS
+ "/prenetworks-brownfield/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years.nc", + "/prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
costs="data/costs_2030.csv", costs="data/costs_2030.csv",
config=SDIR + "/configs/config.yaml", config=RESULTS + "configs/config.yaml",
output: output:
RDIR RESULTS
+ "/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years.nc", + "/postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc",
shadow:
"shallow"
log:
solver=RDIR
+ "/logs/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years_solver.log",
python=RDIR
+ "/logs/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years_python.log",
memory=RDIR
+ "/logs/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years_memory.log",
threads: 4 threads: 4
resources: resources:
mem_mb=config["solving"]["mem"], mem_mb=config["solving"]["mem"],
shadow:
"shallow"
log:
solver=RESULTS
+ "/logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_solver.log",
python=RESULTS
+ "/logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_python.log",
memory=RESULTS
+ "/logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_memory.log",
benchmark: benchmark:
( (
RDIR BENCHMARKS
+ "/benchmarks/solve_network/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years" + "solve_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years}"
) )
script:
"../scripts/solve_network.py"
conda: conda:
"../envs/environment.yaml" "../envs/environment.yaml"
script:
"../scripts/solve_network.py"
rule make_summary_perfect: rule make_summary_perfect:
input: input:
**{ **{
f"networks_{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}": RDIR f"networks_{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}": RESULTS
+ f"/postnetworks/elec_s{simpl}_{clusters}_lv{lv}_{opts}_{sector_opts}_brownfield_all_years.nc" + f"/postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc"
for simpl in config["scenario"]["simpl"] for simpl in config["scenario"]["simpl"]
for clusters in config["scenario"]["clusters"] for clusters in config["scenario"]["clusters"]
for opts in config["scenario"]["opts"] for opts in config["scenario"]["opts"]
for sector_opts in config["scenario"]["sector_opts"] for sector_opts in config["scenario"]["sector_opts"]
for lv in config["scenario"]["lv"] for ll in config["scenario"]["ll"]
}, },
costs="data/costs_2020.csv", costs="data/costs_2020.csv",
overrides="data/override_component_attrs", overrides="data/override_component_attrs",
output: output:
nodal_costs="results" + "/" + config["run"] + "/csvs/nodal_costs.csv", nodal_costs=RESULTS + "/csvs/nodal_costs.csv",
nodal_capacities="results" + "/" + config["run"] + "/csvs/nodal_capacities.csv", nodal_capacities=RESULTS + "/csvs/nodal_capacities.csv",
nodal_cfs="results" + "/" + config["run"] + "/csvs/nodal_cfs.csv", nodal_cfs=RESULTS + "/csvs/nodal_cfs.csv",
cfs="results" + "/" + config["run"] + "/csvs/cfs.csv", cfs=RESULTS + "/csvs/cfs.csv",
costs="results" + "/" + config["run"] + "/csvs/costs.csv", costs=RESULTS + "/csvs/costs.csv",
capacities="results" + "/" + config["run"] + "/csvs/capacities.csv", capacities=RESULTS + "/csvs/capacities.csv",
curtailment="results" + "/" + config["run"] + "/csvs/curtailment.csv", curtailment=RESULTS + "/csvs/curtailment.csv",
capital_cost="results" + "/" + config["run"] + "/csvs/capital_cost.csv", capital_cost=RESULTS + "/csvs/capital_cost.csv",
energy="results" + "/" + config["run"] + "/csvs/energy.csv", energy=RESULTS + "/csvs/energy.csv",
supply="results" + "/" + config["run"] + "/csvs/supply.csv", supply=RESULTS + "/csvs/supply.csv",
supply_energy="results" + "/" + config["run"] + "/csvs/supply_energy.csv", supply_energy=RESULTS + "/csvs/supply_energy.csv",
prices="results" + "/" + config["run"] + "/csvs/prices.csv", prices=RESULTS + "/csvs/prices.csv",
weighted_prices="results" + "/" + config["run"] + "/csvs/weighted_prices.csv", weighted_prices=RESULTS + "/csvs/weighted_prices.csv",
market_values="results" + "/" + config["run"] + "/csvs/market_values.csv", market_values=RESULTS + "/csvs/market_values.csv",
price_statistics="results" + "/" + config["run"] + "/csvs/price_statistics.csv", price_statistics=RESULTS + "/csvs/price_statistics.csv",
metrics="results" + "/" + config["run"] + "/csvs/metrics.csv", metrics=RESULTS + "/csvs/metrics.csv",
co2_emissions="results" + "/" + config["run"] + "/csvs/co2_emissions.csv", co2_emissions=RESULTS + "/csvs/co2_emissions.csv",
threads: 2 threads: 2
resources: resources:
mem_mb=10000, mem_mb=10000,
script:
"../scripts/make_summary_perfect.py"
log: log:
LOGS + "make_summary_perfect{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}.log", LOGS + "make_summary_perfect.log",
benchmark: benchmark:
( (
BENCHMARKS BENCHMARKS
+ "make_summary_perfect{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}" + "make_summary_perfect"
) )
conda: conda:
"../envs/environment.yaml" "../envs/environment.yaml"
script:
"../scripts/make_summary_perfect.py"
rule plot_summary_perfect: rule plot_summary_perfect:
@ -194,30 +189,33 @@ rule plot_summary_perfect:
f"costs_{year}": f"data/costs_{year}.csv" f"costs_{year}": f"data/costs_{year}.csv"
for year in config["scenario"]["planning_horizons"] for year in config["scenario"]["planning_horizons"]
}, },
costs_csv="results" + "/" + config["run"] + "/csvs/costs.csv", costs_csv=RESULTS + "/csvs/costs.csv",
energy="results" + "/" + config["run"] + "/csvs/energy.csv", energy=RESULTS + "/csvs/energy.csv",
balances="results" + "/" + config["run"] + "/csvs/supply_energy.csv", balances=RESULTS + "/csvs/supply_energy.csv",
eea="data/eea/UNFCCC_v24.csv", eea="data/eea/UNFCCC_v24.csv",
countries="results" + "/" + config["run"] + "/csvs/nodal_capacities.csv", countries=RESULTS + "/csvs/nodal_capacities.csv",
co2_emissions="results" + "/" + config["run"] + "/csvs/co2_emissions.csv", co2_emissions=RESULTS + "/csvs/co2_emissions.csv",
capacities="results" + "/" + config["run"] + "/csvs/capacities.csv", capacities=RESULTS + "/csvs/capacities.csv",
capital_cost="results" + "/" + config["run"] + "/csvs/capital_cost.csv", capital_cost=RESULTS + "/csvs/capital_cost.csv",
output: output:
costs1="results" + "/" + config["run"] + "/graphs/costs.pdf", costs1=RESULTS + "/graphs/costs.pdf",
costs2="results" + "/" + config["run"] + "/graphs/costs2.pdf", costs2=RESULTS + "/graphs/costs2.pdf",
costs3="results" + "/" + config["run"] + "/graphs/total_costs_per_year.pdf", costs3=RESULTS + "/graphs/total_costs_per_year.pdf",
# energy="results" + '/' + config['run'] + '/graphs/energy.pdf', # energy="results" + '/' + config['run'] + '/graphs/energy.pdf',
balances="results" + "/" + config["run"] + "/graphs/balances-energy.pdf", balances=RESULTS + "/graphs/balances-energy.pdf",
co2_emissions="results" + "/" + config["run"] + "/graphs/carbon_budget_plot.pdf", co2_emissions=RESULTS + "/graphs/carbon_budget_plot.pdf",
capacities="results" + "/" + config["run"] + "/graphs/capacities.pdf", capacities=RESULTS + "/graphs/capacities.pdf",
threads: 2 threads: 2
resources: resources:
mem_mb=10000, mem_mb=10000,
script:
"../scripts/plot_summary_perfect.py"
log: log:
LOGS + "plot_summary_perfect.log", LOGS + "plot_summary_perfect.log",
benchmark: benchmark:
(BENCHMARKS + "plot_summary_perfect") (BENCHMARKS + "plot_summary_perfect")
conda: conda:
"../envs/environment.yaml" "../envs/environment.yaml"
script:
"../scripts/plot_summary_perfect.py"
ruleorder: add_existing_baseyear > add_brownfield

View File

@ -1,15 +1,15 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: : 2020-2023 The PyPSA-Eur Authors
#
# SPDX-License-Identifier: MIT
""" """
Concats pypsa networks of single investment periods to one network. Concats pypsa networks of single investment periods to one network.
Created on Tue Aug 16 10:40:41 2022
@author: lisa
""" """
import pypsa import pypsa
import pandas as pd import pandas as pd
from helper import override_component_attrs, update_config_with_sector_opts from _helpers import override_component_attrs, update_config_with_sector_opts
from pypsa.io import import_components_from_dataframe from pypsa.io import import_components_from_dataframe
from add_existing_baseyear import add_build_year_to_new_assets from add_existing_baseyear import add_build_year_to_new_assets
from six import iterkeys from six import iterkeys
@ -179,23 +179,22 @@ def set_all_phase_outs(n):
def set_carbon_constraints(n, opts): def set_carbon_constraints(n, opts):
"""Add global constraints for carbon emissions.""" """Add global constraints for carbon emissions."""
budget = ( budget = None
snakemake.config["co2_budget"]["1p7"] * 1e9
) # budget for + 1.7 Celsius for Europe
for o in opts: for o in opts:
# other budgets # other budgets
m = re.match(r"^\d+p\d$", o, re.IGNORECASE) m = re.match(r"^\d+p\d$", o, re.IGNORECASE)
if m is not None: if m is not None:
budget = snakemake.config["co2_budget"][m.group(0)] * 1e9 budget = snakemake.config["co2_budget"][m.group(0)] * 1e9
logger.info("add carbon budget of {}".format(budget)) if budget!=None:
n.add( logger.info("add carbon budget of {}".format(budget))
"GlobalConstraint", n.add(
"Budget", "GlobalConstraint",
type="Co2constraint", "Budget",
carrier_attribute="co2_emissions", type="Co2constraint",
sense="<=", carrier_attribute="co2_emissions",
constant=budget, sense="<=",
) constant=budget,
)
if not "noco2neutral" in opts: if not "noco2neutral" in opts:
logger.info("Add carbon neutrality constraint.") logger.info("Add carbon neutrality constraint.")
@ -232,7 +231,7 @@ def set_carbon_constraints(n, opts):
#%% #%%
if __name__ == "__main__": if __name__ == "__main__":
if 'snakemake' not in globals(): if 'snakemake' not in globals():
from helper import mock_snakemake from _helpers import mock_snakemake
snakemake = mock_snakemake( snakemake = mock_snakemake(
'prepare_perfect_foresight', 'prepare_perfect_foresight',
simpl='', simpl='',