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:
Fabian Neumann 2021-11-29 12:42:10 +01:00 committed by GitHub
parent a7fd4901c1
commit a2459881ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 23 additions and 15 deletions

View File

@ -101,7 +101,7 @@ rule build_simplified_population_layouts:
script: "scripts/build_clustered_population_layouts.py"
if config["sector"]["gas_network"]:
if config["sector"]["gas_network"] or config["sector"]["H2_retrofit"]:
datafiles = [
"IGGIELGN_LNGs.geojson",

View File

@ -256,7 +256,7 @@ sector:
# 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
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_cost_factor: 1.0 #multiplies cost in data/costs.csv
biomass_transport: false # biomass transport between nodes

View File

@ -41,13 +41,14 @@ incorporates retrofitting options to hydrogen.
the gas network is activated, all the gas demands are regionally disaggregated
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
unit of gas pipeline capacity dismantled, ``sector:
H2_retrofit_capacity_per_CH4`` units are made available as hydrogen pipeline
capacity in the corresponding corridor. These repurposed hydrogen 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
transmission routes. Previously, only the electricity transmission routes were

View File

@ -1078,17 +1078,20 @@ def add_storage_and_grids(n, costs):
capital_cost=h2_capital_cost
)
if options["gas_network"]:
logger.info("Add gas network")
if options["gas_network"] or options["H2_retrofit"]:
fn = snakemake.input.clustered_gas_network
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"]:
gas_pipes["p_nom_max"] = gas_pipes.p_nom
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:
gas_pipes["p_nom_max"] = np.inf
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']
)
# retroftting existing CH4 pipes to H2 pipes
if options["gas_network"] and options["H2_retrofit"]:
if options["H2_retrofit"]:
gas_pipe_i = n.links[n.links.carrier == "gas pipeline"].index
n.links.loc[gas_pipe_i, "p_nom_extendable"] = True
h2_pipes = gas_pipes.rename(index=lambda x:
x.replace("gas pipeline", "H2 pipeline retrofitted"))
logger.info("Add retrofitting options of existing CH4 pipes to H2 pipes.")
fr = "gas pipeline"
to = "H2 pipeline retrofitted"
h2_pipes = gas_pipes.rename(index=lambda x: x.replace(fr, to))
n.madd("Link",
h2_pipes.index,
@ -1187,6 +1190,8 @@ def add_storage_and_grids(n, costs):
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"])
# TODO Add efficiency losses

View File

@ -200,8 +200,10 @@ def add_pipe_retrofit_constraint(n):
CH4_per_H2 = 1 / n.config["sector"]["H2_retrofit_capacity_per_CH4"]
fr = "H2 pipeline retrofitted"
to = "gas pipeline"
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])
)