diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c10ed65..588a2f3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,10 +14,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v4.2.2
- - name: Set up JDK 17
+ - name: Set up JDK 21
uses: actions/setup-java@v1
with:
- java-version: 17
+ java-version: 21
- name: Build with Maven
run: mvn --batch-mode install
diff --git a/pom.xml b/pom.xml
index b40794d..76f0bc3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,8 +30,8 @@
UTF-8
- 17
- 17
+ 21
+ 21
@@ -42,16 +42,16 @@
- 1.27.0
+ 1.37.0
5.10.2
1.5.6
3.2.5
3.3.1
0.8.10
- 2.11.0
- 1.13.2
- 6.1.2
- 6.5.1
+ 2.13.0
+ 1.15.0
+ 6.5.0
+ 6.7.0
2.0.13
diff --git a/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAligner.java b/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAligner.java
index dbc0c16..d13980b 100644
--- a/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAligner.java
+++ b/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAligner.java
@@ -8,9 +8,9 @@
package com.rte_france.trm_algorithm.operational_conditions_aligners;
import com.powsybl.iidm.network.Network;
-import com.powsybl.openrao.data.cracapi.Crac;
-import com.powsybl.openrao.data.cracapi.Identifiable;
-import com.powsybl.openrao.data.cracapi.networkaction.NetworkAction;
+import com.powsybl.openrao.data.crac.api.Crac;
+import com.powsybl.openrao.data.crac.api.Identifiable;
+import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/HvdcAcModelingEnvironment.java b/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/HvdcAcModelingEnvironment.java
index 412f3a5..900ad2e 100644
--- a/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/HvdcAcModelingEnvironment.java
+++ b/src/main/java/com/rte_france/trm_algorithm/operational_conditions_aligners/HvdcAcModelingEnvironment.java
@@ -7,15 +7,15 @@
*/
package com.rte_france.trm_algorithm.operational_conditions_aligners;
+import com.farao_community.farao.gridcapa_swe_commons.hvdc.HvdcInformation;
import com.farao_community.farao.gridcapa_swe_commons.hvdc.HvdcLinkProcessor;
import com.farao_community.farao.gridcapa_swe_commons.hvdc.parameters.HvdcCreationParameters;
-import com.powsybl.iidm.network.Network;
+import com.powsybl.iidm.network.*;
import com.rte_france.trm_algorithm.TrmException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
/**
* @author Hugo Schindler {@literal }
@@ -25,6 +25,8 @@ public class HvdcAcModelingEnvironment implements OperationalConditionAligner {
private final Set creationParametersSet;
private final OperationalConditionAligner operationalConditionAligner;
+ private List hvdcReferenceInformationList;
+ private List hvdcMarketBasedInformationList;
public HvdcAcModelingEnvironment(Set creationParametersSet, OperationalConditionAligner operationalConditionAligner) {
creationParametersSet.stream()
@@ -34,6 +36,8 @@ public HvdcAcModelingEnvironment(Set creationParametersS
});
this.creationParametersSet = creationParametersSet;
this.operationalConditionAligner = operationalConditionAligner;
+ this.hvdcReferenceInformationList = new ArrayList<>();
+ this.hvdcMarketBasedInformationList = new ArrayList<>();
}
private void replaceEquivalentModelByHvdc(Network referenceNetwork, Network marketBasedNetwork) {
@@ -44,8 +48,10 @@ private void replaceEquivalentModelByHvdc(Network referenceNetwork, Network mark
private void replaceHvdcByEquivalentModel(Network referenceNetwork, Network marketBasedNetwork) {
LOGGER.info("Transform HVDC to their AC equivalent models");
- HvdcLinkProcessor.replaceHvdcByEquivalentModel(referenceNetwork, creationParametersSet);
- HvdcLinkProcessor.replaceHvdcByEquivalentModel(marketBasedNetwork, creationParametersSet);
+ hvdcReferenceInformationList = getHvdcInformationFromNetwork(referenceNetwork);
+ hvdcMarketBasedInformationList = getHvdcInformationFromNetwork(marketBasedNetwork);
+ HvdcLinkProcessor.replaceHvdcByEquivalentModel(referenceNetwork, creationParametersSet, hvdcReferenceInformationList);
+ HvdcLinkProcessor.replaceHvdcByEquivalentModel(marketBasedNetwork, creationParametersSet, hvdcMarketBasedInformationList);
}
@Override
@@ -54,4 +60,52 @@ public void align(Network referenceNetwork, Network marketBasedNetwork) {
operationalConditionAligner.align(referenceNetwork, marketBasedNetwork);
replaceHvdcByEquivalentModel(referenceNetwork, marketBasedNetwork);
}
+
+ List getHvdcInformationFromNetwork(Network network) {
+ List hvdcInformationList = new ArrayList<>();
+
+ for (HvdcCreationParameters parameter : creationParametersSet) {
+ HvdcInformation hvdcInformation = new HvdcInformation(parameter.getId());
+ Optional line = Optional.ofNullable(network.getLine(parameter.getEquivalentAcLineId()));
+ Optional genSide1 = Optional.ofNullable(network.getGenerator(parameter.getEquivalentGeneratorId(TwoSides.ONE)));
+ Optional genSide2 = Optional.ofNullable(network.getGenerator(parameter.getEquivalentGeneratorId(TwoSides.TWO)));
+ Optional loadSide1 = Optional.ofNullable(network.getLoad(parameter.getEquivalentLoadId(TwoSides.ONE).get(1)));
+ Optional loadSide2 = Optional.ofNullable(network.getLoad(parameter.getEquivalentLoadId(TwoSides.TWO).get(1)));
+
+ line.ifPresent(line1 -> {
+ hvdcInformation.setAcLineTerminal1Connected(line1.getTerminal1().isConnected());
+ hvdcInformation.setAcLineTerminal2Connected(line1.getTerminal2().isConnected());
+ });
+
+ genSide1.ifPresent(generator -> {
+ hvdcInformation.setSide1GeneratorConnected(generator.getTerminal().isConnected());
+ hvdcInformation.setSide1GeneratorTargetP(generator.getTargetP());
+ });
+ genSide2.ifPresent(generator -> {
+ hvdcInformation.setSide2GeneratorConnected(generator.getTerminal().isConnected());
+ hvdcInformation.setSide2GeneratorTargetP(generator.getTargetP());
+ });
+
+ loadSide1.ifPresentOrElse(
+ load -> {
+ hvdcInformation.setSide1LoadConnected(load.getTerminal().isConnected());
+ hvdcInformation.setSide1LoadP(load.getP0());
+ },
+ () -> Optional.ofNullable(network.getLoad(parameter.getEquivalentLoadId(TwoSides.ONE).get(2)))
+ .ifPresent(loadWithSecondOptionId -> {
+ hvdcInformation.setSide1LoadConnected(loadWithSecondOptionId.getTerminal().isConnected());
+ hvdcInformation.setSide1LoadP(loadWithSecondOptionId.getP0());
+ })
+ );
+
+ loadSide2.ifPresent(load -> {
+ hvdcInformation.setSide2LoadConnected(load.getTerminal().isConnected());
+ hvdcInformation.setSide2LoadP(load.getP0());
+ });
+
+ hvdcInformationList.add(hvdcInformation);
+ }
+
+ return hvdcInformationList;
+ }
}
diff --git a/src/test/java/com/rte_france/trm_algorithm/TestUtils.java b/src/test/java/com/rte_france/trm_algorithm/TestUtils.java
index 2624b45..2c75e5c 100644
--- a/src/test/java/com/rte_france/trm_algorithm/TestUtils.java
+++ b/src/test/java/com/rte_france/trm_algorithm/TestUtils.java
@@ -11,9 +11,9 @@
import com.powsybl.iidm.network.Branch;
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
-import com.powsybl.openrao.data.cracapi.Crac;
-import com.powsybl.openrao.data.cracapi.CracFactory;
-import com.powsybl.openrao.data.cracapi.networkaction.ActionType;
+import com.powsybl.openrao.data.crac.api.Crac;
+import com.powsybl.openrao.data.crac.api.CracFactory;
+import com.powsybl.openrao.data.crac.api.networkaction.ActionType;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAligner;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAlignerResult;
import com.rte_france.trm_algorithm.operational_conditions_aligners.exchange_and_net_position.EmptyExchangeAndNetPosition;
diff --git a/src/test/java/com/rte_france/trm_algorithm/TestUtilsTest.java b/src/test/java/com/rte_france/trm_algorithm/TestUtilsTest.java
index 6856124..227774a 100644
--- a/src/test/java/com/rte_france/trm_algorithm/TestUtilsTest.java
+++ b/src/test/java/com/rte_france/trm_algorithm/TestUtilsTest.java
@@ -10,7 +10,7 @@
import com.powsybl.balances_adjustment.balance_computation.BalanceComputationResult;
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
-import com.powsybl.openrao.data.cracapi.Crac;
+import com.powsybl.openrao.data.crac.api.Crac;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAligner;
import com.rte_france.trm_algorithm.operational_conditions_aligners.ExchangeAlignerResult;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/rte_france/trm_algorithm/TrmAlgorithmTest.java b/src/test/java/com/rte_france/trm_algorithm/TrmAlgorithmTest.java
index 0d93f9b..9ea8295 100644
--- a/src/test/java/com/rte_france/trm_algorithm/TrmAlgorithmTest.java
+++ b/src/test/java/com/rte_france/trm_algorithm/TrmAlgorithmTest.java
@@ -22,9 +22,10 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.LoadFlow;
import com.powsybl.loadflow.LoadFlowParameters;
-import com.powsybl.openrao.data.cracapi.Crac;
-import com.powsybl.openrao.data.cracapi.CracFactory;
-import com.powsybl.openrao.data.cracapi.parameters.CracCreationParameters;
+import com.powsybl.openrao.data.crac.api.Crac;
+import com.powsybl.openrao.data.crac.api.CracFactory;
+import com.powsybl.openrao.data.crac.api.parameters.CracCreationParameters;
+import com.powsybl.openrao.data.crac.io.fbconstraint.parameters.FbConstraintCracCreationParameters;
import com.powsybl.sensitivity.SensitivityVariableSet;
import com.rte_france.trm_algorithm.operational_conditions_aligners.*;
import org.junit.jupiter.api.Test;
@@ -316,7 +317,11 @@ void testTwoNetworkWithCracFile() throws IOException {
Network marketBasedNetwork = TestUtils.importNetwork("TestCase12Nodes/TestCase12NodesHvdc.uct");
ZonalData zonalGlsks = TrmUtils.getAutoGlsk(referenceNetwork);
String cracFilePath = "TestCase12Nodes/cbcora_ep10us2case1.xml";
- Crac localCrac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC), new CracCreationParameters());
+ CracCreationParameters cracCreationParameters = new CracCreationParameters();
+ FbConstraintCracCreationParameters fbConstraintCracCreationParameters = new FbConstraintCracCreationParameters();
+ fbConstraintCracCreationParameters.setTimestamp(OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC));
+ cracCreationParameters.addExtension(FbConstraintCracCreationParameters.class, fbConstraintCracCreationParameters);
+ Crac localCrac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, cracCreationParameters);
localCrac.getNetworkAction("Open FR1 FR2").apply(referenceNetwork);
ZonalData localMarketZonalScalable = TrmUtils.getAutoScalable(marketBasedNetwork);
XnecProviderByIds xnecProviderByIds = XnecProviderByIds.builder()
diff --git a/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAlignerTest.java b/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAlignerTest.java
index ea0f9cf..83962f2 100644
--- a/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAlignerTest.java
+++ b/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/CracAlignerTest.java
@@ -8,10 +8,11 @@
package com.rte_france.trm_algorithm.operational_conditions_aligners;
import com.powsybl.iidm.network.Network;
-import com.powsybl.openrao.data.cracapi.Crac;
-import com.powsybl.openrao.data.cracapi.CracFactory;
-import com.powsybl.openrao.data.cracapi.networkaction.ActionType;
-import com.powsybl.openrao.data.cracapi.parameters.CracCreationParameters;
+import com.powsybl.openrao.data.crac.api.Crac;
+import com.powsybl.openrao.data.crac.api.CracFactory;
+import com.powsybl.openrao.data.crac.api.networkaction.ActionType;
+import com.powsybl.openrao.data.crac.api.parameters.CracCreationParameters;
+import com.powsybl.openrao.data.crac.io.fbconstraint.parameters.FbConstraintCracCreationParameters;
import com.rte_france.trm_algorithm.TestUtils;
import org.junit.jupiter.api.Test;
@@ -80,7 +81,11 @@ void testTwoNetworkWithCracFile() throws IOException {
Network referenceNetwork = TestUtils.importNetwork("TestCase12Nodes/TestCase12NodesHvdc.uct");
Network marketBasedNetwork = TestUtils.importNetwork("TestCase12Nodes/TestCase12NodesHvdc.uct");
String cracFilePath = "../TestCase12Nodes/cbcora_ep10us2case1.xml";
- Crac crac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC), new CracCreationParameters());
+ CracCreationParameters cracCreationParameters = new CracCreationParameters();
+ FbConstraintCracCreationParameters fbConstraintCracCreationParameters = new FbConstraintCracCreationParameters();
+ fbConstraintCracCreationParameters.setTimestamp(OffsetDateTime.of(2019, 1, 7, 23, 30, 0, 0, ZoneOffset.UTC));
+ cracCreationParameters.addExtension(FbConstraintCracCreationParameters.class, fbConstraintCracCreationParameters);
+ Crac crac = Crac.read(cracFilePath, Objects.requireNonNull(getClass().getResourceAsStream(cracFilePath)), referenceNetwork, cracCreationParameters);
crac.getNetworkAction("Open FR1 FR2").apply(referenceNetwork);
CracAligner cracAligner = new CracAligner(crac);
diff --git a/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/OperationalConditionAlignerPipelineTest.java b/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/OperationalConditionAlignerPipelineTest.java
index 57160aa..35d2716 100644
--- a/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/OperationalConditionAlignerPipelineTest.java
+++ b/src/test/java/com/rte_france/trm_algorithm/operational_conditions_aligners/OperationalConditionAlignerPipelineTest.java
@@ -16,8 +16,8 @@
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.LoadFlow;
-import com.powsybl.openrao.data.cracapi.Crac;
-import com.powsybl.openrao.data.cracapi.CracFactory;
+import com.powsybl.openrao.data.crac.api.Crac;
+import com.powsybl.openrao.data.crac.api.CracFactory;
import com.rte_france.trm_algorithm.TestUtils;
import org.junit.jupiter.api.Test;
@@ -118,7 +118,7 @@ void testAlignmentChainWithHvdcModeling() {
assertEquals(-5, marketBasedNetwork.getTwoWindingsTransformer("BBE2AA1 BBE3AA1 1").getPhaseTapChanger().getTapPosition());
assertPstAlignerResult(pstAligner.getResult(), "BBE2AA1 BBE3AA1 1", "FFR2AA1 FFR4AA1 1");
assertExchangeAlignerResult(exchangeAligner.getResult(),
- Map.of(Country.BE, 2027.7, Country.DE, -1005.4, Country.FR, -522.3, Country.NL, -500.),
- Map.of(Country.FR, Map.of(Country.DE, 446.3), Country.NL, Map.of(Country.DE, 559.1), Country.BE, Map.of(Country.FR, 968.5, Country.NL, 1059.1)));
+ Map.of(Country.BE, 2027.266, Country.DE, -1005.173, Country.FR, -522.093, Country.NL, -500.),
+ Map.of(Country.FR, Map.of(Country.DE, 431.153), Country.NL, Map.of(Country.DE, 574.02), Country.BE, Map.of(Country.FR, 953.246, Country.NL, 1074.02)));
}
}