fix broken prepare_sector_network when running without gas grid (#207)

Co-authored-by: lisazeyen <lisa.zeyen@web.de>

Co-authored-by: lisazeyen <lisa.zeyen@web.de>
This commit is contained in:
Fabian Neumann 2021-12-03 17:22:06 +01:00 committed by GitHub
parent a2459881ef
commit 90c2c909cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -84,12 +84,14 @@ def define_spatial(nodes):
spatial.gas.biogas = nodes + " biogas" spatial.gas.biogas = nodes + " biogas"
spatial.gas.industry = nodes + " gas for industry" spatial.gas.industry = nodes + " gas for industry"
spatial.gas.industry_cc = nodes + " gas for industry CC" spatial.gas.industry_cc = nodes + " gas for industry CC"
spatial.gas.biogas_to_gas = nodes + " biogas to gas"
else: else:
spatial.gas.nodes = ["EU gas"] spatial.gas.nodes = ["EU gas"]
spatial.gas.locations = "EU" spatial.gas.locations = ["EU"]
spatial.gas.biogas = ["EU biogas"] spatial.gas.biogas = ["EU biogas"]
spatial.gas.industry = ["gas for industry"] spatial.gas.industry = ["gas for industry"]
spatial.gas.industry_cc = ["gas for industry CC"] spatial.gas.industry_cc = ["gas for industry CC"]
spatial.gas.biogas_to_gas = ["EU biogas to gas"]
spatial.gas.df = pd.DataFrame(vars(spatial.gas), index=nodes) spatial.gas.df = pd.DataFrame(vars(spatial.gas), index=nodes)
@ -356,6 +358,9 @@ def add_carrier_buses(n, carrier, nodes=None):
if carrier in n.carriers.index: if carrier in n.carriers.index:
return return
if not isinstance(nodes, pd.Index):
nodes = pd.Index(nodes)
n.add("Carrier", carrier) n.add("Carrier", carrier)
n.madd("Bus", n.madd("Bus",
@ -393,7 +398,6 @@ def remove_elec_base_techs(n):
to_remove = pd.Index(c.df.carrier.unique()).symmetric_difference(to_keep) to_remove = pd.Index(c.df.carrier.unique()).symmetric_difference(to_keep)
print("Removing", c.list_name, "with carrier", to_remove) print("Removing", c.list_name, "with carrier", to_remove)
names = c.df.index[c.df.carrier.isin(to_remove)] names = c.df.index[c.df.carrier.isin(to_remove)]
print(names)
n.mremove(c.name, names) n.mremove(c.name, names)
n.carriers.drop(to_remove, inplace=True, errors="ignore") n.carriers.drop(to_remove, inplace=True, errors="ignore")
@ -518,7 +522,7 @@ def add_dac(n, costs):
def add_co2limit(n, Nyears=1., limit=0.): def add_co2limit(n, Nyears=1., limit=0.):
print("Adding CO2 budget limit as per unit of 1990 levels of", limit) logger.info(f"Adding CO2 budget limit as per unit of 1990 levels of {limit}")
countries = n.buses.country.dropna().unique() countries = n.buses.country.dropna().unique()
@ -793,7 +797,7 @@ def prepare_costs(cost_file, USD_to_EUR, discount_rate, Nyears, lifetime):
def add_generation(n, costs): def add_generation(n, costs):
print("adding electricity generation") logger.info("adding electricity generation")
nodes = pop_layout.index nodes = pop_layout.index
@ -802,7 +806,7 @@ def add_generation(n, costs):
for generator, carrier in conventionals.items(): for generator, carrier in conventionals.items():
if carrier == 'gas' and options["gas_network"]: if carrier == 'gas':
carrier_nodes = spatial.gas.nodes carrier_nodes = spatial.gas.nodes
else: else:
carrier_nodes = ["EU " + carrier] carrier_nodes = ["EU " + carrier]
@ -1005,7 +1009,8 @@ def add_electricity_grid_connection(n, costs):
def add_storage_and_grids(n, costs): def add_storage_and_grids(n, costs):
print("adding electricity and hydrogen storage as well as hydrogen and gas grids")
logger.info("Add hydrogen storage")
nodes = pop_layout.index nodes = pop_layout.index
@ -1053,6 +1058,8 @@ def add_storage_and_grids(n, costs):
if options['hydrogen_underground_storage']: if options['hydrogen_underground_storage']:
logger.info("Add hydrogen underground storage")
h2_capital_cost = costs.at["hydrogen storage underground", "fixed"] h2_capital_cost = costs.at["hydrogen storage underground", "fixed"]
n.madd("Store", n.madd("Store",
@ -1085,7 +1092,7 @@ def add_storage_and_grids(n, costs):
if options["gas_network"]: if options["gas_network"]:
logger.info("Add gas infrastructure, incl. LNG terminals, production and entry-points.") logger.info("Add natural gas infrastructure, incl. LNG terminals, production and entry-points.")
if options["H2_retrofit"]: if options["H2_retrofit"]:
gas_pipes["p_nom_max"] = gas_pipes.p_nom gas_pipes["p_nom_max"] = gas_pipes.p_nom
@ -1315,7 +1322,7 @@ def add_storage_and_grids(n, costs):
def add_land_transport(n, costs): def add_land_transport(n, costs):
# TODO options? # TODO options?
print("adding land transport") logger.info("Add land transport")
fuel_cell_share = get(options["land_transport_fuel_cell_share"], investment_year) fuel_cell_share = get(options["land_transport_fuel_cell_share"], investment_year)
electric_share = get(options["land_transport_electric_share"], investment_year) electric_share = get(options["land_transport_electric_share"], investment_year)
@ -1437,7 +1444,7 @@ def add_land_transport(n, costs):
def add_heat(n, costs): def add_heat(n, costs):
print("adding heat") logger.info("Add heat sector")
sectors = ["residential", "services"] sectors = ["residential", "services"]
@ -1673,7 +1680,7 @@ def add_heat(n, costs):
if options['retrofitting']['retro_endogen']: if options['retrofitting']['retro_endogen']:
print("adding retrofitting endogenously") logger.info("Add retrofitting endogenously")
# resample heat demand temporal 'heat_demand_r' depending on in config # resample heat demand temporal 'heat_demand_r' depending on in config
# specified temporal resolution, to not overestimate retrofitting # specified temporal resolution, to not overestimate retrofitting
@ -1742,7 +1749,7 @@ def add_heat(n, costs):
# check that ambitious retrofitting has higher costs per MWh than moderate retrofitting # check that ambitious retrofitting has higher costs per MWh than moderate retrofitting
if (capital_cost.diff() < 0).sum(): if (capital_cost.diff() < 0).sum():
print(f"Warning: costs are not linear for {ct} {sec}") logger.warning(f"Costs are not linear for {ct} {sec}")
s = capital_cost[(capital_cost.diff() < 0)].index s = capital_cost[(capital_cost.diff() < 0)].index
strengths = strengths.drop(s) strengths = strengths.drop(s)
@ -1809,7 +1816,7 @@ def create_nodes_for_heat_sector():
def add_biomass(n, costs): def add_biomass(n, costs):
print("adding biomass") logger.info("Add biomass")
biomass_potentials = pd.read_csv(snakemake.input.biomass_potentials, index_col=0) biomass_potentials = pd.read_csv(snakemake.input.biomass_potentials, index_col=0)
@ -1859,7 +1866,7 @@ def add_biomass(n, costs):
) )
n.madd("Link", n.madd("Link",
spatial.gas.locations + "biogas to gas", spatial.gas.biogas_to_gas,
bus0=spatial.gas.biogas, bus0=spatial.gas.biogas,
bus1=spatial.gas.nodes, bus1=spatial.gas.nodes,
bus2="co2 atmosphere", bus2="co2 atmosphere",
@ -1939,7 +1946,7 @@ def add_biomass(n, costs):
def add_industry(n, costs): def add_industry(n, costs):
print("adding industrial demand") logger.info("Add industrial demand")
nodes = pop_layout.index nodes = pop_layout.index
@ -2260,7 +2267,7 @@ def add_industry(n, costs):
def add_waste_heat(n): def add_waste_heat(n):
# TODO options? # TODO options?
print("adding possibility to use industrial waste heat in district heating") logger.info("Add possibility to use industrial waste heat in district heating")
#AC buses with district heating #AC buses with district heating
urban_central = n.buses.index[n.buses.carrier == "urban central heat"] urban_central = n.buses.index[n.buses.carrier == "urban central heat"]
@ -2390,7 +2397,7 @@ def maybe_adjust_costs_and_potentials(n, opts):
# TODO this should rather be a config no wildcard # TODO this should rather be a config no wildcard
def limit_individual_line_extension(n, maxext): def limit_individual_line_extension(n, maxext):
print(f"limiting new HVAC and HVDC extensions to {maxext} MW") logger.info(f"limiting new HVAC and HVDC extensions to {maxext} MW")
n.lines['s_nom_max'] = n.lines['s_nom'] + maxext n.lines['s_nom_max'] = n.lines['s_nom'] + maxext
hvdc = n.links.index[n.links.carrier == 'DC'] hvdc = n.links.index[n.links.carrier == 'DC']
n.links.loc[hvdc, 'p_nom_max'] = n.links.loc[hvdc, 'p_nom'] + maxext n.links.loc[hvdc, 'p_nom_max'] = n.links.loc[hvdc, 'p_nom'] + maxext
@ -2517,7 +2524,7 @@ if __name__ == "__main__":
limit = o[o.find("Co2L")+4:] limit = o[o.find("Co2L")+4:]
limit = float(limit.replace("p", ".").replace("m", "-")) limit = float(limit.replace("p", ".").replace("m", "-"))
break break
print("add CO2 limit from", limit_type) print("Add CO2 limit from", limit_type)
add_co2limit(n, Nyears, limit) add_co2limit(n, Nyears, limit)
for o in opts: for o in opts: