From 65f664ba15ca2c306d02182433b140c7285c4ccf Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:09:58 +0200 Subject: [PATCH 1/7] Update andromede_v1_models.yml Adding a new DSR model (dsr2) for the purpose of P2G_base and P2G_asservi. The name of the model remains generic, because this model could be used for other flexible demands. --- .../reference_models/andromede_v1_models.yml | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/gems/libs/reference_models/andromede_v1_models.yml b/src/gems/libs/reference_models/andromede_v1_models.yml index 293f8c9e..916187a2 100644 --- a/src/gems/libs/reference_models/andromede_v1_models.yml +++ b/src/gems/libs/reference_models/andromede_v1_models.yml @@ -40,8 +40,34 @@ library: - port: balance_port field: flow definition: -max_load + curtailment - - + + - id: dsr2 + parameters: + - id: min_load + time-dependent: true + scenario-dependent: true + - id: max_load + time-dependent: true + scenario-dependent: true + - id: curtailment_price + time-dependent: false + scenario-dependent: false + - id: load_hurdle_cost # This parameter should be 0 in most of the cases. It is just added here to take into account the hurdle costs in the fivtive "p2g_base" links in the BP25 modelling + time-dependent: true + scenario-dependent: false + variables: + - id: curtailment + lower-bound: 0 + upper-bound: max_load-min_load + objective: expec(sum(curtailment * (curtailment_price - load_hurdle_cost) + load_hurdle_cost*max_load))) + ports: + - id: balance_port + type: flow + port-field-definitions: + - port: balance_port + field: flow + definition: -max_load + curtailment + - id: electrolyser parameters: - id: efficiency From b32e8927229e8f63325e16bc2ed57db965f9d5ee Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:12:08 +0200 Subject: [PATCH 2/7] Create p2g_base.yml Creating a conversion configuration file for the P2G_base model. --- .../data/model_configuration/p2g_base.yml | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/gems/input_converter/data/model_configuration/p2g_base.yml diff --git a/src/gems/input_converter/data/model_configuration/p2g_base.yml b/src/gems/input_converter/data/model_configuration/p2g_base.yml new file mode 100644 index 00000000..6a685896 --- /dev/null +++ b/src/gems/input_converter/data/model_configuration/p2g_base.yml @@ -0,0 +1,106 @@ +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. + +# Configuration file to convert a complex modelling artefact in an Antares study into an Andromede model. + +# Description of the observed elements in BP25_AREF +# z_P2G_base: UNSP = 4000 €/MWh, spillage cost = 0 €/MWh, +# load with a time series (scenario-independent), 1 cluster "z_p2g_base_base" +# Links: {area}/z_P2G_base. Hurdle cost = 0.1 in both directions, +# direct capacity (time series, scenario-independent), no indirect capacity +# Binding constraint: P2G_fatal_band_{area}. Hourly constraints, +# lower bound on the supra flow (time series, scenario-independent) +# For information, factor 2 between the two bounds. + +# Object to create: one P2G base object per area, +# which consumes between the lower and upper bounds. +# If consumption is not at the upper bound, a proportional shedding cost applies + + +template: + name: p2g_base + generator-version-compatibility: X.Y #TODO: find this information + model: andromede_v1_models.dsr2 #DSR model, number 2 -> includes a parameter "min_load" + template-parameters: + - name: area + description: "Area identifier for the P2G_base component" + # exclude: + + component: + id: p2g_base_${area} + parameters: + - id: max_load + time-dependent: true + scenario-dependent: false + value: + object-properties: + type: link + link: ${area} / z_p2g_base + field: capacity_direct + column: 0 + - id: min_load + time-dependent: true + scenario-dependent: false + value: + object-properties: + type: binding_constraint + binding-constraint-id: P2G_fatalband_{area} + field: gt #TODO : check this syntax. What I mean here is the constant term of the binding-constraint, which is a "greater than" constraint here + #Readable in : \input\bindingconstraints\p2g_fatalband_{area}_gt.txt + column: 0 + - id: curtailment_cost + time-dependent: false + scenario-dependent: false + value: + object-properties: + type: thermal + area: z_P2G_base + cluster: z_p2g_base_base + field: marginal_cost + - id: load_hurdle_cost + time-dependent: true + scenario-dependent: false + value: + object-properties: + type: link + link: ${area} / z_p2g_base + field: hurdle_cost_direct #To Do : check this syntax. + #This is the first column of the file: \input\links\{area}\z_p2g_base_parameters.txt + + + # For full modeler mode + connections: + - component1: p2g_base_${area} + port1: balance_port + component2: ${area} + port2: balance_port + + # For hybrid mode + area-connections: + - component: p2g_base_${area} + port: balance_port + area: ${area} + + legacy-objects-to-delete: + - id: virtual_nodes + object-properties: + type: area + area: z_P2G_base + - id: virtual_links + object-properties: + type: link + link: ${area} / z_P2G_base + - id: virtual_binding_constraint + object-properties: + type: binding_constraint + binding-constraint-id: P2G_fatalband_{area} + +#To Do : delete also cluster and load located in z_P2G_base? From 40d50f788c7911e16ad3c07dd9f3939f518b8c06 Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:21:01 +0200 Subject: [PATCH 3/7] Create p2g_asservi.yml Create conversion configuration for P2G_asservi --- .../data/model_configuration/p2g_asservi.yml | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/gems/input_converter/data/model_configuration/p2g_asservi.yml diff --git a/src/gems/input_converter/data/model_configuration/p2g_asservi.yml b/src/gems/input_converter/data/model_configuration/p2g_asservi.yml new file mode 100644 index 00000000..7631566e --- /dev/null +++ b/src/gems/input_converter/data/model_configuration/p2g_asservi.yml @@ -0,0 +1,88 @@ +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. + +# Configuration file to convert a complex modelling artefact in an Antares study into an Andromede model. +# Description of the observed elements in BP25_AREF +# area z_P2G_asservi: UNSP = €4,000, +# load that is time- and scenario-dependent (pay attention to scenario group) +# thermal cluster z_p2g_asservi_asservi (no availability variation, no cost variation) +# linj {area}/z_P2G_asservi: no hurdle costs, +# time- and scenario-dependent direct capacity (pay attention to scenario group), indirect capacity = 0 + + +template: + name: p2g_asservi + generator-version-compatibility: X.Y #TODO: find this information + model: andromede_v1_models.dsr2 + template-parameters: + - name: area + description: "Area identifier for the P2G_asservi component" + # exclude: + + component: + id: p2g_asservi_${area} + #TO DO :scenario-group = ... ? + parameters: + - id: max_load + time-dependent: true + scenario-dependent: true + value: + object-properties: + type: link + link: ${area} / z_P2G_asservi + field: capacity_direct + - id: min_load + time-dependent: false + scenario-dependent: false + value: 0.0 + + - id: curtailment_cost + time-dependent: false + scenario-dependent: false + value: + object-properties: + type: thermal + area: z_P2G_asservi + cluster: z_p2g_asservi_asservi + field: marginal_cost + + - id: load_hurdle_cost + time-dependent: true + scenario-dependent: false + value: + object-properties: + type: link + link: ${area} / z_P2G_asservi + field: hurdle_cost_direct #To Do : check this syntax. + #This is the first column of the file: \input\links\{area}\z_p2g_asservi_parameters.txt + + # For full modeler mode + connections: + - component1: p2g_asservi_${area} + port1: balance_port + component2: ${area} + port2: balance_port + + # For hybrid mode + area-connections: + - component: p2g_asservi_${area} + port: balance_port + area: ${area} + + legacy-objects-to-delete: + - id: virtual_nodes + object-properties: + type: area + area: z_P2G_asservi + - id: virtual_links + object-properties: + type: link + link: ${area} / z_P2G_asservi From 8514af4ff4a4e14270e1997e6c109736aa58c3c1 Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:33:24 +0200 Subject: [PATCH 4/7] Update andromede_v1_models.yml --- src/gems/libs/reference_models/andromede_v1_models.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gems/libs/reference_models/andromede_v1_models.yml b/src/gems/libs/reference_models/andromede_v1_models.yml index 916187a2..7f73a945 100644 --- a/src/gems/libs/reference_models/andromede_v1_models.yml +++ b/src/gems/libs/reference_models/andromede_v1_models.yml @@ -59,7 +59,7 @@ library: - id: curtailment lower-bound: 0 upper-bound: max_load-min_load - objective: expec(sum(curtailment * (curtailment_price - load_hurdle_cost) + load_hurdle_cost*max_load))) + objective: expec(sum(curtailment * (curtailment_price - load_hurdle_cost) + load_hurdle_cost*max_load)) ports: - id: balance_port type: flow From e78b848365725a4476150a401a754026b8ff3928 Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:36:21 +0200 Subject: [PATCH 5/7] Update p2g_base.yml --- .../input_converter/data/model_configuration/p2g_base.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gems/input_converter/data/model_configuration/p2g_base.yml b/src/gems/input_converter/data/model_configuration/p2g_base.yml index 6a685896..98a0dbeb 100644 --- a/src/gems/input_converter/data/model_configuration/p2g_base.yml +++ b/src/gems/input_converter/data/model_configuration/p2g_base.yml @@ -17,7 +17,7 @@ # Links: {area}/z_P2G_base. Hurdle cost = 0.1 in both directions, # direct capacity (time series, scenario-independent), no indirect capacity # Binding constraint: P2G_fatal_band_{area}. Hourly constraints, -# lower bound on the supra flow (time series, scenario-independent) +# lower bound on the flow on the aforementioned link (time series, scenario-independent) # For information, factor 2 between the two bounds. # Object to create: one P2G base object per area, @@ -102,5 +102,3 @@ template: object-properties: type: binding_constraint binding-constraint-id: P2G_fatalband_{area} - -#To Do : delete also cluster and load located in z_P2G_base? From 8e22df4d552f66d0d6caa0cd9bdcce050e20dabd Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:40:30 +0200 Subject: [PATCH 6/7] Update p2g_asservi.yml --- .../input_converter/data/model_configuration/p2g_asservi.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gems/input_converter/data/model_configuration/p2g_asservi.yml b/src/gems/input_converter/data/model_configuration/p2g_asservi.yml index 7631566e..f787f78f 100644 --- a/src/gems/input_converter/data/model_configuration/p2g_asservi.yml +++ b/src/gems/input_converter/data/model_configuration/p2g_asservi.yml @@ -61,8 +61,8 @@ template: object-properties: type: link link: ${area} / z_P2G_asservi - field: hurdle_cost_direct #To Do : check this syntax. - #This is the first column of the file: \input\links\{area}\z_p2g_asservi_parameters.txt + field: links_parameters + column: 0 # For full modeler mode connections: From 61b4066eb906dff9da89a0da6dcbda426d78b940 Mon Sep 17 00:00:00 2001 From: "Antoine Oustry, PhD" <58943406+aoustry@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:41:20 +0200 Subject: [PATCH 7/7] Update p2g_base.yml --- .../input_converter/data/model_configuration/p2g_base.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gems/input_converter/data/model_configuration/p2g_base.yml b/src/gems/input_converter/data/model_configuration/p2g_base.yml index 98a0dbeb..a6f55620 100644 --- a/src/gems/input_converter/data/model_configuration/p2g_base.yml +++ b/src/gems/input_converter/data/model_configuration/p2g_base.yml @@ -45,7 +45,7 @@ template: type: link link: ${area} / z_p2g_base field: capacity_direct - column: 0 + column: 0 - id: min_load time-dependent: true scenario-dependent: false @@ -55,7 +55,7 @@ template: binding-constraint-id: P2G_fatalband_{area} field: gt #TODO : check this syntax. What I mean here is the constant term of the binding-constraint, which is a "greater than" constraint here #Readable in : \input\bindingconstraints\p2g_fatalband_{area}_gt.txt - column: 0 + column: 0 - id: curtailment_cost time-dependent: false scenario-dependent: false @@ -72,8 +72,8 @@ template: object-properties: type: link link: ${area} / z_p2g_base - field: hurdle_cost_direct #To Do : check this syntax. - #This is the first column of the file: \input\links\{area}\z_p2g_base_parameters.txt + field: links_parameters + column: 0 # For full modeler mode