allow H2 retrofitting from CH4 pipelines without endogenous CH4 grid (#204)
* allow H2 retrofitting from CH4 pipelines without endogenous CH4 grid * add small capital cost to gas pipelines to incentivise decommissioning * add release notes
This commit is contained in:
parent
a7fd4901c1
commit
a2459881ef
@ -101,7 +101,7 @@ rule build_simplified_population_layouts:
|
|||||||
script: "scripts/build_clustered_population_layouts.py"
|
script: "scripts/build_clustered_population_layouts.py"
|
||||||
|
|
||||||
|
|
||||||
if config["sector"]["gas_network"]:
|
if config["sector"]["gas_network"] or config["sector"]["H2_retrofit"]:
|
||||||
|
|
||||||
datafiles = [
|
datafiles = [
|
||||||
"IGGIELGN_LNGs.geojson",
|
"IGGIELGN_LNGs.geojson",
|
||||||
|
@ -256,7 +256,7 @@ sector:
|
|||||||
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
|
||||||
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
|
||||||
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
|
||||||
gas_network_connectivity_upgrade: 3 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
|
||||||
gas_distribution_grid: true
|
gas_distribution_grid: true
|
||||||
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
|
||||||
biomass_transport: false # biomass transport between nodes
|
biomass_transport: false # biomass transport between nodes
|
||||||
|
@ -41,13 +41,14 @@ incorporates retrofitting options to hydrogen.
|
|||||||
the gas network is activated, all the gas demands are regionally disaggregated
|
the gas network is activated, all the gas demands are regionally disaggregated
|
||||||
as well.
|
as well.
|
||||||
|
|
||||||
* New constraint allows retrofitting of gas pipelines to hydrogen pipelines.
|
* New constraint allows endogenous retrofitting of gas pipelines to hydrogen pipelines.
|
||||||
This option is activated via the setting ``sector: H2_retrofit:``. For every
|
This option is activated via the setting ``sector: H2_retrofit:``. For every
|
||||||
unit of gas pipeline capacity dismantled, ``sector:
|
unit of gas pipeline capacity dismantled, ``sector:
|
||||||
H2_retrofit_capacity_per_CH4`` units are made available as hydrogen pipeline
|
H2_retrofit_capacity_per_CH4`` units are made available as hydrogen pipeline
|
||||||
capacity in the corresponding corridor. These repurposed hydrogen pipelines
|
capacity in the corresponding corridor. These repurposed hydrogen pipelines
|
||||||
have lower costs than new hydrogen pipelines. Both new and repurposed pipelines
|
have lower costs than new hydrogen pipelines. Both new and repurposed pipelines
|
||||||
can be built simultaneously.
|
can be built simultaneously. The retrofitting option ``sector: H2_retrofit:`` also works
|
||||||
|
with a copperplated methane infrastructure, i.e. when ``sector: gas_network: false``.
|
||||||
|
|
||||||
* New hydrogen pipelines can now be built where there are already power or gas
|
* New hydrogen pipelines can now be built where there are already power or gas
|
||||||
transmission routes. Previously, only the electricity transmission routes were
|
transmission routes. Previously, only the electricity transmission routes were
|
||||||
|
@ -1078,17 +1078,20 @@ def add_storage_and_grids(n, costs):
|
|||||||
capital_cost=h2_capital_cost
|
capital_cost=h2_capital_cost
|
||||||
)
|
)
|
||||||
|
|
||||||
if options["gas_network"]:
|
if options["gas_network"] or options["H2_retrofit"]:
|
||||||
|
|
||||||
logger.info("Add gas network")
|
|
||||||
|
|
||||||
fn = snakemake.input.clustered_gas_network
|
fn = snakemake.input.clustered_gas_network
|
||||||
gas_pipes = pd.read_csv(fn, index_col=0)
|
gas_pipes = pd.read_csv(fn, index_col=0)
|
||||||
|
|
||||||
|
if options["gas_network"]:
|
||||||
|
|
||||||
|
logger.info("Add 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
|
||||||
gas_pipes["p_nom_min"] = 0.
|
gas_pipes["p_nom_min"] = 0.
|
||||||
gas_pipes["capital_cost"] = 0.
|
# 0.1 EUR/MWkm/a to prefer decommissioning to address degeneracy
|
||||||
|
gas_pipes["capital_cost"] = 0.1 * gas_pipes.length
|
||||||
else:
|
else:
|
||||||
gas_pipes["p_nom_max"] = np.inf
|
gas_pipes["p_nom_max"] = np.inf
|
||||||
gas_pipes["p_nom_min"] = gas_pipes.p_nom
|
gas_pipes["p_nom_min"] = gas_pipes.p_nom
|
||||||
@ -1163,13 +1166,13 @@ def add_storage_and_grids(n, costs):
|
|||||||
lifetime=costs.at['CH4 (g) pipeline', 'lifetime']
|
lifetime=costs.at['CH4 (g) pipeline', 'lifetime']
|
||||||
)
|
)
|
||||||
|
|
||||||
# retroftting existing CH4 pipes to H2 pipes
|
if options["H2_retrofit"]:
|
||||||
if options["gas_network"] and options["H2_retrofit"]:
|
|
||||||
|
|
||||||
gas_pipe_i = n.links[n.links.carrier == "gas pipeline"].index
|
logger.info("Add retrofitting options of existing CH4 pipes to H2 pipes.")
|
||||||
n.links.loc[gas_pipe_i, "p_nom_extendable"] = True
|
|
||||||
h2_pipes = gas_pipes.rename(index=lambda x:
|
fr = "gas pipeline"
|
||||||
x.replace("gas pipeline", "H2 pipeline retrofitted"))
|
to = "H2 pipeline retrofitted"
|
||||||
|
h2_pipes = gas_pipes.rename(index=lambda x: x.replace(fr, to))
|
||||||
|
|
||||||
n.madd("Link",
|
n.madd("Link",
|
||||||
h2_pipes.index,
|
h2_pipes.index,
|
||||||
@ -1187,6 +1190,8 @@ def add_storage_and_grids(n, costs):
|
|||||||
|
|
||||||
if options.get("H2_network", True):
|
if options.get("H2_network", True):
|
||||||
|
|
||||||
|
logger.info("Add options for new hydrogen pipelines.")
|
||||||
|
|
||||||
h2_pipes = create_network_topology(n, "H2 pipeline ", carriers=["DC", "gas pipeline"])
|
h2_pipes = create_network_topology(n, "H2 pipeline ", carriers=["DC", "gas pipeline"])
|
||||||
|
|
||||||
# TODO Add efficiency losses
|
# TODO Add efficiency losses
|
||||||
|
@ -200,8 +200,10 @@ def add_pipe_retrofit_constraint(n):
|
|||||||
|
|
||||||
CH4_per_H2 = 1 / n.config["sector"]["H2_retrofit_capacity_per_CH4"]
|
CH4_per_H2 = 1 / n.config["sector"]["H2_retrofit_capacity_per_CH4"]
|
||||||
|
|
||||||
|
fr = "H2 pipeline retrofitted"
|
||||||
|
to = "gas pipeline"
|
||||||
lhs = linexpr(
|
lhs = linexpr(
|
||||||
(CH4_per_H2, link_p_nom.loc[h2_retrofitted_i].rename(index=lambda x: x.replace("H2 pipeline retrofitted", "gas pipeline"))),
|
(CH4_per_H2, link_p_nom.loc[h2_retrofitted_i].rename(index=lambda x: x.replace(fr, to))),
|
||||||
(1, link_p_nom.loc[gas_pipes_i])
|
(1, link_p_nom.loc[gas_pipes_i])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user