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))); } }