Skip to content
Merged
Show file tree
Hide file tree
Changes from 159 commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
1cf34a9
feat: skip tyndp_renewable_profile technologies in workflow and build…
daniel-rdt May 23, 2025
3be60a1
feat: clean pecd data for years 2030, 2040, 2050 and build_renewable_…
daniel-rdt May 27, 2025
9f0b674
feat: add pecd profiles as input to prepare_sector_network and add_br…
daniel-rdt May 27, 2025
c0ce59f
fix: add hotfix for add_existing_baseyear existing renewable capaciti…
daniel-rdt May 27, 2025
cabc766
fix: fix pylint
daniel-rdt May 27, 2025
686df43
fix: fix pylint better
daniel-rdt May 27, 2025
542668d
feat: introduce clean_tyndp_offshore_hubs
tgilon May 23, 2025
66d69d6
doc: document newly added functions
tgilon May 27, 2025
85dabff
feat: improve configuration based on master
tgilon May 27, 2025
eaefe8c
feat: define outputs
tgilon May 27, 2025
8491dd2
feat: enable offshore hubs by default for tyndp configurations
tgilon May 27, 2025
4162538
fix: add electricity param for add_existing_baseyear rule in perfect …
daniel-rdt May 27, 2025
79526a7
feat: improve workflow implementation for more efficient execution of…
daniel-rdt May 28, 2025
ba5458d
fix: hotfix for add_brownfield p_max_pu until tyndp generators are ad…
daniel-rdt May 28, 2025
81402fe
doc: add description of new configuration option to configtables
daniel-rdt May 28, 2025
c1fbe13
doc: add release note
daniel-rdt May 28, 2025
b684567
feat: add retrieval rule for PECD data from google drive until data o…
daniel-rdt May 28, 2025
c33f5a3
fix: fix ruleorder statement
daniel-rdt May 28, 2025
16f9c16
fix: remove unneeded inputs to build_renewable_profiles_pecd and upda…
daniel-rdt May 28, 2025
df8e194
fix: set file outputs for retrieve_tyndp_bundle
tgilon May 28, 2025
361e801
feat: assume non extendable links for missing data
tgilon May 28, 2025
f2d5aa3
fix: integrate new config for rule
tgilon Jun 2, 2025
5328939
refactor: rename clean_tyndp_offshore_hubs to build_tyndp_offshore_hu…
tgilon Jun 2, 2025
d5bc7ea
doc: update license identifier
daniel-rdt Jun 2, 2025
500082c
feat: update pecd retrieval to use gcp storage
daniel-rdt Jun 3, 2025
1432a36
feat: WIP introduce offshore reference grid in the network (assuming …
tgilon Jun 3, 2025
40b9f46
feat: switch to relative costs (EUR/kW and EUR/kW/a) and define a spe…
tgilon Jun 4, 2025
b140dce
feat: map AC nodes to H2 Z2 nodes for H2 offshore grid
tgilon Jun 4, 2025
77defb1
doc: add basic release note
tgilon Jun 4, 2025
1ac7f27
refactor: rename function to be tyndp specific
tgilon Jun 4, 2025
aea4eda
Merge remote-tracking branch 'origin/feat/49-pecd-offshore' into feat…
tgilon Jun 4, 2025
540609e
Merge branch 'master' into feat/49-pecd-offshore
tgilon Jun 4, 2025
a9e1c1b
Merge remote-tracking branch 'origin/feat/49-pecd-offshore' into feat…
tgilon Jun 4, 2025
b474845
revert: revert change in default config
tgilon Jun 4, 2025
24bb684
feat: build electrolysers data
tgilon Jun 4, 2025
c5297b1
feat: attach offshore electrolysers
tgilon Jun 4, 2025
d690318
refactor: switch functions
tgilon Jun 4, 2025
d9bc203
feat: build generators data
tgilon Jun 4, 2025
d3457ce
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 4, 2025
48dcfba
feat: overwrite default lifetime assumptions with tyndp specific values
tgilon Jun 5, 2025
2a94652
feat: generalize more make_index
tgilon Jun 5, 2025
24d3a63
fix: adjust offshore radial locations
tgilon Jun 5, 2025
b0fd9a4
doc: update units info
tgilon Jun 5, 2025
1847f21
feat: add offshore generators to the network (without potentials and …
tgilon Jun 5, 2025
4ed7dcf
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 5, 2025
80859e4
doc: detail GENERATOR approach
tgilon Jun 10, 2025
8b68c3a
WIP feat: extend GENERATOR processing to take discrepancies into account
tgilon Jun 10, 2025
65bdca5
WIP feat: refactor everything
tgilon Jun 10, 2025
175d275
feat: extract both existing and potentials from layer and trajectorie…
tgilon Jun 11, 2025
40f288f
doc: improve documentation of load_offshore_generators
tgilon Jun 11, 2025
e1582e4
feat: resolve discrepancy in DEOH002
tgilon Jun 11, 2025
14f5615
feat: filter for selected countries
tgilon Jun 11, 2025
08b497f
fix: take efficiency into account for h2-generating wind farms
tgilon Jun 12, 2025
127af80
feat: attach PECD profiles to offwind generators
tgilon Jun 12, 2025
4cdfe9d
refactor: use tyndp specific renewable carriers and differentiate bet…
daniel-rdt Jun 12, 2025
4244dd3
Merge remote-tracking branch 'origin/feat/49-pecd-offshore' into feat…
daniel-rdt Jun 12, 2025
f2af81b
bugfix: include missing offshore node PECD data as empty columns and …
daniel-rdt Jun 12, 2025
58f8040
feat: improve myopic approach, removing previous assets
tgilon Jun 13, 2025
cf11da3
bugfix: fix pylint and remove hydro from test config
daniel-rdt Jun 13, 2025
d84159f
bugfix: add existing res dependent on renewable carriers list
daniel-rdt Jun 13, 2025
e0635cb
feature: add 2050 pecd renewable profiles explicitly and filter for s…
daniel-rdt Jun 13, 2025
1142216
feat: introduce a constraint to limit expansion of collocated technol…
tgilon Jun 13, 2025
7b297a3
bugfix: fix params for add_existing_baseyear solve_perfect
daniel-rdt Jun 13, 2025
7512f30
feat: add zone potential constraint
tgilon Jun 15, 2025
8ef4449
Merge branch 'feat/49-pecd-offshore' into feat/48-offshore-hubs
tgilon Jun 16, 2025
fe8cb52
bugfix: change year in renewable profile pecd back to integer
daniel-rdt Jun 16, 2025
da90127
Merge branch 'feat/49-pecd-offshore' into feat/48-offshore-hubs
tgilon Jun 16, 2025
96aef78
fix: address patches used to develop parallel features
tgilon Jun 16, 2025
ef313b3
fix: avoid adding an empty constraint
tgilon Jun 16, 2025
1ff4a94
doc: adjust license identifier
tgilon Jun 16, 2025
078afaf
fix: address pecd profiles mapping in add_brownfield
tgilon Jun 16, 2025
1f540fd
refactor: refactor myopic approach for offshore assets
tgilon Jun 16, 2025
8525b12
refactor: adjust nomenclature of offshore grid capacity
tgilon Jun 17, 2025
adaeb4c
refactor: filter radial nodes out of buses
tgilon Jun 17, 2025
ac94dfa
refactor: assign radially connected electrolysers to home market nodes
tgilon Jun 17, 2025
396b363
fix: use tyndp data for electrolysers capital cost
tgilon Jun 17, 2025
97e9970
refactor: improve radial nodes exclusions
tgilon Jun 18, 2025
42bf3e3
fix: prevent filtering of grid data from expansion candidates
tgilon Jun 18, 2025
f552bd7
refactor: remove location from electrolysers
tgilon Jun 18, 2025
ae82b6b
refactor: change approach for nodes and locations in generators
tgilon Jun 18, 2025
cbb6c3c
Merge remote-tracking branch 'origin/master' into feat/48-offshore-hubs
tgilon Jun 19, 2025
cbba44a
feat: read pecd data using location
tgilon Jun 19, 2025
7d6eb62
refactor: use bus instead of bus0 for generators
tgilon Jun 19, 2025
41f0d86
fix: correct typo in h2 offshore grid
tgilon Jun 19, 2025
3f3305d
fix: add country to rename for electrolysers
tgilon Jun 19, 2025
af67918
feat: improve constraint formulation to account for refactoring
tgilon Jun 19, 2025
67c84ce
bugfix: fix year dimension for 2035 an 2045 steps
daniel-rdt Jun 19, 2025
cda01db
fix: adjust layer constraint to account for existing capacities
tgilon Jun 19, 2025
02c784c
Merge branch 'feat/49-pecd-offshore' into feat/48-offshore-hubs
tgilon Jun 19, 2025
3bf3eb7
Merge remote-tracking branch 'origin/master' into feat/49-pecd-offshore
tgilon Jun 19, 2025
755a427
Merge remote-tracking branch 'origin/feat/49-pecd-offshore' into feat…
tgilon Jun 19, 2025
27a698d
refactor: rename variables to align with the constraints standards
tgilon Jun 19, 2025
74c8ef9
feat: introduce bin in index for compatibility with add_brownfield
tgilon Jun 19, 2025
4df0c51
feat: add colors for new carriers
tgilon Jun 19, 2025
061fec5
fix: remove OH nodes from the list used for distribution
tgilon Jun 19, 2025
22d7834
Apply suggestions from code review
tgilon Jun 20, 2025
cd94850
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 20, 2025
da80a61
Apply suggestions from code review
tgilon Jun 20, 2025
fe4e9ed
feat: update the set of colors for the new technologies
tgilon Jun 20, 2025
85f5220
refactor: change config name for offshore hubs (apply suggestion)
tgilon Jun 20, 2025
0c7f022
doc: improve release note
tgilon Jun 20, 2025
3c764a1
refactor: use unpack to define offshore inputs in prepare_sector_network
tgilon Jun 20, 2025
b5e19b2
refactor: make filter more explicit to exclude offshore grid in add_b…
tgilon Jun 20, 2025
02ecdd9
fix: account for the shared potential of hydrogen- and electricity-ge…
tgilon Jun 20, 2025
e07e3df
fix: remove double counting of existing capacities
tgilon Jun 23, 2025
9549604
fix: account for efficiency in existing for zonal constraint
tgilon Jun 23, 2025
5862c1c
feat: resolve DEOH002 capacity mismatch in existing capacities
tgilon Jun 23, 2025
1d09b5e
ci: revert temporary CO2 budget increase - tests now pass with origin…
tgilon Jun 23, 2025
b4b433b
doc: refine documentation of discrepancy in DEOH002
tgilon Jun 24, 2025
7ae7e5e
doc: remove outdated documention from load_offshore_hubs
tgilon Jun 24, 2025
7b6d619
refactor: replace generic RuntimeError with ValueError for invalid input
tgilon Jun 24, 2025
35680ca
refactor: assign nyears before use
tgilon Jun 24, 2025
f821d60
fix: set offshore_zone_trajectories across all foresight scripts
tgilon Jun 24, 2025
b5fa722
doc: change position of comment in add_brownfield
tgilon Jun 24, 2025
3441768
feat: remove reference to config/config.yaml, as it is not used
tgilon Jun 24, 2025
7509ff1
fix: set offshore_zone_trajectories across all foresight scripts
tgilon Jun 24, 2025
a89a67f
refactor: add empty input for offshore files in prepare_sector_network
tgilon Jun 24, 2025
5ccdcc7
fix: set offshore_zone_trajectories across all foresight scripts
tgilon Jun 24, 2025
50b0bf5
fix: add empty input for offshore files in prepare_sector_network
tgilon Jun 24, 2025
ea90340
refactor: refactor existing plotting routines to align conventions
tgilon Jun 25, 2025
07771f4
feat: introduce offshore plotting routines
tgilon Jun 25, 2025
f97d360
refactor: match new naming convention for plots
tgilon Jun 25, 2025
ca4eb66
refactor: remove the default reference to base network for offshore p…
tgilon Jun 25, 2025
71d758a
refactor: split offshore plotting routine using a carrier wildcard
tgilon Jun 25, 2025
2eca460
fix: attach h2 piplines to the correct buses
tgilon Jun 26, 2025
394f4e4
fix: remove previous build year from efficiency calculations
tgilon Jun 26, 2025
09fb046
Merge branch 'master' into feat/48-offshore-hubs
tgilon Jun 26, 2025
0f174c9
fix: group links in plot_offshore_network
tgilon Jun 26, 2025
39151ab
feat: add a offshore transmission capacity limits
tgilon Jun 26, 2025
5c2de44
ci: fix run name keyword
tgilon Jun 26, 2025
225de71
Apply suggestions from code review
daniel-rdt Jun 26, 2025
faf71b5
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 26, 2025
8136121
fix: import chain from itertools
daniel-rdt Jun 26, 2025
a67fb07
refactor: generalize get tyndp renewable carriers
daniel-rdt Jun 26, 2025
5313264
ci: fix run name keyword
tgilon Jun 26, 2025
dbccb1b
Merge branch 'master' into feat/49-pecd-offshore
tgilon Jun 26, 2025
2659f16
Merge branch 'feat/49-pecd-offshore' into feat/48-offshore-hubs
tgilon Jun 26, 2025
8da9d7d
Revert "ci: fix run name keyword"
tgilon Jun 26, 2025
c77af19
fix: fix merge conflict in add_brownfield regarding tyndp_renewable_c…
tgilon Jun 26, 2025
c09708a
feat: make legend optional in plot_offshore_network
tgilon Jun 26, 2025
1d51a96
feat: modularize link width plotting functionality
tgilon Jun 26, 2025
dac58ef
feat: add hubs_only parameter to filter offshore hub in visualization
tgilon Jun 26, 2025
b193122
fix: remove placeholder for renewable technology max capacities in bu…
daniel-rdt Jun 27, 2025
fed98dd
doc: add information about PECD Version 3.1 to documentation
daniel-rdt Jun 27, 2025
0a36daa
fix: remove unnecessary params from pecd rules
daniel-rdt Jun 27, 2025
b98eccc
feat: change fn_pecd to dir_pecd and add comment on skiprows
daniel-rdt Jun 27, 2025
580eaaa
refactor: change to if not continue style to reduce diff
daniel-rdt Jun 27, 2025
a55cfbf
feat: improve pecd profile configuration by making profile names expl…
daniel-rdt Jun 27, 2025
decd186
refactor: simplify tyndp_renewable_carriers also in smk files
daniel-rdt Jun 27, 2025
d79623c
Merge branch 'feat/49-pecd-offshore' into feat/48-offshore-hubs
daniel-rdt Jun 27, 2025
55e9600
feat: improve mapping from tyndp techs to PECD profile names
daniel-rdt Jun 30, 2025
38266f6
Apply suggestions from code review
tgilon Jul 4, 2025
39f1968
Merge branch 'master' into feat/48-offshore-hubs
tgilon Jul 7, 2025
93f371b
fix: fix merge conflicts
tgilon Jul 7, 2025
1fd7378
refactor: remove logger as argument
tgilon Jul 2, 2025
138600c
feat: make the retrieve outputs more explicit
tgilon Jul 7, 2025
05c6523
fix: fix outputs in retrieve_tyndp_bundle
tgilon Jul 7, 2025
9926a23
refactor: use explicit list of tyndp carriers in constraint
tgilon Jul 7, 2025
53b0547
refactor: apply code suggestion
tgilon Jul 7, 2025
982071f
refactor: improve code
tgilon Jul 7, 2025
5306440
doc: adjust licensing
tgilon Jul 7, 2025
a6bf6e1
doc: make README more explicit about make tyndp
tgilon Jul 9, 2025
89b255e
refactor: define a specific tyndp all function
tgilon Jul 15, 2025
199dbca
refactor: prefer branch over lambda formulation
tgilon Jul 15, 2025
d12c611
refactor: apply code suggestions
tgilon Jul 15, 2025
88d5622
Merge branch 'master' into feat/48-offshore-hubs
tgilon Jul 16, 2025
07a78a4
fix: fix file name in all rule
tgilon Jul 16, 2025
d4493fe
refactor: remove unused function arguments
tgilon Jul 17, 2025
aa7036e
refactor: update carrier naming to explicitly separate offshore hubs …
tgilon Jul 17, 2025
e67bc51
fix: fix: restrict max_capacity condition to inter-hubs connections a…
tgilon Jul 17, 2025
e44df09
fix: fix dimension issue in add_brownfield
tgilon Jul 18, 2025
f13b818
refactor: convert to explicit hydrogen buses sooner
tgilon Jul 18, 2025
a603ea2
feat: add plotting threshold for plot_offshore_network
tgilon Jul 18, 2025
35a6789
fix: use mainland GB coordinates instead of Northern Ireland
tgilon Jul 18, 2025
0d1183e
fix: remove Offshore Hubs from hydrogen plots
tgilon Jul 18, 2025
7dc553d
feat: introduce time-varying efficiencies for offwind generators (#68)
tgilon Jul 18, 2025
4e29fb8
refactor: move if outside of extend in Snakefile
tgilon Jul 18, 2025
99ead1b
refactor: remove redundant formulation in add_brownfield
tgilon Jul 18, 2025
f489dfa
refactor: move input_offshore_hubs in file
tgilon Jul 18, 2025
0ae5268
refactor: test before using input_offshore_hubs
tgilon Jul 18, 2025
a6eb875
refactor: improve minor code inconsistencies
tgilon Jul 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 36 additions & 2 deletions Snakefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ from scripts._helpers import (
configfile: "config/config.default.yaml"
configfile: "config/plotting.default.yaml"
configfile: "config/config.private.yaml"
configfile: "config/config.yaml"
Comment thread
daniel-rdt marked this conversation as resolved.


run = config["run"]
Expand Down Expand Up @@ -81,6 +80,7 @@ if config["foresight"] == "perfect":
rule all:
input:
expand(RESULTS + "graphs/costs.svg", run=config["run"]["name"]),
expand(resources("maps/power-network.pdf"), run=config["run"]["name"]),
expand(
resources("maps/power-network-s-{clusters}.pdf"),
run=config["run"]["name"],
Expand All @@ -92,10 +92,21 @@ rule all:
run=config["run"]["name"],
**config["scenario"],
),
lambda w: expand(
(
resources(
"maps/base_h2_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}.pdf"
)
if config_provider("sector", "H2_network")(w)
else []
),
run=config["run"]["name"],
**config["scenario"],
),
lambda w: expand(
(
RESULTS
+ "maps/base_s_{clusters}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf"
+ "maps/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}-h2_network.pdf"
if config_provider("sector", "H2_network")(w)
else []
),
Expand All @@ -112,6 +123,29 @@ rule all:
run=config["run"]["name"],
**config["scenario"],
),
lambda w: expand(
(
resources(
"maps/base_offshore_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}_{carrier}.pdf"
)
if config_provider("sector", "offshore_hubs_tyndp", "enable")(w)
else []
),
run=config["run"]["name"],
**config["scenario"],
carrier=config_provider("plotting", "offshore_maps", "bus_carriers")(w),
),
lambda w: expand(
(
RESULTS
+ "maps/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}-offshore_network_{carrier}.pdf"
if config_provider("sector", "offshore_hubs_tyndp", "enable")(w)
else []
),
run=config["run"]["name"],
**config["scenario"],
carrier=config_provider("plotting", "offshore_maps", "bus_carriers")(w),
),
Comment thread
tgilon marked this conversation as resolved.
Outdated
lambda w: expand(
(
RESULTS + "csvs/cumulative_costs.csv"
Expand Down
5 changes: 5 additions & 0 deletions config/config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,11 @@ sector:
methanol: 121
gas: 122
oil: 125
offshore_hubs_tyndp:
enable: false
max_capacity:
DC: 10
H2: 30
Comment thread
tgilon marked this conversation as resolved.
Outdated

# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#industry
industry:
Expand Down
13 changes: 13 additions & 0 deletions config/config.tyndp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,19 @@ sector:
enable: true
carriers:
- H2
offshore_hubs_tyndp:
enable: true
max_capacity:
DC: 10
H2: 30

costs:
overwrites:
lifetime:
electrolysis: 25
HVDC submarine: 25
H2 (g) submarine pipeline: 25
offwind: 25

clustering:
mode: administrative
Expand Down
12 changes: 12 additions & 0 deletions config/plotting.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,10 @@ plotting:
- 200
- 100
branch_sizes:
offshore_maps:
bus_carriers:
- DC
- H2

nice_names:
OCGT: "Open-Cycle Gas"
Expand Down Expand Up @@ -269,12 +273,20 @@ plotting:
offwind-ac: "#6895dd"
offshore wind (AC): "#6895dd"
offshore wind ac: "#6895dd"
offwind-ac-fb-r: "#6895dd"
offwind-ac-fl-r: "#6da5e8"
offwind-dc-fb-r: "#71b5ed"
offwind-dc: "#74c6f2"
offshore wind (DC): "#74c6f2"
offshore wind dc: "#74c6f2"
offwind-dc-fb-oh: "#74c6f2"
offwind-dc-fl-r: "#94d4f6"
offwind-float: "#b5e2fa"
offshore wind (Float): "#b5e2fa"
offshore wind float: "#b5e2fa"
offwind-dc-fl-oh: "#b5e2fa"
offwind-h2-fb-oh: "#c47dbd"
offwind-h2-fl-oh: "#9d4d96"
# water
hydro: '#298c81'
hydro reservoir: '#298c81'
Expand Down
23 changes: 22 additions & 1 deletion config/test/config.tyndp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,14 @@ enable:

co2_budget:
# TODO define carbon budget compliant with EU 2030 and 2050 targets
2040: 0.25 # Temporary increase to allow CI to pass while load configurations are incomplete.
2020: 0.720 # average emissions of 2019 to 2021 relative to 1990, CO2 excl LULUCF, EEA data, European Environment Agency. (2023a). Annual European Union greenhouse gas inventory 1990–2021 and inventory report 2023 - CRF Table. https://unfccc.int/documents/627830
2025: 0.648 # With additional measures (WAM) projection, CO2 excl LULUCF, European Environment Agency. (2023e). Member States’ greenhouse gas (GHG) emission projections 2023. https://www.eea.europa.eu/en/datahub/datahubitem-view/4b8d94a4-aed7-4e67-a54c-0623a50f48e8
2030: 0.450 # 55% reduction by 2030 (Ff55)
2035: 0.250
2040: 0.100 # 90% by 2040
2045: 0.050
2050: 0.000 # climate-neutral by 2050


electricity:
base_network: tyndp-raw
Expand Down Expand Up @@ -100,6 +107,7 @@ load:
enable: false
manual_adjustments: false
supplement_synthetic: false

pypsa_eur:
Bus:
- AC
Expand Down Expand Up @@ -166,6 +174,19 @@ sector:
enable: true
carriers:
- H2
offshore_hubs_tyndp:
enable: true
max_capacity:
DC: 10
H2: 30

costs:
overwrites:
lifetime:
electrolysis: 25
HVDC submarine: 25
H2 (g) submarine pipeline: 25
offwind: 25

clustering:
mode: administrative
Expand Down
6 changes: 5 additions & 1 deletion doc/configtables/sector.csv
Comment thread
daniel-rdt marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -229,4 +229,8 @@ imports,,,
-- limit,TWh,float,Maximum allowed renewable energy imports
-- limit_sense,--,"{==, <=, >=}",Sense of the limit
-- price,,"{H2, NH3, methanol, gas, oil}",
-- -- {carrier},currency/MWh,float,Price for importing renewable energy of carrier
-- -- {carrier},currency/MWh,float,Price for importing renewable energy of carrier
offshore_hubs_tyndp,--,"{true, false}",Add options for TYNDP offshore hubs
-- enable,--,"{true, false}",Add option to include TYNDP offshore hubs
-- max_capacity,,,
-- -- {carrier},GW,float,Maximum transmission capacity between two offshore hubs of a carrier
2 changes: 2 additions & 0 deletions doc/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Release Notes

**Changes**

* Introduce TYNDP offshore wind hubs via `sector:offshore_hubs_tyndp` configuration (https://github.com/open-energy-transition/open-tyndp/pull/54). This feature implements an offshore grid topology with both electric and hydrogen infrastructure, offshore electrolysers, and detailed wind farm characteristics. Three wind farm types are supported: AC-radial (ac-r), DC-radial (dc-r) and DC-hubs (dc-oh). Each is compatible with fixed-bottom (fb) or floating (fl) foundations. Wind farms connected to hubs can produce hydrogen directly through a dedicated P2G unit, while electricity can be supplied to the network or converted to hydrogen via offshore electrolysers connected to the hubs. The network includes existing capacities, with capacity expansion constrained by technological potential and evolving zone potential.

* Add processing and preparation of TYNDP 2024 PECD v3.1 renewable profiles, replacing default ERA5-based profiles processed with Atlite (https://github.com/open-energy-transition/open-tyndp/pull/53). Initial implementation first addresses profiles for offshore technologies.

* Add TYNDP hydrogen import potentials and corridors from outside of the modelled countries (https://github.com/open-energy-transition/open-tyndp/pull/36). Notably this includes pipelines and shipping imports from North Africa, Ukraine and Norway. Different import potentials are available for each of the planning years which are differentiated by wildcards.
Expand Down
48 changes: 48 additions & 0 deletions rules/build_sector.smk
Original file line number Diff line number Diff line change
Expand Up @@ -1291,6 +1291,18 @@ def input_heat_source_power(w):
}


def input_offshore_hubs(w):
offshore_files = [
"offshore_buses",
"offshore_grid",
"offshore_electrolysers",
"offshore_generators",
]
if config_provider("sector", "offshore_hubs_tyndp", "enable")(w):
return {f: resources(f"{f}.csv") for f in offshore_files}
return {f: [] for f in offshore_files}
Comment thread
tgilon marked this conversation as resolved.
Outdated


if config["sector"]["h2_topology_tyndp"]:

rule build_tyndp_h2_network:
Expand Down Expand Up @@ -1354,6 +1366,40 @@ if config["sector"]["h2_topology_tyndp"]:
"../scripts/build_tyndp_h2_imports.py"


if config["sector"]["offshore_hubs_tyndp"]["enable"]:

rule build_tyndp_offshore_hubs:
params:
planning_horizons=config_provider("scenario", "planning_horizons"),
scenario=config_provider("tyndp_scenario"),
countries=config_provider("countries"),
offshore_hubs_tyndp=config_provider("sector", "offshore_hubs_tyndp"),
input:
nodes=directory("data/tyndp_2024_bundle/Offshore hubs/NODE.xlsx"),
grid=directory("data/tyndp_2024_bundle/Offshore hubs/GRID.xlsx"),
electrolysers=directory(
"data/tyndp_2024_bundle/Offshore hubs/ELECTROLYSER.xlsx"
),
generators=directory("data/tyndp_2024_bundle/Offshore hubs/GENERATOR.xlsx"),
Comment thread
tgilon marked this conversation as resolved.
Outdated
output:
offshore_buses=resources("offshore_buses.csv"),
offshore_grid=resources("offshore_grid.csv"),
offshore_electrolysers=resources("offshore_electrolysers.csv"),
offshore_generators=resources("offshore_generators.csv"),
offshore_zone_trajectories=resources("offshore_zone_trajectories.csv"),
log:
logs("build_tyndp_offshore_hubs.log"),
benchmark:
benchmarks("build_tyndp_offshore_hubs")
threads: 1
resources:
mem_mb=4000,
conda:
"../envs/environment.yaml"
script:
"../scripts/build_tyndp_offshore_hubs.py"


rule prepare_sector_network:
params:
time_resolution=config_provider("clustering", "temporal", "resolution_sector"),
Expand Down Expand Up @@ -1390,10 +1436,12 @@ rule prepare_sector_network:
),
load_source=config_provider("load", "source"),
scaling_factor=config_provider("load", "scaling_factor"),
offshore_hubs_tyndp=config_provider("sector", "offshore_hubs_tyndp", "enable"),
input:
unpack(input_profile_offwind),
unpack(input_profile_pecd),
unpack(input_heat_source_power),
unpack(input_offshore_hubs),
**rules.cluster_gas_network.output,
**rules.build_gas_input_locations.output,
snapshot_weightings=resources(
Expand Down
59 changes: 52 additions & 7 deletions rules/postprocess.smk
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,33 @@ if config["foresight"] != "perfect":
script:
"../scripts/plot_power_network.py"

rule plot_base_hydrogen_network:
params:
plotting=config_provider("plotting"),
input:
network=resources(
"networks/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}.nc"
),
regions_onshore=resources("regions_onshore.geojson"),
output:
map=resources(
"maps/base_h2_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}.pdf"
),
threads: 1
resources:
mem_mb=4000,
benchmark:
benchmarks(
"plot_base_hydrogen_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}"
)
log:
RESULTS
+ "logs/plot_base_hydrogen_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}.log",
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_base_hydrogen_network.py"

rule plot_hydrogen_network:
params:
plotting=config_provider("plotting"),
Expand All @@ -83,7 +110,7 @@ if config["foresight"] != "perfect":
),
output:
map=RESULTS
+ "maps/base_s_{clusters}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf",
+ "maps/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}-h2_network.pdf",
Comment thread
coroa marked this conversation as resolved.
Outdated
threads: 2
resources:
mem_mb=10000,
Expand All @@ -100,32 +127,50 @@ if config["foresight"] != "perfect":
script:
"../scripts/plot_hydrogen_network.py"

rule plot_base_hydrogen_network:
rule plot_base_offshore_network:
params:
plotting=config_provider("plotting"),
expanded=False,
input:
network=resources(
"networks/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}.nc"
),
regions_onshore=resources("regions_onshore.geojson"),
regions_offshore=resources("regions_offshore.geojson"),
output:
map=resources(
"maps/base_h2_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}.pdf"
"maps/base_offshore_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}_{carrier}.pdf"
),
threads: 1
resources:
mem_mb=4000,
benchmark:
benchmarks(
"plot_base_hydrogen_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}"
"plot_base_offshore_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}_{carrier}"
)
log:
RESULTS
+ "logs/plot_base_hydrogen_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}.log",
+ "logs/plot_base_offshore_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}_{carrier}.log",
conda:
"../envs/environment.yaml"
script:
"../scripts/plot_base_hydrogen_network.py"
"../scripts/plot_offshore_network.py"

use rule plot_base_offshore_network as plot_offshore_network with:
params:
expanded=True,
input:
network=RESULTS
+ "networks/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}.nc",
output:
map=RESULTS
+ "maps/base_s_{clusters}_{opts}_{sector_opts}_{planning_horizons}-offshore_network_{carrier}.pdf",
benchmark:
benchmarks(
"plot_offshore_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}_{carrier}"
)
log:
RESULTS
+ "logs/plot_offshore_network_{clusters}_{opts}_{sector_opts}_{planning_horizons}_{carrier}.log",

rule plot_gas_network:
params:
Expand Down
5 changes: 4 additions & 1 deletion rules/retrieve.smk
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,10 @@ if config["enable"]["retrieve"] and config["enable"].get("retrieve_tyndp_bundle"
h2_reference_grid="data/tyndp_2024_bundle/Line data/ReferenceGrid_Hydrogen.xlsx",
electricity_demand=directory("data/tyndp_2024_bundle/Demand Profiles"),
h2_imports="data/tyndp_2024_bundle/Hydrogen/H2 IMPORTS GENERATORS PROPERTIES.xlsx",
offshore_buses="data/tyndp_2024_bundle/Offshore hubs/NODE.xlsx",
offshore_nodes="data/tyndp_2024_bundle/Offshore hubs/NODE.xlsx",
offshore_grid="data/tyndp_2024_bundle/Offshore hubs/GRID.xlsx",
offshore_electrolysers="data/tyndp_2024_bundle/Offshore hubs/ELECTROLYSER.xlsx",
offshore_generators="data/tyndp_2024_bundle/Offshore hubs/GENERATOR.xlsx",
log:
"logs/retrieve_tyndp_bundle.log",
retries: 2
Expand Down
6 changes: 6 additions & 0 deletions rules/solve_electricity.smk
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,14 @@ rule solve_network:
"sector", "co2_sequestration_potential", default=200
),
custom_extra_functionality=input_custom_extra_functionality,
carriers_tyndp=config_provider("electricity", "tyndp_renewable_carriers"),
input:
network=resources("networks/base_s_{clusters}_elec_{opts}.nc"),
offshore_zone_trajectories=lambda w: (
resources("offshore_zone_trajectories.csv")
if config_provider("sector", "offshore_hubs_tyndp", "enable")(w)
else []
),
Comment thread
tgilon marked this conversation as resolved.
Outdated
output:
network=RESULTS + "networks/base_s_{clusters}_elec_{opts}.nc",
config=RESULTS + "configs/config.base_s_{clusters}_elec_{opts}.yaml",
Expand Down
Loading
Loading