make_summary: Add summary about capacities and allow single country summaries
This commit is contained in:
parent
c5e8c9ad25
commit
761b1b998f
@ -267,7 +267,7 @@ def summary_networks(w):
|
|||||||
|
|
||||||
rule make_summary:
|
rule make_summary:
|
||||||
input: summary_networks
|
input: summary_networks
|
||||||
output: directory("results/summaries/{network}_s{simpl}_{clusters}_lv{lv}_{opts}")
|
output: directory("results/summaries/{network}_s{simpl}_{clusters}_lv{lv}_{opts}_{country}")
|
||||||
script: "scripts/make_summary.py"
|
script: "scripts/make_summary.py"
|
||||||
|
|
||||||
rule plot_summary:
|
rule plot_summary:
|
||||||
|
@ -18,9 +18,14 @@ def assign_carriers(n):
|
|||||||
for carrier in ["transport","heat","urban heat"]:
|
for carrier in ["transport","heat","urban heat"]:
|
||||||
n.loads.loc[n.loads.index.str.contains(carrier),"carrier"] = carrier
|
n.loads.loc[n.loads.index.str.contains(carrier),"carrier"] = carrier
|
||||||
|
|
||||||
|
n.storage_units['carrier'].replace({'hydro': 'hydro+PHS', 'PHS': 'hydro+PHS'}, inplace=True)
|
||||||
|
|
||||||
if "carrier" not in n.lines:
|
if "carrier" not in n.lines:
|
||||||
n.lines["carrier"] = "AC"
|
n.lines["carrier"] = "AC"
|
||||||
|
|
||||||
|
n.lines["carrier"].replace({"AC": "lines"}, inplace=True)
|
||||||
|
n.links["carrier"].replace({"DC": "lines"}, inplace=True)
|
||||||
|
|
||||||
if "EU gas store" in n.stores.index and n.stores.loc["EU gas Store","carrier"] == "":
|
if "EU gas store" in n.stores.index and n.stores.loc["EU gas Store","carrier"] == "":
|
||||||
n.stores.loc["EU gas Store","carrier"] = "gas Store"
|
n.stores.loc["EU gas Store","carrier"] = "gas Store"
|
||||||
|
|
||||||
@ -56,8 +61,6 @@ def calculate_costs(n,label,costs):
|
|||||||
|
|
||||||
return costs
|
return costs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def calculate_curtailment(n,label,curtailment):
|
def calculate_curtailment(n,label,curtailment):
|
||||||
|
|
||||||
avail = n.generators_t.p_max_pu.multiply(n.generators.p_nom_opt).sum().groupby(n.generators.carrier).sum()
|
avail = n.generators_t.p_max_pu.multiply(n.generators.p_nom_opt).sum().groupby(n.generators.carrier).sum()
|
||||||
@ -76,12 +79,31 @@ def calculate_energy(n,label,energy):
|
|||||||
else:
|
else:
|
||||||
c_energies = (-c.pnl.p1.multiply(n.snapshot_weightings,axis=0).sum() - c.pnl.p0.multiply(n.snapshot_weightings,axis=0).sum()).groupby(c.df.carrier).sum()
|
c_energies = (-c.pnl.p1.multiply(n.snapshot_weightings,axis=0).sum() - c.pnl.p0.multiply(n.snapshot_weightings,axis=0).sum()).groupby(c.df.carrier).sum()
|
||||||
|
|
||||||
energy = energy.reindex(energy.index|pd.MultiIndex.from_product([[c.list_name],c_energies.index]))
|
energy = include_in_summary(energy, [c.list_name], label, c_energies)
|
||||||
|
|
||||||
energy.loc[idx[c.list_name,list(c_energies.index)],label] = c_energies.values
|
|
||||||
|
|
||||||
return energy
|
return energy
|
||||||
|
|
||||||
|
def include_in_summary(summary, multiindexprefix, label, item):
|
||||||
|
summary = summary.reindex(summary.index | pd.MultiIndex.from_product([[p] for p in multiindexprefix] + [item.index]))
|
||||||
|
summary.loc[idx[tuple(multiindexprefix + [list(item.index)])], label] = item.values
|
||||||
|
return summary
|
||||||
|
|
||||||
|
def calculate_capacity(n,label,capacity):
|
||||||
|
|
||||||
|
for c in n.iterate_components(n.one_port_components):
|
||||||
|
if 'p_nom_opt' in c.df.columns:
|
||||||
|
c_capacities = abs(c.df.p_nom_opt.multiply(c.df.sign)).groupby(c.df.carrier).sum()
|
||||||
|
capacity = include_in_summary(capacity, [c.list_name], label, c_capacities)
|
||||||
|
|
||||||
|
for c in n.iterate_components(n.passive_branch_components):
|
||||||
|
c_capacities = c.df['s_nom_opt'].groupby(c.df.carrier).sum()
|
||||||
|
capacity = include_in_summary(capacity, [c.list_name], label, c_capacities)
|
||||||
|
|
||||||
|
for c in n.iterate_components(n.controllable_branch_components):
|
||||||
|
c_capacities = c.df.p_nom_opt.groupby(c.df.carrier).sum()
|
||||||
|
capacity = include_in_summary(capacity, [c.list_name], label, c_capacities)
|
||||||
|
|
||||||
|
return capacity
|
||||||
|
|
||||||
def calculate_supply(n,label,supply):
|
def calculate_supply(n,label,supply):
|
||||||
"""calculate the max dispatch of each component at the buses where the loads are attached"""
|
"""calculate the max dispatch of each component at the buses where the loads are attached"""
|
||||||
@ -319,6 +341,7 @@ def calculate_weighted_prices(n,label,weighted_prices):
|
|||||||
outputs = ["costs",
|
outputs = ["costs",
|
||||||
"curtailment",
|
"curtailment",
|
||||||
"energy",
|
"energy",
|
||||||
|
"capacity",
|
||||||
"supply",
|
"supply",
|
||||||
"supply_energy",
|
"supply_energy",
|
||||||
"prices",
|
"prices",
|
||||||
@ -328,7 +351,7 @@ outputs = ["costs",
|
|||||||
"metrics",
|
"metrics",
|
||||||
]
|
]
|
||||||
|
|
||||||
def make_summaries(networks_dict):
|
def make_summaries(networks_dict, country='all'):
|
||||||
|
|
||||||
columns = pd.MultiIndex.from_tuples(networks_dict.keys(),names=["simpl","clusters","lv","opts"])
|
columns = pd.MultiIndex.from_tuples(networks_dict.keys(),names=["simpl","clusters","lv","opts"])
|
||||||
|
|
||||||
@ -343,14 +366,21 @@ def make_summaries(networks_dict):
|
|||||||
print("does not exist!!")
|
print("does not exist!!")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
n = pypsa.Network(filename)
|
try:
|
||||||
|
n = pypsa.Network(filename)
|
||||||
|
except OSError:
|
||||||
|
logger.warning("Skipping {filename}".format(filename=filename))
|
||||||
|
continue
|
||||||
|
|
||||||
assign_carriers(n)
|
if country != 'all':
|
||||||
|
n = n[n.buses.country == country]
|
||||||
|
|
||||||
Nyears = n.snapshot_weightings.sum()/8760.
|
Nyears = n.snapshot_weightings.sum()/8760.
|
||||||
costs = load_costs(Nyears, snakemake.input[0],
|
costs = load_costs(Nyears, snakemake.input[0],
|
||||||
snakemake.config['costs'], snakemake.config['electricity'])
|
snakemake.config['costs'], snakemake.config['electricity'])
|
||||||
update_transmission_costs(n, costs)
|
update_transmission_costs(n, costs, simple_hvdc_costs=False)
|
||||||
|
|
||||||
|
assign_carriers(n)
|
||||||
|
|
||||||
for output in outputs:
|
for output in outputs:
|
||||||
dfs[output] = globals()["calculate_" + output](n, label, dfs[output])
|
dfs[output] = globals()["calculate_" + output](n, label, dfs[output])
|
||||||
@ -371,8 +401,9 @@ if __name__ == "__main__":
|
|||||||
w = getattr(snakemake.wildcards, key)
|
w = getattr(snakemake.wildcards, key)
|
||||||
return snakemake.config["scenario"][key] if w == "all" else [w]
|
return snakemake.config["scenario"][key] if w == "all" else [w]
|
||||||
|
|
||||||
networks_dict = {(simpl,clusters,lv,opts) : ('results/networks/elec_s{simpl}_{clusters}_lv{lv}_{opts}.nc'
|
networks_dict = {(simpl,clusters,lv,opts) : ('results/networks/{network}_s{simpl}_{clusters}_lv{lv}_{opts}.nc'
|
||||||
.format(simpl=simpl,
|
.format(network=snakemake.wildcards.network,
|
||||||
|
simpl=simpl,
|
||||||
clusters=clusters,
|
clusters=clusters,
|
||||||
opts=opts,
|
opts=opts,
|
||||||
lv=lv))
|
lv=lv))
|
||||||
@ -383,6 +414,6 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
print(networks_dict)
|
print(networks_dict)
|
||||||
|
|
||||||
dfs = make_summaries(networks_dict)
|
dfs = make_summaries(networks_dict, country=snakemake.wildcards.country)
|
||||||
|
|
||||||
to_csv(dfs)
|
to_csv(dfs)
|
||||||
|
Loading…
Reference in New Issue
Block a user