diff --git a/Snakefile b/Snakefile index f1bd459f..78a28373 100644 --- a/Snakefile +++ b/Snakefile @@ -56,7 +56,6 @@ localrules: wildcard_constraints: - weather_year="[0-9]{4}|", simpl="[a-zA-Z0-9]*", clusters="[0-9]+(m|c)?|all", ll="(v|c)([0-9\.]+|opt)", diff --git a/config/config.default.yaml b/config/config.default.yaml index 892a1e74..a9166560 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -34,7 +34,6 @@ foresight: overnight # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#scenario # Wildcard docs in https://pypsa-eur.readthedocs.io/en/latest/wildcards.html scenario: - weather_year: [''] # for backwards compatibility simpl: - '' ll: diff --git a/config/test/config.electricity.yaml b/config/test/config.electricity.yaml index 95405878..57964415 100644 --- a/config/test/config.electricity.yaml +++ b/config/test/config.electricity.yaml @@ -12,8 +12,6 @@ run: shared_cutouts: true scenario: - weather_year: - - "" clusters: - 5 opts: diff --git a/config/test/config.myopic.yaml b/config/test/config.myopic.yaml index 1157a7c6..5abae36d 100644 --- a/config/test/config.myopic.yaml +++ b/config/test/config.myopic.yaml @@ -13,8 +13,6 @@ run: foresight: myopic scenario: - weather_year: - - "" ll: - v1.5 clusters: diff --git a/config/test/config.overnight.yaml b/config/test/config.overnight.yaml index 0e2b6d6b..7fb53e42 100644 --- a/config/test/config.overnight.yaml +++ b/config/test/config.overnight.yaml @@ -12,8 +12,6 @@ run: scenario: - weather_year: - - "" ll: - v1.5 clusters: diff --git a/doc/configuration.rst b/doc/configuration.rst index 9eba4284..dae91380 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -87,7 +87,7 @@ facilitate running multiple scenarios through a single command For each wildcard, a **list of values** is provided. The rule ``solve_all_elec_networks`` will trigger the rules for creating -``results/networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc`` for **all +``results/networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc`` for **all combinations** of the provided wildcard values as defined by Python's `itertools.product(...) `_ function diff --git a/rules/build_electricity.smk b/rules/build_electricity.smk index a83a9d93..53c2df0b 100644 --- a/rules/build_electricity.smk +++ b/rules/build_electricity.smk @@ -28,9 +28,9 @@ if config["enable"].get("retrieve_opsd_load_data", True): input: ancient("data/electricity_demand_raw.csv"), output: - resources("electricity_demand{weather_year}.csv"), + resources("electricity_demand.csv"), log: - logs("build_electricity_demand{weather_year}.log"), + logs("build_electricity_demand.log"), resources: mem_mb=5000, conda: @@ -45,9 +45,9 @@ if config["enable"].get("retrieve_artificial_load_data", False): input: ancient("data/load_artificial_raw.csv"), output: - resources("electricity_demand{weather_year}.csv"), + resources("electricity_demand.csv"), log: - logs("build_artificial_load_data{weather_year}.log"), + logs("build_artificial_load_data.log"), resources: mem_mb=5000, conda: @@ -192,11 +192,11 @@ if config["enable"].get("build_cutout", False): input: rules.build_cutout.input, output: - protected("cutouts/" + CDIR + "{cutout}-{weather_year}.nc"), + protected("cutouts/" + CDIR + "{cutout}-.nc"), log: - logs(CDIR + "build_cutout/{cutout}-{weather_year}.log"), + logs(CDIR + "build_cutout/{cutout}-.log"), benchmark: - benchmarks(CDIR + "build_cutout_{cutout}-{weather_year}") + benchmarks(CDIR + "build_cutout_{cutout}-") threads: ATLITE_NPROCESSES resources: mem_mb=ATLITE_NPROCESSES * 1000, @@ -342,11 +342,11 @@ rule build_renewable_profiles: + config_provider("renewable", w.technology, "cutout")(w) + ".nc", output: - profile=resources("profile{weather_year}_{technology}.nc"), + profile=resources("profile_{technology}.nc"), log: - logs("build_renewable_profile{weather_year}_{technology}.log"), + logs("build_renewable_profile_{technology}.log"), benchmark: - benchmarks("build_renewable_profiles{weather_year}_{technology}") + benchmarks("build_renewable_profiles_{technology}") threads: config["atlite"].get("nprocesses", 4) resources: mem_mb=config["atlite"].get("nprocesses", 4) * 5000, @@ -390,10 +390,10 @@ rule build_hydro_profile: + config_provider("renewable", "hydro", "cutout")(w) + ".nc", output: - profile=resources("profile{weather_year}_hydro.nc"), - eia_hydro=resources("eia_hydro_stats{weather_year}.csv"), + profile=resources("profile_hydro.nc"), + eia_hydro=resources("eia_hydro_stats.csv"), log: - logs("build_hydro_profile{weather_year}.log"), + logs("build_hydro_profile.log"), resources: mem_mb=5000, conda: @@ -428,7 +428,7 @@ rule build_line_rating: def input_profile_tech(w): return { - f"profile_{tech}": resources(f"profile{{weather_year}}_{tech}.nc") + f"profile_{tech}": resources(f"profile{}_{tech}.nc") for tech in config_provider("electricity", "renewable_carriers")(w) } @@ -475,15 +475,15 @@ rule add_electricity: if config_provider("conventional", "dynamic_fuel_price")(w) else [] ), - load=resources("electricity_demand{weather_year}.csv"), + load=resources("electricity_demand.csv"), nuts3_shapes=resources("nuts3_shapes.geojson"), ua_md_gdp="data/GDP_PPP_30arcsec_v3_mapped_default.csv", output: - resources("networks/elec{weather_year}.nc"), + resources("networks/elec.nc"), log: - logs("add_electricity{weather_year}.log"), + logs("add_electricity.log"), benchmark: - benchmarks("add_electricity{weather_year}") + benchmarks("add_electricity") threads: 1 resources: mem_mb=10000, @@ -506,24 +506,24 @@ rule simplify_network: p_max_pu=config_provider("links", "p_max_pu", default=1.0), costs=config_provider("costs"), input: - network=resources("networks/elec{weather_year}.nc"), + network=resources("networks/elec.nc"), tech_costs=lambda w: resources( f"costs_{config_provider('costs', 'year')(w)}.csv" ), regions_onshore=resources("regions_onshore.geojson"), regions_offshore=resources("regions_offshore.geojson"), output: - network=resources("networks/elec{weather_year}_s{simpl}.nc"), - regions_onshore=resources("regions_onshore_elec{weather_year}_s{simpl}.geojson"), + network=resources("networks/elec_s{simpl}.nc"), + regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}.geojson" + "regions_offshore_elec_s{simpl}.geojson" ), - busmap=resources("busmap_elec{weather_year}_s{simpl}.csv"), - connection_costs=resources("connection_costs{weather_year}_s{simpl}.csv"), + busmap=resources("busmap_elec_s{simpl}.csv"), + connection_costs=resources("connection_costs_s{simpl}.csv"), log: - logs("simplify_network/elec{weather_year}_s{simpl}.log"), + logs("simplify_network/elec_s{simpl}.log"), benchmark: - benchmarks("simplify_network/elec{weather_year}_s{simpl}") + benchmarks("simplify_network/elec_s{simpl}") threads: 1 resources: mem_mb=12000, @@ -549,12 +549,12 @@ rule cluster_network: length_factor=config_provider("lines", "length_factor"), costs=config_provider("costs"), input: - network=resources("networks/elec{weather_year}_s{simpl}.nc"), - regions_onshore=resources("regions_onshore_elec{weather_year}_s{simpl}.geojson"), + network=resources("networks/elec_s{simpl}.nc"), + regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}.geojson" + "regions_offshore_elec_s{simpl}.geojson" ), - busmap=ancient(resources("busmap_elec{weather_year}_s{simpl}.csv")), + busmap=ancient(resources("busmap_elec_s{simpl}.csv")), custom_busmap=lambda w: ( "data/custom_busmap_elec_s{simpl}_{clusters}.csv" if config_provider("enable", "custom_busmap", default=False)(w) @@ -564,19 +564,19 @@ rule cluster_network: f"costs_{config_provider('costs', 'year')(w)}.csv" ), output: - network=resources("networks/elec{weather_year}_s{simpl}_{clusters}.nc"), + network=resources("networks/elec_s{simpl}_{clusters}.nc"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_offshore_elec_s{simpl}_{clusters}.geojson" ), - busmap=resources("busmap_elec{weather_year}_s{simpl}_{clusters}.csv"), - linemap=resources("linemap_elec{weather_year}_s{simpl}_{clusters}.csv"), + busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), + linemap=resources("linemap_elec_s{simpl}_{clusters}.csv"), log: - logs("cluster_network/elec{weather_year}_s{simpl}_{clusters}.log"), + logs("cluster_network/elec_s{simpl}_{clusters}.log"), benchmark: - benchmarks("cluster_network/elec{weather_year}_s{simpl}_{clusters}") + benchmarks("cluster_network/elec_s{simpl}_{clusters}") threads: 1 resources: mem_mb=10000, @@ -592,16 +592,16 @@ rule add_extra_components: max_hours=config_provider("electricity", "max_hours"), costs=config_provider("costs"), input: - network=resources("networks/elec{weather_year}_s{simpl}_{clusters}.nc"), + network=resources("networks/elec_s{simpl}_{clusters}.nc"), tech_costs=lambda w: resources( f"costs_{config_provider('costs', 'year')(w)}.csv" ), output: - resources("networks/elec{weather_year}_s{simpl}_{clusters}_ec.nc"), + resources("networks/elec_s{simpl}_{clusters}_ec.nc"), log: - logs("add_extra_components/elec{weather_year}_s{simpl}_{clusters}.log"), + logs("add_extra_components/elec_s{simpl}_{clusters}.log"), benchmark: - benchmarks("add_extra_components/elec{weather_year}_s{simpl}_{clusters}_ec") + benchmarks("add_extra_components/elec_s{simpl}_{clusters}_ec") threads: 1 resources: mem_mb=4000, @@ -626,21 +626,21 @@ rule prepare_network: adjustments=config_provider("adjustments", "electricity"), autarky=config_provider("electricity", "autarky", default={}), input: - resources("networks/elec{weather_year}_s{simpl}_{clusters}_ec.nc"), + resources("networks/elec_s{simpl}_{clusters}_ec.nc"), tech_costs=lambda w: resources( f"costs_{config_provider('costs', 'year')(w)}.csv" ), co2_price=lambda w: resources("co2_price.csv") if "Ept" in w.opts else [], output: - resources("networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), + resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), log: logs( - "prepare_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.log" + "prepare_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.log" ), benchmark: ( benchmarks( - "prepare_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}" + "prepare_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}" ) ) threads: 1 diff --git a/rules/build_sector.smk b/rules/build_sector.smk index b4e41df8..ab296565 100644 --- a/rules/build_sector.smk +++ b/rules/build_sector.smk @@ -12,15 +12,15 @@ rule build_population_layouts: + config_provider("atlite", "default_cutout")(w) + ".nc", output: - pop_layout_total=resources("pop_layout_total{weather_year}.nc"), - pop_layout_urban=resources("pop_layout_urban{weather_year}.nc"), - pop_layout_rural=resources("pop_layout_rural{weather_year}.nc"), + pop_layout_total=resources("pop_layout_total.nc"), + pop_layout_urban=resources("pop_layout_urban.nc"), + pop_layout_rural=resources("pop_layout_rural.nc"), log: - logs("build_population_layouts{weather_year}.log"), + logs("build_population_layouts.log"), resources: mem_mb=20000, benchmark: - benchmarks("build_population_layouts{weather_year}") + benchmarks("build_population_layouts") threads: 8 conda: "../envs/environment.yaml" @@ -30,11 +30,11 @@ rule build_population_layouts: rule build_clustered_population_layouts: input: - pop_layout_total=resources("pop_layout_total{weather_year}.nc"), - pop_layout_urban=resources("pop_layout_urban{weather_year}.nc"), - pop_layout_rural=resources("pop_layout_rural{weather_year}.nc"), + pop_layout_total=resources("pop_layout_total.nc"), + pop_layout_urban=resources("pop_layout_urban.nc"), + pop_layout_rural=resources("pop_layout_rural.nc"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), cutout=lambda w: "cutouts/" + CDIR @@ -42,15 +42,15 @@ rule build_clustered_population_layouts: + ".nc", output: clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), log: - logs("build_clustered_population_layouts{weather_year}_{simpl}_{clusters}.log"), + logs("build_clustered_population_layouts_{simpl}_{clusters}.log"), resources: mem_mb=10000, benchmark: benchmarks( - "build_clustered_population_layouts/{weather_year}s{simpl}_{clusters}" + "build_clustered_population_layouts/s{simpl}_{clusters}" ) conda: "../envs/environment.yaml" @@ -60,22 +60,22 @@ rule build_clustered_population_layouts: rule build_simplified_population_layouts: input: - pop_layout_total=resources("pop_layout_total{weather_year}.nc"), - pop_layout_urban=resources("pop_layout_urban{weather_year}.nc"), - pop_layout_rural=resources("pop_layout_rural{weather_year}.nc"), - regions_onshore=resources("regions_onshore_elec{weather_year}_s{simpl}.geojson"), + pop_layout_total=resources("pop_layout_total.nc"), + pop_layout_urban=resources("pop_layout_urban.nc"), + pop_layout_rural=resources("pop_layout_rural.nc"), + regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"), cutout=lambda w: "cutouts/" + CDIR + config_provider("atlite", "default_cutout")(w) + ".nc", output: - clustered_pop_layout=resources("pop_layout_elec{weather_year}_s{simpl}.csv"), + clustered_pop_layout=resources("pop_layout_elec_s{simpl}.csv"), resources: mem_mb=10000, log: - logs("build_simplified_population_layouts{weather_year}_{simpl}"), + logs("build_simplified_population_layouts_{simpl}"), benchmark: - benchmarks("build_simplified_population_layouts/{weather_year}s{simpl}") + benchmarks("build_simplified_population_layouts/s{simpl}") conda: "../envs/environment.yaml" script: @@ -106,22 +106,22 @@ rule build_gas_input_locations: entry="data/gas_network/scigrid-gas/data/IGGIELGN_BorderPoints.geojson", storage="data/gas_network/scigrid-gas/data/IGGIELGN_Storages.geojson", regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_offshore_elec_s{simpl}_{clusters}.geojson" ), output: gas_input_nodes=resources( - "gas_input_locations{weather_year}_s{simpl}_{clusters}.geojson" + "gas_input_locations_s{simpl}_{clusters}.geojson" ), gas_input_nodes_simplified=resources( - "gas_input_locations{weather_year}_s{simpl}_{clusters}_simplified.csv" + "gas_input_locations_s{simpl}_{clusters}_simplified.csv" ), resources: mem_mb=2000, log: - logs("build_gas_input_locations{weather_year}_s{simpl}_{clusters}.log"), + logs("build_gas_input_locations_s{simpl}_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -132,19 +132,19 @@ rule cluster_gas_network: input: cleaned_gas_network=resources("gas_network.csv"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_offshore_elec_s{simpl}_{clusters}.geojson" ), output: clustered_gas_network=resources( - "gas_network_elec{weather_year}_s{simpl}_{clusters}.csv" + "gas_network_elec_s{simpl}_{clusters}.csv" ), resources: mem_mb=4000, log: - logs("cluster_gas_network{weather_year}_s{simpl}_{clusters}.log"), + logs("cluster_gas_network_s{simpl}_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -169,22 +169,22 @@ rule build_daily_heat_demand: snapshots=config_provider("snapshots"), drop_leap_day=config_provider("enable", "drop_leap_day"), input: - pop_layout=resources("pop_layout_{scope}{weather_year}.nc"), + pop_layout=resources("pop_layout_{scope}.nc"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), cutout=heat_demand_cutout, output: heat_demand=resources( - "daily_heat_demand_{scope}_elec{weather_year}_s{simpl}_{clusters}.nc" + "daily_heat_demand_{scope}_elec_s{simpl}_{clusters}.nc" ), resources: mem_mb=20000, threads: 8 log: - logs("build_daily_heat_demand_{scope}_{weather_year}_{simpl}_{clusters}.loc"), + logs("build_daily_heat_demand_{scope}__{simpl}_{clusters}.loc"), benchmark: - benchmarks("build_daily_heat_demand/{scope}_{weather_year}_s{simpl}_{clusters}") + benchmarks("build_daily_heat_demand/{scope}__s{simpl}_{clusters}") conda: "../envs/environment.yaml" script: @@ -198,19 +198,19 @@ rule build_hourly_heat_demand: input: heat_profile="data/heat_load_profile_BDEW.csv", heat_demand=resources( - "daily_heat_demand_{scope}_elec{weather_year}_s{simpl}_{clusters}.nc" + "daily_heat_demand_{scope}_elec_s{simpl}_{clusters}.nc" ), output: heat_demand=resources( - "hourly_heat_demand_{scope}_elec{weather_year}_s{simpl}_{clusters}.nc" + "hourly_heat_demand_{scope}_elec_s{simpl}_{clusters}.nc" ), resources: mem_mb=2000, threads: 8 log: - logs("build_hourly_heat_demand_{scope}{weather_year}_{simpl}_{clusters}.loc"), + logs("build_hourly_heat_demand_{scope}_{simpl}_{clusters}.loc"), benchmark: - benchmarks("build_hourly_heat_demand/{scope}{weather_year}_s{simpl}_{clusters}") + benchmarks("build_hourly_heat_demand/{scope}_s{simpl}_{clusters}") conda: "../envs/environment.yaml" script: @@ -222,24 +222,24 @@ rule build_temperature_profiles: snapshots=config_provider("snapshots"), drop_leap_day=config_provider("enable", "drop_leap_day"), input: - pop_layout=resources("pop_layout_{scope}{weather_year}.nc"), + pop_layout=resources("pop_layout_{scope}.nc"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), cutout=heat_demand_cutout, output: temp_soil=resources( - "temp_soil_{scope}_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_{scope}_elec_s{simpl}_{clusters}.nc" ), - temp_air=resources("temp_air_{scope}_elec{weather_year}_s{simpl}_{clusters}.nc"), + temp_air=resources("temp_air_{scope}_elec_s{simpl}_{clusters}.nc"), resources: mem_mb=20000, threads: 8 log: - logs("build_temperature_profiles_{scope}_{weather_year}_{simpl}_{clusters}.log"), + logs("build_temperature_profiles_{scope}__{simpl}_{clusters}.log"), benchmark: benchmarks( - "build_temperature_profiles/{scope}_{weather_year}_s{simpl}_{clusters}" + "build_temperature_profiles/{scope}__s{simpl}_{clusters}" ) conda: "../envs/environment.yaml" @@ -252,48 +252,48 @@ rule build_cop_profiles: heat_pump_sink_T=config_provider("sector", "heat_pump_sink_T"), input: temp_soil_total=resources( - "temp_soil_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_total_elec_s{simpl}_{clusters}.nc" ), temp_soil_rural=resources( - "temp_soil_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_rural_elec_s{simpl}_{clusters}.nc" ), temp_soil_urban=resources( - "temp_soil_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_urban_elec_s{simpl}_{clusters}.nc" ), temp_air_total=resources( - "temp_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_total_elec_s{simpl}_{clusters}.nc" ), temp_air_rural=resources( - "temp_air_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_rural_elec_s{simpl}_{clusters}.nc" ), temp_air_urban=resources( - "temp_air_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_urban_elec_s{simpl}_{clusters}.nc" ), output: cop_soil_total=resources( - "cop_soil_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_total_elec_s{simpl}_{clusters}.nc" ), cop_soil_rural=resources( - "cop_soil_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_rural_elec_s{simpl}_{clusters}.nc" ), cop_soil_urban=resources( - "cop_soil_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_urban_elec_s{simpl}_{clusters}.nc" ), cop_air_total=resources( - "cop_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_total_elec_s{simpl}_{clusters}.nc" ), cop_air_rural=resources( - "cop_air_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_rural_elec_s{simpl}_{clusters}.nc" ), cop_air_urban=resources( - "cop_air_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_urban_elec_s{simpl}_{clusters}.nc" ), resources: mem_mb=20000, log: - logs("build_cop_profiles{weather_year}_s{simpl}_{clusters}.log"), + logs("build_cop_profiles_s{simpl}_{clusters}.log"), benchmark: - benchmarks("build_cop_profiles/{weather_year}s{simpl}_{clusters}") + benchmarks("build_cop_profiles/s{simpl}_{clusters}") conda: "../envs/environment.yaml" script: @@ -319,25 +319,25 @@ rule build_solar_thermal_profiles: drop_leap_day=config_provider("enable", "drop_leap_day"), solar_thermal=config_provider("solar_thermal"), input: - pop_layout=resources("pop_layout_{scope}{weather_year}.nc"), + pop_layout=resources("pop_layout_{scope}.nc"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), cutout=solar_thermal_cutout, output: solar_thermal=resources( - "solar_thermal_{scope}_elec{weather_year}_s{simpl}_{clusters}.nc" + "solar_thermal_{scope}_elec_s{simpl}_{clusters}.nc" ), resources: mem_mb=20000, threads: 16 log: logs( - "build_solar_thermal_profiles_{scope}_{weather_year}_s{simpl}_{clusters}.log" + "build_solar_thermal_profiles_{scope}__s{simpl}_{clusters}.log" ), benchmark: benchmarks( - "build_solar_thermal_profiles/{scope}_{weather_year}_s{simpl}_{clusters}" + "build_solar_thermal_profiles/{scope}__s{simpl}_{clusters}" ) conda: "../envs/environment.yaml" @@ -403,7 +403,7 @@ rule build_biomass_potentials: ), nuts2="data/bundle-sector/nuts/NUTS_RG_10M_2013_4326_LEVL_2.geojson", # https://gisco-services.ec.europa.eu/distribution/v2/nuts/download/#nuts21 regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), nuts3_population=ancient("data/bundle/nama_10r_3popgdp.tsv.gz"), swiss_cantons=ancient("data/bundle/ch_cantons.csv"), @@ -411,21 +411,21 @@ rule build_biomass_potentials: country_shapes=resources("country_shapes.geojson"), output: biomass_potentials_all=resources( - "biomass_potentials_all{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "biomass_potentials_all_s{simpl}_{clusters}_{planning_horizons}.csv" ), biomass_potentials=resources( - "biomass_potentials{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: logs( - "build_biomass_potentials{weather_year}_s{simpl}_{clusters}_{planning_horizons}.log" + "build_biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.log" ), benchmark: benchmarks( - "build_biomass_potentials{weather_year}_s{simpl}_{clusters}_{planning_horizons}" + "build_biomass_potentials_s{simpl}_{clusters}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -465,22 +465,22 @@ rule build_sequestration_potentials: keep_local=True, ), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_offshore_elec_s{simpl}_{clusters}.geojson" ), output: sequestration_potential=resources( - "co2_sequestration_potential_elec{weather_year}_s{simpl}_{clusters}.csv" + "co2_sequestration_potential_elec_s{simpl}_{clusters}.csv" ), threads: 1 resources: mem_mb=4000, log: - logs("build_sequestration_potentials{weather_year}_s{simpl}_{clusters}.log"), + logs("build_sequestration_potentials_s{simpl}_{clusters}.log"), benchmark: - benchmarks("build_sequestration_potentials{weather_year}_s{simpl}_{clusters}") + benchmarks("build_sequestration_potentials_s{simpl}_{clusters}") conda: "../envs/environment.yaml" script: @@ -491,22 +491,22 @@ rule build_salt_cavern_potentials: input: salt_caverns="data/bundle-sector/h2_salt_caverns_GWh_per_sqkm.geojson", regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), regions_offshore=resources( - "regions_offshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_offshore_elec_s{simpl}_{clusters}.geojson" ), output: h2_cavern_potential=resources( - "salt_cavern_potentials{weather_year}_s{simpl}_{clusters}.csv" + "salt_cavern_potentials_s{simpl}_{clusters}.csv" ), threads: 1 resources: mem_mb=2000, log: - logs("build_salt_cavern_potentials{weather_year}_s{simpl}_{clusters}.log"), + logs("build_salt_cavern_potentials_s{simpl}_{clusters}.log"), benchmark: - benchmarks("build_salt_cavern_potentials{weather_year}_s{simpl}_{clusters}") + benchmarks("build_salt_cavern_potentials_s{simpl}_{clusters}") conda: "../envs/environment.yaml" script: @@ -642,24 +642,24 @@ rule build_industrial_distribution_key: countries=config_provider("countries"), input: regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), hotmaps_industrial_database="data/bundle-sector/Industrial_Database.csv", output: industrial_distribution_key=resources( - "industrial_distribution_key_elec{weather_year}_s{simpl}_{clusters}.csv" + "industrial_distribution_key_elec_s{simpl}_{clusters}.csv" ), threads: 1 resources: mem_mb=1000, log: - logs("build_industrial_distribution_key{weather_year}_s{simpl}_{clusters}.log"), + logs("build_industrial_distribution_key_s{simpl}_{clusters}.log"), benchmark: benchmarks( - "build_industrial_distribution_key/{weather_year}s{simpl}_{clusters}" + "build_industrial_distribution_key/s{simpl}_{clusters}" ) conda: "../envs/environment.yaml" @@ -670,26 +670,26 @@ rule build_industrial_distribution_key: rule build_industrial_production_per_node: input: industrial_distribution_key=resources( - "industrial_distribution_key_elec{weather_year}_s{simpl}_{clusters}.csv" + "industrial_distribution_key_elec_s{simpl}_{clusters}.csv" ), industrial_production_per_country_tomorrow=resources( "industrial_production_per_country_tomorrow_{planning_horizons}.csv" ), output: industrial_production_per_node=resources( - "industrial_production_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_production_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: logs( - "build_industrial_production_per_node{weather_year}_s{simpl}_{clusters}_{planning_horizons}.log" + "build_industrial_production_per_node_s{simpl}_{clusters}_{planning_horizons}.log" ), benchmark: ( benchmarks( - "build_industrial_production_per_node/{weather_year}s{simpl}_{clusters}_{planning_horizons}" + "build_industrial_production_per_node/s{simpl}_{clusters}_{planning_horizons}" ) ) conda: @@ -704,26 +704,26 @@ rule build_industrial_energy_demand_per_node: "industry_sector_ratios_{planning_horizons}.csv" ), industrial_production_per_node=resources( - "industrial_production_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_production_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), industrial_energy_demand_per_node_today=resources( - "industrial_energy_demand_today_elec{weather_year}_s{simpl}_{clusters}.csv" + "industrial_energy_demand_today_elec_s{simpl}_{clusters}.csv" ), output: industrial_energy_demand_per_node=resources( - "industrial_energy_demand_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_energy_demand_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: logs( - "build_industrial_energy_demand_per_node{weather_year}_s{simpl}_{clusters}_{planning_horizons}.log" + "build_industrial_energy_demand_per_node_s{simpl}_{clusters}_{planning_horizons}.log" ), benchmark: ( benchmarks( - "build_industrial_energy_demand_per_node/{weather_year}s{simpl}_{clusters}_{planning_horizons}" + "build_industrial_energy_demand_per_node/s{simpl}_{clusters}_{planning_horizons}" ) ) conda: @@ -761,25 +761,25 @@ rule build_industrial_energy_demand_per_country_today: rule build_industrial_energy_demand_per_node_today: input: industrial_distribution_key=resources( - "industrial_distribution_key_elec{weather_year}_s{simpl}_{clusters}.csv" + "industrial_distribution_key_elec_s{simpl}_{clusters}.csv" ), industrial_energy_demand_per_country_today=resources( "industrial_energy_demand_per_country_today.csv" ), output: industrial_energy_demand_per_node_today=resources( - "industrial_energy_demand_today_elec{weather_year}_s{simpl}_{clusters}.csv" + "industrial_energy_demand_today_elec_s{simpl}_{clusters}.csv" ), threads: 1 resources: mem_mb=1000, log: logs( - "build_industrial_energy_demand_per_node_today{weather_year}_s{simpl}_{clusters}.log" + "build_industrial_energy_demand_per_node_today_s{simpl}_{clusters}.log" ), benchmark: benchmarks( - "build_industrial_energy_demand_per_node_today/{weather_year}s{simpl}_{clusters}" + "build_industrial_energy_demand_per_node_today/s{simpl}_{clusters}" ) conda: "../envs/environment.yaml" @@ -795,26 +795,26 @@ rule build_retro_cost: building_stock="data/retro/data_building_stock.csv", data_tabula="data/bundle-sector/retro/tabula-calculator-calcsetbuilding.csv", air_temperature=resources( - "temp_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_total_elec_s{simpl}_{clusters}.nc" ), u_values_PL="data/retro/u_values_poland.csv", - tax_w="data/retro/elec{weather_year}tricity_taxes_eu.csv", + tax_w="data/retro/electricity_taxes_eu.csv", construction_index="data/retro/comparative_level_investment.csv", floor_area_missing="data/retro/floor_area_missing.csv", clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), cost_germany="data/retro/retro_cost_germany.csv", window_assumptions="data/retro/window_assumptions.csv", output: - retro_cost=resources("retro_cost_elec{weather_year}_s{simpl}_{clusters}.csv"), - floor_area=resources("floor_area_elec{weather_year}_s{simpl}_{clusters}.csv"), + retro_cost=resources("retro_cost_elec_s{simpl}_{clusters}.csv"), + floor_area=resources("floor_area_elec_s{simpl}_{clusters}.csv"), resources: mem_mb=1000, log: - logs("build_retro_cost{weather_year}_s{simpl}_{clusters}.log"), + logs("build_retro_cost_s{simpl}_{clusters}.log"), benchmark: - benchmarks("build_retro_cost/{weather_year}s{simpl}_{clusters}") + benchmarks("build_retro_cost/s{simpl}_{clusters}") conda: "../envs/environment.yaml" script: @@ -825,16 +825,16 @@ rule build_population_weighted_energy_totals: input: energy_totals=resources("{kind}_totals.csv"), clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), output: - resources("pop_weighted_{kind}_totals{weather_year}_s{simpl}_{clusters}.csv"), + resources("pop_weighted_{kind}_totals_s{simpl}_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: logs( - "build_population_weighted_{kind}_totals{weather_year}_s{simpl}_{clusters}.log" + "build_population_weighted_{kind}_totals_s{simpl}_{clusters}.log" ), conda: "../envs/environment.yaml" @@ -847,18 +847,18 @@ rule build_shipping_demand: ports="data/attributed_ports.json", scope=resources("europe_shape.geojson"), regions=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), demand=resources("energy_totals.csv"), params: energy_totals_year=config_provider("energy", "energy_totals_year"), output: - resources("shipping_demand{weather_year}_s{simpl}_{clusters}.csv"), + resources("shipping_demand_s{simpl}_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_shipping_demand{weather_year}_s{simpl}_{clusters}.log"), + logs("build_shipping_demand_s{simpl}_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -872,29 +872,29 @@ rule build_transport_demand: sector=config_provider("sector"), input: clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), pop_weighted_energy_totals=resources( - "pop_weighted_energy_totals{weather_year}_s{simpl}_{clusters}.csv" + "pop_weighted_energy_totals_s{simpl}_{clusters}.csv" ), transport_data=resources("transport_data.csv"), traffic_data_KFZ="data/bundle-sector/emobility/KFZ__count", traffic_data_Pkw="data/bundle-sector/emobility/Pkw__count", temp_air_total=resources( - "temp_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_total_elec_s{simpl}_{clusters}.nc" ), output: transport_demand=resources( - "transport_demand{weather_year}_s{simpl}_{clusters}.csv" + "transport_demand_s{simpl}_{clusters}.csv" ), - transport_data=resources("transport_data{weather_year}_s{simpl}_{clusters}.csv"), - avail_profile=resources("avail_profile{weather_year}_s{simpl}_{clusters}.csv"), - dsm_profile=resources("dsm_profile{weather_year}_s{simpl}_{clusters}.csv"), + transport_data=resources("transport_data_s{simpl}_{clusters}.csv"), + avail_profile=resources("avail_profile_s{simpl}_{clusters}.csv"), + dsm_profile=resources("dsm_profile_s{simpl}_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_transport_demand{weather_year}_s{simpl}_{clusters}.log"), + logs("build_transport_demand_s{simpl}_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -907,18 +907,18 @@ rule build_district_heat_share: input: district_heat_share=resources("district_heat_share.csv"), clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), output: district_heat_share=resources( - "district_heat_share_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "district_heat_share_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: logs( - "build_district_heat_share{weather_year}_s{simpl}_{clusters}_{planning_horizons}.log" + "build_district_heat_share_s{simpl}_{clusters}_{planning_horizons}.log" ), conda: "../envs/environment.yaml" @@ -934,28 +934,28 @@ rule build_existing_heating_distribution: input: existing_heating="data/existing_infrastructure/existing_heating_raw.csv", clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), clustered_pop_energy_layout=resources( - "pop_weighted_energy_totals{weather_year}_s{simpl}_{clusters}.csv" + "pop_weighted_energy_totals_s{simpl}_{clusters}.csv" ), district_heat_share=resources( - "district_heat_share_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "district_heat_share_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), output: existing_heating_distribution=resources( - "existing_heating_distribution_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=2000, log: logs( - "build_existing_heating_distribution_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.log" + "build_existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.log" ), benchmark: benchmarks( - "build_existing_heating_distribution/elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}" + "build_existing_heating_distribution/elec_s{simpl}_{clusters}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -965,7 +965,7 @@ rule build_existing_heating_distribution: def input_profile_offwind(w): return { - f"profile_{tech}": resources(f"profile{{weather_year}}_{tech}.nc") + f"profile_{tech}": resources(f"profile{}_{tech}.nc") for tech in ["offwind-ac", "offwind-dc"] if (tech in config_provider("electricity", "renewable_carriers")(w)) } @@ -997,12 +997,12 @@ rule prepare_sector_network: **rules.cluster_gas_network.output, **rules.build_gas_input_locations.output, retro_cost=lambda w: ( - resources("retro_cost_elec{weather_year}_s{simpl}_{clusters}.csv") + resources("retro_cost_elec_s{simpl}_{clusters}.csv") if config_provider("sector", "retrofitting", "retro_endogen")(w) else [] ), floor_area=lambda w: ( - resources("floor_area_elec{weather_year}_s{simpl}_{clusters}.csv") + resources("floor_area_elec_s{simpl}_{clusters}.csv") if config_provider("sector", "retrofitting", "retro_endogen")(w) else [] ), @@ -1014,7 +1014,7 @@ rule prepare_sector_network: ), sequestration_potential=lambda w: ( resources( - "co2_sequestration_potential_elec{weather_year}_s{simpl}_{clusters}.csv" + "co2_sequestration_potential_elec_s{simpl}_{clusters}.csv" ) if config_provider( "sector", "regional_co2_sequestration_potential", "enable" @@ -1022,35 +1022,35 @@ rule prepare_sector_network: else [] ), network=resources( - "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc" + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc" ), energy_totals_name=resources("energy_totals.csv"), eurostat=input_eurostat, pop_weighted_energy_totals=resources( - "pop_weighted_energy_totals{weather_year}_s{simpl}_{clusters}.csv" + "pop_weighted_energy_totals_s{simpl}_{clusters}.csv" ), pop_weighted_heat_totals=resources( - "pop_weighted_heat_totals{weather_year}_s{simpl}_{clusters}.csv" + "pop_weighted_heat_totals_s{simpl}_{clusters}.csv" ), shipping_demand=resources( - "shipping_demand{weather_year}_s{simpl}_{clusters}.csv" + "shipping_demand_s{simpl}_{clusters}.csv" ), transport_demand=resources( - "transport_demand{weather_year}_s{simpl}_{clusters}.csv" + "transport_demand_s{simpl}_{clusters}.csv" ), - transport_data=resources("transport_data{weather_year}_s{simpl}_{clusters}.csv"), - avail_profile=resources("avail_profile{weather_year}_s{simpl}_{clusters}.csv"), - dsm_profile=resources("dsm_profile{weather_year}_s{simpl}_{clusters}.csv"), + transport_data=resources("transport_data_s{simpl}_{clusters}.csv"), + avail_profile=resources("avail_profile_s{simpl}_{clusters}.csv"), + dsm_profile=resources("dsm_profile_s{simpl}_{clusters}.csv"), co2_totals_name=resources("co2_totals.csv"), co2="data/bundle-sector/eea/UNFCCC_v23.csv", biomass_potentials=lambda w: ( resources( - "biomass_potentials{weather_year}_s{simpl}_{clusters}_" + "biomass_potentials_s{simpl}_{clusters}_" + "{}.csv".format(config_provider("biomass", "year")(w)) ) if config_provider("foresight")(w) == "overnight" else resources( - "biomass_potentials{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.csv" ) ), costs=lambda w: ( @@ -1059,87 +1059,87 @@ rule prepare_sector_network: else resources("costs_{planning_horizons}.csv") ), h2_cavern=resources( - "salt_cavern_potentials{weather_year}_s{simpl}_{clusters}.csv" + "salt_cavern_potentials_s{simpl}_{clusters}.csv" ), - busmap_s=resources("busmap_elec{weather_year}_s{simpl}.csv"), - busmap=resources("busmap_elec{weather_year}_s{simpl}_{clusters}.csv"), + busmap_s=resources("busmap_elec_s{simpl}.csv"), + busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), - simplified_pop_layout=resources("pop_layout_elec{weather_year}_s{simpl}.csv"), + simplified_pop_layout=resources("pop_layout_elec_s{simpl}.csv"), industrial_demand=resources( - "industrial_energy_demand_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_energy_demand_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), hourly_heat_demand_total=resources( - "hourly_heat_demand_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "hourly_heat_demand_total_elec_s{simpl}_{clusters}.nc" ), district_heat_share=resources( - "district_heat_share_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "district_heat_share_elec_s{simpl}_{clusters}_{planning_horizons}.csv" ), temp_soil_total=resources( - "temp_soil_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_total_elec_s{simpl}_{clusters}.nc" ), temp_soil_rural=resources( - "temp_soil_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_rural_elec_s{simpl}_{clusters}.nc" ), temp_soil_urban=resources( - "temp_soil_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_soil_urban_elec_s{simpl}_{clusters}.nc" ), temp_air_total=resources( - "temp_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_total_elec_s{simpl}_{clusters}.nc" ), temp_air_rural=resources( - "temp_air_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_rural_elec_s{simpl}_{clusters}.nc" ), temp_air_urban=resources( - "temp_air_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "temp_air_urban_elec_s{simpl}_{clusters}.nc" ), cop_soil_total=resources( - "cop_soil_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_total_elec_s{simpl}_{clusters}.nc" ), cop_soil_rural=resources( - "cop_soil_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_rural_elec_s{simpl}_{clusters}.nc" ), cop_soil_urban=resources( - "cop_soil_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_urban_elec_s{simpl}_{clusters}.nc" ), cop_air_total=resources( - "cop_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_total_elec_s{simpl}_{clusters}.nc" ), cop_air_rural=resources( - "cop_air_rural_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_rural_elec_s{simpl}_{clusters}.nc" ), cop_air_urban=resources( - "cop_air_urban_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_urban_elec_s{simpl}_{clusters}.nc" ), solar_thermal_total=lambda w: ( - resources("solar_thermal_total_elec{weather_year}_s{simpl}_{clusters}.nc") + resources("solar_thermal_total_elec_s{simpl}_{clusters}.nc") if config_provider("sector", "solar_thermal")(w) else [] ), solar_thermal_urban=lambda w: ( - resources("solar_thermal_urban_elec{weather_year}_s{simpl}_{clusters}.nc") + resources("solar_thermal_urban_elec_s{simpl}_{clusters}.nc") if config_provider("sector", "solar_thermal")(w) else [] ), solar_thermal_rural=lambda w: ( - resources("solar_thermal_rural_elec{weather_year}_s{simpl}_{clusters}.nc") + resources("solar_thermal_rural_elec_s{simpl}_{clusters}.nc") if config_provider("sector", "solar_thermal")(w) else [] ), output: RESULTS - + "prenetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", threads: 1 resources: mem_mb=2000, log: RESULTS - + "logs/prepare_sector_network_elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/prepare_sector_network_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/prepare_sector_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/prepare_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" diff --git a/rules/collect.smk b/rules/collect.smk index e31434f5..ef63df0f 100644 --- a/rules/collect.smk +++ b/rules/collect.smk @@ -16,7 +16,7 @@ localrules: rule cluster_networks: input: expand( - resources("networks/elec{weather_year}_s{simpl}_{clusters}.nc"), + resources("networks/elec_s{simpl}_{clusters}.nc"), **config["scenario"], run=config["run"]["name"], ), @@ -25,7 +25,7 @@ rule cluster_networks: rule extra_components_networks: input: expand( - resources("networks/elec{weather_year}_s{simpl}_{clusters}_ec.nc"), + resources("networks/elec_s{simpl}_{clusters}_ec.nc"), **config["scenario"], run=config["run"]["name"], ), @@ -35,7 +35,7 @@ rule prepare_elec_networks: input: expand( resources( - "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc" + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc" ), **config["scenario"], run=config["run"]["name"], @@ -46,7 +46,7 @@ rule prepare_sector_networks: input: expand( RESULTS - + "prenetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", **config["scenario"], run=config["run"]["name"], ), @@ -56,7 +56,7 @@ rule solve_elec_networks: input: expand( RESULTS - + "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", **config["scenario"], run=config["run"]["name"], ), @@ -66,7 +66,7 @@ rule solve_sector_networks: input: expand( RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", **config["scenario"], run=config["run"]["name"], ), @@ -76,7 +76,7 @@ rule solve_sector_networks_perfect: input: expand( RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", **config["scenario"], run=config["run"]["name"], ), @@ -86,13 +86,13 @@ rule validate_elec_networks: input: expand( RESULTS - + "figures/.statistics_plots_elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.statistics_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", **config["scenario"], run=config["run"]["name"], ), expand( RESULTS - + "figures/.validation_{kind}_plots_elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.validation_{kind}_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", **config["scenario"], run=config["run"]["name"], kind=["production", "prices", "cross_border"], diff --git a/rules/common.smk b/rules/common.smk index b298d743..618d746b 100644 --- a/rules/common.smk +++ b/rules/common.smk @@ -143,7 +143,7 @@ def solved_previous_horizon(w): return ( RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_" + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_" + planning_horizon_p + ".nc" ) diff --git a/rules/postprocess.smk b/rules/postprocess.smk index 67b71503..2eba1591 100644 --- a/rules/postprocess.smk +++ b/rules/postprocess.smk @@ -13,18 +13,18 @@ if config["foresight"] != "perfect": params: plotting=config_provider("plotting"), input: - network=resources("networks/elec{weather_year}_s{simpl}_{clusters}.nc"), + network=resources("networks/elec_s{simpl}_{clusters}.nc"), regions_onshore=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), output: - map=resources("maps/power-network{weather_year}-s{simpl}-{clusters}.pdf"), + map=resources("maps/power-network-s{simpl}-{clusters}.pdf"), threads: 1 resources: mem_mb=4000, benchmark: benchmarks( - "plot_power_network_clustered/elec{weather_year}_s{simpl}_{clusters}" + "plot_power_network_clustered/elec_s{simpl}_{clusters}" ) conda: "../envs/environment.yaml" @@ -36,23 +36,23 @@ if config["foresight"] != "perfect": plotting=config_provider("plotting"), input: network=RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", regions=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), output: map=RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", threads: 2 resources: mem_mb=10000, log: RESULTS - + "logs/plot_power_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/plot_power_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarksplot_power_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarksplot_power_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -65,23 +65,23 @@ if config["foresight"] != "perfect": foresight=config_provider("foresight"), input: network=RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", regions=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), output: map=RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf", + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf", threads: 2 resources: mem_mb=10000, log: RESULTS - + "logs/plot_hydrogen_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/plot_hydrogen_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/plot_hydrogen_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/plot_hydrogen_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -93,23 +93,23 @@ if config["foresight"] != "perfect": plotting=config_provider("plotting"), input: network=RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", regions=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), output: map=RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf", + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf", threads: 2 resources: mem_mb=10000, log: RESULTS - + "logs/plot_gas_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/plot_gas_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/plot_gas_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/plot_gas_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -122,7 +122,7 @@ if config["foresight"] == "perfect": def output_map_year(w): return { f"map_{year}": RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_" + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_" + f"{year}.pdf" for year in config_provider("scenario", "planning_horizons")(w) } @@ -132,9 +132,9 @@ if config["foresight"] == "perfect": plotting=config_provider("plotting"), input: network=RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", regions=resources( - "regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson" + "regions_onshore_elec_s{simpl}_{clusters}.geojson" ), output: unpack(output_map_year), @@ -171,7 +171,7 @@ rule make_summary: input: networks=expand( RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", **config["scenario"], allow_missing=True, ), @@ -185,20 +185,20 @@ rule make_summary: ) ), ac_plot=expand( - resources("maps/power-network{weather_year}-s{simpl}-{clusters}.pdf"), + resources("maps/power-network-s{simpl}-{clusters}.pdf"), **config["scenario"], allow_missing=True, ), costs_plot=expand( RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", **config["scenario"], allow_missing=True, ), h2_plot=lambda w: expand( ( RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf" + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf" if config_provider("sector", "H2_network")(w) else [] ), @@ -208,7 +208,7 @@ rule make_summary: ch4_plot=lambda w: expand( ( RESULTS - + "maps/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf" + + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf" if config_provider("sector", "gas_network")(w) else [] ), @@ -293,14 +293,14 @@ rule plot_elec_statistics: barplots=STATISTICS_BARPLOTS, input: network=RESULTS - + "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", output: **{ f"{plot}_bar": RESULTS - + f"figures/statistics_{plot}_bar_elec{{weather_year}}_s{{simpl}}_{{clusters}}_ec_l{{ll}}_{{opts}}.pdf" + + f"figures/statistics_{plot}_bar_elec{}_s{{simpl}}_{{clusters}}_ec_l{{ll}}_{{opts}}.pdf" for plot in STATISTICS_BARPLOTS }, barplots_touch=RESULTS - + "figures/.statistics_plots_elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.statistics_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", script: "../scripts/plot_statistics.py" diff --git a/rules/solve_electricity.smk b/rules/solve_electricity.smk index c69dfb88..5c6777d4 100644 --- a/rules/solve_electricity.smk +++ b/rules/solve_electricity.smk @@ -14,23 +14,23 @@ rule solve_network: custom_extra_functionality=input_custom_extra_functionality, input: network=resources( - "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc" + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc" ), config=RESULTS + "config.yaml", output: network=RESULTS - + "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", log: solver=normpath( RESULTS - + "logs/solve_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}_solver.log" + + "logs/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_solver.log" ), python=RESULTS - + "logs/solve_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}_python.log", + + "logs/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_python.log", benchmark: ( RESULTS - + "benchmarks/solve_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}" + + "benchmarks/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}" ) threads: solver_threads resources: @@ -49,21 +49,21 @@ rule solve_operations_network: options=config_provider("solving", "options"), input: network=RESULTS - + "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", output: network=RESULTS - + "networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}_op.nc", + + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_op.nc", log: solver=normpath( RESULTS - + "logs/solve_operations_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}_op_solver.log" + + "logs/solve_operations_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_op_solver.log" ), python=RESULTS - + "logs/solve_operations_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}_op_python.log", + + "logs/solve_operations_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_op_python.log", benchmark: ( RESULTS - + "benchmarks/solve_operations_network/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}" + + "benchmarks/solve_operations_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}" ) threads: 4 resources: diff --git a/rules/solve_myopic.smk b/rules/solve_myopic.smk index da31ac46..eae1d990 100644 --- a/rules/solve_myopic.smk +++ b/rules/solve_myopic.smk @@ -11,12 +11,12 @@ rule add_existing_baseyear: costs=config_provider("costs"), input: network=RESULTS - + "prenetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", powerplants=resources("powerplants.csv"), - busmap_s=resources("busmap_elec{weather_year}_s{simpl}.csv"), - busmap=resources("busmap_elec{weather_year}_s{simpl}_{clusters}.csv"), + busmap_s=resources("busmap_elec_s{simpl}.csv"), + busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), clustered_pop_layout=resources( - "pop_layout_elec{weather_year}_s{simpl}_{clusters}.csv" + "pop_layout_elec_s{simpl}_{clusters}.csv" ), costs=lambda w: resources( "costs_{}.csv".format( @@ -24,20 +24,20 @@ rule add_existing_baseyear: ) ), cop_soil_total=resources( - "cop_soil_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_total_elec_s{simpl}_{clusters}.nc" ), cop_air_total=resources( - "cop_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_total_elec_s{simpl}_{clusters}.nc" ), existing_heating_distribution=resources( - "existing_heating_distribution_elec{weather_year}_s{simpl}_{clusters}_{planning_horizons}.csv" + "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{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", wildcard_constraints: # TODO: The first planning_horizon needs to be aligned across scenarios # snakemake does not support passing functions to wildcard_constraints @@ -48,11 +48,11 @@ rule add_existing_baseyear: mem_mb=2000, log: RESULTS - + "logs/add_existing_baseyear_elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/add_existing_baseyear_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/add_existing_baseyear/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/add_existing_baseyear/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -79,31 +79,31 @@ rule add_brownfield: carriers=config_provider("electricity", "renewable_carriers"), input: unpack(input_profile_tech_brownfield), - simplify_busmap=resources("busmap_elec{weather_year}_s{simpl}.csv"), - cluster_busmap=resources("busmap_elec{weather_year}_s{simpl}_{clusters}.csv"), + simplify_busmap=resources("busmap_elec_s{simpl}.csv"), + cluster_busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), network=RESULTS - + "prenetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", network_p=solved_previous_horizon, #solved network at previous time step costs=resources("costs_{planning_horizons}.csv"), cop_soil_total=resources( - "cop_soil_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_soil_total_elec_s{simpl}_{clusters}.nc" ), cop_air_total=resources( - "cop_air_total_elec{weather_year}_s{simpl}_{clusters}.nc" + "cop_air_total_elec_s{simpl}_{clusters}.nc" ), output: RESULTS - + "prenetworks-brownfield/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", threads: 4 resources: mem_mb=10000, log: RESULTS - + "logs/add_brownfield_elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/add_brownfield_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/add_brownfield/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/add_brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -125,19 +125,19 @@ rule solve_sector_network_myopic: custom_extra_functionality=input_custom_extra_functionality, input: network=RESULTS - + "prenetworks-brownfield/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", costs=resources("costs_{planning_horizons}.csv"), config=RESULTS + "config.yaml", output: RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", shadow: "shallow" log: solver=RESULTS - + "logs/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", + + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", python=RESULTS - + "logs/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", + + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", threads: solver_threads resources: mem_mb=config_provider("solving", "mem"), @@ -145,7 +145,7 @@ rule solve_sector_network_myopic: benchmark: ( RESULTS - + "benchmarks/solve_sector_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/solve_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" diff --git a/rules/solve_overnight.smk b/rules/solve_overnight.smk index 21fce682..b212d453 100644 --- a/rules/solve_overnight.smk +++ b/rules/solve_overnight.smk @@ -14,20 +14,20 @@ rule solve_sector_network: custom_extra_functionality=input_custom_extra_functionality, input: network=RESULTS - + "prenetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", config=RESULTS + "config.yaml", output: RESULTS - + "postnetworks/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", shadow: "shallow" log: solver=RESULTS - + "logs/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", + + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", memory=RESULTS - + "logs/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_memory.log", + + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_memory.log", python=RESULTS - + "logs/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", + + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", threads: solver_threads resources: mem_mb=config_provider("solving", "mem"), @@ -35,7 +35,7 @@ rule solve_sector_network: benchmark: ( RESULTS - + "benchmarks/solve_sector_network/elec{weather_year}_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/solve_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" diff --git a/scripts/add_brownfield.py b/scripts/add_brownfield.py index c33012cd..1e175d87 100644 --- a/scripts/add_brownfield.py +++ b/scripts/add_brownfield.py @@ -206,7 +206,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "add_brownfield", - weather_year="", simpl="", clusters="37", opts="", diff --git a/scripts/add_electricity.py b/scripts/add_electricity.py index f997d852..91fc04ea 100755 --- a/scripts/add_electricity.py +++ b/scripts/add_electricity.py @@ -797,7 +797,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("add_electricity", weather_year="") + snakemake = mock_snakemake("add_electricity") configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/add_existing_baseyear.py b/scripts/add_existing_baseyear.py index 43d287cd..de3c10f0 100644 --- a/scripts/add_existing_baseyear.py +++ b/scripts/add_existing_baseyear.py @@ -553,7 +553,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "add_existing_baseyear", - weather_year="", configfiles="config/test/config.myopic.yaml", simpl="", clusters="37", diff --git a/scripts/add_extra_components.py b/scripts/add_extra_components.py index 464b5f9f..9e3f9772 100644 --- a/scripts/add_extra_components.py +++ b/scripts/add_extra_components.py @@ -38,13 +38,13 @@ Inputs Outputs ------- -- ``networks/elec{weather_year}_s{simpl}_{clusters}_ec.nc``: +- ``networks/elec_s{simpl}_{clusters}_ec.nc``: Description ----------- -The rule :mod:`add_extra_components` attaches additional extendable components to the clustered and simplified network. These can be configured in the ``config/config.yaml`` at ``electricity: extendable_carriers:``. It processes ``networks/elec{weather_year}_s{simpl}_{clusters}.nc`` to build ``networks/elec{weather_year}_s{simpl}_{clusters}_ec.nc``, which in contrast to the former (depending on the configuration) contain with **zero** initial capacity +The rule :mod:`add_extra_components` attaches additional extendable components to the clustered and simplified network. These can be configured in the ``config/config.yaml`` at ``electricity: extendable_carriers:``. It processes ``networks/elec_s{simpl}_{clusters}.nc`` to build ``networks/elec_s{simpl}_{clusters}_ec.nc``, which in contrast to the former (depending on the configuration) contain with **zero** initial capacity - ``StorageUnits`` of carrier 'H2' and/or 'battery'. If this option is chosen, every bus is given an extendable ``StorageUnit`` of the corresponding carrier. The energy and power capacities are linked through a parameter that specifies the energy capacity as maximum hours at full dispatch power and is configured in ``electricity: max_hours:``. This linkage leads to one investment variable per storage unit. The default ``max_hours`` lead to long-term hydrogen and short-term battery storage units. @@ -229,7 +229,7 @@ if __name__ == "__main__": from _helpers import mock_snakemake snakemake = mock_snakemake( - "add_extra_components", weather_year="", simpl="", clusters=5 + "add_extra_components", simpl="", clusters=5 ) configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/build_artificial_load_data.py b/scripts/build_artificial_load_data.py index 7703ff28..51c07291 100755 --- a/scripts/build_artificial_load_data.py +++ b/scripts/build_artificial_load_data.py @@ -16,7 +16,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("build_artificial_load_data", weather_year="") + snakemake = mock_snakemake("build_artificial_load_data") configure_logging(snakemake) diff --git a/scripts/build_biomass_potentials.py b/scripts/build_biomass_potentials.py index 3f8c35a8..79e2c203 100644 --- a/scripts/build_biomass_potentials.py +++ b/scripts/build_biomass_potentials.py @@ -218,7 +218,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_biomass_potentials", - weather_year="", simpl="", clusters="5", planning_horizons=2050, diff --git a/scripts/build_clustered_population_layouts.py b/scripts/build_clustered_population_layouts.py index d4cfb96d..5ec60349 100644 --- a/scripts/build_clustered_population_layouts.py +++ b/scripts/build_clustered_population_layouts.py @@ -19,7 +19,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_clustered_population_layouts", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/build_cop_profiles.py b/scripts/build_cop_profiles.py index af678978..16e44c18 100644 --- a/scripts/build_cop_profiles.py +++ b/scripts/build_cop_profiles.py @@ -32,7 +32,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_cop_profiles", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/build_daily_heat_demand.py b/scripts/build_daily_heat_demand.py index 8fe946a5..0ba47771 100644 --- a/scripts/build_daily_heat_demand.py +++ b/scripts/build_daily_heat_demand.py @@ -21,7 +21,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_daily_heat_demands", scope="total", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/build_electricity_demand.py b/scripts/build_electricity_demand.py index 90454700..4328b842 100755 --- a/scripts/build_electricity_demand.py +++ b/scripts/build_electricity_demand.py @@ -258,7 +258,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("build_electricity_demand", weather_year="") + snakemake = mock_snakemake("build_electricity_demand") configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/build_industrial_distribution_key.py b/scripts/build_industrial_distribution_key.py index e2461a7c..7cba0af5 100644 --- a/scripts/build_industrial_distribution_key.py +++ b/scripts/build_industrial_distribution_key.py @@ -146,7 +146,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_industrial_distribution_key", - weather_year="", simpl="", clusters=128, ) diff --git a/scripts/build_industrial_energy_demand_per_node_today.py b/scripts/build_industrial_energy_demand_per_node_today.py index ebfe562f..8b2b70a0 100644 --- a/scripts/build_industrial_energy_demand_per_node_today.py +++ b/scripts/build_industrial_energy_demand_per_node_today.py @@ -73,7 +73,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_industrial_energy_demand_per_node_today", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/build_population_layouts.py b/scripts/build_population_layouts.py index 6552eeb2..64e70366 100644 --- a/scripts/build_population_layouts.py +++ b/scripts/build_population_layouts.py @@ -23,7 +23,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_population_layouts", - weather_year="", ) configure_logging(snakemake) diff --git a/scripts/build_population_weighted_energy_totals.py b/scripts/build_population_weighted_energy_totals.py index 0cb3e61e..bf4a6118 100644 --- a/scripts/build_population_weighted_energy_totals.py +++ b/scripts/build_population_weighted_energy_totals.py @@ -15,7 +15,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_population_weighted_energy_totals", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/build_renewable_profiles.py b/scripts/build_renewable_profiles.py index d31c13f0..3380a947 100644 --- a/scripts/build_renewable_profiles.py +++ b/scripts/build_renewable_profiles.py @@ -201,7 +201,7 @@ if __name__ == "__main__": from _helpers import mock_snakemake snakemake = mock_snakemake( - "build_renewable_profiles", technology="offwind-dc", weather_year="" + "build_renewable_profiles", technology="offwind-dc" ) configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/build_solar_thermal_profiles.py b/scripts/build_solar_thermal_profiles.py index db56a401..dc921ff5 100644 --- a/scripts/build_solar_thermal_profiles.py +++ b/scripts/build_solar_thermal_profiles.py @@ -20,7 +20,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_solar_thermal_profiles", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/build_transport_demand.py b/scripts/build_transport_demand.py index fc13893f..9a64801f 100644 --- a/scripts/build_transport_demand.py +++ b/scripts/build_transport_demand.py @@ -167,7 +167,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_transport_demand", - weather_year="", simpl="", clusters=48, ) diff --git a/scripts/cluster_gas_network.py b/scripts/cluster_gas_network.py index fd335cd3..19585aa9 100755 --- a/scripts/cluster_gas_network.py +++ b/scripts/cluster_gas_network.py @@ -105,7 +105,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("cluster_gas_network", weather_year="", simpl="", clusters="37") + snakemake = mock_snakemake("cluster_gas_network", simpl="", clusters="37") configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/cluster_network.py b/scripts/cluster_network.py index 8ba3e7b3..5682c337 100644 --- a/scripts/cluster_network.py +++ b/scripts/cluster_network.py @@ -32,28 +32,28 @@ Relevant Settings Inputs ------ -- ``resources/regions_onshore_elec{weather_year}_s{simpl}.geojson``: confer :ref:`simplify` -- ``resources/regions_offshore_elec{weather_year}_s{simpl}.geojson``: confer :ref:`simplify` -- ``networks/elec{weather_year}_s{simpl}.nc``: confer :ref:`simplify` -- ``resources/busmap_elec{weather_year}_s{simpl}.csv``: confer :ref:`simplify` -- ``data/custom_busmap_elec{weather_year}_s{simpl}_{clusters}.csv``: optional input +- ``resources/regions_onshore_elec_s{simpl}.geojson``: confer :ref:`simplify` +- ``resources/regions_offshore_elec_s{simpl}.geojson``: confer :ref:`simplify` +- ``networks/elec_s{simpl}.nc``: confer :ref:`simplify` +- ``resources/busmap_elec_s{simpl}.csv``: confer :ref:`simplify` +- ``data/custom_busmap_elec_s{simpl}_{clusters}.csv``: optional input Outputs ------- -- ``resources/regions_onshore_elec{weather_year}_s{simpl}_{clusters}.geojson``: +- ``resources/regions_onshore_elec_s{simpl}_{clusters}.geojson``: .. image:: img/regions_onshore_elec_s_X.png :scale: 33 % -- ``resources/regions_offshore_elec{weather_year}_s{simpl}_{clusters}.geojson``: +- ``resources/regions_offshore_elec_s{simpl}_{clusters}.geojson``: .. image:: img/regions_offshore_elec_s_X.png :scale: 33 % -- ``resources/busmap_elec{weather_year}_s{simpl}_{clusters}.csv``: Mapping of buses from ``networks/elec_s{simpl}.nc`` to ``networks/elec_s{simpl}_{clusters}.nc``; -- ``resources/linemap{weather_year}_elec_s{simpl}_{clusters}.csv``: Mapping of lines from ``networks/elec_s{simpl}.nc`` to ``networks/elec_s{simpl}_{clusters}.nc``; -- ``networks/elec{weather_year}_s{simpl}_{clusters}.nc``: +- ``resources/busmap_elec_s{simpl}_{clusters}.csv``: Mapping of buses from ``networks/elec_s{simpl}.nc`` to ``networks/elec_s{simpl}_{clusters}.nc``; +- ``resources/linemap_elec_s{simpl}_{clusters}.csv``: Mapping of lines from ``networks/elec_s{simpl}.nc`` to ``networks/elec_s{simpl}_{clusters}.nc``; +- ``networks/elec_s{simpl}_{clusters}.nc``: .. image:: img/elec_s_X.png :scale: 40 % @@ -455,7 +455,7 @@ if __name__ == "__main__": from _helpers import mock_snakemake snakemake = mock_snakemake( - "cluster_network", simpl="", clusters="5", weather_year="" + "cluster_network", simpl="", clusters="5", ) configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/make_summary.py b/scripts/make_summary.py index 67089f92..27ce91d3 100644 --- a/scripts/make_summary.py +++ b/scripts/make_summary.py @@ -646,7 +646,7 @@ def make_summaries(networks_dict): columns = pd.MultiIndex.from_tuples( networks_dict.keys(), - names=["weather_year", "cluster", "ll", "opt", "planning_horizon"], + names=["cluster", "ll", "opt", "planning_horizon"], ) df = {output: pd.DataFrame(columns=columns, dtype=float) for output in outputs} @@ -679,10 +679,9 @@ if __name__ == "__main__": set_scenario_config(snakemake) networks_dict = { - (weather_year, cluster, ll, opt + sector_opt, planning_horizon): "results/" + (cluster, ll, opt + sector_opt, planning_horizon): "results/" + snakemake.params.RDIR - + f"postnetworks/elec{weather_year}_s{simpl}_{cluster}_l{ll}_{opt}_{sector_opt}_{planning_horizon}.nc" - for weather_year in snakemake.params.scenario["weather_year"] + + f"postnetworks/elec_s{simpl}_{cluster}_l{ll}_{opt}_{sector_opt}_{planning_horizon}.nc" for simpl in snakemake.params.scenario["simpl"] for cluster in snakemake.params.scenario["clusters"] for opt in snakemake.params.scenario["opts"] diff --git a/scripts/prepare_links_p_nom.py b/scripts/prepare_links_p_nom.py index 627122e7..7c1ed211 100644 --- a/scripts/prepare_links_p_nom.py +++ b/scripts/prepare_links_p_nom.py @@ -67,7 +67,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake # rule must be enabled in config - snakemake = mock_snakemake("prepare_links_p_nom", simpl="", weather_year="") + snakemake = mock_snakemake("prepare_links_p_nom", simpl="") configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/prepare_network.py b/scripts/prepare_network.py index 928fa577..f38a3619 100755 --- a/scripts/prepare_network.py +++ b/scripts/prepare_network.py @@ -41,12 +41,12 @@ Inputs ------ - ``resources/costs.csv``: The database of cost assumptions for all included technologies for specific years from various sources; e.g. discount rate, lifetime, investment (CAPEX), fixed operation and maintenance (FOM), variable operation and maintenance (VOM), fuel costs, efficiency, carbon-dioxide intensity. -- ``networks/elec{weather_year}_s{simpl}_{clusters}.nc``: confer :ref:`cluster` +- ``networks/elec_s{simpl}_{clusters}.nc``: confer :ref:`cluster` Outputs ------- -- ``networks/elec{weather_year}_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc``: Complete PyPSA network that will be handed to the ``solve_network`` rule. +- ``networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc``: Complete PyPSA network that will be handed to the ``solve_network`` rule. Description ----------- @@ -305,7 +305,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "prepare_network", - weather_year="", simpl="", clusters="37", ll="v1.0", diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 6ca06c9a..3a1158b9 100755 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -3584,7 +3584,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "prepare_sector_network", configfiles="test/config.overnight.yaml", - weather_year="", simpl="", opts="", clusters="37", diff --git a/scripts/simplify_network.py b/scripts/simplify_network.py index 5a4c792e..4de17704 100644 --- a/scripts/simplify_network.py +++ b/scripts/simplify_network.py @@ -55,18 +55,18 @@ Inputs Outputs ------- -- ``resources/regions_onshore_elec{weather_year}_s{simpl}.geojson``: +- ``resources/regions_onshore_elec_s{simpl}.geojson``: .. image:: img/regions_onshore_elec_s.png :scale: 33 % -- ``resources/regions_offshore_elec{weather_year}_s{simpl}.geojson``: +- ``resources/regions_offshore_elec_s{simpl}.geojson``: .. image:: img/regions_offshore_elec_s .png :scale: 33 % -- ``resources/busmap_elec{weather_year}_s{simpl}.h5``: Mapping of buses from ``networks/elec.nc`` to ``networks/elec{weather_year}_s{simpl}.nc``; has keys ['/busmap_s'] -- ``networks/elec{weather_year}_s{simpl}.nc``: +- ``resources/busmap_elec_s{simpl}.h5``: Mapping of buses from ``networks/elec.nc`` to ``networks/elec_s{simpl}.nc``; has keys ['/busmap_s'] +- ``networks/elec_s{simpl}.nc``: .. image:: img/elec_s.png :scale: 33 % @@ -527,7 +527,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("simplify_network", weather_year="", simpl="") + snakemake = mock_snakemake("simplify_network", simpl="") configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/solve_network.py b/scripts/solve_network.py index aed78824..7e53e606 100644 --- a/scripts/solve_network.py +++ b/scripts/solve_network.py @@ -929,7 +929,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "solve_sector_network", configfiles="../config/test/config.perfect.yaml", - weather_year="", simpl="", opts="", clusters="37", diff --git a/scripts/solve_operations_network.py b/scripts/solve_operations_network.py index fdc2feb6..bd4ce7aa 100644 --- a/scripts/solve_operations_network.py +++ b/scripts/solve_operations_network.py @@ -29,7 +29,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "solve_operations_network", configfiles="test/config.electricity.yaml", - weather_year="", simpl="", opts="", clusters="5",