diff --git a/Snakefile b/Snakefile index 4d874886c..20878e496 100644 --- a/Snakefile +++ b/Snakefile @@ -1152,6 +1152,8 @@ rule add_export: store=config["export"]["store"], store_capital_costs=config["export"]["store_capital_costs"], export_profile=config["export"]["export_profile"], + export_endogenous=config["export"]["endogenous"], + endogenous_price=config["export"]["endogenous_price"], snapshots=config["snapshots"], costs=config["costs"], input: diff --git a/config.default.yaml b/config.default.yaml index 19f26d96c..5ee73daa7 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: CC0-1.0 -version: 0.4.1 +version: 0.4.2 tutorial: false logging: @@ -456,10 +456,12 @@ fossil_reserves: oil: 100 #TWh Maybe redundant export: - h2export: [10] # Yearly export demand in TWh + endogenous: false # If true, the export demand is endogenously determined by the model + endogenous_price: 400 # EUR/MWh # Market price, for wich the hydrogen for endogenous exports is sold. Only considered, if ["export"]["endogenous"] is set to true. store: true # [True, False] # specifies whether an export store to balance demand is implemented store_capital_costs: "no_costs" # ["standard_costs", "no_costs"] # specifies the costs of the export store. "standard_costs" takes CAPEX of "hydrogen storage tank type 1 including compressor" - export_profile: "ship" # use "ship" or "constant" + h2export: [10] # Yearly export demand in TWh. Only considered, if ["export"]["endogenous"] is set to false + export_profile: "ship" # use "ship" or "constant". Only considered, if ["export"]["endogenous"] is set to false ship: ship_capacity: 0.4 # TWh # 0.05 TWh for new ones, 0.003 TWh for Susio Frontier, 0.4 TWh according to Hampp2021: "Corresponds to 11360 t H2 (l) with LHV of 33.3333 Mwh/t_H2. Cihlar et al 2020 based on IEA 2019, Table 3-B" travel_time: 288 # hours # From Agadir to Rotterdam and back (12*24) diff --git a/config.tutorial.yaml b/config.tutorial.yaml index 0c98bb152..845370c9e 100644 --- a/config.tutorial.yaml +++ b/config.tutorial.yaml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: CC0-1.0 -version: 0.4.1 +version: 0.4.2 tutorial: true diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 92b958f8b..f2a739e5c 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -33,6 +33,8 @@ E.g. if a new rule becomes available describe how to use it `make test` and in o * Enable sector rules import in subworkflow `PR #1178 `__ +* Include option of endogenous export, which optimizes the export quantity based on price signals `PR #1201 `__ + * Remove elec-based H2 and battery technologies before addition in `prepare_sector_network.py` script and fix bus names for links that models H2 repuspose network `PR #1198 `__ **Minor Changes and bug-fixing** diff --git a/scripts/add_export.py b/scripts/add_export.py index 3a2aab8e8..7d056dfeb 100644 --- a/scripts/add_export.py +++ b/scripts/add_export.py @@ -129,14 +129,27 @@ def add_export(n, hydrogen_buses_ports, export_profile): elif snakemake.params.store == False: pass - # add load - n.add( - "Load", - "H2 export load", - bus="H2 export bus", - carrier="H2", - p_set=export_profile, - ) + if snakemake.params.export_endogenous: + # add endogenous export by implementing a negative generation + n.add( + "Generator", + "H2 export load", + bus="H2 export bus", + carrier="H2", + sign=-1, + p_nom_extendable=True, + marginal_cost=snakemake.params.endogenous_price * (-1), + ) + + else: + # add exogenous export by implementing a load + n.add( + "Load", + "H2 export load", + bus="H2 export bus", + carrier="H2", + p_set=export_profile, + ) return diff --git a/test/config.test_myopic.yaml b/test/config.test_myopic.yaml index dc9dcdecf..f68395903 100644 --- a/test/config.test_myopic.yaml +++ b/test/config.test_myopic.yaml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -version: 0.4.1 +version: 0.4.2 logging_level: INFO tutorial: true @@ -69,10 +69,12 @@ fossil_reserves: export: - h2export: [120] # Yearly export demand in TWh - store: true # [True, False] # specifies wether an export store to balance demand is implemented - store_capital_costs: "no_costs" # ["standard_costs", "no_costs"] # specifies the costs of the export store "standard_costs" takes CAPEX of "hydrogen storage tank type 1 including compressor" - export_profile: "ship" # use "ship" or "constant" + endogenous: false # If true, the export demand is endogenously determined by the model + endogenous_price: 400 # EUR/MWh # Market price, for wich the hydrogen for endogenous exports is sold. Only considered, if ["export"]["endogenous"] is set to true. + store: true # [True, False] # specifies whether an export store to balance demand is implemented + store_capital_costs: "no_costs" # ["standard_costs", "no_costs"] # specifies the costs of the export store. "standard_costs" takes CAPEX of "hydrogen storage tank type 1 including compressor" + h2export: [120] # Yearly export demand in TWh. Only considered, if ["export"]["endogenous"] is set to false + export_profile: "ship" # use "ship" or "constant". Only considered, if ["export"]["endogenous"] is set to false ship: ship_capacity: 0.4 # TWh # 0.05 TWh for new ones, 0.003 TWh for Susio Frontier, 0.4 TWh according to Hampp2021: "Corresponds to 11360 t H2 (l) with LHV of 33.3333 Mwh/t_H2. Cihlar et al 2020 based on IEA 2019, Table 3-B" travel_time: 288 # hours # From Agadir to Rotterdam and back (12*24)