Include myopic option in prepare_network.py so that, when selected, it reads CO2_limit from a carbon_budget file

This commit is contained in:
martavp 2020-07-07 18:37:42 +02:00
parent d3b99a6a44
commit 236da36d5e

28
scripts/prepare_sector_network.py Normal file → Executable file
View File

@ -422,18 +422,21 @@ def prepare_data(network):
return nodal_energy_totals, heat_demand, ashp_cop, gshp_cop, solar_thermal, transport, avail_profile, dsm_profile, co2_totals, nodal_transport_data return nodal_energy_totals, heat_demand, ashp_cop, gshp_cop, solar_thermal, transport, avail_profile, dsm_profile, co2_totals, nodal_transport_data
def prepare_costs(): def prepare_costs():
#set all asset costs and other parameters #set all asset costs and other parameters
costs = pd.read_csv(snakemake.input.costs,index_col=list(range(3))).sort_index() costs = pd.read_csv(snakemake.input.costs,index_col=list(range(3))).sort_index()
#costs = pd.read_csv(snakemake.input.costs,index_col=list(range(2))).sort_index()
#correct units to MW and EUR #correct units to MW and EUR
costs.loc[costs.unit.str.contains("/kW"),"value"]*=1e3 costs.loc[costs.unit.str.contains("/kW"),"value"]*=1e3
costs.loc[costs.unit.str.contains("USD"),"value"]*=snakemake.config['costs']['USD2013_to_EUR2013'] costs.loc[costs.unit.str.contains("USD"),"value"]*=snakemake.config['costs']['USD2013_to_EUR2013']
cost_year = snakemake.config['costs']['year'] cost_year = snakemake.config['costs']['year']
costs = costs.loc[idx[:,cost_year,:],"value"].unstack(level=2).groupby(level="technology").sum(min_count=1) costs = costs.loc[idx[:,cost_year,:],"value"].unstack(level=2).groupby(level="technology").sum(min_count=1)
#costs = costs.loc[:, "value"].unstack(level=1).groupby("technology").sum()
costs = costs.fillna({"CO2 intensity" : 0, costs = costs.fillna({"CO2 intensity" : 0,
"FOM" : 0, "FOM" : 0,
"VOM" : 0, "VOM" : 0,
@ -447,7 +450,6 @@ def prepare_costs():
costs["fixed"] = [(annuity(v["lifetime"],v["discount rate"])+v["FOM"]/100.)*v["investment"]*Nyears for i,v in costs.iterrows()] costs["fixed"] = [(annuity(v["lifetime"],v["discount rate"])+v["FOM"]/100.)*v["investment"]*Nyears for i,v in costs.iterrows()]
return costs return costs
def add_generation(network): def add_generation(network):
print("adding electricity generation") print("adding electricity generation")
nodes = pop_layout.index nodes = pop_layout.index
@ -1518,9 +1520,13 @@ if __name__ == "__main__":
if 'snakemake' not in globals(): if 'snakemake' not in globals():
from vresutils.snakemake import MockSnakemake from vresutils.snakemake import MockSnakemake
snakemake = MockSnakemake( snakemake = MockSnakemake(
wildcards=dict(network='elec', simpl='', clusters='37', lv='2', opts='Co2L-3H'), wildcards=dict(network='elec', simpl='', clusters='39', lv='1.0',
input=dict(network='../pypsa-eur/networks/{network}_s{simpl}_{clusters}.nc', timezone_mappings='data/timezone_mappings.csv'), opts='', planning_horizons='2020',
output=['networks/{network}_s{simpl}_{clusters}_lv{lv}_{opts}.nc'] sector_opts='Co2L0-168H-T-H-B-I-solar3-dist1'),
input=dict(network='pypsa-eur/networks/{network}_s{simpl}_{clusters}_ec_lv{lv}_{opts}.nc',
timezone_mappings='pypsa-eur-sec/data/timezone_mappings.csv',
co2_budget='pypsa-eur-sec/data/co2_budget.csv'),
output=['pypsa-eur-sec/results/test/prenetworks/{network}_s{simpl}_{clusters}_lv{lv}__{sector_opts}_{planning_horizons}.nc']
) )
import yaml import yaml
with open('config.yaml') as f: with open('config.yaml') as f:
@ -1539,13 +1545,13 @@ if __name__ == "__main__":
override_component_attrs=override_component_attrs) override_component_attrs=override_component_attrs)
Nyears = n.snapshot_weightings.sum()/8760. Nyears = n.snapshot_weightings.sum()/8760.
#%%
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)
pop_layout["ct"] = pop_layout.index.str[:2] pop_layout["ct"] = pop_layout.index.str[:2]
ct_total = pop_layout.total.groupby(pop_layout["ct"]).sum() ct_total = pop_layout.total.groupby(pop_layout["ct"]).sum()
pop_layout["ct_total"] = pop_layout["ct"].map(ct_total.get) pop_layout["ct_total"] = pop_layout["ct"].map(ct_total.get)
pop_layout["fraction"] = pop_layout["total"]/pop_layout["ct_total"] pop_layout["fraction"] = pop_layout["total"]/pop_layout["ct_total"]
#%%
costs = prepare_costs() costs = prepare_costs()
remove_elec_base_techs(n) remove_elec_base_techs(n)
@ -1606,9 +1612,15 @@ if __name__ == "__main__":
else: else:
logger.info("No resampling") logger.info("No resampling")
if snakemake.config["foresight"] == 'myopic':
co2_limits=pd.read_csv(snakemake.input.co2_budget, index_col=0)
year=snakemake.wildcards.planning_horizons[-4:]
limit=co2_limits.loc[int(year),snakemake.config["scenario"]["co2_budget_name"]]
add_co2limit(n, Nyears, limit)
else:
for o in opts: for o in opts:
if "Co2L" in o: if "Co2L" in o:
limit = o[o.find("Co2L")+4:] limit = o[o.find("Co2L")+4:]
print(o,limit) print(o,limit)
if limit == "": if limit == "":