fix build_district_heat_share and build_transport_demand for multiyear
This commit is contained in:
parent
57b487f163
commit
4fbb3c81c4
@ -729,6 +729,8 @@ rule build_retro_cost:
|
|||||||
|
|
||||||
|
|
||||||
rule build_population_weighted_energy_totals:
|
rule build_population_weighted_energy_totals:
|
||||||
|
params:
|
||||||
|
snapshots=config_provider("snapshots"),
|
||||||
input:
|
input:
|
||||||
energy_totals=resources("{kind}_totals.csv"),
|
energy_totals=resources("{kind}_totals.csv"),
|
||||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||||
@ -771,6 +773,7 @@ rule build_transport_demand:
|
|||||||
snapshots=config_provider("snapshots"),
|
snapshots=config_provider("snapshots"),
|
||||||
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
drop_leap_day=config_provider("enable", "drop_leap_day"),
|
||||||
sector=config_provider("sector"),
|
sector=config_provider("sector"),
|
||||||
|
energy_totals_year=config_provider("energy", "energy_totals_year"),
|
||||||
input:
|
input:
|
||||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||||
pop_weighted_energy_totals=resources(
|
pop_weighted_energy_totals=resources(
|
||||||
@ -799,6 +802,7 @@ rule build_transport_demand:
|
|||||||
rule build_district_heat_share:
|
rule build_district_heat_share:
|
||||||
params:
|
params:
|
||||||
sector=config_provider("sector"),
|
sector=config_provider("sector"),
|
||||||
|
energy_totals_year=config_provider("energy", "energy_totals_year"),
|
||||||
input:
|
input:
|
||||||
district_heat_share=resources("district_heat_share.csv"),
|
district_heat_share=resources("district_heat_share.csv"),
|
||||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||||
|
@ -22,7 +22,7 @@ if __name__ == "__main__":
|
|||||||
snakemake = mock_snakemake(
|
snakemake = mock_snakemake(
|
||||||
"build_district_heat_share",
|
"build_district_heat_share",
|
||||||
simpl="",
|
simpl="",
|
||||||
clusters=48,
|
clusters=60,
|
||||||
planning_horizons="2050",
|
planning_horizons="2050",
|
||||||
)
|
)
|
||||||
configure_logging(snakemake)
|
configure_logging(snakemake)
|
||||||
@ -32,9 +32,8 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
pop_layout = pd.read_csv(snakemake.input.clustered_pop_layout, index_col=0)
|
pop_layout = pd.read_csv(snakemake.input.clustered_pop_layout, index_col=0)
|
||||||
|
|
||||||
district_heat_share = pd.read_csv(snakemake.input.district_heat_share, index_col=0)[
|
year = str(snakemake.params.energy_totals_year)
|
||||||
"district heat share"
|
district_heat_share = pd.read_csv(snakemake.input.district_heat_share, index_col=0)[year]
|
||||||
]
|
|
||||||
|
|
||||||
# make ct-based share nodal
|
# make ct-based share nodal
|
||||||
district_heat_share = district_heat_share.reindex(pop_layout.ct).fillna(0)
|
district_heat_share = district_heat_share.reindex(pop_layout.ct).fillna(0)
|
||||||
|
@ -721,10 +721,18 @@ def build_transport_data(countries, population, idees):
|
|||||||
|
|
||||||
transport_data = pd.DataFrame(idees["passenger cars"])
|
transport_data = pd.DataFrame(idees["passenger cars"])
|
||||||
|
|
||||||
|
countries_without_ch = set(countries) - {"CH"}
|
||||||
|
new_index = pd.MultiIndex.from_product(
|
||||||
|
[countries_without_ch, transport_data.index.levels[1]],
|
||||||
|
names=["country", "year"]
|
||||||
|
)
|
||||||
|
|
||||||
|
transport_data = transport_data.reindex(index=new_index)
|
||||||
|
|
||||||
# https://www.bfs.admin.ch/bfs/en/home/statistics/mobility-transport/transport-infrastructure-vehicles/vehicles/road-vehicles-stock-level-motorisation.html
|
# https://www.bfs.admin.ch/bfs/en/home/statistics/mobility-transport/transport-infrastructure-vehicles/vehicles/road-vehicles-stock-level-motorisation.html
|
||||||
if "CH" in countries:
|
if "CH" in countries:
|
||||||
fn = snakemake.input.swiss_transport
|
fn = snakemake.input.swiss_transport
|
||||||
swiss_cars = pd.read_csv(fn, index_col=0).loc[1990:2021, ["passenger cars"]]
|
swiss_cars = pd.read_csv(fn, index_col=0).loc[2000:2015, ["passenger cars"]]
|
||||||
|
|
||||||
swiss_cars.index = pd.MultiIndex.from_product(
|
swiss_cars.index = pd.MultiIndex.from_product(
|
||||||
[["CH"], swiss_cars.index], names=["country", "year"]
|
[["CH"], swiss_cars.index], names=["country", "year"]
|
||||||
@ -741,7 +749,14 @@ def build_transport_data(countries, population, idees):
|
|||||||
)
|
)
|
||||||
|
|
||||||
cars_pp = transport_data["number cars"] / population
|
cars_pp = transport_data["number cars"] / population
|
||||||
transport_data.loc[missing, "number cars"] = cars_pp.mean() * population
|
|
||||||
|
fill_values = {year: cars_pp.mean() * population for year in transport_data.index.levels[1]}
|
||||||
|
fill_values = pd.DataFrame(fill_values).stack()
|
||||||
|
fill_values = pd.DataFrame(fill_values, columns=["number cars"])
|
||||||
|
fill_values.index.names = ["country", "year"]
|
||||||
|
fill_values = fill_values.reindex(transport_data.index)
|
||||||
|
|
||||||
|
transport_data = transport_data.combine_first(fill_values)
|
||||||
|
|
||||||
# collect average fuel efficiency in kWh/km
|
# collect average fuel efficiency in kWh/km
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
snakemake = mock_snakemake(
|
snakemake = mock_snakemake(
|
||||||
"build_population_weighted_energy_totals",
|
"build_population_weighted_energy_totals",
|
||||||
kind="energy",
|
kind="heat",
|
||||||
simpl="",
|
simpl="",
|
||||||
clusters=60,
|
clusters=60,
|
||||||
)
|
)
|
||||||
|
@ -23,8 +23,9 @@ from _helpers import (
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def build_nodal_transport_data(fn, pop_layout):
|
def build_nodal_transport_data(fn, pop_layout, year):
|
||||||
transport_data = pd.read_csv(fn, index_col=0)
|
transport_data = pd.read_csv(fn, index_col=[0, 1])
|
||||||
|
transport_data = transport_data.xs(min(2015, year), level='year')
|
||||||
|
|
||||||
nodal_transport_data = transport_data.loc[pop_layout.ct].fillna(0.0)
|
nodal_transport_data = transport_data.loc[pop_layout.ct].fillna(0.0)
|
||||||
nodal_transport_data.index = pop_layout.index
|
nodal_transport_data.index = pop_layout.index
|
||||||
@ -173,7 +174,7 @@ if __name__ == "__main__":
|
|||||||
snakemake = mock_snakemake(
|
snakemake = mock_snakemake(
|
||||||
"build_transport_demand",
|
"build_transport_demand",
|
||||||
simpl="",
|
simpl="",
|
||||||
clusters=48,
|
clusters=60,
|
||||||
)
|
)
|
||||||
configure_logging(snakemake)
|
configure_logging(snakemake)
|
||||||
set_scenario_config(snakemake)
|
set_scenario_config(snakemake)
|
||||||
@ -194,8 +195,9 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
nyears = len(snapshots) / 8760
|
nyears = len(snapshots) / 8760
|
||||||
|
|
||||||
|
energy_totals_year = snakemake.params.energy_totals_year
|
||||||
nodal_transport_data = build_nodal_transport_data(
|
nodal_transport_data = build_nodal_transport_data(
|
||||||
snakemake.input.transport_data, pop_layout
|
snakemake.input.transport_data, pop_layout, energy_totals_year
|
||||||
)
|
)
|
||||||
|
|
||||||
transport_demand = build_transport_demand(
|
transport_demand = build_transport_demand(
|
||||||
|
@ -205,7 +205,7 @@ def average_every_nhours(n, offset):
|
|||||||
|
|
||||||
snapshot_weightings = n.snapshot_weightings.resample(offset).sum()
|
snapshot_weightings = n.snapshot_weightings.resample(offset).sum()
|
||||||
sns = snapshot_weightings.index
|
sns = snapshot_weightings.index
|
||||||
if snakemake.params.drop_leap_days:
|
if snakemake.params.drop_leap_day:
|
||||||
sns = sns[~((sns.month == 2) & (sns.day == 29))]
|
sns = sns[~((sns.month == 2) & (sns.day == 29))]
|
||||||
m.set_snapshots(snapshot_weightings.index)
|
m.set_snapshots(snapshot_weightings.index)
|
||||||
m.snapshot_weightings = snapshot_weightings
|
m.snapshot_weightings = snapshot_weightings
|
||||||
|
@ -813,7 +813,7 @@ def average_every_nhours(n, offset):
|
|||||||
|
|
||||||
snapshot_weightings = n.snapshot_weightings.resample(offset).sum()
|
snapshot_weightings = n.snapshot_weightings.resample(offset).sum()
|
||||||
sns = snapshot_weightings.index
|
sns = snapshot_weightings.index
|
||||||
if snakemake.params.drop_leap_days:
|
if snakemake.params.drop_leap_day:
|
||||||
sns = sns[~((sns.month == 2) & (sns.day == 29))]
|
sns = sns[~((sns.month == 2) & (sns.day == 29))]
|
||||||
snapshot_weightings = snapshot_weightings.loc[sns]
|
snapshot_weightings = snapshot_weightings.loc[sns]
|
||||||
m.set_snapshots(snapshot_weightings.index)
|
m.set_snapshots(snapshot_weightings.index)
|
||||||
|
Loading…
Reference in New Issue
Block a user