add sanitize_locations function and apply it
address some deprecation warnings
This commit is contained in:
parent
7e2ad98011
commit
76872fa0f1
@ -18,7 +18,7 @@ scenario:
|
|||||||
clusters:
|
clusters:
|
||||||
- 5
|
- 5
|
||||||
sector_opts:
|
sector_opts:
|
||||||
- 8760H-T-H-B-I-A-dist1
|
- 8760h-T-H-B-I-A-dist1
|
||||||
planning_horizons:
|
planning_horizons:
|
||||||
- 2030
|
- 2030
|
||||||
- 2040
|
- 2040
|
||||||
|
@ -178,6 +178,15 @@ def sanitize_carriers(n, config):
|
|||||||
n.carriers["color"] = n.carriers.color.where(n.carriers.color != "", colors)
|
n.carriers["color"] = n.carriers.color.where(n.carriers.color != "", colors)
|
||||||
|
|
||||||
|
|
||||||
|
def sanitize_locations(n):
|
||||||
|
n.buses["x"] = n.buses.x.where(n.buses.x != 0, n.buses.location.map(n.buses.x))
|
||||||
|
n.buses["y"] = n.buses.y.where(n.buses.y != 0, n.buses.location.map(n.buses.y))
|
||||||
|
n.buses["country"] = n.buses.country.where(
|
||||||
|
n.buses.country.ne("") & n.buses.country.notnull(),
|
||||||
|
n.buses.location.map(n.buses.country),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def add_co2_emissions(n, costs, carriers):
|
def add_co2_emissions(n, costs, carriers):
|
||||||
"""
|
"""
|
||||||
Add CO2 emissions to the network's carriers attribute.
|
Add CO2 emissions to the network's carriers attribute.
|
||||||
|
@ -56,7 +56,7 @@ import numpy as np
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
import pypsa
|
import pypsa
|
||||||
from _helpers import configure_logging
|
from _helpers import configure_logging
|
||||||
from add_electricity import load_costs, sanitize_carriers
|
from add_electricity import load_costs, sanitize_carriers, sanitize_locations
|
||||||
|
|
||||||
idx = pd.IndexSlice
|
idx = pd.IndexSlice
|
||||||
|
|
||||||
@ -100,10 +100,9 @@ def attach_stores(n, costs, extendable_carriers):
|
|||||||
n.madd("Carrier", carriers)
|
n.madd("Carrier", carriers)
|
||||||
|
|
||||||
buses_i = n.buses.index
|
buses_i = n.buses.index
|
||||||
bus_sub_dict = {k: n.buses[k].values for k in ["x", "y", "country"]}
|
|
||||||
|
|
||||||
if "H2" in carriers:
|
if "H2" in carriers:
|
||||||
h2_buses_i = n.madd("Bus", buses_i + " H2", carrier="H2", **bus_sub_dict)
|
h2_buses_i = n.madd("Bus", buses_i + " H2", carrier="H2", location=buses_i)
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Store",
|
"Store",
|
||||||
@ -143,7 +142,7 @@ def attach_stores(n, costs, extendable_carriers):
|
|||||||
|
|
||||||
if "battery" in carriers:
|
if "battery" in carriers:
|
||||||
b_buses_i = n.madd(
|
b_buses_i = n.madd(
|
||||||
"Bus", buses_i + " battery", carrier="battery", **bus_sub_dict
|
"Bus", buses_i + " battery", carrier="battery", location=buses_i
|
||||||
)
|
)
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
@ -246,6 +245,7 @@ if __name__ == "__main__":
|
|||||||
attach_hydrogen_pipelines(n, costs, extendable_carriers)
|
attach_hydrogen_pipelines(n, costs, extendable_carriers)
|
||||||
|
|
||||||
sanitize_carriers(n, snakemake.config)
|
sanitize_carriers(n, snakemake.config)
|
||||||
|
sanitize_locations(n)
|
||||||
|
|
||||||
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
|
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
|
||||||
n.export_to_netcdf(snakemake.output[0])
|
n.export_to_netcdf(snakemake.output[0])
|
||||||
|
@ -507,7 +507,7 @@ def calculate_weighted_prices(n, label, weighted_prices):
|
|||||||
if carrier in ["H2", "gas"]:
|
if carrier in ["H2", "gas"]:
|
||||||
load = pd.DataFrame(index=n.snapshots, columns=buses, data=0.0)
|
load = pd.DataFrame(index=n.snapshots, columns=buses, data=0.0)
|
||||||
else:
|
else:
|
||||||
load = n.loads_t.p_set[buses]
|
load = n.loads_t.p_set[buses.intersection(n.loads.index)]
|
||||||
|
|
||||||
for tech in value:
|
for tech in value:
|
||||||
names = n.links.index[n.links.index.to_series().str[-len(tech) :] == tech]
|
names = n.links.index[n.links.index.to_series().str[-len(tech) :] == tech]
|
||||||
@ -560,7 +560,10 @@ def calculate_market_values(n, label, market_values):
|
|||||||
)
|
)
|
||||||
revenue = dispatch * n.buses_t.marginal_price[buses]
|
revenue = dispatch * n.buses_t.marginal_price[buses]
|
||||||
|
|
||||||
market_values.at[tech, label] = revenue.sum().sum() / dispatch.sum().sum()
|
if total_dispatch := dispatch.sum().sum():
|
||||||
|
market_values.at[tech, label] = revenue.sum().sum() / total_dispatch
|
||||||
|
else:
|
||||||
|
market_values.at[tech, label] = np.nan
|
||||||
|
|
||||||
## Now do market value of links ##
|
## Now do market value of links ##
|
||||||
|
|
||||||
@ -583,7 +586,10 @@ def calculate_market_values(n, label, market_values):
|
|||||||
|
|
||||||
revenue = dispatch * n.buses_t.marginal_price[buses]
|
revenue = dispatch * n.buses_t.marginal_price[buses]
|
||||||
|
|
||||||
market_values.at[tech, label] = revenue.sum().sum() / dispatch.sum().sum()
|
if total_dispatch := dispatch.sum().sum():
|
||||||
|
market_values.at[tech, label] = revenue.sum().sum() / total_dispatch
|
||||||
|
else:
|
||||||
|
market_values.at[tech, label] = np.nan
|
||||||
|
|
||||||
return market_values
|
return market_values
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ def calculate_energy(n, label, energy):
|
|||||||
totals[no_bus] = float(
|
totals[no_bus] = float(
|
||||||
n.component_attrs[c.name].loc["p" + port, "default"]
|
n.component_attrs[c.name].loc["p" + port, "default"]
|
||||||
)
|
)
|
||||||
c_energies -= totals.groupby(c.df.carrier, axis=1).sum()
|
c_energies -= totals.T.groupby(c.df.carrier).sum().T
|
||||||
|
|
||||||
c_energies = pd.concat([c_energies.T], keys=[c.list_name])
|
c_energies = pd.concat([c_energies.T], keys=[c.list_name])
|
||||||
|
|
||||||
@ -376,9 +376,8 @@ def calculate_supply_energy(n, label, supply_energy):
|
|||||||
.groupby(level=0)
|
.groupby(level=0)
|
||||||
.sum()
|
.sum()
|
||||||
.multiply(c.df.loc[items, "sign"])
|
.multiply(c.df.loc[items, "sign"])
|
||||||
.groupby(c.df.loc[items, "carrier"], axis=1)
|
.T.groupby(c.df.loc[items, "carrier"])
|
||||||
.sum()
|
.sum()
|
||||||
.T
|
|
||||||
)
|
)
|
||||||
s = pd.concat([s], keys=[c.list_name])
|
s = pd.concat([s], keys=[c.list_name])
|
||||||
s = pd.concat([s], keys=[i])
|
s = pd.concat([s], keys=[i])
|
||||||
@ -525,9 +524,12 @@ def calculate_weighted_prices(n, label, weighted_prices):
|
|||||||
# stores[stores > 0.] = 0.
|
# stores[stores > 0.] = 0.
|
||||||
# load += -stores
|
# load += -stores
|
||||||
|
|
||||||
weighted_prices.loc[carrier, label] = (
|
if total_load := load.sum().sum():
|
||||||
load * n.buses_t.marginal_price[buses]
|
weighted_prices.loc[carrier, label] = (
|
||||||
).sum().sum() / load.sum().sum()
|
load * n.buses_t.marginal_price[buses]
|
||||||
|
).sum().sum() / total_load
|
||||||
|
else:
|
||||||
|
weighted_prices.loc[carrier, label] = np.nan
|
||||||
|
|
||||||
if carrier[:5] == "space":
|
if carrier[:5] == "space":
|
||||||
print(load * n.buses_t.marginal_price[buses])
|
print(load * n.buses_t.marginal_price[buses])
|
||||||
@ -562,7 +564,10 @@ def calculate_market_values(n, label, market_values):
|
|||||||
|
|
||||||
revenue = dispatch * n.buses_t.marginal_price[buses]
|
revenue = dispatch * n.buses_t.marginal_price[buses]
|
||||||
|
|
||||||
market_values.at[tech, label] = revenue.sum().sum() / dispatch.sum().sum()
|
if total_dispatch := dispatch.sum().sum():
|
||||||
|
market_values.at[tech, label] = revenue.sum().sum() / total_dispatch
|
||||||
|
else:
|
||||||
|
market_values.at[tech, label] = np.nan
|
||||||
|
|
||||||
## Now do market value of links ##
|
## Now do market value of links ##
|
||||||
|
|
||||||
@ -585,7 +590,10 @@ def calculate_market_values(n, label, market_values):
|
|||||||
|
|
||||||
revenue = dispatch * n.buses_t.marginal_price[buses]
|
revenue = dispatch * n.buses_t.marginal_price[buses]
|
||||||
|
|
||||||
market_values.at[tech, label] = revenue.sum().sum() / dispatch.sum().sum()
|
if total_dispatch := dispatch.sum().sum():
|
||||||
|
market_values.at[tech, label] = revenue.sum().sum() / total_dispatch
|
||||||
|
else:
|
||||||
|
market_values.at[tech, label] = np.nan
|
||||||
|
|
||||||
return market_values
|
return market_values
|
||||||
|
|
||||||
|
@ -36,7 +36,9 @@ def group_pipes(df, drop_direction=False):
|
|||||||
lambda x: f"H2 pipeline {x.bus0.replace(' H2', '')} -> {x.bus1.replace(' H2', '')}",
|
lambda x: f"H2 pipeline {x.bus0.replace(' H2', '')} -> {x.bus1.replace(' H2', '')}",
|
||||||
axis=1,
|
axis=1,
|
||||||
)
|
)
|
||||||
return df.groupby(level=0).agg({"p_nom_opt": sum, "bus0": "first", "bus1": "first"})
|
return df.groupby(level=0).agg(
|
||||||
|
{"p_nom_opt": "sum", "bus0": "first", "bus1": "first"}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def plot_h2_map(n, regions):
|
def plot_h2_map(n, regions):
|
||||||
|
@ -221,7 +221,7 @@ def concat_networks(years):
|
|||||||
# set investment periods
|
# set investment periods
|
||||||
n.investment_periods = n.snapshots.levels[0]
|
n.investment_periods = n.snapshots.levels[0]
|
||||||
# weighting of the investment period -> assuming last period same weighting as the period before
|
# weighting of the investment period -> assuming last period same weighting as the period before
|
||||||
time_w = n.investment_periods.to_series().diff().shift(-1).fillna(method="ffill")
|
time_w = n.investment_periods.to_series().diff().shift(-1).ffill()
|
||||||
n.investment_period_weightings["years"] = time_w
|
n.investment_period_weightings["years"] = time_w
|
||||||
# set objective weightings
|
# set objective weightings
|
||||||
objective_w = get_investment_weighting(
|
objective_w = get_investment_weighting(
|
||||||
|
@ -19,7 +19,7 @@ import pandas as pd
|
|||||||
import pypsa
|
import pypsa
|
||||||
import xarray as xr
|
import xarray as xr
|
||||||
from _helpers import update_config_with_sector_opts
|
from _helpers import update_config_with_sector_opts
|
||||||
from add_electricity import calculate_annuity, sanitize_carriers
|
from add_electricity import calculate_annuity, sanitize_carriers, sanitize_locations
|
||||||
from build_energy_totals import build_co2_totals, build_eea_co2, build_eurostat_co2
|
from build_energy_totals import build_co2_totals, build_eea_co2, build_eurostat_co2
|
||||||
from networkx.algorithms import complement
|
from networkx.algorithms import complement
|
||||||
from networkx.algorithms.connectivity.edge_augmentation import k_edge_augmentation
|
from networkx.algorithms.connectivity.edge_augmentation import k_edge_augmentation
|
||||||
@ -546,6 +546,14 @@ def patch_electricity_network(n):
|
|||||||
n.loads_t.p_set.rename(lambda x: x.strip(), axis=1, inplace=True)
|
n.loads_t.p_set.rename(lambda x: x.strip(), axis=1, inplace=True)
|
||||||
|
|
||||||
|
|
||||||
|
def add_eu_bus(n, x=-5.5, y=46):
|
||||||
|
"""
|
||||||
|
Add EU bus to the network.
|
||||||
|
"""
|
||||||
|
n.add("Bus", "EU", location="EU", x=x, y=y, carrier="none")
|
||||||
|
n.add("Carrier", "none")
|
||||||
|
|
||||||
|
|
||||||
def add_co2_tracking(n, costs, options):
|
def add_co2_tracking(n, costs, options):
|
||||||
# minus sign because opposite to how fossil fuels used:
|
# minus sign because opposite to how fossil fuels used:
|
||||||
# CH4 burning puts CH4 down, atmosphere up
|
# CH4 burning puts CH4 down, atmosphere up
|
||||||
@ -1005,6 +1013,7 @@ def insert_electricity_distribution_grid(n, costs):
|
|||||||
"Store",
|
"Store",
|
||||||
nodes + " home battery",
|
nodes + " home battery",
|
||||||
bus=nodes + " home battery",
|
bus=nodes + " home battery",
|
||||||
|
location=nodes,
|
||||||
e_cyclic=True,
|
e_cyclic=True,
|
||||||
e_nom_extendable=True,
|
e_nom_extendable=True,
|
||||||
carrier="home battery",
|
carrier="home battery",
|
||||||
@ -3527,8 +3536,8 @@ def lossy_bidirectional_links(n, carrier, efficiencies={}):
|
|||||||
rev_links["reversed"] = True
|
rev_links["reversed"] = True
|
||||||
rev_links.index = rev_links.index.map(lambda x: x + "-reversed")
|
rev_links.index = rev_links.index.map(lambda x: x + "-reversed")
|
||||||
|
|
||||||
|
n.links["reversed"] = False
|
||||||
n.links = pd.concat([n.links, rev_links], sort=False)
|
n.links = pd.concat([n.links, rev_links], sort=False)
|
||||||
n.links["reversed"] = n.links["reversed"].fillna(False)
|
|
||||||
n.links["length_original"] = n.links["length_original"].fillna(n.links.length)
|
n.links["length_original"] = n.links["length_original"].fillna(n.links.length)
|
||||||
|
|
||||||
# do compression losses after concatenation to take electricity consumption at bus0 in either direction
|
# do compression losses after concatenation to take electricity consumption at bus0 in either direction
|
||||||
@ -3594,6 +3603,8 @@ if __name__ == "__main__":
|
|||||||
for carrier in conventional:
|
for carrier in conventional:
|
||||||
add_carrier_buses(n, carrier)
|
add_carrier_buses(n, carrier)
|
||||||
|
|
||||||
|
add_eu_bus(n)
|
||||||
|
|
||||||
add_co2_tracking(n, costs, options)
|
add_co2_tracking(n, costs, options)
|
||||||
|
|
||||||
add_generation(n, costs)
|
add_generation(n, costs)
|
||||||
@ -3733,5 +3744,6 @@ if __name__ == "__main__":
|
|||||||
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
|
n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))
|
||||||
|
|
||||||
sanitize_carriers(n, snakemake.config)
|
sanitize_carriers(n, snakemake.config)
|
||||||
|
sanitize_locations(n)
|
||||||
|
|
||||||
n.export_to_netcdf(snakemake.output[0])
|
n.export_to_netcdf(snakemake.output[0])
|
||||||
|
Loading…
Reference in New Issue
Block a user