From 44da057f8d8a9998b4d947ef5f13affe14fc645b Mon Sep 17 00:00:00 2001 From: Godelaine Date: Fri, 13 Mar 2026 15:00:21 +0100 Subject: [PATCH 1/2] chore(CI/CD): Rename dangling lines to boundary lines and update JSON CRAC version to 2.10 (#1655) * rename Dangling Line to Boundary Line * bump JSON CRAC version to 2.10 * Adapt to new sensi API --------- Signed-off-by: Thomas Bouquet Co-authored-by: Godelaine de Montmorillon --- .github/workflows/snapshot-ci.yml | 2 +- ...dder.java => BoundaryLineActionAdder.java} | 4 +- .../crac/api/networkaction/NetworkAction.java | 8 +- .../api/networkaction/NetworkActionAdder.java | 2 +- .../api/rangeaction/InjectionRangeAction.java | 2 +- ....java => BoundaryLineActionAdderImpl.java} | 14 +-- .../data/crac/impl/ContingencyAdderImpl.java | 2 +- .../crac/impl/NetworkActionAdderImpl.java | 6 +- ...a => BoundaryLineActionAdderImplTest.java} | 26 ++-- ...t.java => BoundaryLineActionImplTest.java} | 84 ++++++------- .../crac/impl/ContingencyAdderImplTest.java | 16 +-- .../data/crac/impl/ContingencyTest.java | 6 +- .../data/crac/impl/FlowCnecImplTest.java | 8 +- .../crac/impl/GeneratorActionImplTest.java | 4 +- .../impl/utils/ExhaustiveCracCreation.java | 2 +- .../crac/impl/utils/NetworkImportsUtil.java | 20 ++-- .../craccreator/CimContingencyCreator.java | 6 +- .../data/crac/io/commons/ConnectableType.java | 8 +- .../io/commons/cgmes/CgmesBranchHelper.java | 4 +- .../commons/iidm/IidmCnecElementHelper.java | 26 ++-- .../crac/io/commons/ucte/UcteConnectable.java | 2 +- .../ucte/UcteConnectableCollection.java | 20 ++-- .../commons/ucte/UcteFlowElementHelper.java | 36 +++--- .../io/commons/ucte/UcteNetworkAnalyzer.java | 6 +- .../iidm/IidmCnecElementHelperTest.java | 8 +- .../ucte/UcteConnectableCollectionTest.java | 28 ++--- .../ucte/UcteFlowElementHelperTest.java | 20 ++-- .../UcteTopologicalElementHelperTest.java | 2 +- .../test/resources/TestCase_PstAmbiguity.uct | 2 +- .../TestCase_severalVoltageLevels_Xnodes.uct | 2 +- ...everalVoltageLevels_Xnodes_8characters.uct | 2 +- ...tageLevels_Xnodes_8characters_priority.uct | 2 +- ...Case_severalVoltageLevels_Xnodes_Ynode.uct | 2 +- .../network_with_dangling_lines.xiidm | 2 +- .../crac/io/fbconstraint/OutageReader.java | 16 +-- .../TestCase_severalVoltageLevels_Xnodes.uct | 2 +- .../io/json/JsonSerializationConstants.java | 4 +- ... BoundaryLineActionArrayDeserializer.java} | 16 +-- .../InjectionSetpointArrayDeserializer.java | 14 +-- .../NetworkActionArrayDeserializer.java | 20 +++- ...java => BoundaryLineActionSerializer.java} | 8 +- .../serializers/CracJsonSerializerModule.java | 4 +- .../serializers/NetworkActionSerializer.java | 4 +- .../boundary-line-action-v2.10.json | 18 +++ .../resources/schemas/crac/crac-v2.10.json | 112 ++++++++++++++++++ .../network-action/network-action-v2.10.json | 111 +++++++++++++++++ .../crac/io/json/CracImportExportTest.java | 33 +++--- .../io/json/JsonRetrocompatibilityTest.java | 26 ++-- .../cracTwoInjectionOneGenerator.json | 2 +- .../retrocompatibility/v2/crac-v2.4.json | 2 +- .../retrocompatibility/v2/crac-v2.5.json | 2 +- .../retrocompatibility/v2/crac-v2.6.json | 2 +- .../retrocompatibility/v2/crac-v2.7.json | 2 +- .../retrocompatibility/v2/crac-v2.8.json | 2 +- .../craccreator/cnec/AbstractCnecCreator.java | 6 +- .../nc/craccreator/cnec/FlowCnecCreator.java | 4 +- .../io/nc/objects/ContingencyEquipment.java | 6 +- .../glsk/virtual/hubs/GlskVirtualHubs.java | 14 +-- .../virtual/hubs/GlskVirtualHubsTest.java | 2 +- .../io/cne/swe/SweMonitoredSeriesCreator.java | 4 +- .../raoresult/io/cne/swe/TieLineTest.java | 10 +- .../CountryNetPositionComputation.java | 16 +-- .../CountryNetPositionComputationTest.java | 4 +- .../ReferenceProgramBuilderTest.java | 4 +- ...eDangling.xiidm => TestCaseBoundary.xiidm} | 0 .../VirtualHubAssigner.java | 18 +-- .../VirtualHubAssignerTest.java | 2 +- .../AssignedVirtualHubTest.java | 10 +- .../AssignedVirtualHubXmlSerializerTest.java | 8 +- docs/input-data/crac.md | 4 +- docs/input-data/crac/json.md | 22 ++-- .../implementation-specific-parameters.md | 2 +- .../LoopFlowComputationImpl.java | 4 +- .../loopflowcomputation/ExampleGenerator.java | 2 +- .../LoopFlowComputationImplTest.java | 38 +++--- .../openrao/monitoring/Monitoring.java | 6 +- pom.xml | 6 +- .../test/resources/RaoParametersSet_v2.json | 5 +- .../RaoParameters_config_withExtensions.json | 3 +- .../RaoParameters_config_withOLFParams.json | 3 +- ...rameters_config_withPartialExtensions.json | 3 +- .../sensitivityanalysis/LoadflowProvider.java | 4 +- .../SystematicSensitivityAdapter.java | 9 +- .../SystematicSensitivityResult.java | 6 +- .../MockSensiProvider.java | 86 +++++++------- .../SystematicSensitivityResultTest.java | 16 ++- .../openrao/tests/steps/CracImportSteps.java | 12 +- .../01_import/011_cnec/US14_6.feature | 10 +- .../511_loopflow_computation/US7_18.feature | 6 +- ...everalVoltageLevels_Xnodes_8characters.uct | 2 +- ... TestCase12Nodes_with_Xnodes_boundary.uct} | 0 91 files changed, 700 insertions(+), 441 deletions(-) rename data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/{DanglingLineActionAdder.java => BoundaryLineActionAdder.java} (70%) rename data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/{DanglingLineActionAdderImpl.java => BoundaryLineActionAdderImpl.java} (71%) rename data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/{DanglingLineActionAdderImplTest.java => BoundaryLineActionAdderImplTest.java} (69%) rename data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/{DanglingLineActionImplTest.java => BoundaryLineActionImplTest.java} (68%) rename data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/{DanglingLineActionArrayDeserializer.java => BoundaryLineActionArrayDeserializer.java} (82%) rename data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/{DanglingLineActionSerializer.java => BoundaryLineActionSerializer.java} (79%) create mode 100644 data/crac/crac-io/crac-io-json/src/main/resources/schemas/boundary-line-action/boundary-line-action-v2.10.json create mode 100644 data/crac/crac-io/crac-io-json/src/main/resources/schemas/crac/crac-v2.10.json create mode 100644 data/crac/crac-io/crac-io-json/src/main/resources/schemas/network-action/network-action-v2.10.json rename data/refprog/reference-program/src/test/resources/{TestCaseDangling.xiidm => TestCaseBoundary.xiidm} (100%) rename tests/src/test/resources/files/cases/epic7/{TestCase12Nodes_with_Xnodes_dangling.uct => TestCase12Nodes_with_Xnodes_boundary.uct} (100%) diff --git a/.github/workflows/snapshot-ci.yml b/.github/workflows/snapshot-ci.yml index 5cbe434cc9..cf6dc50ac0 100644 --- a/.github/workflows/snapshot-ci.yml +++ b/.github/workflows/snapshot-ci.yml @@ -59,7 +59,7 @@ jobs: # Build powsybl-core - name: Checking for powsybl-core snapshot branch - run: ${{ env.SCRIPTS_PATH }}/check_snapshot_branch.sh "https://github.com/powsybl/powsybl-open-loadflow.git" ${{ env.SNAPSHOT_VERSION }} + run: ${{ env.SCRIPTS_PATH }}/check_snapshot_branch.sh "https://github.com/powsybl/powsybl-core.git" ${{ env.SNAPSHOT_VERSION }} - name: Checkout core sources uses: actions/checkout@v4 diff --git a/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/DanglingLineActionAdder.java b/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/BoundaryLineActionAdder.java similarity index 70% rename from data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/DanglingLineActionAdder.java rename to data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/BoundaryLineActionAdder.java index b18a3d0c38..27b5be898a 100644 --- a/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/DanglingLineActionAdder.java +++ b/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/BoundaryLineActionAdder.java @@ -10,8 +10,8 @@ /** * @author Pauline JEAN-MARIE {@literal } */ -public interface DanglingLineActionAdder extends SingleNetworkElementActionAdder { +public interface BoundaryLineActionAdder extends SingleNetworkElementActionAdder { - DanglingLineActionAdder withActivePowerValue(double setPoint); + BoundaryLineActionAdder withActivePowerValue(double setPoint); } diff --git a/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkAction.java b/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkAction.java index c00576f690..a9e7fb38bd 100644 --- a/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkAction.java +++ b/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkAction.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.api.networkaction; import com.powsybl.action.Action; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.HvdcAction; import com.powsybl.action.LoadAction; @@ -70,7 +70,7 @@ default boolean isCompatibleWith(NetworkAction otherNetworkAction) { } else { // FIXME: Action equals is only implemented for Action currently used in Rao, // so the code above is not working for all Action but only for: - // GeneratorAction, LoadAction, DanglingLineAction, ShuntCompensatorPositionAction, + // GeneratorAction, LoadAction, BoundaryLineAction, ShuntCompensatorPositionAction, // PhaseTapChangerTapPositionAction, TerminalsConnectionAction, SwitchAction return otherNetworkAction.getElementaryActions().stream().allMatch(otherElementaryAction -> { if (otherElementaryAction instanceof SwitchPair) { @@ -94,8 +94,8 @@ static String getNetworkElementId(Action elementaryAction) { return generatorAction.getGeneratorId(); } else if (elementaryAction instanceof LoadAction loadAction) { return loadAction.getLoadId(); - } else if (elementaryAction instanceof DanglingLineAction danglingLineAction) { - return danglingLineAction.getDanglingLineId(); + } else if (elementaryAction instanceof BoundaryLineAction boundaryLineAction) { + return boundaryLineAction.getBoundaryLineId(); } else if (elementaryAction instanceof ShuntCompensatorPositionAction shuntCompensatorPositionAction) { return shuntCompensatorPositionAction.getShuntCompensatorId(); } else if (elementaryAction instanceof PhaseTapChangerTapPositionAction phaseTapChangerTapPositionAction) { diff --git a/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkActionAdder.java b/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkActionAdder.java index ed77e3e4bd..809a666041 100644 --- a/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkActionAdder.java +++ b/data/crac/crac-api/src/main/java/com/powsybl/openrao/data/crac/api/networkaction/NetworkActionAdder.java @@ -25,7 +25,7 @@ public interface NetworkActionAdder extends RemedialActionAdder} */ -public class DanglingLineActionAdderImpl extends AbstractSingleNetworkElementActionAdderImpl implements DanglingLineActionAdder { +public class BoundaryLineActionAdderImpl extends AbstractSingleNetworkElementActionAdderImpl implements BoundaryLineActionAdder { private Double activePowerValue; - DanglingLineActionAdderImpl(NetworkActionAdderImpl ownerAdder) { + BoundaryLineActionAdderImpl(NetworkActionAdderImpl ownerAdder) { super(ownerAdder); } @Override - public DanglingLineActionAdder withActivePowerValue(double activePowerValue) { + public BoundaryLineActionAdder withActivePowerValue(double activePowerValue) { this.activePowerValue = activePowerValue; return this; } protected Action buildAction() { - return new DanglingLineActionBuilder() + return new BoundaryLineActionBuilder() .withId(String.format("%s_%s_%s", getActionName(), networkElementId, activePowerValue)) .withNetworkElementId(networkElementId) .withRelativeValue(false) @@ -44,6 +44,6 @@ protected void assertSpecificAttributes() { } protected String getActionName() { - return "DanglingLineAction"; + return "BoundaryLineAction"; } } diff --git a/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImpl.java b/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImpl.java index a6d38622c3..ddf394e829 100644 --- a/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImpl.java +++ b/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImpl.java @@ -50,7 +50,7 @@ private void addElementsInContingency(ContingencyBuilder builder, String conting case SHUNT_COMPENSATOR -> builder.addShuntCompensator(contingencyElementId); case HVDC_LINE -> builder.addHvdcLine(contingencyElementId); case BUSBAR_SECTION -> builder.addBusbarSection(contingencyElementId); - case DANGLING_LINE -> builder.addDanglingLine(contingencyElementId); + case BOUNDARY_LINE -> builder.addBoundaryLine(contingencyElementId); case LINE -> builder.addLine(contingencyElementId); case TWO_WINDINGS_TRANSFORMER -> builder.addTwoWindingsTransformer(contingencyElementId); case THREE_WINDINGS_TRANSFORMER -> builder.addThreeWindingsTransformer(contingencyElementId); diff --git a/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/NetworkActionAdderImpl.java b/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/NetworkActionAdderImpl.java index 61d4cb9cc4..177369e140 100644 --- a/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/NetworkActionAdderImpl.java +++ b/data/crac/crac-impl/src/main/java/com/powsybl/openrao/data/crac/impl/NetworkActionAdderImpl.java @@ -12,7 +12,7 @@ import com.powsybl.openrao.commons.logs.OpenRaoLoggerProvider; import com.powsybl.openrao.data.crac.api.NetworkElement; import com.powsybl.openrao.data.crac.api.networkaction.AcEmulationDeactivationActionAdder; -import com.powsybl.openrao.data.crac.api.networkaction.DanglingLineActionAdder; +import com.powsybl.openrao.data.crac.api.networkaction.BoundaryLineActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.GeneratorActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.LoadActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction; @@ -74,8 +74,8 @@ public LoadActionAdder newLoadAction() { } @Override - public DanglingLineActionAdder newDanglingLineAction() { - return new DanglingLineActionAdderImpl(this); + public BoundaryLineActionAdder newBoundaryLineAction() { + return new BoundaryLineActionAdderImpl(this); } @Override diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/DanglingLineActionAdderImplTest.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/BoundaryLineActionAdderImplTest.java similarity index 69% rename from data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/DanglingLineActionAdderImplTest.java rename to data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/BoundaryLineActionAdderImplTest.java index dd1c08f4e3..f66475b010 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/DanglingLineActionAdderImplTest.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/BoundaryLineActionAdderImplTest.java @@ -7,10 +7,10 @@ package com.powsybl.openrao.data.crac.impl; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.openrao.commons.OpenRaoException; import com.powsybl.openrao.data.crac.api.Crac; -import com.powsybl.openrao.data.crac.api.networkaction.DanglingLineActionAdder; +import com.powsybl.openrao.data.crac.api.networkaction.BoundaryLineActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction; import com.powsybl.openrao.data.crac.api.networkaction.NetworkActionAdder; import org.junit.jupiter.api.BeforeEach; @@ -23,7 +23,7 @@ /** * @author Pauline JEAN-MARIE {@literal } */ -class DanglingLineActionAdderImplTest { +class BoundaryLineActionAdderImplTest { private Crac crac; private NetworkActionAdder networkActionAdder; @@ -39,15 +39,15 @@ public void setUp() { @Test void testOk() { - NetworkAction networkAction = networkActionAdder.newDanglingLineAction() + NetworkAction networkAction = networkActionAdder.newBoundaryLineAction() .withNetworkElement("groupNetworkElementId") .withActivePowerValue(100.) .add() .add(); - DanglingLineAction danglingLineAction = (DanglingLineAction) networkAction.getElementaryActions().iterator().next(); - assertEquals("groupNetworkElementId", danglingLineAction.getDanglingLineId()); - assertEquals(100., danglingLineAction.getActivePowerValue().getAsDouble(), 1e-3); + BoundaryLineAction boundaryLineAction = (BoundaryLineAction) networkAction.getElementaryActions().iterator().next(); + assertEquals("groupNetworkElementId", boundaryLineAction.getBoundaryLineId()); + assertEquals(100., boundaryLineAction.getActivePowerValue().getAsDouble(), 1e-3); // check that network element have been added to CracImpl assertEquals(1, ((CracImpl) crac).getNetworkElements().size()); @@ -56,18 +56,18 @@ void testOk() { @Test void testNoNetworkElement() { - DanglingLineActionAdder danglingLineActionAdder = networkActionAdder.newDanglingLineAction() + BoundaryLineActionAdder boundaryLineActionAdder = networkActionAdder.newBoundaryLineAction() .withActivePowerValue(100.); - Exception e = assertThrows(OpenRaoException.class, danglingLineActionAdder::add); - assertEquals("Cannot add DanglingLineAction without a network element. Please use withNetworkElement() with a non null value", e.getMessage()); + Exception e = assertThrows(OpenRaoException.class, boundaryLineActionAdder::add); + assertEquals("Cannot add BoundaryLineAction without a network element. Please use withNetworkElement() with a non null value", e.getMessage()); } @Test void testNoSetpoint() { - DanglingLineActionAdder danglingLineActionAdder = networkActionAdder.newDanglingLineAction() + BoundaryLineActionAdder boundaryLineActionAdder = networkActionAdder.newBoundaryLineAction() .withNetworkElement("groupNetworkElementId"); - Exception e = assertThrows(OpenRaoException.class, danglingLineActionAdder::add); - assertEquals("Cannot add DanglingLineAction without a activePowerValue. Please use withActivePowerValue() with a non null value", e.getMessage()); + Exception e = assertThrows(OpenRaoException.class, boundaryLineActionAdder::add); + assertEquals("Cannot add BoundaryLineAction without a activePowerValue. Please use withActivePowerValue() with a non null value", e.getMessage()); } } diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/DanglingLineActionImplTest.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/BoundaryLineActionImplTest.java similarity index 68% rename from data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/DanglingLineActionImplTest.java rename to data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/BoundaryLineActionImplTest.java index 5e36a7b1f0..8b51fe0907 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/DanglingLineActionImplTest.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/BoundaryLineActionImplTest.java @@ -7,8 +7,8 @@ package com.powsybl.openrao.data.crac.impl; -import com.powsybl.action.DanglingLineAction; -import com.powsybl.action.DanglingLineActionBuilder; +import com.powsybl.action.BoundaryLineAction; +import com.powsybl.action.BoundaryLineActionBuilder; import com.powsybl.iidm.network.Network; import com.powsybl.openrao.data.crac.api.Crac; import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction; @@ -26,13 +26,13 @@ /** * @author Pauline JEAN-MARIE {@literal } */ -class DanglingLineActionImplTest { +class BoundaryLineActionImplTest { @Test void basicMethods() { Crac crac = new CracImplFactory().create("cracId"); NetworkAction injectionSetpoint = crac.newNetworkAction() .withId("injectionSetpoint") - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("element") .withActivePowerValue(10.0) .add() @@ -44,64 +44,64 @@ void basicMethods() { @Test void hasImpactOnNetwork() { Network network = NetworkImportsUtil.import12NodesNetwork(); - NetworkImportsUtil.addDanglingLine(network); + NetworkImportsUtil.addBoundaryLine(network); Crac crac = new CracImplFactory().create("cracId"); - NetworkAction danglingLineSetpoint = crac.newNetworkAction() - .withId("danglingLineSetpoint") - .newDanglingLineAction() - .withNetworkElement("DL1") + NetworkAction boundaryLineSetpoint = crac.newNetworkAction() + .withId("boundaryLineSetpoint") + .newBoundaryLineAction() + .withNetworkElement("BL1") .withActivePowerValue(100) .add() .add(); - assertTrue(danglingLineSetpoint.hasImpactOnNetwork(network)); + assertTrue(boundaryLineSetpoint.hasImpactOnNetwork(network)); } @Test void hasNoImpactOnNetwork() { Network network = NetworkImportsUtil.import12NodesNetwork(); - NetworkImportsUtil.addDanglingLine(network); + NetworkImportsUtil.addBoundaryLine(network); Crac crac = new CracImplFactory().create("cracId"); - NetworkAction danglingLineSetpoint = crac.newNetworkAction() - .withId("danglingLineSetpoint") - .newDanglingLineAction() - .withNetworkElement("DL1") + NetworkAction boundaryLineSetpoint = crac.newNetworkAction() + .withId("boundaryLineSetpoint") + .newBoundaryLineAction() + .withNetworkElement("BL1") .withActivePowerValue(0) .add() .add(); - assertFalse(danglingLineSetpoint.hasImpactOnNetwork(network)); + assertFalse(boundaryLineSetpoint.hasImpactOnNetwork(network)); } @Test void apply() { Network network = NetworkImportsUtil.import12NodesNetwork(); - NetworkImportsUtil.addDanglingLine(network); + NetworkImportsUtil.addBoundaryLine(network); Crac crac = new CracImplFactory().create("cracId"); - NetworkAction danglingLineSetpoint = crac.newNetworkAction() - .withId("danglingLineSetpoint") - .newDanglingLineAction() - .withNetworkElement("DL1") + NetworkAction boundaryLineSetpoint = crac.newNetworkAction() + .withId("boundaryLineSetpoint") + .newBoundaryLineAction() + .withNetworkElement("BL1") .withActivePowerValue(100) .add() .add(); - assertEquals(0., network.getDanglingLine("DL1").getP0(), 1e-3); - danglingLineSetpoint.apply(network); - assertEquals(100., network.getDanglingLine("DL1").getP0(), 1e-3); + assertEquals(0., network.getBoundaryLine("BL1").getP0(), 1e-3); + boundaryLineSetpoint.apply(network); + assertEquals(100., network.getBoundaryLine("BL1").getP0(), 1e-3); } @Test void canBeApplied() { Network network = NetworkImportsUtil.import12NodesNetwork(); - NetworkImportsUtil.addDanglingLine(network); + NetworkImportsUtil.addBoundaryLine(network); Crac crac = new CracImplFactory().create("cracId"); - NetworkAction danglingLineSetpoint = crac.newNetworkAction() - .withId("danglingLineSetpoint") - .newDanglingLineAction() - .withNetworkElement("DL1") + NetworkAction boundaryLineSetpoint = crac.newNetworkAction() + .withId("boundaryLineSetpoint") + .newBoundaryLineAction() + .withNetworkElement("BL1") .withActivePowerValue(100) .add() .add(); - assertTrue(danglingLineSetpoint.canBeApplied(network)); // for now always true + assertTrue(boundaryLineSetpoint.canBeApplied(network)); // for now always true } @Test @@ -110,7 +110,7 @@ void hasImpactOnNetworkThrow() { Crac crac = new CracImplFactory().create("cracId"); NetworkAction dummy = crac.newNetworkAction() .withId("dummy") - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("wrong_name") .withActivePowerValue(100) .add() @@ -124,7 +124,7 @@ void equals() { Crac crac = new CracImplFactory().create("cracId"); NetworkAction dummy = crac.newNetworkAction() .withId("dummy") - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 1") .withActivePowerValue(10.) .add() @@ -133,11 +133,11 @@ void equals() { NetworkAction dummy2 = crac.newNetworkAction() .withId("dummy2") - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 2") .withActivePowerValue(12.) .add() - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 2") .withActivePowerValue(12.) .add() @@ -146,11 +146,11 @@ void equals() { NetworkAction dummy3 = crac.newNetworkAction() .withId("dummy3") - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 3") .withActivePowerValue(10.) .add() - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 3") .withActivePowerValue(12.) .add() @@ -159,22 +159,22 @@ void equals() { NetworkAction dummy4 = crac.newNetworkAction() .withId("dummy4") - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 4") .withActivePowerValue(10.) .add() - .newDanglingLineAction() + .newBoundaryLineAction() .withNetworkElement("BBE2AA1 BBE3AA1 5") .withActivePowerValue(10.) .add() .add(); assertEquals(2, dummy4.getElementaryActions().size()); - DanglingLineAction danglingLineAction = new DanglingLineActionBuilder().withId("id").withDanglingLineId("DL1").withActivePowerValue(10).withRelativeValue(false).build(); - DanglingLineAction sameDanglingLineAction = new DanglingLineActionBuilder().withId("id").withDanglingLineId("DL1").withActivePowerValue(10).withRelativeValue(false).build(); - assertEquals(danglingLineAction, sameDanglingLineAction); + BoundaryLineAction boundaryLineAction = new BoundaryLineActionBuilder().withId("id").withBoundaryLineId("BL1").withActivePowerValue(10).withRelativeValue(false).build(); + BoundaryLineAction sameBoundaryLineAction = new BoundaryLineActionBuilder().withId("id").withBoundaryLineId("BL1").withActivePowerValue(10).withRelativeValue(false).build(); + assertEquals(boundaryLineAction, sameBoundaryLineAction); NetworkAction dummy5 = new NetworkActionImpl("id", "name", "operator", null, - new HashSet<>(List.of(danglingLineAction, sameDanglingLineAction)), 0, null, Set.of()); + new HashSet<>(List.of(boundaryLineAction, sameBoundaryLineAction)), 0, null, Set.of()); assertEquals(1, dummy5.getElementaryActions().size()); } } diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImplTest.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImplTest.java index 1d50bfe48e..c4574751d2 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImplTest.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyAdderImplTest.java @@ -99,13 +99,13 @@ void testAddExistingSameContingency() { .withId("conId1") .withName("conName1") .withContingencyElement("neId1", ContingencyElementType.BATTERY) - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .add(); Contingency contingency2 = crac.newContingency() .withId("conId1") .withName("conName1") .withContingencyElement("neId1", ContingencyElementType.BATTERY) - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .add(); assertSame(contingency1, contingency2); } @@ -116,10 +116,10 @@ void testAddExistingSameContingencyOrderOfAddChanged() { .withId("conId1") .withName("conName1") .withContingencyElement("neId1", ContingencyElementType.BATTERY) - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .add(); Contingency contingency2 = crac.newContingency() - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .withContingencyElement("neId1", ContingencyElementType.BATTERY) .withName("conName1") .withId("conId1") @@ -133,14 +133,14 @@ void testAddExistingSameContingencyDuplicatedElements() { .withId("conId1") .withName("conName1") .withContingencyElement("neId1", ContingencyElementType.BATTERY) - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .add(); Contingency contingency2 = crac.newContingency() .withId("conId1") .withName("conName1") - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .withContingencyElement("neId1", ContingencyElementType.BATTERY) - .withContingencyElement("neId2", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId2", ContingencyElementType.BOUNDARY_LINE) .add(); assertSame(contingency1, contingency2); } @@ -211,7 +211,7 @@ void testDifferentTypeOfContingencyElement() { .withContingencyElement("neId4", ContingencyElementType.SHUNT_COMPENSATOR) .withContingencyElement("neId5", ContingencyElementType.HVDC_LINE) .withContingencyElement("neId6", ContingencyElementType.BUSBAR_SECTION) - .withContingencyElement("neId7", ContingencyElementType.DANGLING_LINE) + .withContingencyElement("neId7", ContingencyElementType.BOUNDARY_LINE) .withContingencyElement("neId8", ContingencyElementType.LINE) .withContingencyElement("neId10", ContingencyElementType.TWO_WINDINGS_TRANSFORMER) .withContingencyElement("neId11", ContingencyElementType.THREE_WINDINGS_TRANSFORMER) diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyTest.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyTest.java index b9186c3fb2..f157c70f7e 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyTest.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/ContingencyTest.java @@ -105,13 +105,13 @@ void testApplyOnGenerator() { } @Test - void testApplyOnDanglingLine() { + void testApplyOnBoundaryLine() { network = Network.read("TestCase12NodesHvdc.uct", getClass().getResourceAsStream("/TestCase12NodesHvdc.uct")); Contingency contingencyImpl = new Contingency("contingency", "contingency", Collections.singletonList(ContingencyElementFactory.create(network.getIdentifiable("BBE2AA1 XLI_OB1B 1")))); assertEquals(1, contingencyImpl.getElements().size()); - assertTrue(network.getDanglingLine("BBE2AA1 XLI_OB1B 1").getTerminal().isConnected()); + assertTrue(network.getBoundaryLine("BBE2AA1 XLI_OB1B 1").getTerminal().isConnected()); contingencyImpl.isValid(network); contingencyImpl.toModification().apply(network, computationManager); - assertFalse(network.getDanglingLine("BBE2AA1 XLI_OB1B 1").getTerminal().isConnected()); + assertFalse(network.getBoundaryLine("BBE2AA1 XLI_OB1B 1").getTerminal().isConnected()); } } diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/FlowCnecImplTest.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/FlowCnecImplTest.java index 3b615b0e96..59c891c2c5 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/FlowCnecImplTest.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/FlowCnecImplTest.java @@ -660,7 +660,7 @@ void testEqualsAndHashCode() { @Test void testIsConnected() { Network network = NetworkImportsUtil.import12NodesNetwork(); - NetworkImportsUtil.addDanglingLine(network); + NetworkImportsUtil.addBoundaryLine(network); // Branch FlowCnec cnec1 = crac.newFlowCnec().withId("cnec-1-id").withNetworkElement("BBE1AA1 BBE2AA1 1").withInstant(PREVENTIVE_INSTANT_ID) @@ -675,13 +675,13 @@ void testIsConnected() { network.getBranch("BBE1AA1 BBE2AA1 1").getTerminal2().disconnect(); assertFalse(cnec1.isConnected(network)); - // DanglingLine - FlowCnec cnec2 = crac.newFlowCnec().withId("cnec-2-id").withNetworkElement("DL1").withInstant(PREVENTIVE_INSTANT_ID) + // BoundaryLine + FlowCnec cnec2 = crac.newFlowCnec().withId("cnec-2-id").withNetworkElement("BL1").withInstant(PREVENTIVE_INSTANT_ID) .newThreshold().withUnit(MEGAWATT).withMax(1000.).withSide(ONE).add() .add(); assertTrue(cnec2.isConnected(network)); - network.getDanglingLine("DL1").getTerminal().disconnect(); + network.getBoundaryLine("BL1").getTerminal().disconnect(); assertFalse(cnec2.isConnected(network)); // Generator diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/GeneratorActionImplTest.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/GeneratorActionImplTest.java index 67314d8135..814ed1cff2 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/GeneratorActionImplTest.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/GeneratorActionImplTest.java @@ -166,8 +166,8 @@ void equals() { .add(); assertEquals(2, dummy4.getElementaryActions().size()); - GeneratorAction generatorAction = new GeneratorActionBuilder().withId("id").withGeneratorId("DL1").withActivePowerValue(10).withActivePowerRelativeValue(false).build(); - GeneratorAction sameGeneratorAction = new GeneratorActionBuilder().withId("id").withGeneratorId("DL1").withActivePowerValue(10).withActivePowerRelativeValue(false).build(); + GeneratorAction generatorAction = new GeneratorActionBuilder().withId("id").withGeneratorId("BL1").withActivePowerValue(10).withActivePowerRelativeValue(false).build(); + GeneratorAction sameGeneratorAction = new GeneratorActionBuilder().withId("id").withGeneratorId("BL1").withActivePowerValue(10).withActivePowerRelativeValue(false).build(); assertEquals(generatorAction, sameGeneratorAction); NetworkAction dummy5 = new NetworkActionImpl("id", "name", "operator", null, new HashSet<>(List.of(generatorAction, sameGeneratorAction)), 0, null, Set.of()); diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/ExhaustiveCracCreation.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/ExhaustiveCracCreation.java index b082d72e72..bf7013648c 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/ExhaustiveCracCreation.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/ExhaustiveCracCreation.java @@ -121,7 +121,7 @@ private static void createActions(Crac crac, String contingency1Id, String conti .withName("complexNetworkAction2Name") .withOperator("RTE") .newLoadAction().withActivePowerValue(260.0).withNetworkElement("LD1").add() - .newDanglingLineAction().withActivePowerValue(-120.0).withNetworkElement("DL1").add() + .newBoundaryLineAction().withActivePowerValue(-120.0).withNetworkElement("BL1").add() .newSwitchAction().withActionType(ActionType.OPEN).withNetworkElement("BR1").add() .newShuntCompensatorPositionAction().withSectionCount(13).withNetworkElement("SC1").add() .newOnFlowConstraintInCountryUsageRule().withInstant(CURATIVE_INSTANT_ID).withContingency("contingency2Id").withCountry(Country.FR).add() diff --git a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/NetworkImportsUtil.java b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/NetworkImportsUtil.java index 99820dc937..190794e1f4 100644 --- a/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/NetworkImportsUtil.java +++ b/data/crac/crac-impl/src/test/java/com/powsybl/openrao/data/crac/impl/utils/NetworkImportsUtil.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.impl.utils; import com.powsybl.iidm.network.Country; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.HvdcLine; import com.powsybl.iidm.network.Line; import com.powsybl.iidm.network.Network; @@ -118,12 +118,12 @@ public static void addHvdcLine(Network network) { .add(); } - public static void addDanglingLine(Network network) { + public static void addBoundaryLine(Network network) { VoltageLevel vl1 = network.getVoltageLevel("FFR1AA1"); vl1.getBusBreakerView().newBus().setId("B1").add(); - DanglingLine danglingLine = vl1.newDanglingLine() - .setId("DL1") - .setName("DL1") + BoundaryLine boundaryLine = vl1.newBoundaryLine() + .setId("BL1") + .setName("BL1") .setConnectableBus("B1") .setBus("B1") .setR(0.5) @@ -133,7 +133,7 @@ public static void addDanglingLine(Network network) { .setP0(0.) .setQ0(0.) .add(); - danglingLine.getTerminal() + boundaryLine.getTerminal() .setP(0.) .setQ(0.); } @@ -260,9 +260,9 @@ public static Network createNetworkForJsonRetrocompatibilityTest(double tapOffse .newLinearModel().setBPerSection(1E-2).setGPerSection(0.0).setMaximumSectionCount(2).add() .add(); shuntCompensator.getTerminal().setP(0.).setQ(0.); - DanglingLine danglingLine = vl1.newDanglingLine() - .setId("DL1") - .setName("DL1") + BoundaryLine boundaryLine = vl1.newBoundaryLine() + .setId("BL1") + .setName("BL1") .setConnectableBus("B1") .setBus("B1") .setR(0.5) @@ -272,7 +272,7 @@ public static Network createNetworkForJsonRetrocompatibilityTest(double tapOffse .setP0(0.) .setQ0(0.) .add(); - danglingLine.getTerminal() + boundaryLine.getTerminal() .setP(0.) .setQ(0.); diff --git a/data/crac/crac-io/crac-io-cim/src/main/java/com/powsybl/openrao/data/crac/io/cim/craccreator/CimContingencyCreator.java b/data/crac/crac-io/crac-io-cim/src/main/java/com/powsybl/openrao/data/crac/io/cim/craccreator/CimContingencyCreator.java index b30b2e696b..16cfac88b8 100644 --- a/data/crac/crac-io/crac-io-cim/src/main/java/com/powsybl/openrao/data/crac/io/cim/craccreator/CimContingencyCreator.java +++ b/data/crac/crac-io/crac-io-cim/src/main/java/com/powsybl/openrao/data/crac/io/cim/craccreator/CimContingencyCreator.java @@ -9,7 +9,7 @@ import com.powsybl.contingency.ContingencyElementFactory; import com.powsybl.contingency.ContingencyElementType; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.TieLine; @@ -136,8 +136,8 @@ private Identifiable getNetworkElementInNetwork(String networkElementIdInCrac networkElementToReturn = networkElement; } - if (networkElement instanceof DanglingLine danglingLine) { - Optional optionalTieLine = danglingLine.getTieLine(); + if (networkElement instanceof BoundaryLine boundaryLine) { + Optional optionalTieLine = boundaryLine.getTieLine(); if (optionalTieLine.isPresent()) { networkElementToReturn = optionalTieLine.get(); } diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ConnectableType.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ConnectableType.java index 8e50e5f48e..f239d87d95 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ConnectableType.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ConnectableType.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.io.commons; import com.powsybl.iidm.network.Branch; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.HvdcLine; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.Switch; @@ -22,7 +22,7 @@ public enum ConnectableType { INTERNAL_LINE, TIE_LINE, - DANGLING_LINE, + BOUNDARY_LINE, VOLTAGE_TRANSFORMER, PST, HVDC, @@ -33,8 +33,8 @@ public static ConnectableType getType(Identifiable iidmConnectable) { if (iidmConnectable instanceof TieLine) { return ConnectableType.TIE_LINE; - } else if (iidmConnectable instanceof DanglingLine) { - return ConnectableType.DANGLING_LINE; + } else if (iidmConnectable instanceof BoundaryLine) { + return ConnectableType.BOUNDARY_LINE; } else if (iidmConnectable instanceof TwoWindingsTransformer twt) { if (twt.getPhaseTapChanger() != null) { return ConnectableType.PST; diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/cgmes/CgmesBranchHelper.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/cgmes/CgmesBranchHelper.java index 863f5d904d..6830049e69 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/cgmes/CgmesBranchHelper.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/cgmes/CgmesBranchHelper.java @@ -56,12 +56,12 @@ protected void interpret(Network network) { if (Objects.isNull(branch)) { // check if it's a half line for (TieLine tieLine : network.getTieLines()) { - if (tieLine.getDanglingLine1().getId().equals(mrId)) { + if (tieLine.getBoundaryLine1().getId().equals(mrId)) { isHalfLine = true; tieLineSide = TwoSides.ONE; branch = tieLine; return; - } else if (tieLine.getDanglingLine2().getId().equals(mrId)) { + } else if (tieLine.getBoundaryLine2().getId().equals(mrId)) { isHalfLine = true; tieLineSide = TwoSides.TWO; branch = tieLine; diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelper.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelper.java index 1300febf99..cca370457f 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelper.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelper.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.io.commons.iidm; import com.powsybl.iidm.network.Branch; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.TieLine; @@ -129,12 +129,12 @@ private boolean interpretAsNetworkIdentifiable(Network network) { if (cnecElement instanceof Branch branch) { checkBranchNominalVoltage(branch); checkBranchCurrentLimits(branch); - } else if (cnecElement instanceof DanglingLine danglingLine) { - if (danglingLine.isPaired()) { + } else if (cnecElement instanceof BoundaryLine boundaryLine) { + if (boundaryLine.isPaired()) { return interpretAsHalfLine(network); } - checkDanglingLineNominalVoltage(danglingLine); - checkDanglingLineCurrentLimits(danglingLine); + checkBoundaryLineNominalVoltage(boundaryLine); + checkBoundaryLineCurrentLimits(boundaryLine); } else { invalidate(String.format("iidm element %s of class %s is not suited to be a Cnec", branchId, cnecElement.getClass())); } @@ -142,7 +142,7 @@ private boolean interpretAsNetworkIdentifiable(Network network) { } private boolean interpretAsHalfLine(Network network) { - Optional tieLine = ((DanglingLine) network.getIdentifiable(branchId)).getTieLine(); + Optional tieLine = ((BoundaryLine) network.getIdentifiable(branchId)).getTieLine(); if (tieLine.isEmpty()) { return false; @@ -150,7 +150,7 @@ private boolean interpretAsHalfLine(Network network) { this.branchIdInNetwork = tieLine.get().getId(); this.isHalfLine = true; - this.halfLineSide = tieLine.get().getDanglingLine1().getId().equals(branchId) ? TwoSides.ONE : TwoSides.TWO; + this.halfLineSide = tieLine.get().getBoundaryLine1().getId().equals(branchId) ? TwoSides.ONE : TwoSides.TWO; checkBranchNominalVoltage(tieLine.get()); checkBranchCurrentLimits(tieLine.get()); // todo: check if halfLine can be inverted in CGMES format @@ -162,8 +162,8 @@ private void checkBranchNominalVoltage(Branch branch) { this.nominalVoltageRight = branch.getTerminal2().getVoltageLevel().getNominalV(); } - private void checkDanglingLineNominalVoltage(DanglingLine danglingLine) { - this.nominalVoltageLeft = danglingLine.getTerminal().getVoltageLevel().getNominalV(); + private void checkBoundaryLineNominalVoltage(BoundaryLine boundaryLine) { + this.nominalVoltageLeft = boundaryLine.getTerminal().getVoltageLevel().getNominalV(); this.nominalVoltageRight = nominalVoltageLeft; } @@ -185,12 +185,12 @@ private void checkBranchCurrentLimits(Branch branch) { } } - private void checkDanglingLineCurrentLimits(DanglingLine danglingLine) { - if (danglingLine.getCurrentLimits().isPresent()) { - this.currentLimitLeft = danglingLine.getCurrentLimits().orElseThrow().getPermanentLimit(); + private void checkBoundaryLineCurrentLimits(BoundaryLine boundaryLine) { + if (boundaryLine.getCurrentLimits().isPresent()) { + this.currentLimitLeft = boundaryLine.getCurrentLimits().orElseThrow().getPermanentLimit(); this.currentLimitRight = currentLimitLeft; } else { - invalidate(String.format("couldn't identify current limits of dangling line (%s, networkDanglingLineId: %s)", branchId, danglingLine.getId())); + invalidate(String.format("couldn't identify current limits of boundary line (%s, networkBoundaryLineId: %s)", branchId, boundaryLine.getId())); } } diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectable.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectable.java index 08ae863535..af1f965739 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectable.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectable.java @@ -15,7 +15,7 @@ /** * A UcteConnectable refers to a network element which connect two buses of a UCTE network. - * For instance, tie-line, dangling-line, transformers and switch are UcteConnectables. + * For instance, tie-line, boundary-line, transformers and switch are UcteConnectables. * * The UcteConnectable class store the iidm Identifiable of the Connectable, as well as some * UCTE information about this Identifiable (fromNode, toNode, orderCode,...). diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollection.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollection.java index b25bfe4040..3c2f100ff1 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollection.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollection.java @@ -45,7 +45,7 @@ class UcteConnectableCollection { UcteConnectableCollection(Network network) { connectables = TreeMultimap.create(Ordering.natural().nullsFirst(), Ordering.natural().nullsFirst()); addBranches(network); - addDanglingLines(network); + addBoundaryLines(network); addSwitches(network); addHvdcs(network); } @@ -221,19 +221,19 @@ private void addSingleBranch(Branch branch) { } } - private void addDanglingLines(Network network) { - network.getDanglingLineStream().filter(danglingLine -> !danglingLine.isPaired()).forEach(danglingLine -> { - // A dangling line is an Injection with a generator convention. - // After an UCTE import, the flow on the dangling line is therefore always from the X_NODE to the other node. - String xNode = danglingLine.getPairingKey(); - String rNode = getNodeName(danglingLine.getTerminal().getBusBreakerView().getConnectableBus().getId()); + private void addBoundaryLines(Network network) { + network.getBoundaryLineStream().filter(boundaryLine -> !boundaryLine.isPaired()).forEach(boundaryLine -> { + // A boundary line is an Injection with a generator convention. + // After an UCTE import, the flow on the boundary line is therefore always from the X_NODE to the other node. + String xNode = boundaryLine.getPairingKey(); + String rNode = getNodeName(boundaryLine.getTerminal().getBusBreakerView().getConnectableBus().getId()); - if (danglingLine.getId().startsWith("X")) { + if (boundaryLine.getId().startsWith("X")) { // UCTE definition is in the same direction as iidm definition - connectables.put(xNode, new UcteConnectable(xNode, rNode, getOrderCode(danglingLine), getElementNames(danglingLine), danglingLine, false)); + connectables.put(xNode, new UcteConnectable(xNode, rNode, getOrderCode(boundaryLine), getElementNames(boundaryLine), boundaryLine, false)); } else { // UCTE definition is opposite as the iidm definition - connectables.put(rNode, new UcteConnectable(rNode, xNode, getOrderCode(danglingLine), getElementNames(danglingLine), danglingLine, true)); + connectables.put(rNode, new UcteConnectable(rNode, xNode, getOrderCode(boundaryLine), getElementNames(boundaryLine), boundaryLine, true)); } }); } diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelper.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelper.java index 7943caf6ca..30880b74fc 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelper.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelper.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.io.commons.ucte; import com.powsybl.iidm.network.Branch; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.TieLine; import com.powsybl.iidm.network.TwoSides; @@ -145,9 +145,9 @@ protected void interpretWithNetworkAnalyzer(UcteNetworkAnalyzer networkAnalyzer) interpretTieLine(tieLine, ucteMatchingResult.getSide() == TWO ? TwoSides.TWO : TwoSides.ONE); } else if (networkElement instanceof Branch branch) { checkBranchNominalVoltage(branch); - checkBranchCurrentLimits(branch); - } else if (networkElement instanceof DanglingLine danglingLine) { - interpretDanglingLine(danglingLine); + checkBoundaryCurrentLimits(branch); + } else if (networkElement instanceof BoundaryLine boundaryLine) { + interpretBoundaryLine(boundaryLine); } } @@ -175,27 +175,27 @@ protected void checkBranchNominalVoltage(Branch branch) { this.nominalVoltageRight = branch.getTerminal2().getVoltageLevel().getNominalV(); } - private void interpretDanglingLine(DanglingLine danglingLine) { - Optional optionalTieLine = danglingLine.getTieLine(); + private void interpretBoundaryLine(BoundaryLine boundaryLine) { + Optional optionalTieLine = boundaryLine.getTieLine(); if (optionalTieLine.isPresent()) { TieLine tieLine = optionalTieLine.get(); this.connectableIdInNetwork = tieLine.getId(); - TwoSides side = tieLine.getDanglingLine1() == danglingLine ? TwoSides.ONE : TwoSides.TWO; - // dangling line convention is x node to terminal, so dl 1 is towards terminal 1 (opposite) and dl 2 is towards terminal 2 (direct) - this.isInvertedInNetwork = tieLine.getDanglingLine1() == danglingLine ? !isInvertedInNetwork : isInvertedInNetwork; + TwoSides side = tieLine.getBoundaryLine1() == boundaryLine ? TwoSides.ONE : TwoSides.TWO; + // boundary line convention is x node to terminal, so bl 1 is towards terminal 1 (opposite) and bl 2 is towards terminal 2 (direct) + this.isInvertedInNetwork = tieLine.getBoundaryLine1() == boundaryLine ? !isInvertedInNetwork : isInvertedInNetwork; interpretTieLine(tieLine, side); } else { - checkDanglingLineNominalVoltage(danglingLine); - checkDanglingLineCurrentLimits(danglingLine); + checkBoundaryLineNominalVoltage(boundaryLine); + checkBoundaryLineCurrentLimits(boundaryLine); } } - protected void checkDanglingLineNominalVoltage(DanglingLine danglingLine) { - this.nominalVoltageLeft = danglingLine.getTerminal().getVoltageLevel().getNominalV(); + protected void checkBoundaryLineNominalVoltage(BoundaryLine boundaryLine) { + this.nominalVoltageLeft = boundaryLine.getTerminal().getVoltageLevel().getNominalV(); this.nominalVoltageRight = nominalVoltageLeft; } - protected void checkBranchCurrentLimits(Branch branch) { + protected void checkBoundaryCurrentLimits(Branch branch) { if (branch.getCurrentLimits1().isPresent()) { this.currentLimitLeft = branch.getCurrentLimits1().orElseThrow().getPermanentLimit(); } @@ -213,12 +213,12 @@ protected void checkBranchCurrentLimits(Branch branch) { } } - protected void checkDanglingLineCurrentLimits(DanglingLine danglingLine) { - if (danglingLine.getCurrentLimits().isPresent()) { - this.currentLimitLeft = danglingLine.getCurrentLimits().orElseThrow().getPermanentLimit(); + protected void checkBoundaryLineCurrentLimits(BoundaryLine boundaryLine) { + if (boundaryLine.getCurrentLimits().isPresent()) { + this.currentLimitLeft = boundaryLine.getCurrentLimits().orElseThrow().getPermanentLimit(); this.currentLimitRight = currentLimitLeft; } else { - invalidate(format("couldn't identify current limits of dangling line (%s, networkDanglingLineId: %s)", connectableId, danglingLine.getId())); + invalidate(format("couldn't identify current limits of boundary line (%s, networkBoundaryLineId: %s)", connectableId, boundaryLine.getId())); } } diff --git a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteNetworkAnalyzer.java b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteNetworkAnalyzer.java index 8c32081759..83eb359bc2 100644 --- a/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteNetworkAnalyzer.java +++ b/data/crac/crac-io/crac-io-commons/src/main/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteNetworkAnalyzer.java @@ -42,19 +42,19 @@ public UcteNetworkAnalyzerProperties getProperties() { public UcteMatchingResult findContingencyElement(String from, String to, String suffix) { return connectablesInNetwork.lookForConnectable(completeNodeName(from), completeNodeName(to), suffix, properties, - ConnectableType.INTERNAL_LINE, ConnectableType.TIE_LINE, ConnectableType.DANGLING_LINE, + ConnectableType.INTERNAL_LINE, ConnectableType.TIE_LINE, ConnectableType.BOUNDARY_LINE, ConnectableType.VOLTAGE_TRANSFORMER, ConnectableType.PST, ConnectableType.HVDC, ConnectableType.SWITCH); } public UcteMatchingResult findFlowElement(String from, String to, String suffix) { return connectablesInNetwork.lookForConnectable(completeNodeName(from), completeNodeName(to), suffix, properties, - ConnectableType.INTERNAL_LINE, ConnectableType.TIE_LINE, ConnectableType.DANGLING_LINE, + ConnectableType.INTERNAL_LINE, ConnectableType.TIE_LINE, ConnectableType.BOUNDARY_LINE, ConnectableType.VOLTAGE_TRANSFORMER, ConnectableType.PST); } public UcteMatchingResult findTopologicalElement(String from, String to, String suffix) { return connectablesInNetwork.lookForConnectable(completeNodeName(from), completeNodeName(to), suffix, properties, - ConnectableType.INTERNAL_LINE, ConnectableType.TIE_LINE, ConnectableType.DANGLING_LINE, + ConnectableType.INTERNAL_LINE, ConnectableType.TIE_LINE, ConnectableType.BOUNDARY_LINE, ConnectableType.VOLTAGE_TRANSFORMER, ConnectableType.PST, ConnectableType.SWITCH); } diff --git a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelperTest.java b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelperTest.java index 1fd4d11516..4d416dc9f5 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelperTest.java +++ b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/iidm/IidmCnecElementHelperTest.java @@ -114,9 +114,9 @@ void testInvalidTransformer() { } @Test - void testValidDanglingLine() { + void testValidBoundaryLine() { - // dangling-line with order code + // boundary-line with order code IidmCnecElementHelper cnecHelper = new IidmCnecElementHelper("BBE2AA1 XBE2AL1 1", network); assertTrue(cnecHelper.isValid()); assertEquals("BBE2AA1 XBE2AL1 1", cnecHelper.getIdInNetwork()); @@ -131,8 +131,8 @@ void testValidDanglingLine() { } @Test - void testInvalidDanglingLine() { - // dangling-line exists but not with this order code + void testInvalidBoundaryLine() { + // boundary-line exists but not with this order code assertFalse(new IidmCnecElementHelper("XBE2AL1 BBE2AA1 2", network).isValid()); } diff --git a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollectionTest.java b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollectionTest.java index aef8feebd0..e2097ec38d 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollectionTest.java +++ b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteConnectableCollectionTest.java @@ -247,36 +247,36 @@ void testInvalidTieLine() { assertFalse(ucteConnectableCollection.lookForConnectable("NNL2AA1 ", "XNLBE11 ", "COUCOU", ucteNetworkAnalyzerProperties, ConnectableType.TIE_LINE).hasMatched()); // tie-line exists but not with this type - assertFalse(ucteConnectableCollection.lookForConnectable("XFRDE11 ", "FFR2AA1 ", "1", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE).hasMatched()); + assertFalse(ucteConnectableCollection.lookForConnectable("XFRDE11 ", "FFR2AA1 ", "1", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE).hasMatched()); } @Test - void testValidDanglingLine() { + void testValidBoundaryLine() { init("TestCase_severalVoltageLevels_Xnodes.uct"); UcteNetworkAnalyzerProperties ucteNetworkAnalyzerProperties = new UcteNetworkAnalyzerProperties(UcteNetworkAnalyzerProperties.BusIdMatchPolicy.COMPLETE_WITH_WHITESPACES); - // dangling-line with order code - UcteMatchingResult result = ucteConnectableCollection.lookForConnectable("BBE2AA1 ", "XBE2AL1 ", "1", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE); + // boundary-line with order code + UcteMatchingResult result = ucteConnectableCollection.lookForConnectable("BBE2AA1 ", "XBE2AL1 ", "1", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE); assertTrue(result.hasMatched()); assertTrue(result.isInverted()); assertEquals(UcteConnectable.Side.BOTH, result.getSide()); assertSame(network.getIdentifiable("BBE2AA1 XBE2AL1 1"), result.getIidmIdentifiable()); - result = ucteConnectableCollection.lookForConnectable("XBE2AL1 ", "BBE2AA1 ", "1", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE); + result = ucteConnectableCollection.lookForConnectable("XBE2AL1 ", "BBE2AA1 ", "1", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE); assertTrue(result.hasMatched()); assertFalse(result.isInverted()); assertEquals(UcteConnectable.Side.BOTH, result.getSide()); assertSame(network.getIdentifiable("BBE2AA1 XBE2AL1 1"), result.getIidmIdentifiable()); - // dangling-line with element name - result = ucteConnectableCollection.lookForConnectable("XDE2AL1*", "DDE2AA1*", "DL AL", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE); + // boundary-line with element name + result = ucteConnectableCollection.lookForConnectable("XDE2AL1*", "DDE2AA1*", "BL AL", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE); assertTrue(result.hasMatched()); assertFalse(result.isInverted()); assertEquals(UcteConnectable.Side.BOTH, result.getSide()); assertSame(network.getIdentifiable("XDE2AL1 DDE2AA1 1"), result.getIidmIdentifiable()); - result = ucteConnectableCollection.lookForConnectable("DDE2AA1*", "XDE2AL1*", "DL AL", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE); + result = ucteConnectableCollection.lookForConnectable("DDE2AA1*", "XDE2AL1*", "BL AL", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE); assertTrue(result.hasMatched()); assertTrue(result.isInverted()); assertEquals(UcteConnectable.Side.BOTH, result.getSide()); @@ -284,17 +284,17 @@ void testValidDanglingLine() { } @Test - void testInvalidDanglingLine() { + void testInvalidBoundaryLine() { init("TestCase_severalVoltageLevels_Xnodes.uct"); UcteNetworkAnalyzerProperties ucteNetworkAnalyzerProperties = new UcteNetworkAnalyzerProperties(UcteNetworkAnalyzerProperties.BusIdMatchPolicy.COMPLETE_WITH_WHITESPACES); - // dangling-line exists but not with this order code - assertFalse(ucteConnectableCollection.lookForConnectable("XBE2AL1 ", "BBE2AA1 ", "2", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE).hasMatched()); + // boundary-line exists but not with this order code + assertFalse(ucteConnectableCollection.lookForConnectable("XBE2AL1 ", "BBE2AA1 ", "2", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE).hasMatched()); - // dangling-line exists but not with this element name - assertFalse(ucteConnectableCollection.lookForConnectable("DDE2AA1 ", "XDE2AL1 ", "COUCOU", ucteNetworkAnalyzerProperties, ConnectableType.DANGLING_LINE).hasMatched()); + // boundary-line exists but not with this element name + assertFalse(ucteConnectableCollection.lookForConnectable("DDE2AA1 ", "XDE2AL1 ", "COUCOU", ucteNetworkAnalyzerProperties, ConnectableType.BOUNDARY_LINE).hasMatched()); - // dangling-line exists but not with this type + // boundary-line exists but not with this type assertFalse(ucteConnectableCollection.lookForConnectable("XBE2AL1 ", "BBE2AA1 ", "2", ucteNetworkAnalyzerProperties, ConnectableType.INTERNAL_LINE).hasMatched()); } diff --git a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelperTest.java b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelperTest.java index 33c11d99f9..d9b3ecf5ce 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelperTest.java +++ b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteFlowElementHelperTest.java @@ -388,10 +388,10 @@ void testInvalidTieLine() { } @Test - void testValidDanglingLine() { + void testValidBoundaryLine() { setUp("TestCase_severalVoltageLevels_Xnodes.uct"); - // dangling-line with order code + // boundary-line with order code UcteFlowElementHelper branchHelper = new UcteFlowElementHelper("BBE2AA1 ", "XBE2AL1 ", "1", null, networkHelper); assertTrue(branchHelper.isValid()); assertEquals("BBE2AA1 XBE2AL1 1", branchHelper.getIdInNetwork()); @@ -408,8 +408,8 @@ void testValidDanglingLine() { assertFalse(branchHelper.isInvertedInNetwork()); assertFalse(branchHelper.isHalfLine()); - // dangling-line with element name - branchHelper = new UcteFlowElementHelper("XDE2AL1 ", "DDE2AA1 ", null, "DL AL", networkHelper); + // boundary-line with element name + branchHelper = new UcteFlowElementHelper("XDE2AL1 ", "DDE2AA1 ", null, "BL AL", networkHelper); assertTrue(branchHelper.isValid()); assertEquals("XDE2AL1 DDE2AA1 1", branchHelper.getIdInNetwork()); assertFalse(branchHelper.isInvertedInNetwork()); @@ -419,7 +419,7 @@ void testValidDanglingLine() { assertEquals(1245, branchHelper.getCurrentLimit(TwoSides.ONE), DOUBLE_TOLERANCE); assertEquals(1245, branchHelper.getCurrentLimit(TwoSides.TWO), DOUBLE_TOLERANCE); - branchHelper = new UcteFlowElementHelper("DDE2AA1 ", "XDE2AL1 ", null, "DL AL", networkHelper); + branchHelper = new UcteFlowElementHelper("DDE2AA1 ", "XDE2AL1 ", null, "BL AL", networkHelper); assertTrue(branchHelper.isValid()); assertEquals("XDE2AL1 DDE2AA1 1", branchHelper.getIdInNetwork()); assertTrue(branchHelper.isInvertedInNetwork()); @@ -427,13 +427,13 @@ void testValidDanglingLine() { } @Test - void testInvalidDanglingLine() { + void testInvalidBoundaryLine() { setUp("TestCase_severalVoltageLevels_Xnodes.uct"); - // dangling-line exists but not with this order code + // boundary-line exists but not with this order code assertFalse(new UcteFlowElementHelper("XBE2AL1 ", "BBE2AA1 ", "2", null, networkHelper).isValid()); - // dangling-line exists but not with this element name + // boundary-line exists but not with this element name assertFalse(new UcteFlowElementHelper("DDE2AA1 ", "XDE2AL1 ", null, "COUCOU", networkHelper).isValid()); } @@ -461,8 +461,8 @@ void testWithSevenCharacters() { assertTrue(branchReader.isValid()); assertEquals("FFR1AA2 FFR1AA1 5", branchReader.getIdInNetwork()); - // dangling line with element name, 7 characters in from and to - branchReader = new UcteFlowElementHelper("DDE2AA1", "XDE2AL1", null, "DL AL", networkHelper); + // boundary line with element name, 7 characters in from and to + branchReader = new UcteFlowElementHelper("DDE2AA1", "XDE2AL1", null, "BL AL", networkHelper); assertTrue(branchReader.isValid()); assertEquals("XDE2AL1 DDE2AA1 1", branchReader.getIdInNetwork()); } diff --git a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteTopologicalElementHelperTest.java b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteTopologicalElementHelperTest.java index b83a371937..b835539fbb 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteTopologicalElementHelperTest.java +++ b/data/crac/crac-io/crac-io-commons/src/test/java/com/powsybl/openrao/data/crac/io/commons/ucte/UcteTopologicalElementHelperTest.java @@ -44,7 +44,7 @@ void testOtherValidTopologicalElements() { assertTrue(new UcteTopologicalElementHelper("DDE1AA12", "DDE2AA11", "1", null, networkHelper).isValid()); assertTrue(new UcteTopologicalElementHelper("XBEFR321", "BBE1AA21", null, "TL BE1X", networkHelper).isValid()); - assertTrue(new UcteTopologicalElementHelper("XDE2AL11", "DDE2AA11", null, "DL AL", networkHelper).isValid()); + assertTrue(new UcteTopologicalElementHelper("XDE2AL11", "DDE2AA11", null, "BL AL", networkHelper).isValid()); assertTrue(new UcteTopologicalElementHelper("FFR3AA11", "FFR3AA21", "1", null, networkHelper).isValid()); assertTrue(new UcteTopologicalElementHelper("BBE3AA12", "BBE2AA11", null, "PST BE", networkHelper).isValid()); } diff --git a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_PstAmbiguity.uct b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_PstAmbiguity.uct index 1d3b280e4a..65cbe4b6e1 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_PstAmbiguity.uct +++ b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_PstAmbiguity.uct @@ -60,7 +60,7 @@ XBEFR22 FFR3AA2 1 0 0.0000 10.000 0.000000 1000 BBE1AA2 XBEFR32 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA2 XBEFR32 1 0 0.0000 10.000 0.000000 1000 BBE2AA1 XBE2AL1 1 0 0.0000 10.000 0.000000 1250 -XDE2AL1 DDE2AA1 1 0 0.0000 10.000 0.000000 1245 DL AL +XDE2AL1 DDE2AA1 1 0 0.0000 10.000 0.000000 1245 BL AL ##T BBE2AA13 BBE2AA11 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 4500 PST BE BBE2AA12 BBE2AA11 2 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 4500 PST BE diff --git a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes.uct b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes.uct index b7a95cd090..04abaf190a 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes.uct +++ b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes.uct @@ -57,7 +57,7 @@ XBEFR22 FFR3AA2 1 0 0.0000 10.000 0.000000 1000 BBE1AA2 XBEFR32 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA2 XBEFR32 1 0 0.0000 10.000 0.000000 1000 BBE2AA1 XBE2AL1 1 0 0.0000 10.000 0.000000 1250 -XDE2AL1 DDE2AA1 1 0 0.0000 10.000 0.000000 1245 DL AL +XDE2AL1 DDE2AA1 1 0 0.0000 10.000 0.000000 1245 BL AL ##T BBE2AA1 BBE3AA1 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 4500 PST BE BBE1AA1 BBE1AA2 1 0 400.0 225.0 300.0 3.5790 141.29 0.000000 0.0000 1000 TR BE1 diff --git a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters.uct b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters.uct index f988188e04..594d3ecd63 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters.uct +++ b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters.uct @@ -61,7 +61,7 @@ XBEFR221 FFR3AA21 1 0 0.0000 10.000 0.000000 1000 BBE1AA21 XBEFR321 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA24 XBEFR321 1 0 0.0000 10.000 0.000000 1000 BBE2AA11 XBE2AL11 1 0 0.0000 10.000 0.000000 1000 -XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 DL AL +XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 BL AL ##T BBE2AA11 BBE3AA12 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 5000 PST BE BBE1AA11 BBE1AA21 1 0 400.0 225.0 300.0 3.5790 141.29 0.000000 0.0000 1000 TR BE1 diff --git a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters_priority.uct b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters_priority.uct index 467a7a30c6..186bdc2ddc 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters_priority.uct +++ b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_8characters_priority.uct @@ -61,7 +61,7 @@ XBEFR221 FFR3AA21 1 0 0.0000 10.000 0.000000 1000 BBE1AA21 XBEFR321 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA24 XBEFR321 1 0 0.0000 10.000 0.000000 1000 BBE2AA11 XBE2AL11 1 0 0.0000 10.000 0.000000 1000 -XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 DL AL +XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 BL AL ##T BBE2AA11 BBE3AA12 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 5000 PST BE BBE1AA11 BBE1AA21 1 0 400.0 225.0 300.0 3.5790 141.29 0.000000 0.0000 1000 TR BE1 diff --git a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_Ynode.uct b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_Ynode.uct index af879706be..63ba4288e8 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_Ynode.uct +++ b/data/crac/crac-io/crac-io-commons/src/test/resources/TestCase_severalVoltageLevels_Xnodes_Ynode.uct @@ -60,7 +60,7 @@ XBEFR221 FFR3AA21 1 0 0.0000 10.000 0.000000 1000 BBE1AA21 XBEFR321 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA24 XBEFR321 1 0 0.0000 10.000 0.000000 1000 BBE2AA11 XBE2AL11 1 0 0.0000 10.000 0.000000 1000 -XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 DL AL +XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 BL AL ##T BBE2AA11 BBE3AA12 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 5000 PST BE BBE1AA11 BBE1AA21 1 0 400.0 225.0 300.0 3.5790 141.29 0.000000 0.0000 1000 TR BE1 diff --git a/data/crac/crac-io/crac-io-commons/src/test/resources/network_with_dangling_lines.xiidm b/data/crac/crac-io/crac-io-commons/src/test/resources/network_with_dangling_lines.xiidm index 52bdc1103c..fa99efb19e 100644 --- a/data/crac/crac-io/crac-io-commons/src/test/resources/network_with_dangling_lines.xiidm +++ b/data/crac/crac-io/crac-io-commons/src/test/resources/network_with_dangling_lines.xiidm @@ -265,7 +265,7 @@ - + diff --git a/data/crac/crac-io/crac-io-fb-constraint/src/main/java/com/powsybl/openrao/data/crac/io/fbconstraint/OutageReader.java b/data/crac/crac-io/crac-io-fb-constraint/src/main/java/com/powsybl/openrao/data/crac/io/fbconstraint/OutageReader.java index 324c07462c..45a260ad0f 100644 --- a/data/crac/crac-io/crac-io-fb-constraint/src/main/java/com/powsybl/openrao/data/crac/io/fbconstraint/OutageReader.java +++ b/data/crac/crac-io/crac-io-fb-constraint/src/main/java/com/powsybl/openrao/data/crac/io/fbconstraint/OutageReader.java @@ -9,7 +9,7 @@ import com.powsybl.contingency.ContingencyElementFactory; import com.powsybl.contingency.ContingencyElementType; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Network; import com.powsybl.openrao.data.crac.api.ContingencyAdder; import com.powsybl.openrao.data.crac.api.Crac; @@ -89,21 +89,21 @@ private void interpretWithNetwork(UcteNetworkAnalyzer ucteNetworkHelper) { if (!outage.getHvdcVH().isEmpty()) { outage.getHvdcVH().forEach(hvdcVH -> { - DanglingLine dl1 = findDanglingLineWithXnode(hvdcVH.getFrom(), ucteNetworkHelper.getNetwork()); - DanglingLine dl2 = findDanglingLineWithXnode(hvdcVH.getTo(), ucteNetworkHelper.getNetwork()); + BoundaryLine bl1 = findBoundaryLineWithXnode(hvdcVH.getFrom(), ucteNetworkHelper.getNetwork()); + BoundaryLine bl2 = findBoundaryLineWithXnode(hvdcVH.getTo(), ucteNetworkHelper.getNetwork()); - if (Objects.isNull(dl1) || Objects.isNull(dl2)) { + if (Objects.isNull(bl1) || Objects.isNull(bl2)) { this.isOutageValid = false; this.invalidOutageReason = String.format("one of the two Xnodes of outage %s was not found in the network: %s, %s", outage.getId(), hvdcVH.getFrom(), hvdcVH.getTo()); } else { - outageElementIdsAndContingencyType.put(dl1.getId(), ContingencyElementFactory.create(dl1).getType()); - outageElementIdsAndContingencyType.put(dl2.getId(), ContingencyElementFactory.create(dl2).getType()); + outageElementIdsAndContingencyType.put(bl1.getId(), ContingencyElementFactory.create(bl1).getType()); + outageElementIdsAndContingencyType.put(bl2.getId(), ContingencyElementFactory.create(bl2).getType()); } }); } } - private DanglingLine findDanglingLineWithXnode(String xNodeId, Network network) { - return network.getDanglingLineStream().filter(danglingLine -> danglingLine.getPairingKey().equals(xNodeId)).findFirst().orElse(null); + private BoundaryLine findBoundaryLineWithXnode(String xNodeId, Network network) { + return network.getBoundaryLineStream().filter(boundaryLine -> boundaryLine.getPairingKey().equals(xNodeId)).findFirst().orElse(null); } } diff --git a/data/crac/crac-io/crac-io-fb-constraint/src/test/resources/network/TestCase_severalVoltageLevels_Xnodes.uct b/data/crac/crac-io/crac-io-fb-constraint/src/test/resources/network/TestCase_severalVoltageLevels_Xnodes.uct index 0ad07646c8..0d8efd6e18 100644 --- a/data/crac/crac-io/crac-io-fb-constraint/src/test/resources/network/TestCase_severalVoltageLevels_Xnodes.uct +++ b/data/crac/crac-io/crac-io-fb-constraint/src/test/resources/network/TestCase_severalVoltageLevels_Xnodes.uct @@ -57,7 +57,7 @@ XBEFR22 FFR3AA2 1 0 0.0000 10.000 0.000000 1000 BBE1AA2 XBEFR32 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA2 XBEFR32 1 0 0.0000 10.000 0.000000 1000 BBE2AA1 XBE2AL1 1 0 0.0000 10.000 0.000000 1000 -XDE2AL1 DDE2AA1 1 0 0.0000 10.000 0.000000 1000 DL AL +XDE2AL1 DDE2AA1 1 0 0.0000 10.000 0.000000 1000 BL AL ##T BBE2AA1 BBE3AA1 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 5000 PST BE BBE1AA1 BBE1AA2 1 0 400.0 225.0 300.0 3.5790 141.29 0.000000 0.0000 1000 TR BE1 diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/JsonSerializationConstants.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/JsonSerializationConstants.java index 4693a1184f..2f3f554cf2 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/JsonSerializationConstants.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/JsonSerializationConstants.java @@ -43,7 +43,7 @@ public final class JsonSerializationConstants { private JsonSerializationConstants() { } - public static final String CRAC_IO_VERSION = "2.9"; + public static final String CRAC_IO_VERSION = "2.10"; /* v1.1: addition of switchPairs v1.2: addition of injectionRangeAction @@ -64,6 +64,7 @@ private JsonSerializationConstants() { v2.7: addition of timestamp v2.8: removal of range actions' initial set-point and FlowCNECs' iMax, optional ranges for PST range actions, deletion of usage methods v2.9: add acEmulationDeactivationAction + v2.10: renaming of danglingLineActions to boundaryLineActions */ // headers @@ -128,6 +129,7 @@ private JsonSerializationConstants() { public static final String GENERATOR_ACTIONS = "generatorActions"; public static final String LOAD_ACTIONS = "loadActions"; public static final String DANGLINGLINE_ACTIONS = "danglingLineActions"; + public static final String BOUNDARYLINE_ACTIONS = "boundaryLineActions"; public static final String SHUNTCOMPENSATOR_POSITION_ACTIONS = "shuntCompensatorPositionActions"; public static final String PHASETAPCHANGER_TAPPOSITION_ACTIONS = "phaseTapChangerTapPositionActions"; public static final String SWITCH_PAIRS = "switchPairs"; diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/DanglingLineActionArrayDeserializer.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/BoundaryLineActionArrayDeserializer.java similarity index 82% rename from data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/DanglingLineActionArrayDeserializer.java rename to data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/BoundaryLineActionArrayDeserializer.java index cb6f4982a8..8c586251df 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/DanglingLineActionArrayDeserializer.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/BoundaryLineActionArrayDeserializer.java @@ -10,14 +10,14 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.powsybl.openrao.commons.OpenRaoException; -import com.powsybl.openrao.data.crac.api.networkaction.DanglingLineActionAdder; +import com.powsybl.openrao.data.crac.api.networkaction.BoundaryLineActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.NetworkActionAdder; import java.io.IOException; import java.util.Map; import static com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants.ACTIVE_POWER_VALUE; -import static com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants.DANGLINGLINE_ACTIONS; +import static com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants.BOUNDARYLINE_ACTIONS; import static com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants.NETWORK_ELEMENTS_NAME_PER_ID; import static com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants.NETWORK_ELEMENT_ID; import static com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants.deserializeNetworkElement; @@ -25,18 +25,18 @@ /** * @author Pauline JEAN-MARIE {@literal } */ -public final class DanglingLineActionArrayDeserializer { - private DanglingLineActionArrayDeserializer() { +public final class BoundaryLineActionArrayDeserializer { + private BoundaryLineActionArrayDeserializer() { } public static void deserialize(JsonParser jsonParser, NetworkActionAdder ownerAdder, Map networkElementsNamesPerId) throws IOException { if (networkElementsNamesPerId == null) { - throw new OpenRaoException(String.format("Cannot deserialize %s before %s", DANGLINGLINE_ACTIONS, NETWORK_ELEMENTS_NAME_PER_ID)); + throw new OpenRaoException(String.format("Cannot deserialize %s before %s", BOUNDARYLINE_ACTIONS, NETWORK_ELEMENTS_NAME_PER_ID)); } while (jsonParser.nextToken() != JsonToken.END_ARRAY) { - DanglingLineActionAdder adder = ownerAdder.newDanglingLineAction(); + BoundaryLineActionAdder adder = ownerAdder.newBoundaryLineAction(); while (!jsonParser.nextToken().isStructEnd()) { - switch (jsonParser.getCurrentName()) { + switch (jsonParser.currentName()) { case NETWORK_ELEMENT_ID: deserializeNetworkElement(jsonParser.nextTextValue(), networkElementsNamesPerId, adder); break; @@ -45,7 +45,7 @@ public static void deserialize(JsonParser jsonParser, NetworkActionAdder ownerAd adder.withActivePowerValue(jsonParser.getDoubleValue()); break; default: - throw new OpenRaoException("Unexpected field in DanglingLineAction: " + jsonParser.getCurrentName()); + throw new OpenRaoException("Unexpected field in BoundaryLineAction: " + jsonParser.currentName()); } } adder.add(); diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/InjectionSetpointArrayDeserializer.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/InjectionSetpointArrayDeserializer.java index 71a12eb410..a5cc720d46 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/InjectionSetpointArrayDeserializer.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/InjectionSetpointArrayDeserializer.java @@ -13,7 +13,7 @@ import com.powsybl.iidm.network.Network; import com.powsybl.openrao.commons.OpenRaoException; import com.powsybl.openrao.commons.Unit; -import com.powsybl.openrao.data.crac.api.networkaction.DanglingLineActionAdder; +import com.powsybl.openrao.data.crac.api.networkaction.BoundaryLineActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.GeneratorActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.LoadActionAdder; import com.powsybl.openrao.data.crac.api.networkaction.NetworkActionAdder; @@ -84,14 +84,14 @@ public static void deserialize(JsonParser jsonParser, NetworkActionAdder ownerAd } loadActionAdder.add(); break; - case DANGLING_LINE: + case BOUNDARY_LINE: checkExpectedUnit(Unit.MEGAWATT, unit, identifiable); - DanglingLineActionAdder danglingLineActionAdder = ownerAdder.newDanglingLineAction(); - JsonSerializationConstants.deserializeNetworkElement(networkElementId, networkElementsNamesPerId, danglingLineActionAdder); + BoundaryLineActionAdder boundaryLineActionAdder = ownerAdder.newBoundaryLineAction(); + JsonSerializationConstants.deserializeNetworkElement(networkElementId, networkElementsNamesPerId, boundaryLineActionAdder); if (setpoint != null) { - danglingLineActionAdder.withActivePowerValue(setpoint); + boundaryLineActionAdder.withActivePowerValue(setpoint); } - danglingLineActionAdder.add(); + boundaryLineActionAdder.add(); break; case SHUNT_COMPENSATOR: checkExpectedUnit(Unit.SECTION_COUNT, unit, identifiable); @@ -104,7 +104,7 @@ public static void deserialize(JsonParser jsonParser, NetworkActionAdder ownerAd break; default: throw new OpenRaoException( - "InjectionSetpoint actions must be on network element of type generator, load, dangling line or shunt compensator, but here it is " + identifiable.getType() + "InjectionSetpoint actions must be on network element of type generator, load, boundary line or shunt compensator, but here it is " + identifiable.getType() ); } } diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/NetworkActionArrayDeserializer.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/NetworkActionArrayDeserializer.java index c864b76023..cc264c655c 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/NetworkActionArrayDeserializer.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/deserializers/NetworkActionArrayDeserializer.java @@ -32,7 +32,7 @@ public static void deserialize(JsonParser jsonParser, String version, Crac crac, while (jsonParser.nextToken() != JsonToken.END_ARRAY) { NetworkActionAdder networkActionAdder = crac.newNetworkAction(); while (!jsonParser.nextToken().isStructEnd()) { - switch (jsonParser.getCurrentName()) { + switch (jsonParser.currentName()) { case JsonSerializationConstants.ID: networkActionAdder.withId(jsonParser.nextTextValue()); break; @@ -108,7 +108,7 @@ public static void deserialize(JsonParser jsonParser, String version, Crac crac, JsonSerializationConstants.INJECTION_SETPOINTS, JsonSerializationConstants.GENERATOR_ACTIONS, JsonSerializationConstants.LOAD_ACTIONS, - JsonSerializationConstants.DANGLINGLINE_ACTIONS, + JsonSerializationConstants.BOUNDARYLINE_ACTIONS, JsonSerializationConstants.SHUNTCOMPENSATOR_POSITION_ACTIONS )); } else { @@ -137,8 +137,20 @@ public static void deserialize(JsonParser jsonParser, String version, Crac crac, LoadActionArrayDeserializer.deserialize(jsonParser, networkActionAdder, networkElementsNamesPerId); break; case JsonSerializationConstants.DANGLINGLINE_ACTIONS: + int majorVersion = JsonSerializationConstants.getPrimaryVersionNumber(version); + if (majorVersion == 1 || majorVersion == 2 && JsonSerializationConstants.getSubVersionNumber(version) <= 9) { + jsonParser.nextToken(); + BoundaryLineActionArrayDeserializer.deserialize(jsonParser, networkActionAdder, networkElementsNamesPerId); + break; + } else { + throw new OpenRaoException("%s were renamed to %s from version 2.10.".formatted(JsonSerializationConstants.DANGLINGLINE_ACTIONS, JsonSerializationConstants.BOUNDARYLINE_ACTIONS)); + } + case JsonSerializationConstants.BOUNDARYLINE_ACTIONS: + if (JsonSerializationConstants.getPrimaryVersionNumber(version) == 1 || JsonSerializationConstants.getPrimaryVersionNumber(version) == 2 && JsonSerializationConstants.getSubVersionNumber(version) <= 9) { + throw new OpenRaoException("Unexpected field in NetworkAction: " + jsonParser.currentName()); + } jsonParser.nextToken(); - DanglingLineActionArrayDeserializer.deserialize(jsonParser, networkActionAdder, networkElementsNamesPerId); + BoundaryLineActionArrayDeserializer.deserialize(jsonParser, networkActionAdder, networkElementsNamesPerId); break; case JsonSerializationConstants.SHUNTCOMPENSATOR_POSITION_ACTIONS: jsonParser.nextToken(); @@ -163,7 +175,7 @@ public static void deserialize(JsonParser jsonParser, String version, Crac crac, networkActionAdder.withActivationCost(jsonParser.getDoubleValue()); break; default: - throw new OpenRaoException("Unexpected field in NetworkAction: " + jsonParser.getCurrentName()); + throw new OpenRaoException("Unexpected field in NetworkAction: " + jsonParser.currentName()); } } networkActionAdder.add(); diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/DanglingLineActionSerializer.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/BoundaryLineActionSerializer.java similarity index 79% rename from data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/DanglingLineActionSerializer.java rename to data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/BoundaryLineActionSerializer.java index f67bac9ff6..ea821be9b5 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/DanglingLineActionSerializer.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/BoundaryLineActionSerializer.java @@ -9,7 +9,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.openrao.data.crac.io.json.JsonSerializationConstants; import java.io.IOException; @@ -17,11 +17,11 @@ /** * @author Pauline JEAN-MARIE {@literal } */ -public class DanglingLineActionSerializer extends AbstractJsonSerializer { +public class BoundaryLineActionSerializer extends AbstractJsonSerializer { @Override - public void serialize(DanglingLineAction value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + public void serialize(BoundaryLineAction value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeStartObject(); - gen.writeStringField(JsonSerializationConstants.NETWORK_ELEMENT_ID, value.getDanglingLineId()); + gen.writeStringField(JsonSerializationConstants.NETWORK_ELEMENT_ID, value.getBoundaryLineId()); gen.writeNumberField(JsonSerializationConstants.ACTIVE_POWER_VALUE, value.getActivePowerValue().getAsDouble()); gen.writeEndObject(); } diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/CracJsonSerializerModule.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/CracJsonSerializerModule.java index 58ab5eeb04..b0d6a37ed0 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/CracJsonSerializerModule.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/CracJsonSerializerModule.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.io.json.serializers; import com.fasterxml.jackson.databind.module.SimpleModule; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.HvdcAction; import com.powsybl.action.LoadAction; @@ -68,7 +68,7 @@ public CracJsonSerializerModule() { this.addSerializer(PhaseTapChangerTapPositionAction.class, new PhaseTapChangerTapPositionActionSerializer()); this.addSerializer(GeneratorAction.class, new GeneratorActionSerializer()); this.addSerializer(LoadAction.class, new LoadActionSerializer()); - this.addSerializer(DanglingLineAction.class, new DanglingLineActionSerializer()); + this.addSerializer(BoundaryLineAction.class, new BoundaryLineActionSerializer()); this.addSerializer(ShuntCompensatorPositionAction.class, new ShuntCompensatorPositionActionSerializer()); this.addSerializer(SwitchPair.class, new SwitchPairSerializer()); this.addSerializer(Instant.class, new InstantSerializer()); diff --git a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/NetworkActionSerializer.java b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/NetworkActionSerializer.java index 596ac46968..c626ecae81 100644 --- a/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/NetworkActionSerializer.java +++ b/data/crac/crac-io/crac-io-json/src/main/java/com/powsybl/openrao/data/crac/io/json/serializers/NetworkActionSerializer.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; import com.powsybl.action.Action; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.HvdcAction; import com.powsybl.action.LoadAction; @@ -45,7 +45,7 @@ public void serialize(NetworkAction value, JsonGenerator gen, SerializerProvider serializeElementaryActions(value, PhaseTapChangerTapPositionAction.class, JsonSerializationConstants.PHASETAPCHANGER_TAPPOSITION_ACTIONS, gen); serializeElementaryActions(value, GeneratorAction.class, JsonSerializationConstants.GENERATOR_ACTIONS, gen); serializeElementaryActions(value, LoadAction.class, JsonSerializationConstants.LOAD_ACTIONS, gen); - serializeElementaryActions(value, DanglingLineAction.class, JsonSerializationConstants.DANGLINGLINE_ACTIONS, gen); + serializeElementaryActions(value, BoundaryLineAction.class, JsonSerializationConstants.BOUNDARYLINE_ACTIONS, gen); serializeElementaryActions(value, ShuntCompensatorPositionAction.class, JsonSerializationConstants.SHUNTCOMPENSATOR_POSITION_ACTIONS, gen); serializeElementaryActions(value, SwitchPair.class, JsonSerializationConstants.SWITCH_PAIRS, gen); serializeElementaryActions(value, HvdcAction.class, JsonSerializationConstants.AC_EMULATION_DEACTIVATION_ACTIONS, gen); diff --git a/data/crac/crac-io/crac-io-json/src/main/resources/schemas/boundary-line-action/boundary-line-action-v2.10.json b/data/crac/crac-io/crac-io-json/src/main/resources/schemas/boundary-line-action/boundary-line-action-v2.10.json new file mode 100644 index 0000000000..232f5ea2ac --- /dev/null +++ b/data/crac/crac-io/crac-io-json/src/main/resources/schemas/boundary-line-action/boundary-line-action-v2.10.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema#", + "$id": "resource:/schemas/boundary-line-action/boundary-line-action-v2.10.json", + "type": "object", + "properties": { + "networkElementId": { + "type": "string" + }, + "activePowerValue": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "networkElementId", + "activePowerValue" + ] +} diff --git a/data/crac/crac-io/crac-io-json/src/main/resources/schemas/crac/crac-v2.10.json b/data/crac/crac-io/crac-io-json/src/main/resources/schemas/crac/crac-v2.10.json new file mode 100644 index 0000000000..a4bf014746 --- /dev/null +++ b/data/crac/crac-io/crac-io-json/src/main/resources/schemas/crac/crac-v2.10.json @@ -0,0 +1,112 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema#", + "$id": "resource:/schemas/crac/crac-v2.10.json", + "title": "CRAC", + "description": "Contingency list, Remedial Actions and additional Constraints", + "type": "object", + "properties": { + "type": { + "const": "CRAC" + }, + "version": { + "const": "2.10" + }, + "info": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "instants": { + "type": "array", + "items": { + "$ref": "../instant/instant-v2.0.json" + } + }, + "ra-usage-limits-per-instant": { + "type": "array", + "items": { + "$ref": "../ra-usage-limits-per-instant/ra-usage-limits-per-instant-v2.1.json" + } + }, + "networkElementsNamePerId": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "contingencies": { + "type": "array", + "items": { + "$ref": "../contingency/contingency-v1.0.json" + } + }, + "flowCnecs": { + "type": "array", + "items": { + "items": { + "$ref": "../flow-cnec/flow-cnec-v2.8.json" + } + } + }, + "angleCnecs": { + "type": "array", + "items": { + "items": { + "$ref": "../angle-cnec/angle-cnec-v1.4.json" + } + } + }, + "voltageCnecs": { + "type": "array", + "items": { + "items": { + "$ref": "../voltage-cnec/voltage-cnec-v1.5.json" + } + } + }, + "pstRangeActions": { + "type": "array", + "items": { + "$ref": "../pst-range-action/pst-range-action-v2.8.json" + } + }, + "hvdcRangeActions": { + "type": "array", + "items": { + "$ref": "../hvdc-range-action/hvdc-range-action-v2.8.json" + } + }, + "injectionRangeActions": { + "type": "array", + "items": { + "$ref": "../injection-range-action/injection-range-action-v2.8.json" + } + }, + "counterTradeRangeActions": { + "type": "array", + "items": { + "$ref": "../counter-trade-range-action/counter-trade-range-action-v2.8.json" + } + }, + "networkActions": { + "type": "array", + "items": { + "$ref": "../network-action/network-action-v2.10.json" + } + } + }, + "additionalProperties": false, + "required": [ + "type", + "version", + "id", + "name" + ] +} diff --git a/data/crac/crac-io/crac-io-json/src/main/resources/schemas/network-action/network-action-v2.10.json b/data/crac/crac-io/crac-io-json/src/main/resources/schemas/network-action/network-action-v2.10.json new file mode 100644 index 0000000000..3edb48e57f --- /dev/null +++ b/data/crac/crac-io/crac-io-json/src/main/resources/schemas/network-action/network-action-v2.10.json @@ -0,0 +1,111 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema#", + "$id": "resource:/schemas/network-action/network-action-v2.10.json", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "operator": { + "type": [ + "string", + "null" + ] + }, + "activationCost": "number", + "variationCosts": { + "$ref": "../variation-costs/variation-costs-v2.6.json" + }, + "speed": { + "type": "number" + }, + "terminalsConnectionActions": { + "type": "array", + "items": { + "$ref": "../terminals-connection-action/terminals-connection-action-v2.5.json" + } + }, + "phaseTapChangerTapPositionActions": { + "type": "array", + "items": { + "$ref": "../phase-tap-changer-position-action/phase-tap-changer-position-action-v2.5.json" + } + }, + "generatorActions": { + "type": "array", + "items": { + "$ref": "../generator-action/generator-action-v2.5.json" + } + }, + "loadActions": { + "type": "array", + "items": { + "$ref": "../load-action/load-action-v2.5.json" + } + }, + "boundaryLineActions": { + "type": "array", + "items": { + "$ref": "../boundary-line-action/boundary-line-action-v2.10.json" + } + }, + "shuntCompensatorPositionActions": { + "type": "array", + "items": { + "$ref": "../shunt-compensator-position-action/shunt-compensator-position-action-v2.5.json" + } + }, + "switchActions": { + "type": "array", + "items": { + "$ref": "../switch-action/switch-action-v2.5.json" + } + }, + "switchPairs": { + "type": "array", + "items": { + "$ref": "../switch-pair/switch-pair-v1.1.json" + } + }, + "acEmulationDeactivationActions": { + "type": "array", + "items": { + "$ref": "../ac-emulation-deactivation-action/ac-emulation-deactivation-action-v2.9.json" + } + }, + "onInstantUsageRules": { + "type": "array", + "items": { + "$ref": "../on-instant-usage-rule/on-instant-usage-rule-v2.8.json" + } + }, + "onContingencyStateUsageRules": { + "type": "array", + "items": { + "$ref": "../on-contingency-state-usage-rule/on-contingency-state-usage-rule-v2.8.json" + } + }, + "onConstraintUsageRules": { + "type": "array", + "items": { + "$ref": "../on-constraint-usage-rule/on-constraint-usage-rule-v2.8.json" + } + }, + "onFlowConstraintInCountryUsageRules": { + "type": "array", + "items": { + "$ref": "../on-flow-constraint-in-country-usage-rule/on-flow-constraint-in-country-usage-rule-v2.8.json" + } + } + }, + "additionalProperties": false, + "required": [ + "id" + ] +} diff --git a/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/CracImportExportTest.java b/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/CracImportExportTest.java index 4899ee77a1..eb628bb36d 100644 --- a/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/CracImportExportTest.java +++ b/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/CracImportExportTest.java @@ -11,7 +11,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import com.powsybl.action.Action; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.HvdcAction; import com.powsybl.action.LoadAction; @@ -66,6 +66,7 @@ import static com.powsybl.openrao.data.crac.io.json.RoundTripUtil.implicitJsonRoundTrip; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; @@ -487,41 +488,41 @@ private static void testNetworkActions(Crac crac, Instant preventiveInstant, Ins // check elementaryActions assertEquals(1, crac.getNetworkAction("pstSetpointRaId").getElementaryActions().size()); Action pstAction = crac.getNetworkAction("pstSetpointRaId").getElementaryActions().iterator().next(); - assertTrue(pstAction instanceof PhaseTapChangerTapPositionAction); + assertInstanceOf(PhaseTapChangerTapPositionAction.class, pstAction); assertEquals("pst", ((PhaseTapChangerTapPositionAction) pstAction).getTransformerId()); assertEquals(1, crac.getNetworkAction("injectionSetpointRaId").getElementaryActions().size()); Action ra1Action = crac.getNetworkAction("injectionSetpointRaId").getElementaryActions().iterator().next(); - assertTrue(ra1Action instanceof GeneratorAction); + assertInstanceOf(GeneratorAction.class, ra1Action); assertEquals("injection", ((GeneratorAction) ra1Action).getGeneratorId()); assertEquals(2, crac.getNetworkAction("complexNetworkActionId").getElementaryActions().size()); - List raComplexActions = crac.getNetworkAction("complexNetworkActionId").getElementaryActions().stream().toList(); - assertTrue(raComplexActions.get(0) instanceof PhaseTapChangerTapPositionAction); + List raComplexActions = crac.getNetworkAction("complexNetworkActionId").getElementaryActions().stream().sorted(Comparator.comparing(Action::getId)).toList(); + assertInstanceOf(PhaseTapChangerTapPositionAction.class, raComplexActions.get(0)); assertEquals("pst", ((PhaseTapChangerTapPositionAction) raComplexActions.get(0)).getTransformerId()); - assertTrue(raComplexActions.get(1) instanceof TerminalsConnectionAction); + assertInstanceOf(TerminalsConnectionAction.class, raComplexActions.get(1)); assertEquals("ne1Id", ((TerminalsConnectionAction) raComplexActions.get(1)).getElementId()); assertEquals(4, crac.getNetworkAction("complexNetworkAction2Id").getElementaryActions().size()); - List raComplex2Actions = crac.getNetworkAction("complexNetworkAction2Id").getElementaryActions().stream().toList(); - assertTrue(raComplex2Actions.get(0) instanceof DanglingLineAction); - assertEquals("DL1", ((DanglingLineAction) raComplex2Actions.get(0)).getDanglingLineId()); - assertTrue(raComplex2Actions.get(1) instanceof LoadAction); + List raComplex2Actions = crac.getNetworkAction("complexNetworkAction2Id").getElementaryActions().stream().sorted(Comparator.comparing(Action::getId)).toList(); + assertInstanceOf(BoundaryLineAction.class, raComplex2Actions.get(0)); + assertEquals("BL1", ((BoundaryLineAction) raComplex2Actions.get(0)).getBoundaryLineId()); + assertInstanceOf(LoadAction.class, raComplex2Actions.get(1)); assertEquals("LD1", ((LoadAction) raComplex2Actions.get(1)).getLoadId()); - assertTrue(raComplex2Actions.get(2) instanceof SwitchAction); - assertEquals("BR1", ((SwitchAction) raComplex2Actions.get(2)).getSwitchId()); - assertTrue(raComplex2Actions.get(3) instanceof ShuntCompensatorPositionAction); - assertEquals("SC1", ((ShuntCompensatorPositionAction) raComplex2Actions.get(3)).getShuntCompensatorId()); + assertInstanceOf(ShuntCompensatorPositionAction.class, raComplex2Actions.get(2)); + assertEquals("SC1", ((ShuntCompensatorPositionAction) raComplex2Actions.get(2)).getShuntCompensatorId()); + assertInstanceOf(SwitchAction.class, raComplex2Actions.get(3)); + assertEquals("BR1", ((SwitchAction) raComplex2Actions.get(3)).getSwitchId()); assertEquals(1, crac.getNetworkAction("acEmulationDeactivationId").getElementaryActions().size()); Action hvdcAction = crac.getNetworkAction("acEmulationDeactivationId").getElementaryActions().iterator().next(); - assertTrue(hvdcAction instanceof HvdcAction); + assertInstanceOf(HvdcAction.class, hvdcAction); assertEquals("hvdc", ((HvdcAction) hvdcAction).getHvdcId()); assertEquals(1, crac.getNetworkAction("acEmulationDeactivationId").getUsageRules().size()); assertEquals(1, crac.getNetworkAction("acEmulationDeactivationId2").getElementaryActions().size()); Action hvdcAction2 = crac.getNetworkAction("acEmulationDeactivationId2").getElementaryActions().iterator().next(); - assertTrue(hvdcAction2 instanceof HvdcAction); + assertInstanceOf(HvdcAction.class, hvdcAction2); assertEquals("hvdc2", ((HvdcAction) hvdcAction2).getHvdcId()); assertEquals(3, crac.getNetworkAction("acEmulationDeactivationId2").getUsageRules().size()); diff --git a/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/JsonRetrocompatibilityTest.java b/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/JsonRetrocompatibilityTest.java index 5a7d4bda9e..515017387d 100644 --- a/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/JsonRetrocompatibilityTest.java +++ b/data/crac/crac-io/crac-io-json/src/test/java/com/powsybl/openrao/data/crac/io/json/JsonRetrocompatibilityTest.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.io.json; import com.powsybl.action.Action; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.LoadAction; import com.powsybl.action.PhaseTapChangerTapPositionAction; @@ -51,6 +51,7 @@ import java.io.InputStream; import java.time.OffsetDateTime; import java.time.ZoneOffset; +import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -60,6 +61,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; @@ -912,21 +914,21 @@ private void testContentOfV2Point4Crac(Crac crac) { assertEquals("injection", ((GeneratorAction) ra1It.next()).getGeneratorId()); assertEquals(4, crac.getNetworkAction("complexNetworkAction2Id").getElementaryActions().size()); - List ra2Actions = crac.getNetworkAction("complexNetworkAction2Id").getElementaryActions().stream().toList(); - assertTrue(ra2Actions.get(0) instanceof DanglingLineAction); - assertEquals("DL1", ((DanglingLineAction) ra2Actions.get(0)).getDanglingLineId()); - assertTrue(ra2Actions.get(1) instanceof LoadAction); + List ra2Actions = crac.getNetworkAction("complexNetworkAction2Id").getElementaryActions().stream().sorted(Comparator.comparing(Action::getId)).toList(); + assertInstanceOf(BoundaryLineAction.class, ra2Actions.get(0)); + assertEquals("BL1", ((BoundaryLineAction) ra2Actions.get(0)).getBoundaryLineId()); + assertInstanceOf(LoadAction.class, ra2Actions.get(1)); assertEquals("LD1", ((LoadAction) ra2Actions.get(1)).getLoadId()); - assertTrue(ra2Actions.get(2) instanceof SwitchAction); - assertEquals("BR1", ((SwitchAction) ra2Actions.get(2)).getSwitchId()); - assertTrue(ra2Actions.get(3) instanceof ShuntCompensatorPositionAction); - assertEquals("SC1", ((ShuntCompensatorPositionAction) ra2Actions.get(3)).getShuntCompensatorId()); + assertInstanceOf(ShuntCompensatorPositionAction.class, ra2Actions.get(2)); + assertEquals("SC1", ((ShuntCompensatorPositionAction) ra2Actions.get(2)).getShuntCompensatorId()); + assertInstanceOf(SwitchAction.class, ra2Actions.get(3)); + assertEquals("BR1", ((SwitchAction) ra2Actions.get(3)).getSwitchId()); assertEquals(2, crac.getNetworkAction("complexNetworkActionId").getElementaryActions().size()); - List raCompleActions = crac.getNetworkAction("complexNetworkActionId").getElementaryActions().stream().toList(); - assertTrue(raCompleActions.get(0) instanceof PhaseTapChangerTapPositionAction); + List raCompleActions = crac.getNetworkAction("complexNetworkActionId").getElementaryActions().stream().sorted(Comparator.comparing(Action::getId)).toList(); + assertInstanceOf(PhaseTapChangerTapPositionAction.class, raCompleActions.get(0)); assertEquals("pst", ((PhaseTapChangerTapPositionAction) raCompleActions.get(0)).getTransformerId()); - assertTrue(raCompleActions.get(1) instanceof TerminalsConnectionAction); + assertInstanceOf(TerminalsConnectionAction.class, raCompleActions.get(1)); assertEquals("ne1Id", ((TerminalsConnectionAction) raCompleActions.get(1)).getElementId()); } diff --git a/data/crac/crac-io/crac-io-json/src/test/resources/cracTwoInjectionOneGenerator.json b/data/crac/crac-io/crac-io-json/src/test/resources/cracTwoInjectionOneGenerator.json index 67180411bd..5ad9844d35 100644 --- a/data/crac/crac-io/crac-io-json/src/test/resources/cracTwoInjectionOneGenerator.json +++ b/data/crac/crac-io/crac-io-json/src/test/resources/cracTwoInjectionOneGenerator.json @@ -490,7 +490,7 @@ "activePowerValue" : 260.0 } ], "danglingLineActions" : [ { - "networkElementId" : "DL1", + "networkElementId" : "BL1", "activePowerValue" : -120.0 } ], "shuntCompensatorPositionActions" : [ { diff --git a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.4.json b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.4.json index e33871ea41..75fc8ad0b5 100644 --- a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.4.json +++ b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.4.json @@ -507,7 +507,7 @@ "setpoint" : 260.0, "unit" : "megawatt" },{ - "networkElementId" : "DL1", + "networkElementId" : "BL1", "setpoint" : -120.0, "unit" : "megawatt" }, { diff --git a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.5.json b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.5.json index 3f6d7509e6..bfe7536884 100644 --- a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.5.json +++ b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.5.json @@ -504,7 +504,7 @@ "activePowerValue" : 260.0 } ], "danglingLineActions" : [ { - "networkElementId" : "DL1", + "networkElementId" : "BL1", "activePowerValue" : -120.0 } ], "shuntCompensatorPositionActions" : [ { diff --git a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.6.json b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.6.json index ad6217a7a1..976b90c259 100644 --- a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.6.json +++ b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.6.json @@ -523,7 +523,7 @@ "activePowerValue" : 260.0 } ], "danglingLineActions" : [ { - "networkElementId" : "DL1", + "networkElementId" : "BL1", "activePowerValue" : -120.0 } ], "shuntCompensatorPositionActions" : [ { diff --git a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.7.json b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.7.json index 26dbe05ab5..a89e39de0d 100644 --- a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.7.json +++ b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.7.json @@ -484,7 +484,7 @@ "activePowerValue" : 260.0 } ], "danglingLineActions" : [ { - "networkElementId" : "DL1", + "networkElementId" : "BL1", "activePowerValue" : -120.0 } ], "shuntCompensatorPositionActions" : [ { diff --git a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.8.json b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.8.json index 549fa80cff..dd0f7ece97 100644 --- a/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.8.json +++ b/data/crac/crac-io/crac-io-json/src/test/resources/retrocompatibility/v2/crac-v2.8.json @@ -449,7 +449,7 @@ "activePowerValue" : 260.0 } ], "danglingLineActions" : [ { - "networkElementId" : "DL1", + "networkElementId" : "BL1", "activePowerValue" : -120.0 } ], "shuntCompensatorPositionActions" : [ { diff --git a/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/AbstractCnecCreator.java b/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/AbstractCnecCreator.java index 588d493deb..b90180533c 100644 --- a/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/AbstractCnecCreator.java +++ b/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/AbstractCnecCreator.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.data.crac.io.nc.craccreator.cnec; import com.powsybl.contingency.Contingency; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.Network; @@ -85,8 +85,8 @@ protected Identifiable getNetworkElementInNetwork(String networkElementId) { } } - if (networkElement instanceof DanglingLine danglingLine) { - Optional optionalTieLine = danglingLine.getTieLine(); + if (networkElement instanceof BoundaryLine boundaryLine) { + Optional optionalTieLine = boundaryLine.getTieLine(); if (optionalTieLine.isPresent()) { networkElement = optionalTieLine.get(); } diff --git a/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/FlowCnecCreator.java b/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/FlowCnecCreator.java index 7b5443f8ce..694892cfb5 100644 --- a/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/FlowCnecCreator.java +++ b/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/craccreator/cnec/FlowCnecCreator.java @@ -154,11 +154,11 @@ private TwoSides getSideFromNetworkElement(Identifiable networkElement, Strin private TwoSides getSideFromTieLine(TieLine tieLine, String terminalId) { for (String key : CURRENT_LIMIT_POSSIBLE_ALIASES_BY_TYPE_TIE_LINE) { - Optional oAlias = tieLine.getDanglingLine1().getAliasFromType(key); + Optional oAlias = tieLine.getBoundaryLine1().getAliasFromType(key); if (oAlias.isPresent() && oAlias.get().equals(terminalId)) { return TwoSides.ONE; } - oAlias = tieLine.getDanglingLine2().getAliasFromType(key); + oAlias = tieLine.getBoundaryLine2().getAliasFromType(key); if (oAlias.isPresent() && oAlias.get().equals(terminalId)) { return TwoSides.TWO; } diff --git a/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/objects/ContingencyEquipment.java b/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/objects/ContingencyEquipment.java index 8786e1f3b2..97d48e7772 100644 --- a/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/objects/ContingencyEquipment.java +++ b/data/crac/crac-io/crac-io-nc/src/main/java/com/powsybl/openrao/data/crac/io/nc/objects/ContingencyEquipment.java @@ -7,7 +7,7 @@ package com.powsybl.openrao.data.crac.io.nc.objects; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.TieLine; @@ -39,8 +39,8 @@ public Identifiable getEquipmentInNetwork(Network network) { networkElementToReturn = networkElement; } - if (networkElement instanceof DanglingLine danglingLine) { - Optional optionalTieLine = danglingLine.getTieLine(); + if (networkElement instanceof BoundaryLine boundaryLine) { + Optional optionalTieLine = boundaryLine.getTieLine(); if (optionalTieLine.isPresent()) { networkElementToReturn = optionalTieLine.get(); } diff --git a/data/glsk/glsk-virtual-hubs/src/main/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubs.java b/data/glsk/glsk-virtual-hubs/src/main/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubs.java index cc30b1ebba..8f27184453 100644 --- a/data/glsk/glsk-virtual-hubs/src/main/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubs.java +++ b/data/glsk/glsk-virtual-hubs/src/main/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubs.java @@ -10,7 +10,7 @@ import com.powsybl.glsk.commons.ZonalData; import com.powsybl.glsk.commons.ZonalDataImpl; import com.powsybl.iidm.network.Bus; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Injection; import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.Network; @@ -119,9 +119,9 @@ private static Injection getInjection(Network network, VirtualHub virtualHub) return busLoad.get(); } - Optional danglingLine = findDanglingLineWithXNode(network, virtualHub.nodeName()); - if (danglingLine.isPresent() && !danglingLine.get().isPaired()) { - return danglingLine.get(); + Optional boundaryLine = findBoundaryLineWithXNode(network, virtualHub.nodeName()); + if (boundaryLine.isPresent() && !boundaryLine.get().isPaired()) { + return boundaryLine.get(); } OpenRaoLoggerProvider.BUSINESS_WARNS.warn("Virtual hub {} cannot be assigned on node {} as it was not found in the network", virtualHub.eic(), virtualHub.nodeName()); @@ -135,9 +135,9 @@ private static Optional findBusById(Network network, String id) { .findFirst(); } - private static Optional findDanglingLineWithXNode(Network network, String xNodeId) { - return network.getDanglingLineStream() - .filter(danglingLine -> danglingLine.getPairingKey().equals(xNodeId)) + private static Optional findBoundaryLineWithXNode(Network network, String xNodeId) { + return network.getBoundaryLineStream() + .filter(boundaryLine -> boundaryLine.getPairingKey().equals(xNodeId)) .findFirst(); } } diff --git a/data/glsk/glsk-virtual-hubs/src/test/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubsTest.java b/data/glsk/glsk-virtual-hubs/src/test/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubsTest.java index 65bccfa414..aeb7def034 100644 --- a/data/glsk/glsk-virtual-hubs/src/test/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubsTest.java +++ b/data/glsk/glsk-virtual-hubs/src/test/java/com/powsybl/openrao/data/glsk/virtual/hubs/GlskVirtualHubsTest.java @@ -58,7 +58,7 @@ void testGetVirtualHubsOk() { assertTrue(glsks.getData("15XGDYRHKLKAAAAS").getVariablesById().containsKey("NNL3AA1 _load")); assertEquals(1., glsks.getData("15XGDYRHKLKAAAAS").getVariablesById().get("NNL3AA1 _load").getWeight(), DOUBLE_TOLERANCE); - // check data for virtual hub on dangling line + // check data for virtual hub on boundary line assertNotNull(glsks.getData("17YXTYUDHGKAAAAS")); assertEquals(1, glsks.getData("17YXTYUDHGKAAAAS").getVariables().size()); assertTrue(glsks.getData("17YXTYUDHGKAAAAS").getVariablesById().containsKey("FFR1AA1 X_GBFR1 1")); diff --git a/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/main/java/com/powsybl/openrao/data/raoresult/io/cne/swe/SweMonitoredSeriesCreator.java b/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/main/java/com/powsybl/openrao/data/raoresult/io/cne/swe/SweMonitoredSeriesCreator.java index 23f13804a9..9bb3d544c4 100644 --- a/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/main/java/com/powsybl/openrao/data/raoresult/io/cne/swe/SweMonitoredSeriesCreator.java +++ b/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/main/java/com/powsybl/openrao/data/raoresult/io/cne/swe/SweMonitoredSeriesCreator.java @@ -203,9 +203,9 @@ private MonitoredSeries generateMonitoredSeriesFromScratch(MonitoredSeriesCreati void setInOutAggregateNodes(String networkElementId, String monitoredSeriesId, MonitoredRegisteredResource registeredResource) { Branch branch = cracCreationContext.getNetworkBranches().get(networkElementId); - if (branch instanceof TieLine tieLine && tieLine.getDanglingLine1().hasProperty("CGMES.TopologicalNode_Boundary")) { + if (branch instanceof TieLine tieLine && tieLine.getBoundaryLine1().hasProperty("CGMES.TopologicalNode_Boundary")) { Country cnecOperatorCountry = SweCneUtil.getOperatorCountry(monitoredSeriesId.substring(0, 3)); - String xNodeMRId = tieLine.getDanglingLine1().getProperty("CGMES.TopologicalNode_Boundary"); + String xNodeMRId = tieLine.getBoundaryLine1().getProperty("CGMES.TopologicalNode_Boundary"); if (SweCneUtil.getBranchCountry(branch, TwoSides.ONE).equals(cnecOperatorCountry)) { registeredResource.setInAggregateNodeMRID(SweCneUtil.createResourceIDString(A02_CODING_SCHEME, branch.getTerminal1().getVoltageLevel().getId())); registeredResource.setOutAggregateNodeMRID(SweCneUtil.createResourceIDString(A02_CODING_SCHEME, xNodeMRId)); diff --git a/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/test/java/com/powsybl/openrao/data/raoresult/io/cne/swe/TieLineTest.java b/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/test/java/com/powsybl/openrao/data/raoresult/io/cne/swe/TieLineTest.java index 7b00ad60fb..383576e9da 100644 --- a/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/test/java/com/powsybl/openrao/data/raoresult/io/cne/swe/TieLineTest.java +++ b/data/rao-result/rao-result-io/rao-result-cne/swe-cne-exporter/src/test/java/com/powsybl/openrao/data/raoresult/io/cne/swe/TieLineTest.java @@ -31,10 +31,10 @@ public class TieLineTest { @BeforeEach void setUp() { network = Network.read("SweTestCaseWith12NodesAndXnodes.uct", getClass().getResourceAsStream("/SweTestCaseWith12NodesAndXnodes.uct")); - network.getDanglingLine("FFR2AA1 XES_FR11 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_FR11_mRID"); - network.getDanglingLine("XES_FR11 EES3AA1 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_FR11_mRID"); - network.getDanglingLine("EES2AA1 XES_PT11 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_PT11_mRID"); - network.getDanglingLine("XES_PT11 PPT3AA1 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_PT11_mRID"); + network.getBoundaryLine("FFR2AA1 XES_FR11 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_FR11_mRID"); + network.getBoundaryLine("XES_FR11 EES3AA1 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_FR11_mRID"); + network.getBoundaryLine("EES2AA1 XES_PT11 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_PT11_mRID"); + network.getBoundaryLine("XES_PT11 PPT3AA1 1").setProperty("CGMES.TopologicalNode_Boundary", "XES_PT11_mRID"); SweCneHelper helper = Mockito.mock(SweCneHelper.class); @@ -75,7 +75,7 @@ void testSetInOutAggregateNodesPtEs() { @Test void testSetInOutAggregateNodesNoProperty() { MonitoredRegisteredResource rr = new MonitoredRegisteredResource(); - network.getDanglingLine("EES2AA1 XES_PT11 1").removeProperty("CGMES.TopologicalNode_Boundary"); + network.getBoundaryLine("EES2AA1 XES_PT11 1").removeProperty("CGMES.TopologicalNode_Boundary"); monitoredSeriesCreator.setInOutAggregateNodes("EES2AA1 XES_PT11 1 + XES_PT11 PPT3AA1 1", "REN_blabla", rr); assertEquals("EES2AA1", rr.getInAggregateNodeMRID().getValue()); diff --git a/data/refprog/reference-program/src/main/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputation.java b/data/refprog/reference-program/src/main/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputation.java index 3326693c20..28a72d38e3 100644 --- a/data/refprog/reference-program/src/main/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputation.java +++ b/data/refprog/reference-program/src/main/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputation.java @@ -7,8 +7,8 @@ package com.powsybl.openrao.data.refprog.referenceprogram; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Country; -import com.powsybl.iidm.network.DanglingLine; import com.powsybl.iidm.network.HvdcLine; import com.powsybl.iidm.network.Line; import com.powsybl.iidm.network.Network; @@ -42,9 +42,9 @@ public Map getNetPositions() { private void computeNetPositions() { netPositions = new HashMap<>(); - network.getDanglingLineStream().forEach(danglingLine -> { - EICode area = new EICode(getSubstationNullableCountry(danglingLine.getTerminal().getVoltageLevel().getSubstation())); - addLeavingFlow(danglingLine, area); + network.getBoundaryLineStream().forEach(boundaryLine -> { + EICode area = new EICode(getSubstationNullableCountry(boundaryLine.getTerminal().getVoltageLevel().getSubstation())); + addLeavingFlow(boundaryLine, area); }); network.getLineStream().forEach(line -> { @@ -76,10 +76,10 @@ private Country getSubstationNullableCountry(Optional substation) { } } - private void addLeavingFlow(DanglingLine danglingLine, EICode area) { + private void addLeavingFlow(BoundaryLine boundaryLine, EICode area) { Double previousValue = getPreviousValue(area); if (!Objects.isNull(area)) { - netPositions.put(area, previousValue + getLeavingFlow(danglingLine)); + netPositions.put(area, previousValue + getLeavingFlow(boundaryLine)); } } @@ -107,8 +107,8 @@ private void addLeavingFlow(HvdcLine hvdcLine, EICode area) { } } - private double getLeavingFlow(DanglingLine danglingLine) { - return danglingLine.getTerminal().isConnected() && !Double.isNaN(danglingLine.getTerminal().getP()) ? danglingLine.getTerminal().getP() : 0; + private double getLeavingFlow(BoundaryLine boundaryLine) { + return boundaryLine.getTerminal().isConnected() && !Double.isNaN(boundaryLine.getTerminal().getP()) ? boundaryLine.getTerminal().getP() : 0; } private double getLeavingFlow(Line line, EICode area) { diff --git a/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputationTest.java b/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputationTest.java index 35ce0c2c25..07d5cdcbeb 100644 --- a/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputationTest.java +++ b/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/CountryNetPositionComputationTest.java @@ -47,8 +47,8 @@ void testLines() { } @Test - void testDanglingLines() { - Network network = Network.read("TestCaseDangling.xiidm", getClass().getResourceAsStream("/TestCaseDangling.xiidm")); + void testBoundaryLines() { + Network network = Network.read("TestCaseBoundary.xiidm", getClass().getResourceAsStream("/TestCaseBoundary.xiidm")); Map netPositions = (new CountryNetPositionComputation(network)).getNetPositions(); assertEquals(0.0, netPositions.get(eiCodeFrance), DOUBLE_TOLERANCE); assertEquals(300.0, netPositions.get(eiCodeBelgium), DOUBLE_TOLERANCE); diff --git a/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/ReferenceProgramBuilderTest.java b/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/ReferenceProgramBuilderTest.java index 083fb1d48b..30c50cf61b 100644 --- a/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/ReferenceProgramBuilderTest.java +++ b/data/refprog/reference-program/src/test/java/com/powsybl/openrao/data/refprog/referenceprogram/ReferenceProgramBuilderTest.java @@ -46,8 +46,8 @@ void testLines() { } @Test - void testDanglingLines() { - Network network = Network.read("TestCaseDangling.xiidm", getClass().getResourceAsStream("/TestCaseDangling.xiidm")); + void testBoundaryLines() { + Network network = Network.read("TestCaseBoundary.xiidm", getClass().getResourceAsStream("/TestCaseBoundary.xiidm")); ReferenceProgram referenceProgram = ReferenceProgramBuilder.buildReferenceProgram(network, "default-impl-name", new LoadFlowParameters()); assertEquals(0.0, referenceProgram.getGlobalNetPosition(eiCodeFrance), DOUBLE_TOLERANCE); assertEquals(300.0, referenceProgram.getGlobalNetPosition(eiCodeBelgium), DOUBLE_TOLERANCE); diff --git a/data/refprog/reference-program/src/test/resources/TestCaseDangling.xiidm b/data/refprog/reference-program/src/test/resources/TestCaseBoundary.xiidm similarity index 100% rename from data/refprog/reference-program/src/test/resources/TestCaseDangling.xiidm rename to data/refprog/reference-program/src/test/resources/TestCaseBoundary.xiidm diff --git a/data/virtual-hubs/virtual-hubs-network-assigner/src/main/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssigner.java b/data/virtual-hubs/virtual-hubs-network-assigner/src/main/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssigner.java index dfe8757261..f31fc5cc1d 100644 --- a/data/virtual-hubs/virtual-hubs-network-assigner/src/main/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssigner.java +++ b/data/virtual-hubs/virtual-hubs-network-assigner/src/main/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssigner.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.virtualhubs.networkextensionbuilder; import com.powsybl.iidm.network.Bus; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.LoadType; import com.powsybl.iidm.network.Network; @@ -52,11 +52,11 @@ private void addVirtualLoad(Network network, VirtualHub virtualHub) { return; } - Optional danglingLine = findDanglingLineWithXNode(network, virtualHub.nodeName()); - if (danglingLine.isPresent()) { - // virtual hub is on a Xnode which has been merged in a dangling line during network import - if (danglingLine.get().getTerminal().isConnected()) { - addVirtualHubOnNewFictitiousLoad(danglingLine.get().getTerminal().getBusBreakerView().getConnectableBus(), virtualHub); + Optional boundaryLine = findBoundaryLineWithXNode(network, virtualHub.nodeName()); + if (boundaryLine.isPresent()) { + // virtual hub is on a Xnode which has been merged in a boundary line during network import + if (boundaryLine.get().getTerminal().isConnected()) { + addVirtualHubOnNewFictitiousLoad(boundaryLine.get().getTerminal().getBusBreakerView().getConnectableBus(), virtualHub); } else { LOGGER.warn("Virtual hub {} was not assigned on node {} as it is disconnected from the main network", virtualHub.eic(), virtualHub.nodeName()); } @@ -95,9 +95,9 @@ private Optional findBusById(Network network, String id) { .findFirst(); } - private Optional findDanglingLineWithXNode(Network network, String xNodeId) { - return network.getDanglingLineStream() - .filter(danglingLine -> danglingLine.getPairingKey().equals(xNodeId)) + private Optional findBoundaryLineWithXNode(Network network, String xNodeId) { + return network.getBoundaryLineStream() + .filter(boundaryLine -> boundaryLine.getPairingKey().equals(xNodeId)) .findFirst(); } } diff --git a/data/virtual-hubs/virtual-hubs-network-assigner/src/test/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssignerTest.java b/data/virtual-hubs/virtual-hubs-network-assigner/src/test/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssignerTest.java index ba736da111..e6339cb4c6 100644 --- a/data/virtual-hubs/virtual-hubs-network-assigner/src/test/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssignerTest.java +++ b/data/virtual-hubs/virtual-hubs-network-assigner/src/test/java/com/powsybl/openrao/virtualhubs/networkextensionbuilder/VirtualHubAssignerTest.java @@ -69,7 +69,7 @@ void testAssignerOnXNode() { @Test void testAssignerDisconnectedXNode() { - network.getDanglingLine("FFR1AA1 X_GBFR1 1").getTerminal().disconnect(); + network.getBoundaryLine("FFR1AA1 X_GBFR1 1").getTerminal().disconnect(); virtualHubs.add(new VirtualHub("code_vh2", "eic_vh2", true, false, "X_GBFR1 ", new MarketArea("FR", "eic_fr", true, false), null)); new VirtualHubAssigner(virtualHubs).addVirtualLoads(network); diff --git a/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubTest.java b/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubTest.java index 9bf1e28c9d..00fd3291de 100644 --- a/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubTest.java +++ b/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubTest.java @@ -7,7 +7,7 @@ package com.powsybl.openrao.virtualhubs.networkextension; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.Network; import org.junit.jupiter.api.Test; @@ -59,11 +59,11 @@ void testExtensionAdderOnGenerator() { } @Test - void testExtensionAdderOnDanglingLine() { + void testExtensionAdderOnBoundaryLine() { Network network = Network.read(SMALL_NETWORK_FILE_NAME, getClass().getResourceAsStream("/" + SMALL_NETWORK_FILE_NAME)); - DanglingLine anyDanglingLine = network.getDanglingLines().iterator().next(); + BoundaryLine anyBoundaryLine = network.getBoundaryLines().iterator().next(); - anyDanglingLine.newExtension(AssignedVirtualHubAdder.class) + anyBoundaryLine.newExtension(AssignedVirtualHubAdder.class) .withCode("__CODE") .withEic("19VDUEGOLKAAAAS") .withMcParticipant(true) @@ -71,7 +71,7 @@ void testExtensionAdderOnDanglingLine() { .withRelatedMa(null) .add(); - AssignedVirtualHub virtualHub = anyDanglingLine.getExtension(AssignedVirtualHub.class); + AssignedVirtualHub virtualHub = anyBoundaryLine.getExtension(AssignedVirtualHub.class); assertNotNull(virtualHub); assertEquals("__CODE", virtualHub.getCode()); diff --git a/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubXmlSerializerTest.java b/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubXmlSerializerTest.java index 13ee63af2a..9812c88109 100644 --- a/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubXmlSerializerTest.java +++ b/data/virtual-hubs/virtual-hubs-network-extension/src/test/java/com/powsybl/openrao/virtualhubs/networkextension/AssignedVirtualHubXmlSerializerTest.java @@ -7,7 +7,7 @@ package com.powsybl.openrao.virtualhubs.networkextension; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.serde.NetworkSerDe; @@ -35,10 +35,10 @@ void roundTripTest() { Network originalNetwork = Network.read(SMALL_NETWORK_FILE_NAME, getClass().getResourceAsStream("/" + SMALL_NETWORK_FILE_NAME)); // add extensions - DanglingLine dl = originalNetwork.getDanglingLine("FFR1AA1 X_GBFR1 1"); + BoundaryLine bl = originalNetwork.getBoundaryLine("FFR1AA1 X_GBFR1 1"); Generator g = originalNetwork.getGenerator("NNL1AA1 _generator"); - dl.newExtension(AssignedVirtualHubAdder.class). + bl.newExtension(AssignedVirtualHubAdder.class). withCode("code1"). withEic("17YXTYUDHGKAAAAS"). withMcParticipant(true). @@ -61,7 +61,7 @@ void roundTripTest() { Network roundTripedNetwork = NetworkSerDe.read(is); // check results - AssignedVirtualHub avh1 = roundTripedNetwork.getDanglingLine("FFR1AA1 X_GBFR1 1").getExtension(AssignedVirtualHub.class); + AssignedVirtualHub avh1 = roundTripedNetwork.getBoundaryLine("FFR1AA1 X_GBFR1 1").getExtension(AssignedVirtualHub.class); AssignedVirtualHub avh2 = originalNetwork.getGenerator("NNL1AA1 _generator").getExtension(AssignedVirtualHub.class); assertNotNull(avh1); diff --git a/docs/input-data/crac.md b/docs/input-data/crac.md index db05b0a203..aae23c4814 100644 --- a/docs/input-data/crac.md +++ b/docs/input-data/crac.md @@ -76,9 +76,9 @@ It consists in the modification of a generator active power to a pre-defined val It consists in the modification of a load active power to a pre-defined value. -#### Dangling line actions +#### Boundary line actions -It consists in the modification of a dangling line active power to a pre-defined value. +It consists in the modification of a boundary line active power to a pre-defined value. #### Shunt compensator position actions diff --git a/docs/input-data/crac/json.md b/docs/input-data/crac/json.md index a4f2dd74c0..b021ad9517 100644 --- a/docs/input-data/crac/json.md +++ b/docs/input-data/crac/json.md @@ -151,7 +151,7 @@ crac.newContingency() ⚪ **contingency elements**: list of 0 to N contingency elements        🔴 **contingency element id**: must be the id of a PowSyBl network identifiable        🔴 **contingency element type**: type of element in the network. Currently, PowSyBl handles: -GENERATOR, STATIC_VAR_COMPENSATOR, SHUNT_COMPENSATOR, BRANCH, HVDC_LINE, BUSBAR_SECTION, DANGLING_LINE, LINE, TWO_WINDINGS_TRANSFORMER, +GENERATOR, STATIC_VAR_COMPENSATOR, SHUNT_COMPENSATOR, BRANCH, HVDC_LINE, BUSBAR_SECTION, BOUNDARY_LINE, LINE, TWO_WINDINGS_TRANSFORMER, THREE_WINDINGS_TRANSFORMER, LOAD, SWITCH, BATTERY, BUS, TIE_LINE. The contingency elements type can be retrieved from the PowSyBl Network using the network element id, using: `ContingencyElementFactory.create(network.getIdentifiable(id)).getType()`. ::: @@ -822,7 +822,7 @@ One network action is a combination of one or multiple "elementary actions", amo - Phase tap changer tap position action: setting the tap of a PST in the network to a specific position. - Generator action: setting the active power of a generator in the network to a specific value. - Load action: setting the active power of a load in the network to a specific value. -- Dangling line action: setting the active power of a [dangling line](inv:powsyblcore:*:*#dangling-line)) in the network to a specific value. +- Boundary line action: setting the active power of a [boundary line](inv:powsyblcore:*:*#boundary-line) in the network to a specific value. - Shunt compensator position action: setting the number of sections of a shunt compensator to a specific value. - Switch pairs: opening a switch in the network and closing another (actually used to model [CSE bus-bar change remedial actions](cse.md#bus-bar-change)). - AC emulation deactivation action: deactivate AC emulation mode of an HVDC line (is automatically created if an HVDC range action using a HVDC line in AC emulation is imported) @@ -894,13 +894,13 @@ crac.newNetworkAction() .newOnInstantUsageRule().withInstant(PREVENTIVE_INSTANT).add() .add(); -// dangling line action +// boundary line action crac.newNetworkAction() - .withId("dangling-line-na-id") + .withId("boundary-line-na-id") .withOperator("operator") - .newDanglingLineAction() + .newBoundaryLineAction() .withActivePowerValue(260.0) - .withNetworkElement("dangling-line-id") + .withNetworkElement("boundary-line-id") .add() .newOnInstantUsageRule().withInstant(PREVENTIVE_INSTANT).add() .add(); @@ -1004,14 +1004,14 @@ crac.newNetworkAction() "activePowerValue" : 260.0 } ] }, { - "id" : "dangling-line-action-na-id", - "name" : "dangling-line-action-na-id", + "id" : "boundary-line-action-na-id", + "name" : "boundary-line-action-na-id", "operator" : "operator", "onInstantUsageRules" : [ { "instant" : "preventive" } ], - "danglingLineActions" : [ { - "networkElementId" : "dangling-line-id", + "boundaryLineActions" : [ { + "networkElementId" : "boundary-line-id", "activePowerValue" : 260.0 } ] }, { @@ -1067,7 +1067,7 @@ crac.newNetworkAction() 🔵 **load actions**: list of 0 to N LoadAction        🔴 **network element**: id is mandatory, name is optional        🔴 **active power value**: double, new value of the active power -🔵 **dangling line action**: list of 0 to N DanglingLineAction +🔵 **boundary line action**: list of 0 to N BoundaryLineAction        🔴 **network element**: id is mandatory, name is optional        🔴 **active power value**: double, new value of the active power 🔵 **shunt compensator position action**: list of 0 to N ShuntCompensatorPositionAction diff --git a/docs/parameters/implementation-specific-parameters.md b/docs/parameters/implementation-specific-parameters.md index 412cb87622..c3875f8110 100644 --- a/docs/parameters/implementation-specific-parameters.md +++ b/docs/parameters/implementation-specific-parameters.md @@ -172,7 +172,7 @@ when searching for the best network actions. evaluated in the search-tree. If the value is set to 1, topological actions from direct neighbors will also be considered, etc. *Note that the topology of the network is automatically deduced from the network file: countries sharing tie lines are - considered direct neighbors; dangling lines are not considered linked (ie BE and DE are not considered neighbors, even + considered direct neighbors; boundary lines are not considered linked (ie BE and DE are not considered neighbors, even though they share the Alegro line)* #### Second preventive RAO parameters diff --git a/loopflow-computation/src/main/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImpl.java b/loopflow-computation/src/main/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImpl.java index 6c8b10fe06..a234c4bc2d 100644 --- a/loopflow-computation/src/main/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImpl.java +++ b/loopflow-computation/src/main/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImpl.java @@ -104,7 +104,7 @@ static boolean isInMainComponent(SensitivityVariableSet linearGlsk, Network netw for (String glsk : linearGlsk.getVariablesById().keySet()) { Injection injection = getInjection(glsk, network); if (injection == null) { - throw new OpenRaoException(String.format("%s is neither a generator nor a load nor a dangling line in the network. It is not a valid GLSK.", glsk)); + throw new OpenRaoException(String.format("%s is neither a generator nor a load nor a boundary line in the network. It is not a valid GLSK.", glsk)); } // If bus is disconnected, then powsybl returns a null bus if (injection.getTerminal().getBusView().getBus() != null && injection.getTerminal().getBusView().getBus().isInMainConnectedComponent()) { @@ -123,7 +123,7 @@ static Injection getInjection(String injectionId, Network network) { if (load != null) { return load; } - return network.getDanglingLine(injectionId); + return network.getBoundaryLine(injectionId); } protected Stream> getGlskStream() { diff --git a/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/ExampleGenerator.java b/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/ExampleGenerator.java index f36423d5a2..f256547d31 100644 --- a/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/ExampleGenerator.java +++ b/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/ExampleGenerator.java @@ -201,7 +201,7 @@ static Network network() { .setBus1("Bus BE 1").setBus2("Bus BE 2") .setR(0).setX(5).setB1(0).setB2(0).setG1(0).setG2(0) .add(); - voltageLevelBe.newDanglingLine() + voltageLevelBe.newBoundaryLine() .setId("BE1-XBE").setBus("Bus BE 1").setPairingKey("XBE") .setP0(25).setQ0(0) .setR(0).setX(5).setB(0).setG(0) diff --git a/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImplTest.java b/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImplTest.java index c9145ff7f2..1fc7414290 100644 --- a/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImplTest.java +++ b/loopflow-computation/src/test/java/com/powsybl/openrao/loopflowcomputation/LoopFlowComputationImplTest.java @@ -9,7 +9,7 @@ import com.powsybl.glsk.commons.ZonalData; import com.powsybl.iidm.network.Bus; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.Network; @@ -113,57 +113,57 @@ void testIsInMainComponent() { Mockito.doReturn(null).when(network).getGenerator("gen1"); Mockito.doReturn(null).when(network).getLoad("gen1"); OpenRaoException exception = assertThrows(OpenRaoException.class, () -> LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); - assertEquals("gen1 is neither a generator nor a load nor a dangling line in the network. It is not a valid GLSK.", exception.getMessage()); + assertEquals("gen1 is neither a generator nor a load nor a boundary line in the network. It is not a valid GLSK.", exception.getMessage()); Mockito.doReturn(Map.of( "gen1", new WeightedSensitivityVariable("gen1", 5f), "load1", new WeightedSensitivityVariable("load1", 6f), - "dl1", new WeightedSensitivityVariable("dl1", 6f))) + "bl1", new WeightedSensitivityVariable("bl1", 6f))) .when(linearGlsk).getVariablesById(); Generator gen1 = Mockito.mock(Generator.class); Load load1 = Mockito.mock(Load.class); - DanglingLine dl1 = Mockito.mock(DanglingLine.class); + BoundaryLine bl1 = Mockito.mock(BoundaryLine.class); Mockito.doReturn(gen1).when(network).getGenerator("gen1"); Mockito.doReturn(load1).when(network).getLoad("load1"); - Mockito.doReturn(dl1).when(network).getDanglingLine("dl1"); + Mockito.doReturn(bl1).when(network).getBoundaryLine("bl1"); Mockito.doReturn(mockInjection(false)).when(gen1).getTerminal(); Mockito.doReturn(mockInjection(false)).when(load1).getTerminal(); - Mockito.doReturn(mockInjection(false)).when(dl1).getTerminal(); + Mockito.doReturn(mockInjection(false)).when(bl1).getTerminal(); assertFalse(LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); Mockito.doReturn(mockInjection(true)).when(gen1).getTerminal(); Mockito.doReturn(mockInjection(false)).when(load1).getTerminal(); - Mockito.doReturn(mockInjection(false)).when(dl1).getTerminal(); + Mockito.doReturn(mockInjection(false)).when(bl1).getTerminal(); assertTrue(LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); Mockito.doReturn(mockInjection(false)).when(gen1).getTerminal(); Mockito.doReturn(mockInjection(true)).when(load1).getTerminal(); - Mockito.doReturn(mockInjection(false)).when(dl1).getTerminal(); + Mockito.doReturn(mockInjection(false)).when(bl1).getTerminal(); assertTrue(LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); Mockito.doReturn(mockInjection(false)).when(gen1).getTerminal(); Mockito.doReturn(mockInjection(false)).when(load1).getTerminal(); - Mockito.doReturn(mockInjection(true)).when(dl1).getTerminal(); + Mockito.doReturn(mockInjection(true)).when(bl1).getTerminal(); assertTrue(LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); Mockito.doReturn(mockInjection(false)).when(gen1).getTerminal(); Mockito.doReturn(mockInjection(true)).when(load1).getTerminal(); - Mockito.doReturn(mockInjection(true)).when(dl1).getTerminal(); + Mockito.doReturn(mockInjection(true)).when(bl1).getTerminal(); assertTrue(LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); Mockito.doReturn(null).when(network).getGenerator("gen1"); Mockito.doReturn(null).when(network).getLoad("gen1"); - Mockito.doReturn(null).when(network).getDanglingLine("gen1"); + Mockito.doReturn(null).when(network).getBoundaryLine("gen1"); Mockito.doReturn(null).when(network).getGenerator("load1"); Mockito.doReturn(null).when(network).getLoad("load1"); - Mockito.doReturn(null).when(network).getDanglingLine("load1"); - Mockito.doReturn(null).when(network).getGenerator("dl1"); - Mockito.doReturn(null).when(network).getLoad("dl1"); - Mockito.doReturn(dl1).when(network).getDanglingLine("dl1"); + Mockito.doReturn(null).when(network).getBoundaryLine("load1"); + Mockito.doReturn(null).when(network).getGenerator("bl1"); + Mockito.doReturn(null).when(network).getLoad("bl1"); + Mockito.doReturn(bl1).when(network).getBoundaryLine("bl1"); exception = assertThrows(OpenRaoException.class, () -> LoopFlowComputationImpl.isInMainComponent(linearGlsk, network)); String message = exception.getMessage(); - assertTrue(message.contains(" is neither a generator nor a load nor a dangling line in the network. It is not a valid GLSK.")); + assertTrue(message.contains(" is neither a generator nor a load nor a boundary line in the network. It is not a valid GLSK.")); assertTrue(message.contains("gen1") || message.contains("load1")); } @@ -208,7 +208,7 @@ void testComputeLoopFlowsWithIsolatedGlsk() { Generator genBe = Mockito.mock(Generator.class); Load loadFr = Mockito.mock(Load.class); Load loadBe = Mockito.mock(Load.class); - DanglingLine danglingLine = Mockito.mock(DanglingLine.class); + BoundaryLine boundaryLine = Mockito.mock(BoundaryLine.class); Mockito.when(network.getGenerator("Generator DE")).thenReturn(genDe); Mockito.when(network.getGenerator("Generator NL")).thenReturn(genNl); @@ -220,14 +220,14 @@ void testComputeLoopFlowsWithIsolatedGlsk() { Mockito.when(network.getLoad("Generator FR")).thenReturn(loadFr); Mockito.when(network.getLoad("Generator BE 1")).thenReturn(loadBe); Mockito.when(network.getLoad("Generator BE 2")).thenReturn(null); - Mockito.when(network.getDanglingLine("BE1-XBE")).thenReturn(danglingLine); + Mockito.when(network.getBoundaryLine("BE1-XBE")).thenReturn(boundaryLine); Mockito.doReturn(mockInjection(true)).when(genDe).getTerminal(); Mockito.doReturn(mockInjection(false)).when(genNl).getTerminal(); Mockito.doReturn(mockInjection(false)).when(genBe).getTerminal(); Mockito.doReturn(mockInjection(true)).when(loadFr).getTerminal(); Mockito.doReturn(mockInjection(false)).when(loadBe).getTerminal(); - Mockito.doReturn(mockInjection(false)).when(danglingLine).getTerminal(); + Mockito.doReturn(mockInjection(false)).when(boundaryLine).getTerminal(); LoopFlowComputation loopFlowComputation = new LoopFlowComputationImpl(glsk, referenceProgram, Unit.MEGAWATT); LoopFlowResult loopFlowResult = loopFlowComputation.buildLoopFlowsFromReferenceFlowAndPtdf(ptdfsAndFlows, crac.getFlowCnecs(), network); diff --git a/monitoring/src/main/java/com/powsybl/openrao/monitoring/Monitoring.java b/monitoring/src/main/java/com/powsybl/openrao/monitoring/Monitoring.java index 85583ed15d..86706942d1 100644 --- a/monitoring/src/main/java/com/powsybl/openrao/monitoring/Monitoring.java +++ b/monitoring/src/main/java/com/powsybl/openrao/monitoring/Monitoring.java @@ -8,7 +8,7 @@ package com.powsybl.openrao.monitoring; import com.powsybl.action.Action; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.LoadAction; import com.powsybl.action.ShuntCompensatorPositionAction; @@ -503,8 +503,8 @@ private Identifiable getInjectionSetpointIdentifiable(Action ea, Network netw if (ea instanceof LoadAction loadAction) { return network.getIdentifiable(loadAction.getLoadId()); } - if (ea instanceof DanglingLineAction danglingLineAction) { - return network.getIdentifiable(danglingLineAction.getDanglingLineId()); + if (ea instanceof BoundaryLineAction boundaryLineAction) { + return network.getIdentifiable(boundaryLineAction.getBoundaryLineId()); } if (ea instanceof ShuntCompensatorPositionAction shuntCompensatorPositionAction) { return network.getIdentifiable(shuntCompensatorPositionAction.getShuntCompensatorId()); diff --git a/pom.xml b/pom.xml index 97f490767a..a17fdc1078 100644 --- a/pom.xml +++ b/pom.xml @@ -118,9 +118,9 @@ 3.3.0 4.0.8 5.12.0 - 7.1.2 - 3.1.0 - 2.1.1 + 7.2.0-SNAPSHOT + 3.2.0-SNAPSHOT + 2.2.0-SNAPSHOT 5.1.3 2.0.13 2.10.0 diff --git a/ra-optimisation/rao-api/src/test/resources/RaoParametersSet_v2.json b/ra-optimisation/rao-api/src/test/resources/RaoParametersSet_v2.json index 16829f6a05..858ae8edc9 100644 --- a/ra-optimisation/rao-api/src/test/resources/RaoParametersSet_v2.json +++ b/ra-optimisation/rao-api/src/test/resources/RaoParametersSet_v2.json @@ -65,7 +65,7 @@ "sensitivity-provider" : "OpenSensitivityAnalysis", "sensitivity-failure-overcost" : 10000.0, "sensitivity-parameters" : { - "version" : "1.1", + "version" : "1.2", "load-flow-parameters" : { "version" : "1.10", "voltageInitMode" : "UNIFORM_VALUES", @@ -88,7 +88,8 @@ "flow-flow-sensitivity-value-threshold" : 0.0, "voltage-voltage-sensitivity-value-threshold" : 0.0, "flow-voltage-sensitivity-value-threshold" : 0.0, - "angle-flow-sensitivity-value-threshold" : 0.0 + "angle-flow-sensitivity-value-threshold" : 0.0, + "operator-strategies-calculation-mode" : "NONE" } }, "multi-threading" : { diff --git a/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withExtensions.json b/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withExtensions.json index 22233c643a..b250c951b6 100644 --- a/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withExtensions.json +++ b/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withExtensions.json @@ -65,7 +65,7 @@ "sensitivity-provider" : "SENSI_PROVIDER", "sensitivity-failure-overcost" : 2.0, "sensitivity-parameters" : { - "version" : "1.1", + "version" : "1.2", "load-flow-parameters" : { "version" : "1.10", "voltageInitMode" : "UNIFORM_VALUES", @@ -173,6 +173,7 @@ "voltage-voltage-sensitivity-value-threshold" : 0.0, "flow-voltage-sensitivity-value-threshold" : 0.0, "angle-flow-sensitivity-value-threshold" : 0.0, + "operator-strategies-calculation-mode" : "NONE", "extensions" : { "open-sensitivity-parameters" : { "debugDir" : null, diff --git a/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withOLFParams.json b/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withOLFParams.json index 2b483933cc..d7e61393d7 100644 --- a/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withOLFParams.json +++ b/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withOLFParams.json @@ -50,7 +50,7 @@ "sensitivity-provider" : "OpenLoadFlow", "sensitivity-failure-overcost" : 2.0, "sensitivity-parameters" : { - "version" : "1.1", + "version" : "1.2", "load-flow-parameters" : { "version" : "1.10", "voltageInitMode" : "DC_VALUES", @@ -158,6 +158,7 @@ "voltage-voltage-sensitivity-value-threshold" : 0.0, "flow-voltage-sensitivity-value-threshold" : 0.0, "angle-flow-sensitivity-value-threshold" : 0.0, + "operator-strategies-calculation-mode" : "NONE", "extensions" : { "open-sensitivity-parameters" : { "debugDir" : null, diff --git a/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withPartialExtensions.json b/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withPartialExtensions.json index 61a8b46161..004166ef05 100644 --- a/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withPartialExtensions.json +++ b/ra-optimisation/rao-api/src/test/resources/RaoParameters_config_withPartialExtensions.json @@ -57,7 +57,7 @@ "sensitivity-provider" : "SENSI_PROVIDER", "sensitivity-failure-overcost" : 2.0, "sensitivity-parameters" : { - "version" : "1.1", + "version" : "1.2", "load-flow-parameters" : { "version" : "1.10", "voltageInitMode" : "UNIFORM_VALUES", @@ -165,6 +165,7 @@ "voltage-voltage-sensitivity-value-threshold" : 0.0, "flow-voltage-sensitivity-value-threshold" : 0.0, "angle-flow-sensitivity-value-threshold" : 0.0, + "operator-strategies-calculation-mode" : "NONE", "extensions" : { "open-sensitivity-parameters" : { "debugDir" : null, diff --git a/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/LoadflowProvider.java b/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/LoadflowProvider.java index e46f15d999..0cf4b5c792 100644 --- a/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/LoadflowProvider.java +++ b/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/LoadflowProvider.java @@ -11,7 +11,7 @@ import com.powsybl.contingency.ContingencyContext; import com.powsybl.contingency.ContingencyContextType; import com.powsybl.iidm.network.Branch; -import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.BoundaryLine; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.Network; @@ -166,7 +166,7 @@ List> getSensitivityFunctions(Network netw private List> cnecToSensitivityFunctions(Network network, String networkElementId, Set sides) { Identifiable networkIdentifiable = network.getIdentifiable(networkElementId); - if (networkIdentifiable instanceof Branch || networkIdentifiable instanceof DanglingLine) { + if (networkIdentifiable instanceof Branch || networkIdentifiable instanceof BoundaryLine) { return getSensitivityFunctionTypes(sides).stream().map(functionType -> Pair.of(networkElementId, functionType)).toList(); } else { throw new OpenRaoException("Unable to create sensitivity function for " + networkElementId); diff --git a/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityAdapter.java b/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityAdapter.java index 3b4a867462..146b5db62f 100644 --- a/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityAdapter.java +++ b/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityAdapter.java @@ -15,10 +15,7 @@ import com.powsybl.openrao.data.crac.api.Instant; import com.powsybl.openrao.data.crac.api.State; import com.powsybl.openrao.data.crac.api.cnec.Cnec; -import com.powsybl.sensitivity.SensitivityAnalysis; -import com.powsybl.sensitivity.SensitivityAnalysisParameters; -import com.powsybl.sensitivity.SensitivityAnalysisResult; -import com.powsybl.sensitivity.SensitivityFactor; +import com.powsybl.sensitivity.*; import java.util.Collections; import java.util.List; @@ -139,7 +136,9 @@ static SystematicSensitivityResult runSensitivity(Network network, TECHNICAL_LOGS.error(String.format("Systematic sensitivity analysis failed for state %s : %s", state.getId(), e.getMessage())); SensitivityAnalysisResult failedResult = new SensitivityAnalysisResult( cnecSensitivityProvider.getContingencyFactors(network, contingencyList), - List.of(new SensitivityAnalysisResult.SensitivityContingencyStatus(optContingency.get().getId(), SensitivityAnalysisResult.Status.FAILURE)), + List.of(new SensitivityAnalysisResult.SensitivityStateStatus(SensitivityState.postContingency(optContingency.get().getId()), SensitivityAnalysisResult.Status.FAILURE)), + contingencyList.stream().map(Contingency::getId).toList(), + List.of(), List.of() ); result.completeData(failedResult, state.getInstant().getOrder()); diff --git a/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResult.java b/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResult.java index 184cfc3816..88868bf554 100644 --- a/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResult.java +++ b/sensitivity-analysis/src/main/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResult.java @@ -108,7 +108,7 @@ public SystematicSensitivityResult completeData(SensitivityAnalysisResult result results.getFactors(), SensitivityAnalysisResult.Status.SUCCESS )); - for (SensitivityAnalysisResult.SensitivityContingencyStatus contingencyStatus : results.getContingencyStatuses()) { + for (SensitivityAnalysisResult.SensitivityStateStatus contingencyStatus : results.getStateStatuses()) { if (contingencyStatus.getStatus() == SensitivityAnalysisResult.Status.FAILURE) { anyContingencyFailure = true; } @@ -118,10 +118,10 @@ public SystematicSensitivityResult completeData(SensitivityAnalysisResult result if (contingencyStateResult.status.equals(SensitivityComputationStatus.SUCCESS)) { this.status = SensitivityComputationStatus.SUCCESS; } - results.getValues(contingencyStatus.getContingencyId()).forEach(sensitivityValue -> + results.getValues(contingencyStatus.getState()).forEach(sensitivityValue -> fillIndividualValue(sensitivityValue, contingencyStateResult, results.getFactors(), contingencyStatus.getStatus()) ); - postContingencyResults.get(instantOrder).put(contingencyStatus.getContingencyId(), contingencyStateResult); + postContingencyResults.get(instantOrder).put(contingencyStatus.getState().contingencyId(), contingencyStateResult); } if (!results.getPreContingencyValues().isEmpty()) { nStateResult.status = this.status; diff --git a/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/MockSensiProvider.java b/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/MockSensiProvider.java index 26e8c986c4..384328d505 100644 --- a/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/MockSensiProvider.java +++ b/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/MockSensiProvider.java @@ -98,16 +98,16 @@ private static void handleSpecificConditionContextAtNeutralTap(SensitivityResult if (variableType == SensitivityVariableType.TRANSFORMER_PHASE) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -5, -20); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, -5, -20); break; case BRANCH_ACTIVE_POWER_2: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -5.5, -25); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, -5.5, -25); break; case BRANCH_CURRENT_1: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 5, 200); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 5, 200); break; case BRANCH_CURRENT_2: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 5.5, 205); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 5.5, 205); break; default: throw new AssertionError(); @@ -115,16 +115,16 @@ private static void handleSpecificConditionContextAtNeutralTap(SensitivityResult } else if (variableType == SensitivityVariableType.INJECTION_ACTIVE_POWER) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 6, -20); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 6, -20); break; case BRANCH_ACTIVE_POWER_2: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 6.5, -25); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 6.5, -25); break; case BRANCH_CURRENT_1: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 12, 40); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 12, 40); break; case BRANCH_CURRENT_2: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 17, 45); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 17, 45); break; default: throw new AssertionError(); @@ -132,16 +132,16 @@ private static void handleSpecificConditionContextAtNeutralTap(SensitivityResult } else if (variableType == SensitivityVariableType.HVDC_LINE_ACTIVE_POWER) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 7, -25); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 7, -25); break; case BRANCH_ACTIVE_POWER_2: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 7.5, -26); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 7.5, -26); break; case BRANCH_CURRENT_1: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 8, -30); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 8, -30); break; case BRANCH_CURRENT_2: - sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 8.5, -31); + sensitivityResultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 8.5, -31); break; default: throw new AssertionError(); @@ -150,9 +150,9 @@ private static void handleSpecificConditionContextAtNeutralTap(SensitivityResult throw new AssertionError(); } if (contingencies.get(finalContingencyIndex).getElements().stream().anyMatch(e -> network.getIdentifiable(e.getId()) == null)) { - sensitivityResultWriter.writeContingencyStatus(finalContingencyIndex, SensitivityAnalysisResult.Status.FAILURE); + sensitivityResultWriter.writeStateStatus(finalContingencyIndex, -1, SensitivityAnalysisResult.Status.FAILURE); } else { - sensitivityResultWriter.writeContingencyStatus(finalContingencyIndex, SensitivityAnalysisResult.Status.SUCCESS); + sensitivityResultWriter.writeStateStatus(finalContingencyIndex, -1, SensitivityAnalysisResult.Status.SUCCESS); } } @@ -163,16 +163,16 @@ private static void handleNoneAndAllContingencyContextsAtNeutralTap(SensitivityR if (variableType == SensitivityVariableType.TRANSFORMER_PHASE) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.5, 10); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.5, 10); break; case BRANCH_ACTIVE_POWER_2: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.55, 15); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.55, 15); break; case BRANCH_CURRENT_1: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.25, 25); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.25, 25); break; case BRANCH_CURRENT_2: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.30, 30); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.30, 30); break; default: throw new AssertionError(); @@ -180,16 +180,16 @@ private static void handleNoneAndAllContingencyContextsAtNeutralTap(SensitivityR } else if (variableType == SensitivityVariableType.INJECTION_ACTIVE_POWER) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.14, 10); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.14, 10); break; case BRANCH_ACTIVE_POWER_2: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.19, 15); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.19, 15); break; case BRANCH_CURRENT_1: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.28, 20); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.28, 20); break; case BRANCH_CURRENT_2: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.33, 25); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.33, 25); break; default: throw new AssertionError(); @@ -197,16 +197,16 @@ private static void handleNoneAndAllContingencyContextsAtNeutralTap(SensitivityR } else if (variableType == SensitivityVariableType.HVDC_LINE_ACTIVE_POWER) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.34, 30); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.34, 30); break; case BRANCH_ACTIVE_POWER_2: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.35, 35); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.35, 35); break; case BRANCH_CURRENT_1: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.44, 40); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.44, 40); break; case BRANCH_CURRENT_2: - sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, 0.49, 45); + sensitivityResultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 0.49, 45); break; default: throw new AssertionError(); @@ -245,16 +245,16 @@ private static void handleSpecificContingencyContextNotAtNeutralTap(SensitivityR if (variableType == SensitivityVariableType.TRANSFORMER_PHASE) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -2.5, -40); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, -2.5, -40); break; case BRANCH_ACTIVE_POWER_2: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -3.0, -45); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, -3.0, -45); break; case BRANCH_CURRENT_1: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 9, 90); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 9, 90); break; case BRANCH_CURRENT_2: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 9.5, 95); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 9.5, 95); break; default: throw new AssertionError(); @@ -262,22 +262,22 @@ private static void handleSpecificContingencyContextNotAtNeutralTap(SensitivityR } else if (variableType == SensitivityVariableType.INJECTION_ACTIVE_POWER) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 6.6, -40); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 6.6, -40); break; case BRANCH_ACTIVE_POWER_2: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 7.1, -45); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 7.1, -45); break; case BRANCH_CURRENT_1: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 12.6, -80); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 12.6, -80); break; case BRANCH_CURRENT_2: - resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, 13.1, -85); + resultWriter.writeSensitivityValue(factorIndexContingency.get(), finalContingencyIndex, -1, 13.1, -85); break; default: throw new AssertionError(); } } - resultWriter.writeContingencyStatus(finalContingencyIndex, SensitivityAnalysisResult.Status.SUCCESS); + resultWriter.writeStateStatus(finalContingencyIndex, -1, SensitivityAnalysisResult.Status.SUCCESS); } private static void handleNoneAndAllContingencyContextNotAtNeutralTap(SensitivityResultWriter resultWriter, @@ -287,16 +287,16 @@ private static void handleNoneAndAllContingencyContextNotAtNeutralTap(Sensitivit if (variableType == SensitivityVariableType.TRANSFORMER_PHASE) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 1.5, 110); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 1.5, 110); break; case BRANCH_ACTIVE_POWER_2: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 2.0, 115); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 2.0, 115); break; case BRANCH_CURRENT_1: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 1.25, 1100); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 1.25, 1100); break; case BRANCH_CURRENT_2: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 1.30, 1105); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 1.30, 1105); break; default: throw new AssertionError(); @@ -304,16 +304,16 @@ private static void handleNoneAndAllContingencyContextNotAtNeutralTap(Sensitivit } else if (variableType == SensitivityVariableType.INJECTION_ACTIVE_POWER) { switch (functionType) { case BRANCH_ACTIVE_POWER_1: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 1.14, 110); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 1.14, 110); break; case BRANCH_ACTIVE_POWER_2: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 1.19, 115); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 1.19, 115); break; case BRANCH_CURRENT_1: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 2.14, 210); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 2.14, 210); break; case BRANCH_CURRENT_2: - resultWriter.writeSensitivityValue(factorIndex.get(), -1, 2.19, 215); + resultWriter.writeSensitivityValue(factorIndex.get(), -1, -1, 2.19, 215); break; default: throw new AssertionError(); diff --git a/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResultTest.java b/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResultTest.java index cb91299f5f..e6e838ca06 100644 --- a/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResultTest.java +++ b/sensitivity-analysis/src/test/java/com/powsybl/openrao/sensitivityanalysis/SystematicSensitivityResultTest.java @@ -28,13 +28,7 @@ import com.powsybl.openrao.data.crac.api.rangeaction.RangeAction; import com.powsybl.openrao.data.crac.impl.utils.CommonCracCreation; import com.powsybl.openrao.data.crac.impl.utils.NetworkImportsUtil; -import com.powsybl.sensitivity.SensitivityAnalysis; -import com.powsybl.sensitivity.SensitivityAnalysisParameters; -import com.powsybl.sensitivity.SensitivityAnalysisResult; -import com.powsybl.sensitivity.SensitivityFactor; -import com.powsybl.sensitivity.SensitivityFunctionType; -import com.powsybl.sensitivity.SensitivityVariableSet; -import com.powsybl.sensitivity.SensitivityVariableType; +import com.powsybl.sensitivity.*; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -421,7 +415,9 @@ void testCompleteDataWithFailingPerimeterIn2P() { sensitivityAnalysisResult = new SensitivityAnalysisResult( List.of(sensitivityFactor1), - List.of(new SensitivityAnalysisResult.SensitivityContingencyStatus(contingency.getId(), SensitivityAnalysisResult.Status.FAILURE)), + List.of(new SensitivityAnalysisResult.SensitivityStateStatus(SensitivityState.postContingency(contingency.getId()), SensitivityAnalysisResult.Status.FAILURE)), + List.of(contingency.getId()), + List.of(), List.of() ); @@ -448,7 +444,9 @@ void testFailingCurativePerimeter() { SensitivityAnalysisResult sensitivityAnalysisResult = new SensitivityAnalysisResult( List.of(sensitivityFactor1), - List.of(new SensitivityAnalysisResult.SensitivityContingencyStatus(contingency.getId(), SensitivityAnalysisResult.Status.FAILURE)), + List.of(new SensitivityAnalysisResult.SensitivityStateStatus(SensitivityState.postContingency(contingency.getId()), SensitivityAnalysisResult.Status.FAILURE)), + List.of(contingency.getId()), + List.of(), List.of() ); diff --git a/tests/src/test/java/com/powsybl/openrao/tests/steps/CracImportSteps.java b/tests/src/test/java/com/powsybl/openrao/tests/steps/CracImportSteps.java index 8299d40526..35e5e46516 100644 --- a/tests/src/test/java/com/powsybl/openrao/tests/steps/CracImportSteps.java +++ b/tests/src/test/java/com/powsybl/openrao/tests/steps/CracImportSteps.java @@ -7,7 +7,7 @@ package com.powsybl.openrao.tests.steps; -import com.powsybl.action.DanglingLineAction; +import com.powsybl.action.BoundaryLineAction; import com.powsybl.action.GeneratorAction; import com.powsybl.action.LoadAction; import com.powsybl.action.PhaseTapChangerTapPositionAction; @@ -638,12 +638,12 @@ public void itShouldHaveTheFollowingNetworkActions(DataTable arg1) { && Objects.equals(loadAction.getLoadId(), networkElementId) && loadAction.getActivePowerValue().getAsDouble() == activePowerValueLA)); break; - case "DanglingLineAction": - double activePowerValueDLA = Double.parseDouble(action); + case "BoundaryLineAction": + double activePowerValueBLA = Double.parseDouble(action); assertTrue(networkAction.getElementaryActions().stream().anyMatch(elementaryAction -> - elementaryAction instanceof DanglingLineAction danglingLineAction - && Objects.equals(danglingLineAction.getDanglingLineId(), networkElementId) - && danglingLineAction.getActivePowerValue().getAsDouble() == activePowerValueDLA)); + elementaryAction instanceof BoundaryLineAction boundaryLineAction + && Objects.equals(boundaryLineAction.getBoundaryLineId(), networkElementId) + && boundaryLineAction.getActivePowerValue().getAsDouble() == activePowerValueBLA)); break; case "ShuntCompensatorPositionAction": int sectionCount = Integer.parseInt(action); diff --git a/tests/src/test/resources/com/powsybl/openrao/tests/features/0_import_export/01_import/011_cnec/US14_6.feature b/tests/src/test/resources/com/powsybl/openrao/tests/features/0_import_export/01_import/011_cnec/US14_6.feature index 637ba44615..58e59b8eac 100644 --- a/tests/src/test/resources/com/powsybl/openrao/tests/features/0_import_export/01_import/011_cnec/US14_6.feature +++ b/tests/src/test/resources/com/powsybl/openrao/tests/features/0_import_export/01_import/011_cnec/US14_6.feature @@ -3,11 +3,11 @@ # 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/. -Feature: US 14.6: Dangling lines +Feature: US 14.6: Boundary lines #TODO: This feature covers @fast @rao @dc @preventive-only @max-min-margin @megawatt - Scenario: 14.6.1 : Dangling line with no generation, RAO in MW + Scenario: 14.6.1 : Boundary line with no generation, RAO in MW Given network file is "epic14/TestCase12NodesXnodeNoGen.uct" for CORE CC Given crac file is "epic14/cbcora_ep14us6.xml" Given configuration file is "common/RaoParameters_maxMargin_megawatt_dc.json" @@ -19,7 +19,7 @@ Feature: US 14.6: Dangling lines Then 0 remedial actions are used in preventive @fast @rao @ac @preventive-only @max-min-margin @ampere - Scenario: 14.6.2 : Dangling line with no generation, RAO in A (same case as the previous scenario, but in A) + Scenario: 14.6.2 : Boundary line with no generation, RAO in A (same case as the previous scenario, but in A) Given network file is "epic14/TestCase12NodesXnodeNoGen.uct" for CORE CC Given crac file is "epic14/cbcora_ep14us6.xml" Given configuration file is "common/RaoParameters_maxMargin_ampere.json" @@ -31,7 +31,7 @@ Feature: US 14.6: Dangling lines Then 0 remedial actions are used in preventive @fast @rao @dc @preventive-only @max-min-margin @megawatt - Scenario: 14.6.3 : Dangling line with generation, RAO in MW + Scenario: 14.6.3 : Boundary line with generation, RAO in MW Given network file is "epic14/TestCase12NodesXnodeWithGen.uct" for CORE CC Given crac file is "epic14/cbcora_ep14us6.xml" Given configuration file is "common/RaoParameters_maxMargin_megawatt_dc.json" @@ -43,7 +43,7 @@ Feature: US 14.6: Dangling lines Then 0 remedial actions are used in preventive @fast @rao @ac @preventive-only @max-min-margin @ampere - Scenario: 14.6.4 : Dangling line with generation, RAO in A (same case as the previous scenario, but in A) + Scenario: 14.6.4 : Boundary line with generation, RAO in A (same case as the previous scenario, but in A) Given network file is "epic14/TestCase12NodesXnodeWithGen.uct" for CORE CC Given crac file is "epic14/cbcora_ep14us6.xml" Given configuration file is "common/RaoParameters_maxMargin_ampere.json" diff --git a/tests/src/test/resources/com/powsybl/openrao/tests/features/5_special_features/51_loopflow/511_loopflow_computation/US7_18.feature b/tests/src/test/resources/com/powsybl/openrao/tests/features/5_special_features/51_loopflow/511_loopflow_computation/US7_18.feature index 160e52a711..61011ada23 100644 --- a/tests/src/test/resources/com/powsybl/openrao/tests/features/5_special_features/51_loopflow/511_loopflow_computation/US7_18.feature +++ b/tests/src/test/resources/com/powsybl/openrao/tests/features/5_special_features/51_loopflow/511_loopflow_computation/US7_18.feature @@ -59,7 +59,7 @@ Feature: US 7.18: Virtual hubs in loopflow computation @fast @loopflow-computation @ac @loopflow Scenario: 7.18.2 Loop flow computation with one virtual hub on a external Xnode border - MEGAWATT - Given network file is "epic7/TestCase12Nodes_with_Xnodes_dangling.uct" for CORE CC + Given network file is "epic7/TestCase12Nodes_with_Xnodes_boundary.uct" for CORE CC Given crac file is "epic7/crac_lf_xnodes.json" Given loopflow glsk file is "common/glsk_lots_of_lf_12nodes.xml" Given RefProg file is "epic7/refProg_12nodes_virtual_2.xml" @@ -85,7 +85,7 @@ Feature: US 7.18: Virtual hubs in loopflow computation Scenario: 7.18.2bis Loop flow computation with one virtual hub on a external Xnode border - AMPERE Perform exactly the same test as 7.18.2, but this time with the computation carried out in Ampere. The expected result should match the Megawatt value converted to Ampere using the formula : flowInAmpere ~ flowInMw / (Unom × sqrt(3) / 1000). - Given network file is "epic7/TestCase12Nodes_with_Xnodes_dangling.uct" for CORE CC + Given network file is "epic7/TestCase12Nodes_with_Xnodes_boundary.uct" for CORE CC Given crac file is "epic7/crac_lf_xnodes.json" Given loopflow glsk file is "common/glsk_lots_of_lf_12nodes.xml" Given RefProg file is "epic7/refProg_12nodes_virtual_2.xml" @@ -110,7 +110,7 @@ Feature: US 7.18: Virtual hubs in loopflow computation @fast @rao @dc @preventive-only @loopflow @max-min-margin @megawatt Scenario: 7.18.3 RAO with one virtual hub on a external Xnode border - MEGAWATT - Given network file is "epic7/TestCase12Nodes_with_Xnodes_dangling.uct" for CORE CC + Given network file is "epic7/TestCase12Nodes_with_Xnodes_boundary.uct" for CORE CC Given crac file is "epic7/crac_lf_rao_3_cbcora_xnodes.xml" Given loopflow glsk file is "common/glsk_lots_of_lf_12nodes.xml" Given RefProg file is "epic7/refProg_12nodes_virtual_2.xml" diff --git a/tests/src/test/resources/files/cases/crac90/TestCase_severalVoltageLevels_Xnodes_8characters.uct b/tests/src/test/resources/files/cases/crac90/TestCase_severalVoltageLevels_Xnodes_8characters.uct index f988188e04..594d3ecd63 100644 --- a/tests/src/test/resources/files/cases/crac90/TestCase_severalVoltageLevels_Xnodes_8characters.uct +++ b/tests/src/test/resources/files/cases/crac90/TestCase_severalVoltageLevels_Xnodes_8characters.uct @@ -61,7 +61,7 @@ XBEFR221 FFR3AA21 1 0 0.0000 10.000 0.000000 1000 BBE1AA21 XBEFR321 1 0 0.0000 10.000 0.000000 1000 TL BE1X FFR1AA24 XBEFR321 1 0 0.0000 10.000 0.000000 1000 BBE2AA11 XBE2AL11 1 0 0.0000 10.000 0.000000 1000 -XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 DL AL +XDE2AL11 DDE2AA11 1 0 0.0000 10.000 0.000000 1000 BL AL ##T BBE2AA11 BBE3AA12 1 0 400.0 400.0 1000. 0.0000 10.000 0.000000 0.0 5000 PST BE BBE1AA11 BBE1AA21 1 0 400.0 225.0 300.0 3.5790 141.29 0.000000 0.0000 1000 TR BE1 diff --git a/tests/src/test/resources/files/cases/epic7/TestCase12Nodes_with_Xnodes_dangling.uct b/tests/src/test/resources/files/cases/epic7/TestCase12Nodes_with_Xnodes_boundary.uct similarity index 100% rename from tests/src/test/resources/files/cases/epic7/TestCase12Nodes_with_Xnodes_dangling.uct rename to tests/src/test/resources/files/cases/epic7/TestCase12Nodes_with_Xnodes_boundary.uct From dc96ff0893c92d18a3df1f89337897644daa8640 Mon Sep 17 00:00:00 2001 From: Thomas Bouquet Date: Thu, 19 Mar 2026 16:25:53 +0100 Subject: [PATCH 2/2] feature(Time-Coupled): add `LazyNetwork` implementation (#1644) * add lazy network implementation Signed-off-by: Thomas Bouquet * fix all tests but cucumbers Signed-off-by: Thomas Bouquet * fix cucumbers Signed-off-by: Thomas Bouquet * merge main Signed-off-by: Thomas Bouquet * use core snapshot version Signed-off-by: Thomas Bouquet * use lazy networks in ics importer tests Signed-off-by: Thomas Bouquet --------- Signed-off-by: Thomas Bouquet Signed-off-by: Godelaine Co-authored-by: Godelaine --- .../openrao/data/crac/util/IcsImporter.java | 79 +- .../data/crac/util/IcsImporterTest.java | 94 +- .../powsybl/openrao/raoapi/LazyNetwork.java | 1500 +++++++++++++++++ .../raoapi/RaoInputWithNetworkPaths.java | 81 - .../openrao/raoapi/TimeCoupledRao.java | 8 +- .../TimeCoupledRaoInputWithNetworkPaths.java | 58 - .../raoapi/TimeCoupledRaoProvider.java | 2 +- .../openrao/raoapi/TimeCoupledRaoTest.java | 12 +- .../AnotherTimeCoupledRaoProviderMock.java | 4 +- .../raomock/TimeCoupledRaoProviderMock.java | 10 +- .../openrao/searchtreerao/marmot/Marmot.java | 35 +- .../searchtreerao/marmot/MarmotTest.java | 121 +- .../tests/steps/TimeCoupledRaoSteps.java | 92 +- 13 files changed, 1733 insertions(+), 363 deletions(-) create mode 100644 ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/LazyNetwork.java delete mode 100644 ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/RaoInputWithNetworkPaths.java delete mode 100644 ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRaoInputWithNetworkPaths.java diff --git a/data/crac/crac-util/src/main/java/com/powsybl/openrao/data/crac/util/IcsImporter.java b/data/crac/crac-util/src/main/java/com/powsybl/openrao/data/crac/util/IcsImporter.java index 66e28b473c..8ce755a7ee 100644 --- a/data/crac/crac-util/src/main/java/com/powsybl/openrao/data/crac/util/IcsImporter.java +++ b/data/crac/crac-util/src/main/java/com/powsybl/openrao/data/crac/util/IcsImporter.java @@ -10,6 +10,7 @@ import com.powsybl.iidm.network.Bus; import com.powsybl.iidm.network.LoadType; import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.serde.NetworkSerDe; import com.powsybl.openrao.commons.OpenRaoException; import com.powsybl.openrao.commons.TemporalData; import com.powsybl.openrao.commons.TemporalDataImpl; @@ -17,8 +18,9 @@ import com.powsybl.openrao.data.crac.api.rangeaction.InjectionRangeActionAdder; import com.powsybl.openrao.data.crac.api.rangeaction.VariationDirection; import com.powsybl.openrao.data.timecoupledconstraints.GeneratorConstraints; -import com.powsybl.openrao.raoapi.RaoInputWithNetworkPaths; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.LazyNetwork; +import com.powsybl.openrao.raoapi.RaoInput; +import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVRecord; @@ -27,7 +29,13 @@ import java.io.InputStreamReader; import java.nio.file.Path; import java.time.OffsetDateTime; -import java.util.*; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Properties; import static com.powsybl.openrao.commons.logs.OpenRaoLoggerProvider.BUSINESS_WARNS; @@ -80,20 +88,20 @@ private IcsImporter() { //should only be used statically } - public static void populateInputWithICS(TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInput, - InputStream staticInputStream, - InputStream seriesInputStream, - InputStream gskInputStream, - double icsCostUp, - double icsCostDown) throws IOException { + public static TimeCoupledRaoInput populateInputWithICS(TimeCoupledRaoInput timeCoupledRaoInput, + InputStream staticInputStream, InputStream seriesInputStream, + InputStream gskInputStream, + double icsCostUp, + double icsCostDown, + String exportDirectory) throws IOException { costUp = icsCostUp; costDown = icsCostDown; TemporalData initialNetworks = new TemporalDataImpl<>(); timeCoupledRaoInput.getRaoInputs().getDataPerTimestamp().forEach((dateTime, raoInput) -> { - Network network = Network.read(raoInput.getInitialNetworkPath()); + Network network = raoInput.getNetwork(); preProcessNetwork(network); - initialNetworks.put(dateTime, network); + initialNetworks.put(dateTime, NetworkSerDe.copy(network)); // use a copy not to modify initial network }); CSVFormat csvFormat = CSVFormat.DEFAULT.builder() .setDelimiter(";") @@ -137,8 +145,15 @@ public static void populateInputWithICS(TimeCoupledRaoInputWithNetworkPaths time } }); - initialNetworks.getDataPerTimestamp().forEach((dateTime, initialNetwork) -> - initialNetwork.write("JIIDM", new Properties(), Path.of(timeCoupledRaoInput.getRaoInputs().getData(dateTime).orElseThrow().getPostIcsImportNetworkPath()))); + TemporalData postIcsRaoInputs = new TemporalDataImpl<>(); + + initialNetworks.getDataPerTimestamp().forEach((dateTime, initialNetwork) -> { + String exportedNetworkPath = exportDirectory + dateTime.format(DateTimeFormatter.ISO_DATE_TIME) + ".jiidm"; + initialNetwork.write("JIIDM", new Properties(), Path.of(exportedNetworkPath)); + postIcsRaoInputs.put(dateTime, RaoInput.build(new LazyNetwork(exportedNetworkPath), timeCoupledRaoInput.getRaoInputs().getData(dateTime).orElseThrow().getCrac()).build()); + }); + + return new TimeCoupledRaoInput(postIcsRaoInputs, timeCoupledRaoInput.getTimestampsToRun(), timeCoupledRaoInput.getTimeCoupledConstraints()); } private static void preProcessNetwork(Network network) { @@ -156,7 +171,7 @@ private static boolean safeDoubleEquals(double a, double b) { return Math.abs(a - b) < 1e-3; } - private static void importGskRedispatchingAction(TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInput, + private static void importGskRedispatchingAction(TimeCoupledRaoInput timeCoupledRaoInput, CSVRecord staticRecord, TemporalData initialNetworks, Map seriesPerType, @@ -214,12 +229,12 @@ private static void importGskRedispatchingAction(TimeCoupledRaoInputWithNetworkP } private static void importGskRedispatchActionForOneTimestamp(CSVRecord staticRecord, - Map seriesPerType, - String raId, - Map weightPerNode, - OffsetDateTime dateTime, - RaoInputWithNetworkPaths raoInput, - Map networkElementPerGskElement) { + Map seriesPerType, + String raId, + Map weightPerNode, + OffsetDateTime dateTime, + RaoInput raoInput, + Map networkElementPerGskElement) { Crac crac = raoInput.getCrac(); double p0 = parseDoubleWithPossibleCommas(seriesPerType.get(P0).get(dateTime.getHour() + OFFSET)); InjectionRangeActionAdder injectionRangeActionAdder = crac.newInjectionRangeAction() @@ -252,7 +267,7 @@ private static void importGskRedispatchActionForOneTimestamp(CSVRecord staticRec injectionRangeActionAdder.add(); } - private static void importNodeRedispatchingAction(TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInput, + private static void importNodeRedispatchingAction(TimeCoupledRaoInput timeCoupledRaoInput, CSVRecord staticRecord, TemporalData initialNetworks, Map seriesPerType, @@ -298,11 +313,11 @@ private static void importNodeRedispatchingAction(TimeCoupledRaoInputWithNetwork } private static void importNodeRedispatchingActionForOneTimestamp(CSVRecord staticRecord, - Map seriesPerType, - String raId, - OffsetDateTime dateTime, - RaoInputWithNetworkPaths raoInput, - String networkElementId) { + Map seriesPerType, + String raId, + OffsetDateTime dateTime, + RaoInput raoInput, + String networkElementId) { Crac crac = raoInput.getCrac(); double p0 = parseDoubleWithPossibleCommas(seriesPerType.get(P0).get(dateTime.getHour() + OFFSET)); InjectionRangeActionAdder injectionRangeActionAdder = crac.newInjectionRangeAction() @@ -331,7 +346,8 @@ private static void importNodeRedispatchingActionForOneTimestamp(CSVRecord stati injectionRangeActionAdder.add(); } - private static String processNetworks(String nodeId, TemporalData initialNetworks, Map seriesPerType, double shiftKey) { + private static String processNetworks(String + nodeId, TemporalData initialNetworks, Map seriesPerType, double shiftKey) { String generatorId = seriesPerType.get(P0).get(RA_RD_ID) + "_" + nodeId + GENERATOR_SUFFIX; for (Map.Entry entry : initialNetworks.getDataPerTimestamp().entrySet()) { Bus bus = findBus(nodeId, entry.getValue()); @@ -346,7 +362,8 @@ private static String processNetworks(String nodeId, TemporalData initi return generatorId; } - private static Optional parseValue(Map seriesPerType, String key, OffsetDateTime timestamp, double shiftKey) { + private static Optional parseValue(Map seriesPerType, String key, OffsetDateTime + timestamp, double shiftKey) { if (seriesPerType.containsKey(key)) { CSVRecord series = seriesPerType.get(key); String value = series.get(timestamp.getHour() + OFFSET); @@ -398,12 +415,14 @@ private static void processBus(Bus bus, String generatorId, Double p0, double pM .add(); } - private static boolean shouldBeImported(CSVRecord staticRecord, Map> weightPerNodePerGsk) { + private static boolean shouldBeImported(CSVRecord + staticRecord, Map> weightPerNodePerGsk) { return (staticRecord.get(RD_DESCRIPTION_MODE).equalsIgnoreCase(NODE) || weightPerNodePerGsk.containsKey(staticRecord.get(UCT_NODE_OR_GSK_ID))) && (staticRecord.get(PREVENTIVE).equalsIgnoreCase(TRUE) /*|| staticRecord.get(CURATIVE).equalsIgnoreCase(TRUE)*/); } - private static boolean p0RespectsGradients(CSVRecord staticRecord, CSVRecord p0record, List dateTimes) { + private static boolean p0RespectsGradients(CSVRecord staticRecord, CSVRecord + p0record, List dateTimes) { double maxGradient = staticRecord.get(MAXIMUM_POSITIVE_POWER_GRADIENT).isEmpty() ? MAX_GRADIENT : parseDoubleWithPossibleCommas(staticRecord.get(MAXIMUM_POSITIVE_POWER_GRADIENT)); double minGradient = staticRecord.get(MAXIMUM_NEGATIVE_POWER_GRADIENT).isEmpty() ? diff --git a/data/crac/crac-util/src/test/java/com/powsybl/openrao/data/crac/util/IcsImporterTest.java b/data/crac/crac-util/src/test/java/com/powsybl/openrao/data/crac/util/IcsImporterTest.java index f38030ec0b..ea55f7daf4 100644 --- a/data/crac/crac-util/src/test/java/com/powsybl/openrao/data/crac/util/IcsImporterTest.java +++ b/data/crac/crac-util/src/test/java/com/powsybl/openrao/data/crac/util/IcsImporterTest.java @@ -17,8 +17,10 @@ import com.powsybl.openrao.data.crac.api.rangeaction.VariationDirection; import com.powsybl.openrao.data.timecoupledconstraints.GeneratorConstraints; import com.powsybl.openrao.data.timecoupledconstraints.TimeCoupledConstraints; -import com.powsybl.openrao.raoapi.RaoInputWithNetworkPaths; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.LazyNetwork; +import com.powsybl.openrao.raoapi.RaoInput; +import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -32,9 +34,8 @@ import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; -import org.assertj.core.api.Assertions; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Philippe Edwards {@literal } @@ -44,17 +45,19 @@ class IcsImporterTest { private static final String TMP_DIR = System.getProperty("java.io.tmpdir") + File.separator; private String networkFilePathPostIcsImport1; private String networkFilePathPostIcsImport2; - private TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInputWithNetworkPaths; + private TimeCoupledRaoInput timeCoupledRaoInput; private Crac crac1; private Crac crac2; + private final OffsetDateTime timestamp1 = OffsetDateTime.of(2025, 2, 13, 0, 30, 0, 0, ZoneOffset.UTC); + private final OffsetDateTime timestamp2 = OffsetDateTime.of(2025, 2, 13, 1, 30, 0, 0, ZoneOffset.UTC); @BeforeEach void setUp() throws IOException { // we need to import twice the network to avoid variant names conflicts on the same network object String networkFilePath1 = "2Nodes2ParallelLinesPST_0030.uct"; String networkFilePath2 = "2Nodes2ParallelLinesPST_0130.uct"; - Network network1 = Network.read(networkFilePath1, IcsImporterTest.class.getResourceAsStream("/network/" + networkFilePath1)); - Network network2 = Network.read(networkFilePath2, IcsImporterTest.class.getResourceAsStream("/network/" + networkFilePath2)); + Network network1 = LazyNetwork.of(getResourcePath("/network/" + networkFilePath1)); + Network network2 = LazyNetwork.of(getResourcePath("/network/" + networkFilePath2)); // Create postIcsNetwork: networkFilePathPostIcsImport1 = TMP_DIR + networkFilePath1.split(".uct")[0].concat("_modified.jiidm"); @@ -63,16 +66,13 @@ void setUp() throws IOException { crac1 = Crac.read("/crac/crac-0030.json", IcsImporterTest.class.getResourceAsStream("/crac/crac-0030.json"), network1); crac2 = Crac.read("/crac/crac-0130.json", IcsImporterTest.class.getResourceAsStream("/crac/crac-0130.json"), network2); - OffsetDateTime timestamp1 = OffsetDateTime.of(2025, 2, 13, 0, 30, 0, 0, ZoneOffset.UTC); - OffsetDateTime timestamp2 = OffsetDateTime.of(2025, 2, 13, 1, 30, 0, 0, ZoneOffset.UTC); - - TemporalData raoInputs = new TemporalDataImpl<>( + TemporalData raoInputs = new TemporalDataImpl<>( Map.of( - timestamp1, RaoInputWithNetworkPaths.build(getResourcePath("network/" + networkFilePath1), networkFilePathPostIcsImport1, crac1).build(), - timestamp2, RaoInputWithNetworkPaths.build(getResourcePath("network/" + networkFilePath2), networkFilePathPostIcsImport2, crac2).build() + timestamp1, RaoInput.build(network1, crac1).build(), + timestamp2, RaoInput.build(network2, crac2).build() )); - timeCoupledRaoInputWithNetworkPaths = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, new TimeCoupledConstraints()); + timeCoupledRaoInput = new TimeCoupledRaoInput(raoInputs, new TimeCoupledConstraints()); } private String getResourcePath(String resourcePath) { @@ -98,10 +98,10 @@ void testIcsImporterOneAction() throws IOException { InputStream staticInputStream = IcsImporterTest.class.getResourceAsStream("/ics/static.csv"); InputStream seriesInputStream = IcsImporterTest.class.getResourceAsStream("/ics/series.csv"); InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); - IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost); + timeCoupledRaoInput = IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR); - assertEquals(1, timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().size()); - GeneratorConstraints generatorConstraints = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); + assertEquals(1, timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().size()); + GeneratorConstraints generatorConstraints = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); assertEquals("Redispatching_RA_BBE1AA1_GENERATOR", generatorConstraints.getGeneratorId()); assertTrue(generatorConstraints.getDownwardPowerGradient().isPresent()); assertEquals(-10., generatorConstraints.getDownwardPowerGradient().get(), DOUBLE_EPSILON); @@ -122,7 +122,7 @@ void testIcsImporterOneAction() throws IOException { assertEquals(5., ra1.getVariationCost(VariationDirection.UP).get(), DOUBLE_EPSILON); assertTrue(ra1.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra1.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network1 = Network.read(networkFilePathPostIcsImport1); + Network network1 = timeCoupledRaoInput.getRaoInputs().getData(timestamp1).orElseThrow().getNetwork(); Generator generator1 = network1.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(116., generator1.getTargetP(), DOUBLE_EPSILON); assertEquals(10.0, generator1.getMinP(), DOUBLE_EPSILON); @@ -135,7 +135,7 @@ void testIcsImporterOneAction() throws IOException { assertEquals(5., ra2.getVariationCost(VariationDirection.UP).get(), DOUBLE_EPSILON); assertTrue(ra2.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra2.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network2 = Network.read(networkFilePathPostIcsImport2); + Network network2 = timeCoupledRaoInput.getRaoInputs().getData(timestamp2).orElseThrow().getNetwork(); Generator generator2 = network2.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(120., generator2.getTargetP(), DOUBLE_EPSILON); assertEquals(15.0, generator2.getMinP(), DOUBLE_EPSILON); @@ -147,10 +147,10 @@ void testIcsImporterShutDownAndStartUpTrue() throws IOException { InputStream staticInputStream = IcsImporterTest.class.getResourceAsStream("/ics/static_shutdown_startup_true.csv"); InputStream seriesInputStream = IcsImporterTest.class.getResourceAsStream("/ics/series.csv"); InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); - IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost); + IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR); - assertEquals(1, timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().size()); - GeneratorConstraints generatorConstraints = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); + assertEquals(1, timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().size()); + GeneratorConstraints generatorConstraints = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); assertTrue(generatorConstraints.isShutDownAllowed()); assertTrue(generatorConstraints.isStartUpAllowed()); } @@ -163,7 +163,7 @@ void testIcsImporterNoShutDown() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse shutDownAllowed value for raId Redispatching_RA"); } @@ -175,7 +175,7 @@ void testIcsImporterWrongShutDown() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse shutDownAllowed value wrongValue for raId Redispatching_RA"); } @@ -187,7 +187,7 @@ void testIcsImporterNoStartUp() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse startUpAllowed value for raId Redispatching_RA"); } @@ -199,7 +199,7 @@ void testIcsImporterWrongStartUp() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse startUpAllowed value wrongValue for raId Redispatching_RA"); } @@ -211,7 +211,7 @@ void testIcsImporterWithGskNoShutDown() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse shutDownAllowed value for nodeId FFR1AA1"); } @@ -223,7 +223,7 @@ void testIcsImporterWithGskWrongShutDown() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse shutDownAllowed value wrongValue for nodeId FFR1AA1"); } @@ -235,7 +235,7 @@ void testIcsImporterWithGskNoStartUp() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse startUpAllowed value for nodeId FFR1AA1"); } @@ -247,7 +247,7 @@ void testIcsImporterWithGskWrongStartUp() { InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); Assertions.assertThatExceptionOfType(OpenRaoException.class) - .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost)) + .isThrownBy(() -> IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR)) .withMessage("Could not parse startUpAllowed value wrongValue for nodeId FFR1AA1"); } @@ -257,10 +257,10 @@ void testIcsImporterOneActionNoPminRd() throws IOException { InputStream staticInputStream = IcsImporterTest.class.getResourceAsStream("/ics/static.csv"); InputStream seriesInputStream = IcsImporterTest.class.getResourceAsStream("/ics/series_no_pmin_rd.csv"); InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); - IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost); + timeCoupledRaoInput = IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR); - assertEquals(1, timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().size()); - GeneratorConstraints generatorConstraints = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); + assertEquals(1, timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().size()); + GeneratorConstraints generatorConstraints = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); assertEquals("Redispatching_RA_BBE1AA1_GENERATOR", generatorConstraints.getGeneratorId()); assertTrue(generatorConstraints.getDownwardPowerGradient().isPresent()); assertEquals(-10., generatorConstraints.getDownwardPowerGradient().get(), DOUBLE_EPSILON); @@ -281,7 +281,7 @@ void testIcsImporterOneActionNoPminRd() throws IOException { assertEquals(5., ra1.getVariationCost(VariationDirection.UP).get(), DOUBLE_EPSILON); assertTrue(ra1.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra1.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network1 = Network.read(networkFilePathPostIcsImport1); + Network network1 = timeCoupledRaoInput.getRaoInputs().getData(timestamp1).orElseThrow().getNetwork(); Generator generator1 = network1.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(116., generator1.getTargetP(), DOUBLE_EPSILON); assertEquals(1.001, generator1.getMinP(), DOUBLE_EPSILON); @@ -294,7 +294,7 @@ void testIcsImporterOneActionNoPminRd() throws IOException { assertEquals(5., ra2.getVariationCost(VariationDirection.UP).get(), DOUBLE_EPSILON); assertTrue(ra2.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra2.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network2 = Network.read(networkFilePathPostIcsImport2); + Network network2 = timeCoupledRaoInput.getRaoInputs().getData(timestamp2).orElseThrow().getNetwork(); Generator generator2 = network2.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(120., generator2.getTargetP(), DOUBLE_EPSILON); assertEquals(1.001, generator2.getMinP(), DOUBLE_EPSILON); @@ -306,10 +306,10 @@ void testIcsImporterOneActionNoGradientNoLeadNoLag() throws IOException { InputStream staticInputStream = IcsImporterTest.class.getResourceAsStream("/ics/static_no_gradient_no_lead_no_lag.csv"); InputStream seriesInputStream = IcsImporterTest.class.getResourceAsStream("/ics/series.csv"); InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); - IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost); + timeCoupledRaoInput = IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR); - assertEquals(1, timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().size()); - GeneratorConstraints generatorConstraints = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); + assertEquals(1, timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().size()); + GeneratorConstraints generatorConstraints = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().iterator().next(); assertEquals("Redispatching_RA_BBE1AA1_GENERATOR", generatorConstraints.getGeneratorId()); assertTrue(generatorConstraints.getDownwardPowerGradient().isPresent()); assertEquals(-1000.0, generatorConstraints.getDownwardPowerGradient().get(), DOUBLE_EPSILON); @@ -328,7 +328,7 @@ void testIcsImporterOneActionNoGradientNoLeadNoLag() throws IOException { assertEquals(5., ra1.getVariationCost(VariationDirection.UP).get(), DOUBLE_EPSILON); assertTrue(ra1.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra1.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network1 = Network.read(networkFilePathPostIcsImport1); + Network network1 = timeCoupledRaoInput.getRaoInputs().getData(timestamp1).orElseThrow().getNetwork(); Generator generator1 = network1.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(116., generator1.getTargetP(), DOUBLE_EPSILON); assertEquals(10.0, generator1.getMinP(), DOUBLE_EPSILON); @@ -341,7 +341,7 @@ void testIcsImporterOneActionNoGradientNoLeadNoLag() throws IOException { assertEquals(5., ra2.getVariationCost(VariationDirection.UP).get(), DOUBLE_EPSILON); assertTrue(ra2.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra2.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network2 = Network.read(networkFilePathPostIcsImport2); + Network network2 = timeCoupledRaoInput.getRaoInputs().getData(timestamp2).orElseThrow().getNetwork(); Generator generator2 = network2.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(120., generator2.getTargetP(), DOUBLE_EPSILON); assertEquals(15.0, generator2.getMinP(), DOUBLE_EPSILON); @@ -353,9 +353,9 @@ void testIcsImporterGradientNotOk() throws IOException { InputStream staticInputStream = IcsImporterTest.class.getResourceAsStream("/ics/static.csv"); InputStream seriesInputStream = IcsImporterTest.class.getResourceAsStream("/ics/series_gradient_not_ok.csv"); InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); - IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost); + timeCoupledRaoInput = IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR); - assertEquals(0, timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().size()); + assertEquals(0, timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().size()); assertEquals(0, crac1.getInjectionRangeActions().size()); assertEquals(0, crac2.getInjectionRangeActions().size()); } @@ -366,10 +366,10 @@ void testIcsImporterWithGSK() throws IOException { InputStream staticInputStream = IcsImporterTest.class.getResourceAsStream("/ics/static_with_gsk.csv"); InputStream seriesInputStream = IcsImporterTest.class.getResourceAsStream("/ics/series.csv"); InputStream gskInputStream = IcsImporterTest.class.getResourceAsStream("/glsk/gsk.csv"); - IcsImporter.populateInputWithICS(timeCoupledRaoInputWithNetworkPaths, staticInputStream, seriesInputStream, gskInputStream, cost, cost); + timeCoupledRaoInput = IcsImporter.populateInputWithICS(timeCoupledRaoInput, staticInputStream, seriesInputStream, gskInputStream, cost, cost, TMP_DIR); - assertEquals(2, timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().size()); - GeneratorConstraints generatorConstraintsBE = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().stream() + assertEquals(2, timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().size()); + GeneratorConstraints generatorConstraintsBE = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().stream() .filter(gc -> gc.getGeneratorId().contains("BE")) .findFirst().orElseThrow(); assertEquals("Redispatching_RA_BBE1AA1_GENERATOR", generatorConstraintsBE.getGeneratorId()); @@ -381,7 +381,7 @@ void testIcsImporterWithGSK() throws IOException { assertEquals(1.0, generatorConstraintsBE.getLagTime().get(), DOUBLE_EPSILON); assertFalse(generatorConstraintsBE.isShutDownAllowed()); assertFalse(generatorConstraintsBE.isStartUpAllowed()); - GeneratorConstraints generatorConstraintsFR = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().stream() + GeneratorConstraints generatorConstraintsFR = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().stream() .filter(gc -> gc.getGeneratorId().contains("FR")) .findFirst().orElseThrow(); assertEquals("Redispatching_RA_FFR1AA1_GENERATOR", generatorConstraintsFR.getGeneratorId()); @@ -403,7 +403,7 @@ void testIcsImporterWithGSK() throws IOException { assertTrue(ra1.getVariationCost(VariationDirection.DOWN).isPresent()); assertEquals(5., ra1.getVariationCost(VariationDirection.DOWN).get(), DOUBLE_EPSILON); - Network network1 = Network.read(networkFilePathPostIcsImport1); + Network network1 = timeCoupledRaoInput.getRaoInputs().getData(timestamp1).orElseThrow().getNetwork(); Generator generatorBE = network1.getGenerator("Redispatching_RA_BBE1AA1_GENERATOR"); assertEquals(116. * 0.6, generatorBE.getTargetP(), DOUBLE_EPSILON); assertEquals(10.0 * 0.6, generatorBE.getMinP(), DOUBLE_EPSILON); diff --git a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/LazyNetwork.java b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/LazyNetwork.java new file mode 100644 index 0000000000..0adfaf1c1b --- /dev/null +++ b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/LazyNetwork.java @@ -0,0 +1,1500 @@ +/* + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * 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/. + */ + +package com.powsybl.openrao.raoapi; + +import com.powsybl.commons.datasource.DataSource; +import com.powsybl.commons.datasource.ReadOnlyDataSource; +import com.powsybl.commons.extensions.Extension; +import com.powsybl.commons.extensions.ExtensionAdder; +import com.powsybl.commons.report.ReportNode; +import com.powsybl.computation.ComputationManager; +import com.powsybl.iidm.network.Area; +import com.powsybl.iidm.network.AreaAdder; +import com.powsybl.iidm.network.Battery; +import com.powsybl.iidm.network.Branch; +import com.powsybl.iidm.network.BusbarSection; +import com.powsybl.iidm.network.Component; +import com.powsybl.iidm.network.Connectable; +import com.powsybl.iidm.network.ContainerType; +import com.powsybl.iidm.network.Country; +import com.powsybl.iidm.network.DanglingLine; +import com.powsybl.iidm.network.DanglingLineFilter; +import com.powsybl.iidm.network.DcBus; +import com.powsybl.iidm.network.DcConnectable; +import com.powsybl.iidm.network.DcGround; +import com.powsybl.iidm.network.DcGroundAdder; +import com.powsybl.iidm.network.DcLine; +import com.powsybl.iidm.network.DcLineAdder; +import com.powsybl.iidm.network.DcNode; +import com.powsybl.iidm.network.DcNodeAdder; +import com.powsybl.iidm.network.DcSwitch; +import com.powsybl.iidm.network.DcSwitchAdder; +import com.powsybl.iidm.network.ExportersLoader; +import com.powsybl.iidm.network.Generator; +import com.powsybl.iidm.network.Ground; +import com.powsybl.iidm.network.HvdcConverterStation; +import com.powsybl.iidm.network.HvdcLine; +import com.powsybl.iidm.network.HvdcLineAdder; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.ImportConfig; +import com.powsybl.iidm.network.ImportersLoader; +import com.powsybl.iidm.network.LccConverterStation; +import com.powsybl.iidm.network.Line; +import com.powsybl.iidm.network.LineAdder; +import com.powsybl.iidm.network.LineCommutatedConverter; +import com.powsybl.iidm.network.Load; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.NetworkListener; +import com.powsybl.iidm.network.OverloadManagementSystem; +import com.powsybl.iidm.network.ReportNodeContext; +import com.powsybl.iidm.network.ShuntCompensator; +import com.powsybl.iidm.network.StaticVarCompensator; +import com.powsybl.iidm.network.Substation; +import com.powsybl.iidm.network.SubstationAdder; +import com.powsybl.iidm.network.Switch; +import com.powsybl.iidm.network.ThreeWindingsTransformer; +import com.powsybl.iidm.network.TieLine; +import com.powsybl.iidm.network.TieLineAdder; +import com.powsybl.iidm.network.TwoWindingsTransformer; +import com.powsybl.iidm.network.ValidationLevel; +import com.powsybl.iidm.network.VariantManager; +import com.powsybl.iidm.network.VoltageAngleLimit; +import com.powsybl.iidm.network.VoltageAngleLimitAdder; +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.VoltageLevelAdder; +import com.powsybl.iidm.network.VoltageSourceConverter; +import com.powsybl.iidm.network.VscConverterStation; + +import java.nio.file.Path; +import java.time.ZonedDateTime; +import java.util.Collection; +import java.util.Optional; +import java.util.Properties; +import java.util.Set; +import java.util.stream.Stream; + +/** + * A LazyNetwork is a specific {@link Network} implementation that is defined using a file path. + * The actual network data is only loaded in memory the first time a method is called on the lazy network. + * + * @author Thomas Bouquet {@literal } + */ +public class LazyNetwork implements Network { + private final String networkPath; + private boolean isLoaded; + private Network network; + + public LazyNetwork(String networkPath) { + this.networkPath = networkPath; + this.isLoaded = false; + } + + private void load() { + if (!isLoaded) { + network = Network.read(networkPath); + isLoaded = true; + } + } + + @Override + public Collection getSubnetworks() { + load(); + return network.getSubnetworks(); + } + + @Override + public Network getSubnetwork(String id) { + load(); + return network.getSubnetwork(id); + } + + @Override + public void update(ReadOnlyDataSource dataSource) { + load(); + network.update(dataSource); + } + + @Override + public void update(ReadOnlyDataSource dataSource, Properties properties) { + load(); + network.update(dataSource, properties); + } + + @Override + public void update(ReadOnlyDataSource dataSource, Properties parameters, ReportNode reportNode) { + load(); + network.update(dataSource, parameters, reportNode); + } + + @Override + public void update(ReadOnlyDataSource dataSource, ComputationManager computationManager, ImportConfig config, Properties parameters, ImportersLoader loader, ReportNode reportNode) { + load(); + network.update(dataSource, computationManager, config, parameters, loader, reportNode); + } + + @Override + public Collection getDcComponents() { + load(); + return network.getDcComponents(); + } + + @Override + public ZonedDateTime getCaseDate() { + load(); + return network.getCaseDate(); + } + + @Override + public Network setCaseDate(ZonedDateTime zonedDateTime) { + load(); + return network.setCaseDate(zonedDateTime); + } + + @Override + public int getForecastDistance() { + load(); + return network.getForecastDistance(); + } + + @Override + public Network setForecastDistance(int i) { + load(); + return network.setForecastDistance(i); + } + + @Override + public String getSourceFormat() { + load(); + return network.getSourceFormat(); + } + + @Override + public VariantManager getVariantManager() { + load(); + return network.getVariantManager(); + } + + @Override + public void allowReportNodeContextMultiThreadAccess(boolean b) { + load(); + network.allowReportNodeContextMultiThreadAccess(b); + } + + @Override + public ReportNodeContext getReportNodeContext() { + load(); + return network.getReportNodeContext(); + } + + @Override + public Set getCountries() { + load(); + return network.getCountries(); + } + + @Override + public int getCountryCount() { + load(); + return network.getCountryCount(); + } + + @Override + public Iterable getAreaTypes() { + load(); + return network.getAreaTypes(); + } + + @Override + public Stream getAreaTypeStream() { + load(); + return network.getAreaTypeStream(); + } + + @Override + public int getAreaTypeCount() { + load(); + return network.getAreaTypeCount(); + } + + @Override + public AreaAdder newArea() { + load(); + return network.newArea(); + } + + @Override + public Iterable getAreas() { + load(); + return network.getAreas(); + } + + @Override + public Stream getAreaStream() { + load(); + return network.getAreaStream(); + } + + @Override + public Area getArea(String s) { + load(); + return network.getArea(s); + } + + @Override + public int getAreaCount() { + load(); + return network.getAreaCount(); + } + + @Override + public SubstationAdder newSubstation() { + load(); + return network.newSubstation(); + } + + @Override + public Iterable getSubstations() { + load(); + return network.getSubstations(); + } + + @Override + public Stream getSubstationStream() { + load(); + return network.getSubstationStream(); + } + + @Override + public int getSubstationCount() { + load(); + return network.getSubstationCount(); + } + + @Override + public Iterable getSubstations(Country country, String s, String... strings) { + load(); + return network.getSubstations(country, s, strings); + } + + @Override + public Iterable getSubstations(String s, String s1, String... strings) { + load(); + return network.getSubstations(s, s1, strings); + } + + @Override + public Substation getSubstation(String s) { + load(); + return network.getSubstation(s); + } + + @Override + public VoltageLevelAdder newVoltageLevel() { + load(); + return network.newVoltageLevel(); + } + + @Override + public Iterable getVoltageLevels() { + load(); + return network.getVoltageLevels(); + } + + @Override + public Stream getVoltageLevelStream() { + load(); + return network.getVoltageLevelStream(); + } + + @Override + public int getVoltageLevelCount() { + load(); + return network.getVoltageLevelCount(); + } + + @Override + public VoltageLevel getVoltageLevel(String s) { + load(); + return network.getVoltageLevel(s); + } + + @Override + public LineAdder newLine() { + load(); + return network.newLine(); + } + + @Override + public LineAdder newLine(Line line) { + load(); + return network.newLine(line); + } + + @Override + public Iterable getLines() { + load(); + return network.getLines(); + } + + @Override + public Iterable getTieLines() { + load(); + return network.getTieLines(); + } + + @Override + public Branch getBranch(String s) { + load(); + return network.getBranch(s); + } + + @Override + public Iterable getBranches() { + load(); + return network.getBranches(); + } + + @Override + public Stream getBranchStream() { + load(); + return network.getBranchStream(); + } + + @Override + public int getBranchCount() { + load(); + return network.getBranchCount(); + } + + @Override + public Stream getLineStream() { + load(); + return network.getLineStream(); + } + + @Override + public Stream getTieLineStream() { + load(); + return network.getTieLineStream(); + } + + @Override + public int getLineCount() { + load(); + return network.getLineCount(); + } + + @Override + public int getTieLineCount() { + load(); + return network.getTieLineCount(); + } + + @Override + public Line getLine(String s) { + load(); + return network.getLine(s); + } + + @Override + public TieLine getTieLine(String s) { + load(); + return network.getTieLine(s); + } + + @Override + public TieLineAdder newTieLine() { + load(); + return network.newTieLine(); + } + + @Override + public Iterable getTwoWindingsTransformers() { + load(); + return network.getTwoWindingsTransformers(); + } + + @Override + public Stream getTwoWindingsTransformerStream() { + load(); + return network.getTwoWindingsTransformerStream(); + } + + @Override + public int getTwoWindingsTransformerCount() { + load(); + return network.getTwoWindingsTransformerCount(); + } + + @Override + public TwoWindingsTransformer getTwoWindingsTransformer(String s) { + load(); + return network.getTwoWindingsTransformer(s); + } + + @Override + public Iterable getThreeWindingsTransformers() { + load(); + return network.getThreeWindingsTransformers(); + } + + @Override + public Stream getThreeWindingsTransformerStream() { + load(); + return network.getThreeWindingsTransformerStream(); + } + + @Override + public int getThreeWindingsTransformerCount() { + load(); + return network.getThreeWindingsTransformerCount(); + } + + @Override + public ThreeWindingsTransformer getThreeWindingsTransformer(String s) { + load(); + return network.getThreeWindingsTransformer(s); + } + + @Override + public Iterable getOverloadManagementSystems() { + load(); + return network.getOverloadManagementSystems(); + } + + @Override + public Stream getOverloadManagementSystemStream() { + load(); + return network.getOverloadManagementSystemStream(); + } + + @Override + public int getOverloadManagementSystemCount() { + load(); + return network.getOverloadManagementSystemCount(); + } + + @Override + public OverloadManagementSystem getOverloadManagementSystem(String s) { + load(); + return network.getOverloadManagementSystem(s); + } + + @Override + public Iterable getGenerators() { + load(); + return network.getGenerators(); + } + + @Override + public Stream getGeneratorStream() { + load(); + return network.getGeneratorStream(); + } + + @Override + public int getGeneratorCount() { + load(); + return network.getGeneratorCount(); + } + + @Override + public Generator getGenerator(String s) { + load(); + return network.getGenerator(s); + } + + @Override + public Iterable getBatteries() { + load(); + return network.getBatteries(); + } + + @Override + public Stream getBatteryStream() { + load(); + return network.getBatteryStream(); + } + + @Override + public int getBatteryCount() { + load(); + return network.getBatteryCount(); + } + + @Override + public Battery getBattery(String s) { + load(); + return network.getBattery(s); + } + + @Override + public Iterable getLoads() { + load(); + return network.getLoads(); + } + + @Override + public Stream getLoadStream() { + load(); + return network.getLoadStream(); + } + + @Override + public int getLoadCount() { + load(); + return network.getLoadCount(); + } + + @Override + public Load getLoad(String s) { + load(); + return network.getLoad(s); + } + + @Override + public Iterable getShuntCompensators() { + load(); + return network.getShuntCompensators(); + } + + @Override + public Stream getShuntCompensatorStream() { + load(); + return network.getShuntCompensatorStream(); + } + + @Override + public int getShuntCompensatorCount() { + load(); + return network.getShuntCompensatorCount(); + } + + @Override + public ShuntCompensator getShuntCompensator(String s) { + load(); + return network.getShuntCompensator(s); + } + + @Override + public Iterable getDanglingLines(DanglingLineFilter danglingLineFilter) { + load(); + return network.getDanglingLines(danglingLineFilter); + } + + @Override + public Iterable getDanglingLines() { + load(); + return network.getDanglingLines(); + } + + @Override + public Stream getDanglingLineStream(DanglingLineFilter danglingLineFilter) { + load(); + return network.getDanglingLineStream(danglingLineFilter); + } + + @Override + public Stream getDanglingLineStream() { + load(); + return network.getDanglingLineStream(); + } + + @Override + public int getDanglingLineCount() { + load(); + return network.getDanglingLineCount(); + } + + @Override + public DanglingLine getDanglingLine(String s) { + load(); + return network.getDanglingLine(s); + } + + @Override + public Iterable getStaticVarCompensators() { + load(); + return network.getStaticVarCompensators(); + } + + @Override + public Stream getStaticVarCompensatorStream() { + load(); + return network.getStaticVarCompensatorStream(); + } + + @Override + public int getStaticVarCompensatorCount() { + load(); + return network.getStaticVarCompensatorCount(); + } + + @Override + public StaticVarCompensator getStaticVarCompensator(String s) { + load(); + return network.getStaticVarCompensator(s); + } + + @Override + public Switch getSwitch(String s) { + load(); + return network.getSwitch(s); + } + + @Override + public Iterable getSwitches() { + load(); + return network.getSwitches(); + } + + @Override + public Stream getSwitchStream() { + load(); + return network.getSwitchStream(); + } + + @Override + public int getSwitchCount() { + load(); + return network.getSwitchCount(); + } + + @Override + public BusbarSection getBusbarSection(String s) { + load(); + return network.getBusbarSection(s); + } + + @Override + public Iterable getBusbarSections() { + load(); + return network.getBusbarSections(); + } + + @Override + public Stream getBusbarSectionStream() { + load(); + return network.getBusbarSectionStream(); + } + + @Override + public int getBusbarSectionCount() { + load(); + return network.getBusbarSectionCount(); + } + + @Override + public Iterable> getHvdcConverterStations() { + load(); + return network.getHvdcConverterStations(); + } + + @Override + public Stream> getHvdcConverterStationStream() { + load(); + return network.getHvdcConverterStationStream(); + } + + @Override + public int getHvdcConverterStationCount() { + load(); + return network.getHvdcConverterStationCount(); + } + + @Override + public HvdcConverterStation getHvdcConverterStation(String s) { + load(); + return network.getHvdcConverterStation(s); + } + + @Override + public Iterable getLccConverterStations() { + load(); + return network.getLccConverterStations(); + } + + @Override + public Stream getLccConverterStationStream() { + load(); + return network.getLccConverterStationStream(); + } + + @Override + public int getLccConverterStationCount() { + load(); + return network.getLccConverterStationCount(); + } + + @Override + public LccConverterStation getLccConverterStation(String s) { + load(); + return network.getLccConverterStation(s); + } + + @Override + public Iterable getVscConverterStations() { + load(); + return network.getVscConverterStations(); + } + + @Override + public Stream getVscConverterStationStream() { + load(); + return network.getVscConverterStationStream(); + } + + @Override + public int getVscConverterStationCount() { + load(); + return network.getVscConverterStationCount(); + } + + @Override + public VscConverterStation getVscConverterStation(String s) { + load(); + return network.getVscConverterStation(s); + } + + @Override + public Iterable getHvdcLines() { + load(); + return network.getHvdcLines(); + } + + @Override + public Stream getHvdcLineStream() { + load(); + return network.getHvdcLineStream(); + } + + @Override + public int getHvdcLineCount() { + load(); + return network.getHvdcLineCount(); + } + + @Override + public HvdcLine getHvdcLine(String s) { + load(); + return network.getHvdcLine(s); + } + + @Override + public HvdcLine getHvdcLine(HvdcConverterStation converterStation) { + load(); + return network.getHvdcLine(converterStation); + } + + @Override + public HvdcLineAdder newHvdcLine() { + load(); + return network.newHvdcLine(); + } + + @Override + public Iterable getGrounds() { + load(); + return network.getGrounds(); + } + + @Override + public Stream getGroundStream() { + load(); + return network.getGroundStream(); + } + + @Override + public int getGroundCount() { + load(); + return network.getGroundCount(); + } + + @Override + public Ground getGround(String s) { + load(); + return network.getGround(s); + } + + @Override + public DcNodeAdder newDcNode() { + load(); + return network.newDcNode(); + } + + @Override + public Iterable getDcNodes() { + load(); + return network.getDcNodes(); + } + + @Override + public Stream getDcNodeStream() { + load(); + return network.getDcNodeStream(); + } + + @Override + public int getDcNodeCount() { + load(); + return network.getDcNodeCount(); + } + + @Override + public DcNode getDcNode(String s) { + load(); + return network.getDcNode(s); + } + + @Override + public DcLineAdder newDcLine() { + load(); + return network.newDcLine(); + } + + @Override + public Iterable getDcLines() { + load(); + return network.getDcLines(); + } + + @Override + public Stream getDcLineStream() { + load(); + return network.getDcLineStream(); + } + + @Override + public int getDcLineCount() { + load(); + return network.getDcLineCount(); + } + + @Override + public DcLine getDcLine(String s) { + load(); + return network.getDcLine(s); + } + + @Override + public DcSwitchAdder newDcSwitch() { + load(); + return network.newDcSwitch(); + } + + @Override + public Iterable getDcSwitches() { + load(); + return network.getDcSwitches(); + } + + @Override + public Stream getDcSwitchStream() { + load(); + return network.getDcSwitchStream(); + } + + @Override + public int getDcSwitchCount() { + load(); + return network.getDcSwitchCount(); + } + + @Override + public DcSwitch getDcSwitch(String s) { + load(); + return network.getDcSwitch(s); + } + + @Override + public DcGroundAdder newDcGround() { + load(); + return network.newDcGround(); + } + + @Override + public Iterable getDcGrounds() { + load(); + return network.getDcGrounds(); + } + + @Override + public Stream getDcGroundStream() { + load(); + return network.getDcGroundStream(); + } + + @Override + public int getDcGroundCount() { + load(); + return network.getDcGroundCount(); + } + + @Override + public DcGround getDcGround(String s) { + load(); + return network.getDcGround(s); + } + + @Override + public Iterable getLineCommutatedConverters() { + load(); + return network.getLineCommutatedConverters(); + } + + @Override + public Stream getLineCommutatedConverterStream() { + load(); + return network.getLineCommutatedConverterStream(); + } + + @Override + public int getLineCommutatedConverterCount() { + load(); + return network.getLineCommutatedConverterCount(); + } + + @Override + public LineCommutatedConverter getLineCommutatedConverter(String s) { + load(); + return network.getLineCommutatedConverter(s); + } + + @Override + public Iterable getVoltageSourceConverters() { + load(); + return network.getVoltageSourceConverters(); + } + + @Override + public Stream getVoltageSourceConverterStream() { + load(); + return network.getVoltageSourceConverterStream(); + } + + @Override + public int getVoltageSourceConverterCount() { + load(); + return network.getVoltageSourceConverterCount(); + } + + @Override + public VoltageSourceConverter getVoltageSourceConverter(String s) { + load(); + return network.getVoltageSourceConverter(s); + } + + @Override + public DcBus getDcBus(String s) { + load(); + return network.getDcBus(s); + } + + @Override + public Iterable getDcBuses() { + load(); + return network.getDcBuses(); + } + + @Override + public Stream getDcBusStream() { + load(); + return network.getDcBusStream(); + } + + @Override + public int getDcBusCount() { + load(); + return network.getDcBusCount(); + } + + @Override + public Identifiable getIdentifiable(String s) { + load(); + return network.getIdentifiable(s); + } + + @Override + public Collection> getIdentifiables() { + load(); + return network.getIdentifiables(); + } + + @Override + public Iterable getConnectables(Class clazz) { + load(); + return network.getConnectables(clazz); + } + + @Override + public Stream getConnectableStream(Class clazz) { + load(); + return network.getConnectableStream(clazz); + } + + @Override + public int getConnectableCount(Class clazz) { + load(); + return network.getConnectableCount(clazz); + } + + @Override + public Iterable getConnectables() { + load(); + return network.getConnectables(); + } + + @Override + public Stream getConnectableStream() { + load(); + return network.getConnectableStream(); + } + + @Override + public Connectable getConnectable(String id) { + load(); + return network.getConnectable(id); + } + + @Override + public int getConnectableCount() { + load(); + return network.getConnectableCount(); + } + + @Override + public Iterable getDcConnectables(Class clazz) { + load(); + return network.getDcConnectables(clazz); + } + + @Override + public Stream getDcConnectableStream(Class clazz) { + load(); + return network.getDcConnectableStream(clazz); + } + + @Override + public int getDcConnectableCount(Class clazz) { + load(); + return network.getDcConnectableCount(clazz); + } + + @Override + public Iterable getDcConnectables() { + load(); + return network.getDcConnectables(); + } + + @Override + public Stream getDcConnectableStream() { + load(); + return network.getDcConnectableStream(); + } + + @Override + public DcConnectable getDcConnectable(String id) { + load(); + return network.getDcConnectable(id); + } + + @Override + public int getDcConnectableCount() { + load(); + return network.getDcConnectableCount(); + } + + @Override + public BusBreakerView getBusBreakerView() { + load(); + return network.getBusBreakerView(); + } + + @Override + public BusView getBusView() { + load(); + return network.getBusView(); + } + + @Override + public VoltageAngleLimitAdder newVoltageAngleLimit() { + load(); + return network.newVoltageAngleLimit(); + } + + @Override + public Iterable getVoltageAngleLimits() { + load(); + return network.getVoltageAngleLimits(); + } + + @Override + public Stream getVoltageAngleLimitsStream() { + load(); + return network.getVoltageAngleLimitsStream(); + } + + @Override + public VoltageAngleLimit getVoltageAngleLimit(String s) { + load(); + return network.getVoltageAngleLimit(s); + } + + @Override + public Network createSubnetwork(String s, String s1, String s2) { + load(); + return network.createSubnetwork(s, s1, s2); + } + + @Override + public Network detach() { + load(); + return network.detach(); + } + + @Override + public boolean isDetachable() { + load(); + return network.isDetachable(); + } + + @Override + public Set> getBoundaryElements() { + load(); + return network.getBoundaryElements(); + } + + @Override + public boolean isBoundaryElement(Identifiable identifiable) { + load(); + return network.isBoundaryElement(identifiable); + } + + @Override + public void flatten() { + load(); + network.flatten(); + } + + @Override + public void addListener(NetworkListener networkListener) { + load(); + network.addListener(networkListener); + } + + @Override + public void removeListener(NetworkListener networkListener) { + load(); + network.removeListener(networkListener); + } + + @Override + public IdentifiableType getType() { + load(); + return network.getType(); + } + + @Override + public ValidationLevel runValidationChecks() { + load(); + return network.runValidationChecks(); + } + + @Override + public ValidationLevel runValidationChecks(boolean throwsException) { + load(); + return network.runValidationChecks(throwsException); + } + + @Override + public ValidationLevel runValidationChecks(boolean throwsException, ReportNode reportNode) { + load(); + return network.runValidationChecks(throwsException, reportNode); + } + + @Override + public ValidationLevel getValidationLevel() { + load(); + return network.getValidationLevel(); + } + + @Override + public Network setMinimumAcceptableValidationLevel(ValidationLevel validationLevel) { + load(); + return network.setMinimumAcceptableValidationLevel(validationLevel); + } + + @Override + public Stream> getIdentifiableStream(IdentifiableType identifiableType) { + load(); + return network.getIdentifiableStream(identifiableType); + } + + @Override + public void write(ExportersLoader loader, String format, Properties parameters, DataSource dataSource, ReportNode reportNode) { + load(); + network.write(loader, format, parameters, dataSource, reportNode); + } + + @Override + public void write(ExportersLoader loader, String format, Properties parameters, DataSource dataSource) { + load(); + network.write(loader, format, parameters, dataSource); + } + + @Override + public void write(String format, Properties parameters, DataSource dataSource) { + load(); + network.write(format, parameters, dataSource); + } + + @Override + public void write(ExportersLoader loader, String format, Properties parameters, Path file, ReportNode reportNode) { + load(); + network.write(loader, format, parameters, file, reportNode); + } + + @Override + public void write(ExportersLoader loader, String format, Properties parameters, Path file) { + load(); + network.write(loader, format, parameters, file); + } + + @Override + public void write(String format, Properties parameters, Path file) { + load(); + network.write(format, parameters, file); + } + + @Override + public void write(ExportersLoader loader, String format, Properties parameters, String directory, String baseName, ReportNode reportNode) { + load(); + network.write(loader, format, parameters, directory, baseName, reportNode); + } + + @Override + public void write(ExportersLoader loader, String format, Properties parameters, String directory, String basename) { + load(); + network.write(loader, format, parameters, directory, basename); + } + + @Override + public void write(String format, Properties parameters, String directory, String baseName) { + load(); + network.write(format, parameters, directory, baseName); + } + + @Override + public ContainerType getContainerType() { + load(); + return network.getContainerType(); + } + + @Override + public Network getNetwork() { + load(); + return network.getNetwork(); + } + + @Override + public Network getParentNetwork() { + load(); + return network.getParentNetwork(); + } + + @Override + public String getId() { + load(); + return network.getId(); + } + + @Override + public Set getAliases() { + load(); + return network.getAliases(); + } + + @Override + public Optional getAliasFromType(String aliasType) { + load(); + return network.getAliasFromType(aliasType); + } + + @Override + public Optional getAliasType(String alias) { + load(); + return network.getAliasType(alias); + } + + @Override + public void addAlias(String alias) { + load(); + network.addAlias(alias); + } + + @Override + public void addAlias(String alias, boolean ensureAliasUnicity) { + load(); + network.addAlias(alias, ensureAliasUnicity); + } + + @Override + public void addAlias(String alias, String aliasType) { + load(); + network.addAlias(alias, aliasType); + } + + @Override + public void addAlias(String alias, String aliasType, boolean ensureAliasUnicity) { + load(); + network.addAlias(alias, aliasType, ensureAliasUnicity); + } + + @Override + public void removeAlias(String alias) { + load(); + network.removeAlias(alias); + } + + @Override + public boolean hasAliases() { + load(); + return network.hasAliases(); + } + + @Override + public Optional getOptionalName() { + load(); + return network.getOptionalName(); + } + + @Override + public String getNameOrId() { + load(); + return network.getNameOrId(); + } + + @Override + public Network setName(String name) { + load(); + return network.setName(name); + } + + @Override + public boolean isFictitious() { + load(); + return network.isFictitious(); + } + + @Override + public void setFictitious(boolean fictitious) { + load(); + network.setFictitious(fictitious); + } + + @Override + public > void addExtension(Class aClass, E e) { + load(); + network.addExtension(aClass, e); + } + + @Override + public > E getExtension(Class aClass) { + load(); + return network.getExtension(aClass); + } + + @Override + public > E getExtensionByName(String s) { + load(); + return network.getExtensionByName(s); + } + + @Override + public > boolean removeExtension(Class aClass) { + load(); + return network.removeExtension(aClass); + } + + @Override + public > Collection getExtensions() { + load(); + return network.getExtensions(); + } + + @Override + public String getImplementationName() { + load(); + return network.getImplementationName(); + } + + @Override + public , B extends ExtensionAdder> B newExtension(Class type) { + load(); + return network.newExtension(type); + } + + @Override + public boolean hasProperty() { + load(); + return network.hasProperty(); + } + + @Override + public boolean hasProperty(String s) { + load(); + return network.hasProperty(s); + } + + @Override + public String getProperty(String s) { + load(); + return network.getProperty(s); + } + + @Override + public String getProperty(String s, String s1) { + load(); + return network.getProperty(s, s1); + } + + @Override + public String setProperty(String s, String s1) { + load(); + return network.setProperty(s, s1); + } + + @Override + public boolean removeProperty(String s) { + load(); + return network.removeProperty(s); + } + + @Override + public Set getPropertyNames() { + load(); + return network.getPropertyNames(); + } + + @Override + public boolean equals(Object o) { + load(); + return network.equals(o); + } + + @Override + public int hashCode() { + load(); + return network.hashCode(); + } + + public static Network of(String networkPath) { + return new LazyNetwork(networkPath); + } +} diff --git a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/RaoInputWithNetworkPaths.java b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/RaoInputWithNetworkPaths.java deleted file mode 100644 index d8e3b44825..0000000000 --- a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/RaoInputWithNetworkPaths.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2025, RTE (http://www.rte-france.com) - * 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/. - */ - -package com.powsybl.openrao.raoapi; - -import com.powsybl.iidm.network.Network; -import com.powsybl.openrao.data.crac.api.Crac; - -/** - * @author Philippe Edwards {@literal } - */ -public final class RaoInputWithNetworkPaths { - - public static final class RaoInputWithNetworkPathBuilder { - private Crac crac; - private String initalNetworkPath; - private String postIcsImportNetworkPath; - - private RaoInputWithNetworkPathBuilder() { - } - - public RaoInputWithNetworkPathBuilder withCrac(Crac crac) { - this.crac = crac; - return this; - } - - public RaoInputWithNetworkPathBuilder withInitialNetworkPath(String initialNetworkPath) { - this.initalNetworkPath = initialNetworkPath; - return this; - } - - public RaoInputWithNetworkPathBuilder withPostIcsImportNetworkPath(String postIcsImportNetworkPath) { - this.postIcsImportNetworkPath = postIcsImportNetworkPath; - return this; - } - - public RaoInputWithNetworkPaths build() { - RaoInputWithNetworkPaths raoInputWithNetworkPaths = new RaoInputWithNetworkPaths(); - raoInputWithNetworkPaths.crac = crac; - raoInputWithNetworkPaths.initialNetworkPath = initalNetworkPath; - raoInputWithNetworkPaths.postIcsImportNetworkPath = postIcsImportNetworkPath; - return raoInputWithNetworkPaths; - } - } - - private Crac crac; - private String initialNetworkPath; - private String postIcsImportNetworkPath; - - private RaoInputWithNetworkPaths() { - } - - public static RaoInputWithNetworkPathBuilder build(String initialNetworkPath, String postIcsImportNetworkPath, Crac crac) { - return new RaoInputWithNetworkPathBuilder().withInitialNetworkPath(initialNetworkPath).withPostIcsImportNetworkPath(postIcsImportNetworkPath).withCrac(crac); - } - - public static RaoInputWithNetworkPathBuilder build(String initialNetworkPath, Crac crac) { - return new RaoInputWithNetworkPathBuilder().withInitialNetworkPath(initialNetworkPath).withCrac(crac); - } - - public Crac getCrac() { - return crac; - } - - public String getInitialNetworkPath() { - return initialNetworkPath; - } - - public String getPostIcsImportNetworkPath() { - return postIcsImportNetworkPath; - } - - public RaoInput toRaoInputWithPostIcsImportNetworkPath() { - return RaoInput.build(Network.read(postIcsImportNetworkPath), crac).build(); - } - -} diff --git a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRao.java b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRao.java index 378ce55f4b..1d03f09bea 100644 --- a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRao.java +++ b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRao.java @@ -45,7 +45,7 @@ public Runner(TimeCoupledRaoProvider provider) { this.provider = Objects.requireNonNull(provider); } - public TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters) { + public TimeCoupledRaoResult run(TimeCoupledRaoInput raoInput, RaoParameters parameters) { Objects.requireNonNull(raoInput, "RAO input should not be null"); Objects.requireNonNull(parameters, "parameters should not be null"); @@ -58,7 +58,7 @@ public TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput, Ra return provider.run(raoInput, parameters).join(); } - public TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput) { + public TimeCoupledRaoResult run(TimeCoupledRaoInput raoInput) { return run(raoInput, RaoParameters.load()); } @@ -133,11 +133,11 @@ public static TimeCoupledRao.Runner find(String name, List} - * @author Roxane Chen {@literal } - */ -public class TimeCoupledRaoInputWithNetworkPaths { - private final TemporalData raoInputs; - private final Set timestampsToRun; - private final TimeCoupledConstraints timeCoupledConstraints; - - public TimeCoupledRaoInputWithNetworkPaths(TemporalData raoInputs, Set timestampsToRun, TimeCoupledConstraints timeCoupledConstraints) { - this.raoInputs = raoInputs; - this.timestampsToRun = new TreeSet<>(timestampsToRun); - this.timeCoupledConstraints = timeCoupledConstraints; - checkTimestampsToRun(); - } - - public TimeCoupledRaoInputWithNetworkPaths(TemporalData raoInputs, TimeCoupledConstraints timeCoupledConstraints) { - this(raoInputs, new HashSet<>(raoInputs.getTimestamps()), timeCoupledConstraints); - } - - public TemporalData getRaoInputs() { - return raoInputs; - } - - public Set getTimestampsToRun() { - return timestampsToRun; - } - - public TimeCoupledConstraints getTimeCoupledConstraints() { - return timeCoupledConstraints; - } - - private void checkTimestampsToRun() { - Set invalidTimestampsToRun = timestampsToRun.stream().filter(timestamp -> !raoInputs.getTimestamps().contains(timestamp)).map(OffsetDateTime::toString).collect(Collectors.toSet()); - if (!invalidTimestampsToRun.isEmpty()) { - throw new OpenRaoException("Timestamp(s) '" + String.join("', '", invalidTimestampsToRun) + "' are not defined in the inputs."); - } - } -} diff --git a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRaoProvider.java b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRaoProvider.java index 87baf83520..9522eee686 100644 --- a/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRaoProvider.java +++ b/ra-optimisation/rao-api/src/main/java/com/powsybl/openrao/raoapi/TimeCoupledRaoProvider.java @@ -23,5 +23,5 @@ public interface TimeCoupledRaoProvider { * @param parameters RAO parameters. * @return A completable future of a RaoComputationResult for each timestamp. */ - CompletableFuture run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters); + CompletableFuture run(TimeCoupledRaoInput raoInput, RaoParameters parameters); } diff --git a/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/TimeCoupledRaoTest.java b/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/TimeCoupledRaoTest.java index a4462a5aba..6c2fe4d15f 100644 --- a/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/TimeCoupledRaoTest.java +++ b/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/TimeCoupledRaoTest.java @@ -10,6 +10,8 @@ import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; import com.powsybl.commons.config.InMemoryPlatformConfig; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.VariantManager; import com.powsybl.openrao.commons.OpenRaoException; import com.powsybl.openrao.commons.TemporalDataImpl; import com.powsybl.openrao.data.crac.api.Crac; @@ -40,18 +42,22 @@ class TimeCoupledRaoTest { private FileSystem fileSystem; private InMemoryPlatformConfig platformConfig; - private TimeCoupledRaoInputWithNetworkPaths raoInput; + private TimeCoupledRaoInput raoInput; @BeforeEach void setUp() { fileSystem = Jimfs.newFileSystem(Configuration.unix()); platformConfig = new InMemoryPlatformConfig(fileSystem); Crac crac = Mockito.mock(Crac.class); - raoInput = new TimeCoupledRaoInputWithNetworkPaths( + Network network = Mockito.mock(Network.class); + VariantManager variantManager = Mockito.mock(VariantManager.class); + Mockito.when(variantManager.getWorkingVariantId()).thenReturn("initialVariant"); + Mockito.when(network.getVariantManager()).thenReturn(variantManager); + raoInput = new TimeCoupledRaoInput( new TemporalDataImpl<>( Map.of( OffsetDateTime.of(2024, 12, 13, 16, 17, 0, 0, ZoneOffset.UTC), - RaoInputWithNetworkPaths.build("network.uct", crac).build() + RaoInput.build(network, crac).build() )), new TimeCoupledConstraints() ); diff --git a/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/AnotherTimeCoupledRaoProviderMock.java b/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/AnotherTimeCoupledRaoProviderMock.java index f244c7f274..39139021f5 100644 --- a/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/AnotherTimeCoupledRaoProviderMock.java +++ b/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/AnotherTimeCoupledRaoProviderMock.java @@ -9,7 +9,7 @@ import com.google.auto.service.AutoService; import com.powsybl.openrao.data.raoresult.api.TimeCoupledRaoResult; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; import com.powsybl.openrao.raoapi.TimeCoupledRaoProvider; import com.powsybl.openrao.raoapi.parameters.RaoParameters; @@ -21,7 +21,7 @@ @AutoService(TimeCoupledRaoProvider.class) public class AnotherTimeCoupledRaoProviderMock implements TimeCoupledRaoProvider { @Override - public CompletableFuture run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters) { + public CompletableFuture run(TimeCoupledRaoInput raoInput, RaoParameters parameters) { return CompletableFuture.completedFuture(new TimeCoupledRaoResultMock()); } diff --git a/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/TimeCoupledRaoProviderMock.java b/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/TimeCoupledRaoProviderMock.java index ff60431ea5..336b47592c 100644 --- a/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/TimeCoupledRaoProviderMock.java +++ b/ra-optimisation/rao-api/src/test/java/com/powsybl/openrao/raoapi/raomock/TimeCoupledRaoProviderMock.java @@ -9,7 +9,7 @@ import com.google.auto.service.AutoService; import com.powsybl.openrao.data.raoresult.api.TimeCoupledRaoResult; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; import com.powsybl.openrao.raoapi.TimeCoupledRaoProvider; import com.powsybl.openrao.raoapi.parameters.RaoParameters; @@ -22,12 +22,12 @@ public class TimeCoupledRaoProviderMock implements TimeCoupledRaoProvider { @Override - public CompletableFuture run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters) { - return CompletableFuture.completedFuture(new TimeCoupledRaoResultMock()); + public String getName() { + return "RandomTimeCoupledRAO"; } @Override - public String getName() { - return "RandomTimeCoupledRAO"; + public CompletableFuture run(TimeCoupledRaoInput raoInput, RaoParameters parameters) { + return CompletableFuture.completedFuture(new TimeCoupledRaoResultMock()); } } diff --git a/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/marmot/Marmot.java b/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/marmot/Marmot.java index a2e09b38ea..4b4c469daf 100644 --- a/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/marmot/Marmot.java +++ b/ra-optimisation/search-tree-rao/src/main/java/com/powsybl/openrao/searchtreerao/marmot/Marmot.java @@ -8,7 +8,6 @@ package com.powsybl.openrao.searchtreerao.marmot; import com.google.auto.service.AutoService; -import com.powsybl.iidm.network.Network; import com.powsybl.openrao.commons.TemporalData; import com.powsybl.openrao.commons.TemporalDataImpl; import com.powsybl.openrao.commons.Unit; @@ -20,9 +19,7 @@ import com.powsybl.openrao.data.raoresult.api.RaoResult; import com.powsybl.openrao.data.raoresult.api.TimeCoupledRaoResult; import com.powsybl.openrao.raoapi.RaoInput; -import com.powsybl.openrao.raoapi.RaoInputWithNetworkPaths; import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; import com.powsybl.openrao.raoapi.TimeCoupledRaoProvider; import com.powsybl.openrao.raoapi.parameters.RaoParameters; import com.powsybl.openrao.raoapi.parameters.extensions.OpenRaoSearchTreeParameters; @@ -90,21 +87,20 @@ public class Marmot implements TimeCoupledRaoProvider { private static final String MIN_MARGIN_VIOLATION_EVALUATOR = "min-margin-violation-evaluator"; @Override - public CompletableFuture run(TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInputWithNetworkPaths, RaoParameters raoParameters) { + public CompletableFuture run(TimeCoupledRaoInput timeCoupledRaoInput, RaoParameters raoParameters) { // 1. Run independent RAOs to compute optimal preventive topological remedial actions TECHNICAL_LOGS.info("[MARMOT] ----- Topological optimization [start]"); TemporalData> consideredCnecs = new TemporalDataImpl<>(); - TemporalData topologicalOptimizationResults = runTopologicalOptimization(timeCoupledRaoInputWithNetworkPaths.getRaoInputs(), consideredCnecs, raoParameters); + TemporalData topologicalOptimizationResults = runTopologicalOptimization(timeCoupledRaoInput.getRaoInputs(), consideredCnecs, raoParameters); TECHNICAL_LOGS.info("[MARMOT] ----- Topological optimization [end]"); // 2. Get the initial results from the various independent results to avoid recomputing them TemporalData initialResults = buildInitialResults(topologicalOptimizationResults); // TODO : Add time-coupled constraint check if none violated then return - boolean noTimeCoupledConstraints = timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints().getGeneratorConstraints().isEmpty(); + boolean noTimeCoupledConstraints = timeCoupledRaoInput.getTimeCoupledConstraints().getGeneratorConstraints().isEmpty(); // 3. Apply independent topological remedial actions (and preventive range actions if there are no time-coupled constraints) - TimeCoupledRaoInput timeCoupledRaoInput = importNetworksFromTimeCoupledRaoInputWithNetworkPaths(timeCoupledRaoInputWithNetworkPaths); TECHNICAL_LOGS.info("[MARMOT] Applying optimal topological actions on networks"); ObjectiveFunction fullObjectiveFunction = buildGlobalObjectiveFunction(timeCoupledRaoInput.getRaoInputs().map(RaoInput::getCrac), new GlobalFlowResult(initialResults), raoParameters); LinearOptimizationResult initialObjectiveFunctionResult = getInitialObjectiveFunctionResult(initialResults, fullObjectiveFunction); @@ -131,7 +127,7 @@ public CompletableFuture run(TimeCoupledRaoInputWithNetwor // 5. Get and apply topological actions applied in independent optimizations TemporalData preventiveTopologicalActions = getPreventiveTopologicalActions( - timeCoupledRaoInputWithNetworkPaths.getRaoInputs().map(RaoInputWithNetworkPaths::getCrac), + timeCoupledRaoInput.getRaoInputs().map(RaoInput::getCrac), topologicalOptimizationResults ); applyPreventiveTopologicalActionsOnNetworks(timeCoupledRaoInput.getRaoInputs(), preventiveTopologicalActions); @@ -409,30 +405,15 @@ private void replaceFastRaoResultsWithLightVersions(TemporalData topo timestamp, new LightFastRaoResultImpl((FastRaoResultImpl) raoResult))); } - private TimeCoupledRaoInput importNetworksFromTimeCoupledRaoInputWithNetworkPaths(TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInputWithNetworkPaths) { - return new TimeCoupledRaoInput( - timeCoupledRaoInputWithNetworkPaths.getRaoInputs().map(raoInputWithNetworksPath -> { - RaoInput raoInput = raoInputWithNetworksPath.toRaoInputWithPostIcsImportNetworkPath(); - raoInput.getNetwork().getVariantManager().cloneVariant(raoInput.getNetworkVariantId(), INITIAL_SCENARIO); - return raoInput; - }), - timeCoupledRaoInputWithNetworkPaths.getTimestampsToRun(), - timeCoupledRaoInputWithNetworkPaths.getTimeCoupledConstraints() - ); - } - - private static TemporalData runTopologicalOptimization(TemporalData raoInputs, TemporalData> consideredCnecs, RaoParameters raoParameters) { + private static TemporalData runTopologicalOptimization(TemporalData raoInputs, TemporalData> consideredCnecs, RaoParameters raoParameters) { raoParameters.getExtension(OpenRaoSearchTreeParameters.class).getRangeActionsOptimizationParameters().getLinearOptimizationSolver().setSolverSpecificParameters("MAXTIME 15"); TemporalData individualResults = new TemporalDataImpl<>(); - raoInputs.getDataPerTimestamp().forEach((datetime, individualRaoInputWithNetworkPath) -> { - RaoInput individualRaoInput = RaoInput - .build(Network.read(individualRaoInputWithNetworkPath.getPostIcsImportNetworkPath()), individualRaoInputWithNetworkPath.getCrac()) - .build(); + raoInputs.getDataPerTimestamp().forEach((datetime, raoInput) -> { Set cnecs = new HashSet<>(); - String logMessage = "[MARMOT] Running RAO for timestamp %s [{}]".formatted(individualRaoInput.getCrac().getTimestamp().orElseThrow()); + String logMessage = "[MARMOT] Running RAO for timestamp %s [{}]".formatted(raoInput.getCrac().getTimestamp().orElseThrow()); TECHNICAL_LOGS.info(logMessage, "start"); - RaoResult raoResult = FastRao.launchFastRaoOptimization(individualRaoInput, raoParameters, null, cnecs); + RaoResult raoResult = FastRao.launchFastRaoOptimization(raoInput, raoParameters, null, cnecs); TECHNICAL_LOGS.info(logMessage, "end"); consideredCnecs.put(datetime, cnecs); individualResults.put(datetime, raoResult); diff --git a/ra-optimisation/search-tree-rao/src/test/java/com/powsybl/openrao/searchtreerao/marmot/MarmotTest.java b/ra-optimisation/search-tree-rao/src/test/java/com/powsybl/openrao/searchtreerao/marmot/MarmotTest.java index 655afdc2a9..a85a6b609f 100644 --- a/ra-optimisation/search-tree-rao/src/test/java/com/powsybl/openrao/searchtreerao/marmot/MarmotTest.java +++ b/ra-optimisation/search-tree-rao/src/test/java/com/powsybl/openrao/searchtreerao/marmot/MarmotTest.java @@ -14,8 +14,9 @@ import com.powsybl.openrao.data.raoresult.api.TimeCoupledRaoResult; import com.powsybl.openrao.data.timecoupledconstraints.GeneratorConstraints; import com.powsybl.openrao.data.timecoupledconstraints.TimeCoupledConstraints; -import com.powsybl.openrao.raoapi.RaoInputWithNetworkPaths; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.LazyNetwork; +import com.powsybl.openrao.raoapi.RaoInput; +import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; import com.powsybl.openrao.raoapi.json.JsonRaoParameters; import com.powsybl.openrao.raoapi.parameters.RaoParameters; import com.powsybl.openrao.searchtreerao.marmot.results.TimeCoupledRaoResultImpl; @@ -66,10 +67,10 @@ void testTwoTimestampsAndGradientOnGeneratorWithNoAssociatedRemedialAction() thr OffsetDateTime timestamp1 = OffsetDateTime.of(2025, 2, 13, 11, 35, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp2 = OffsetDateTime.of(2025, 2, 14, 11, 35, 0, 0, ZoneOffset.UTC); - TemporalData raoInputs = new TemporalDataImpl<>( + TemporalData raoInputs = new TemporalDataImpl<>( Map.of( - timestamp1, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac1).build(), - timestamp2, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac2).build() + timestamp1, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac1).build(), + timestamp2, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac2).build() )); TimeCoupledConstraints timeCoupledConstraints = new TimeCoupledConstraints(); @@ -81,7 +82,7 @@ void testTwoTimestampsAndGradientOnGeneratorWithNoAssociatedRemedialAction() thr .build() ); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, timeCoupledConstraints); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(raoInputs, timeCoupledConstraints); // first RAOs shift tap to -5 for a cost of 55 each // MARMOT should also move the tap to -5 for both timestamps with a total cost of 110 @@ -116,11 +117,11 @@ void testWithRedispatchingAndNoGradientOnImplicatedGenerators() throws IOExcepti OffsetDateTime timestamp2 = OffsetDateTime.of(2025, 2, 14, 11, 40, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp3 = OffsetDateTime.of(2025, 2, 14, 12, 40, 0, 0, ZoneOffset.UTC); - TemporalData raoInputs = new TemporalDataImpl<>( + TemporalData raoInputs = new TemporalDataImpl<>( Map.of( - timestamp1, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac1).build(), - timestamp2, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac2).build(), - timestamp3, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac3).build() + timestamp1, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac1).build(), + timestamp2, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac2).build(), + timestamp3, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac3).build() )); TimeCoupledConstraints timeCoupledConstraints = new TimeCoupledConstraints(); @@ -132,7 +133,7 @@ void testWithRedispatchingAndNoGradientOnImplicatedGenerators() throws IOExcepti .build() ); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, timeCoupledConstraints); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(raoInputs, timeCoupledConstraints); // no redispatching required during the first timestamp // redispatching of 500 MW in both timestamps 2 & 3 with a cost of 26510 each @@ -171,13 +172,13 @@ void testWithRedispatchingAndNoGradients() throws IOException { OffsetDateTime timestamp2 = OffsetDateTime.of(2025, 2, 14, 11, 40, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp3 = OffsetDateTime.of(2025, 2, 14, 12, 40, 0, 0, ZoneOffset.UTC); - TemporalData raoInputs = new TemporalDataImpl<>( + TemporalData raoInputs = new TemporalDataImpl<>( Map.of( - timestamp1, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac1).build(), - timestamp2, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac2).build(), - timestamp3, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac3).build() + timestamp1, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac1).build(), + timestamp2, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac2).build(), + timestamp3, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac3).build() )); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, new TimeCoupledConstraints()); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(raoInputs, new TimeCoupledConstraints()); // no redispatching required during the first timestamp // redispatching of 500 MW in both timestamps 2 & 3 with a cost of 26510 each @@ -225,11 +226,11 @@ void testWithRedispatchingAndGradientOnImplicatedGenerators() throws IOException .build() ); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths( + TimeCoupledRaoInput input = new TimeCoupledRaoInput( new TemporalDataImpl<>(Map.of( - timestamp1, RaoInputWithNetworkPaths.build(networkAbsolutePath, networkAbsolutePath, crac1).build(), - timestamp2, RaoInputWithNetworkPaths.build(networkAbsolutePath, networkAbsolutePath, crac2).build(), - timestamp3, RaoInputWithNetworkPaths.build(networkAbsolutePath, networkAbsolutePath, crac3).build())), + timestamp1, RaoInput.build(LazyNetwork.of(networkAbsolutePath), crac1).build(), + timestamp2, RaoInput.build(LazyNetwork.of(networkAbsolutePath), crac2).build(), + timestamp3, RaoInput.build(LazyNetwork.of(networkAbsolutePath), crac3).build())), timeCoupledConstraints ); @@ -268,10 +269,10 @@ void testWithPreventiveTopologicalAction() throws IOException { OffsetDateTime timestamp1 = OffsetDateTime.of(2025, 2, 18, 10, 7, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp2 = OffsetDateTime.of(2025, 2, 19, 10, 7, 0, 0, ZoneOffset.UTC); - TemporalData raoInputs = new TemporalDataImpl<>( + TemporalData raoInputs = new TemporalDataImpl<>( Map.of( - timestamp1, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac1).build(), - timestamp2, RaoInputWithNetworkPaths.build(getResourcesPath().concat(networkFilePath), getResourcesPath().concat(networkFilePathPostIcsImport), crac2).build() + timestamp1, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac1).build(), + timestamp2, RaoInput.build(LazyNetwork.of(getResourcesPath().concat(networkFilePathPostIcsImport)), crac2).build() )); @@ -284,7 +285,7 @@ void testWithPreventiveTopologicalAction() throws IOException { .build() ); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, timeCoupledConstraints); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(raoInputs, timeCoupledConstraints); TimeCoupledRaoResult results = new Marmot().run(input, raoParameters).join(); assertTrue(results.isActivated(crac1.getPreventiveState(), crac1.getNetworkAction("closeBeFr2"))); @@ -328,17 +329,17 @@ void testWithTenTimestampsAndGeneratorConstraints() throws IOException { OffsetDateTime timestamp9 = OffsetDateTime.of(2025, 3, 25, 18, 30, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp10 = OffsetDateTime.of(2025, 3, 25, 19, 30, 0, 0, ZoneOffset.UTC); - Map inputPerTimestamp = new HashMap<>(); - inputPerTimestamp.put(timestamp1, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac1).build()); - inputPerTimestamp.put(timestamp2, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac2).build()); - inputPerTimestamp.put(timestamp3, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac3).build()); - inputPerTimestamp.put(timestamp4, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac4).build()); - inputPerTimestamp.put(timestamp5, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac5).build()); - inputPerTimestamp.put(timestamp6, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac6).build()); - inputPerTimestamp.put(timestamp7, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac7).build()); - inputPerTimestamp.put(timestamp8, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac8).build()); - inputPerTimestamp.put(timestamp9, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac9).build()); - inputPerTimestamp.put(timestamp10, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac10).build()); + Map inputPerTimestamp = new HashMap<>(); + inputPerTimestamp.put(timestamp1, RaoInput.build(LazyNetwork.of(networkPath), crac1).build()); + inputPerTimestamp.put(timestamp2, RaoInput.build(LazyNetwork.of(networkPath), crac2).build()); + inputPerTimestamp.put(timestamp3, RaoInput.build(LazyNetwork.of(networkPath), crac3).build()); + inputPerTimestamp.put(timestamp4, RaoInput.build(LazyNetwork.of(networkPath), crac4).build()); + inputPerTimestamp.put(timestamp5, RaoInput.build(LazyNetwork.of(networkPath), crac5).build()); + inputPerTimestamp.put(timestamp6, RaoInput.build(LazyNetwork.of(networkPath), crac6).build()); + inputPerTimestamp.put(timestamp7, RaoInput.build(LazyNetwork.of(networkPath), crac7).build()); + inputPerTimestamp.put(timestamp8, RaoInput.build(LazyNetwork.of(networkPath), crac8).build()); + inputPerTimestamp.put(timestamp9, RaoInput.build(LazyNetwork.of(networkPath), crac9).build()); + inputPerTimestamp.put(timestamp10, RaoInput.build(LazyNetwork.of(networkPath), crac10).build()); TimeCoupledConstraints timeCoupledConstraints = new TimeCoupledConstraints(); timeCoupledConstraints.addGeneratorConstraints( @@ -349,7 +350,7 @@ void testWithTenTimestampsAndGeneratorConstraints() throws IOException { .build() ); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(new TemporalDataImpl<>(inputPerTimestamp), timeCoupledConstraints); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(new TemporalDataImpl<>(inputPerTimestamp), timeCoupledConstraints); TimeCoupledRaoResultImpl timeCoupledRaoResult = (TimeCoupledRaoResultImpl) new Marmot().run(input, raoParameters).join(); @@ -396,19 +397,19 @@ void testWithTenTimestampsAndNoGeneratorConstraints() throws IOException { OffsetDateTime timestamp9 = OffsetDateTime.of(2025, 3, 25, 18, 30, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp10 = OffsetDateTime.of(2025, 3, 25, 19, 30, 0, 0, ZoneOffset.UTC); - Map inputPerTimestamp = new HashMap<>(); - inputPerTimestamp.put(timestamp1, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac1).build()); - inputPerTimestamp.put(timestamp2, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac2).build()); - inputPerTimestamp.put(timestamp3, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac3).build()); - inputPerTimestamp.put(timestamp4, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac4).build()); - inputPerTimestamp.put(timestamp5, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac5).build()); - inputPerTimestamp.put(timestamp6, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac6).build()); - inputPerTimestamp.put(timestamp7, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac7).build()); - inputPerTimestamp.put(timestamp8, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac8).build()); - inputPerTimestamp.put(timestamp9, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac9).build()); - inputPerTimestamp.put(timestamp10, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac10).build()); + Map inputPerTimestamp = new HashMap<>(); + inputPerTimestamp.put(timestamp1, RaoInput.build(LazyNetwork.of(networkPath), crac1).build()); + inputPerTimestamp.put(timestamp2, RaoInput.build(LazyNetwork.of(networkPath), crac2).build()); + inputPerTimestamp.put(timestamp3, RaoInput.build(LazyNetwork.of(networkPath), crac3).build()); + inputPerTimestamp.put(timestamp4, RaoInput.build(LazyNetwork.of(networkPath), crac4).build()); + inputPerTimestamp.put(timestamp5, RaoInput.build(LazyNetwork.of(networkPath), crac5).build()); + inputPerTimestamp.put(timestamp6, RaoInput.build(LazyNetwork.of(networkPath), crac6).build()); + inputPerTimestamp.put(timestamp7, RaoInput.build(LazyNetwork.of(networkPath), crac7).build()); + inputPerTimestamp.put(timestamp8, RaoInput.build(LazyNetwork.of(networkPath), crac8).build()); + inputPerTimestamp.put(timestamp9, RaoInput.build(LazyNetwork.of(networkPath), crac9).build()); + inputPerTimestamp.put(timestamp10, RaoInput.build(LazyNetwork.of(networkPath), crac10).build()); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(new TemporalDataImpl<>(inputPerTimestamp), new TimeCoupledConstraints()); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(new TemporalDataImpl<>(inputPerTimestamp), new TimeCoupledConstraints()); TimeCoupledRaoResultImpl timeCoupledRaoResult = (TimeCoupledRaoResultImpl) new Marmot().run(input, raoParameters).join(); @@ -456,22 +457,22 @@ void testWithTenTimestampsAndGeneratorConstraintsInjectionKeyGreaterThan1() thro OffsetDateTime timestamp9 = OffsetDateTime.of(2025, 3, 25, 18, 30, 0, 0, ZoneOffset.UTC); OffsetDateTime timestamp10 = OffsetDateTime.of(2025, 3, 25, 19, 30, 0, 0, ZoneOffset.UTC); - Map inputPerTimestamp = new HashMap<>(); - inputPerTimestamp.put(timestamp1, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac1).build()); - inputPerTimestamp.put(timestamp2, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac2).build()); - inputPerTimestamp.put(timestamp3, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac3).build()); - inputPerTimestamp.put(timestamp4, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac4).build()); - inputPerTimestamp.put(timestamp5, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac5).build()); - inputPerTimestamp.put(timestamp6, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac6).build()); - inputPerTimestamp.put(timestamp7, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac7).build()); - inputPerTimestamp.put(timestamp8, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac8).build()); - inputPerTimestamp.put(timestamp9, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac9).build()); - inputPerTimestamp.put(timestamp10, RaoInputWithNetworkPaths.build(networkPath, networkPath, crac10).build()); + Map inputPerTimestamp = new HashMap<>(); + inputPerTimestamp.put(timestamp1, RaoInput.build(LazyNetwork.of(networkPath), crac1).build()); + inputPerTimestamp.put(timestamp2, RaoInput.build(LazyNetwork.of(networkPath), crac2).build()); + inputPerTimestamp.put(timestamp3, RaoInput.build(LazyNetwork.of(networkPath), crac3).build()); + inputPerTimestamp.put(timestamp4, RaoInput.build(LazyNetwork.of(networkPath), crac4).build()); + inputPerTimestamp.put(timestamp5, RaoInput.build(LazyNetwork.of(networkPath), crac5).build()); + inputPerTimestamp.put(timestamp6, RaoInput.build(LazyNetwork.of(networkPath), crac6).build()); + inputPerTimestamp.put(timestamp7, RaoInput.build(LazyNetwork.of(networkPath), crac7).build()); + inputPerTimestamp.put(timestamp8, RaoInput.build(LazyNetwork.of(networkPath), crac8).build()); + inputPerTimestamp.put(timestamp9, RaoInput.build(LazyNetwork.of(networkPath), crac9).build()); + inputPerTimestamp.put(timestamp10, RaoInput.build(LazyNetwork.of(networkPath), crac10).build()); TimeCoupledConstraints timeCoupledConstraints = new TimeCoupledConstraints(); timeCoupledConstraints.addGeneratorConstraints(GeneratorConstraints.create().withGeneratorId("FFR3AA1 _generator").withUpwardPowerGradient(500.0).withDownwardPowerGradient(-500.0).build()); - TimeCoupledRaoInputWithNetworkPaths input = new TimeCoupledRaoInputWithNetworkPaths(new TemporalDataImpl<>(inputPerTimestamp), timeCoupledConstraints); + TimeCoupledRaoInput input = new TimeCoupledRaoInput(new TemporalDataImpl<>(inputPerTimestamp), timeCoupledConstraints); TimeCoupledRaoResultImpl timeCoupledRaoResult = (TimeCoupledRaoResultImpl) new Marmot().run(input, raoParameters).join(); diff --git a/tests/src/test/java/com/powsybl/openrao/tests/steps/TimeCoupledRaoSteps.java b/tests/src/test/java/com/powsybl/openrao/tests/steps/TimeCoupledRaoSteps.java index 0b89e2b18f..a38a29d632 100644 --- a/tests/src/test/java/com/powsybl/openrao/tests/steps/TimeCoupledRaoSteps.java +++ b/tests/src/test/java/com/powsybl/openrao/tests/steps/TimeCoupledRaoSteps.java @@ -35,9 +35,10 @@ import com.powsybl.openrao.data.refprog.refprogxmlimporter.TimeCoupledRefProg; import com.powsybl.openrao.data.timecoupledconstraints.TimeCoupledConstraints; import com.powsybl.openrao.data.timecoupledconstraints.io.JsonTimeCoupledConstraints; -import com.powsybl.openrao.raoapi.RaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.LazyNetwork; +import com.powsybl.openrao.raoapi.RaoInput; import com.powsybl.openrao.raoapi.TimeCoupledRao; -import com.powsybl.openrao.raoapi.TimeCoupledRaoInputWithNetworkPaths; +import com.powsybl.openrao.raoapi.TimeCoupledRaoInput; import com.powsybl.openrao.tests.utils.CoreCcPreprocessor; import io.cucumber.datatable.DataTable; import io.cucumber.java.After; @@ -103,7 +104,8 @@ public final class TimeCoupledRaoSteps { private static String icsSeriesPath; private static String icsGskPath; private static String refProgPath; - private static TimeCoupledRaoInputWithNetworkPaths timeCoupledRaoInputWithNetworkPaths; + private static TimeCoupledRaoInput timeCoupledRaoInput; + private static TimeCoupledRaoInput postIcsTimeCoupledRaoInput; private static TimeCoupledRaoResult timeCoupledRaoResult; private static Map cracCreationContexts; @@ -191,17 +193,17 @@ public static void loadDataForTimeCoupledRao(String timeCoupledConstraintsPath, cracFolderPath = getResourcesPath().concat("crac/"); String timeCoupledConstraintsFolderPath = getResourcesPath().concat("timeCoupledConstraints/"); - TemporalData raoInputs = new TemporalDataImpl<>(); + TemporalData raoInputs = new TemporalDataImpl<>(); List> inputs = arg1.asMaps(String.class, String.class); for (Map tsInput : inputs) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(tsInput.get("Timestamp")); Network network = importNetwork(getFile(networkFolderPath.concat(tsInput.get("Network"))), false); Crac crac = importCrac(getFile(cracFolderPath.concat(tsInput.get("CRAC"))), network, null).getLeft(); - raoInputs.put(offsetDateTime, RaoInputWithNetworkPaths.build(networkFolderPath.concat(tsInput.get("Network")), networkFolderPath.concat(tsInput.get("Network")), crac).build()); + raoInputs.put(offsetDateTime, RaoInput.build(LazyNetwork.of(networkFolderPath.concat(tsInput.get("Network"))), crac).build()); } TimeCoupledConstraints timeCoupledConstraints = JsonTimeCoupledConstraints.read(new FileInputStream(timeCoupledConstraintsFolderPath.concat(timeCoupledConstraintsPath))); - timeCoupledRaoInputWithNetworkPaths = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, timeCoupledConstraints); + postIcsTimeCoupledRaoInput = new TimeCoupledRaoInput(raoInputs, timeCoupledConstraints); } @Given("time-coupled rao inputs for CORE are:") @@ -226,13 +228,12 @@ public static void loadDataForCoreTimeCoupledRao(DataTable arg1) throws IOExcept raoParameters = buildConfig(getFile(raoParametersPath)); - TemporalData raoInputs = new TemporalDataImpl<>(); + TemporalData raoInputs = new TemporalDataImpl<>(); List> inputs = arg1.asMaps(String.class, String.class); for (Map tsInput : inputs) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(tsInput.get("Timestamp")); TECHNICAL_LOGS.info("**** Loading data for TS {} ****", offsetDateTime); // Network - String initialNetworkPath = networkFolderPath.concat(tsInput.get("Network")); String postIcsNetworkPath = networkFolderPathPostIcsImport.concat(tsInput.get("Network")).split(".uct")[0].concat(".jiidm"); Network network = importNetwork(getFile(networkFolderPath.concat(tsInput.get("Network"))), false); CoreCcPreprocessor.applyCoreCcNetworkPreprocessing(network); @@ -244,13 +245,13 @@ public static void loadDataForCoreTimeCoupledRao(DataTable arg1) throws IOExcept cracCreationParameters.getExtension(FbConstraintCracCreationParameters.class).setTimestamp(offsetDateTime); cracImportResult = importCrac(cracFile, network, cracCreationParameters); } - RaoInputWithNetworkPaths raoInput = RaoInputWithNetworkPaths - .build(initialNetworkPath, postIcsNetworkPath, cracImportResult.getLeft()) + RaoInput raoInput = RaoInput + .build(network, cracImportResult.getLeft()) .build(); raoInputs.put(offsetDateTime, raoInput); cracCreationContexts.put(offsetDateTime, cracImportResult.getRight()); } - timeCoupledRaoInputWithNetworkPaths = new TimeCoupledRaoInputWithNetworkPaths(raoInputs, new TimeCoupledConstraints()); + timeCoupledRaoInput = new TimeCoupledRaoInput(raoInputs, new TimeCoupledConstraints()); InputStream gskInputStream = icsGskPath == null ? null : new FileInputStream(getFile(icsGskPath)); FbConstraintCracCreationParameters fbConstraintParameters = cracCreationParameters.getExtension(FbConstraintCracCreationParameters.class); @@ -258,19 +259,20 @@ public static void loadDataForCoreTimeCoupledRao(DataTable arg1) throws IOExcept TECHNICAL_LOGS.warn("No FB Constraint CRAC creation parameters found. Default parameters will be used."); fbConstraintParameters = new FbConstraintCracCreationParameters(); } - IcsImporter.populateInputWithICS( - timeCoupledRaoInputWithNetworkPaths, + postIcsTimeCoupledRaoInput = IcsImporter.populateInputWithICS( + timeCoupledRaoInput, new FileInputStream(getFile(icsStaticPath)), new FileInputStream(getFile(icsSeriesPath)), gskInputStream, fbConstraintParameters.getIcsCostUp(), - fbConstraintParameters.getIcsCostDown() + fbConstraintParameters.getIcsCostDown(), + networkFolderPathPostIcsImport.concat(inputs.getFirst().get("Network")).split(".uct")[0] ); } @When("I launch marmot") public static void iLaunchMarmot() { - timeCoupledRaoResult = TimeCoupledRao.run(timeCoupledRaoInputWithNetworkPaths, getRaoParameters()); + timeCoupledRaoResult = TimeCoupledRao.run(postIcsTimeCoupledRaoInput, getRaoParameters()); } @When("I export marmot results to {string}") @@ -281,7 +283,7 @@ public static void iExportMarmotResults(String outputPath) throws IOException { properties.put("time-coupled-rao-result.export.filename-template", "'RAO_RESULT_'yyyy-MM-dd'T'HH:mm:ss'.json'"); properties.put("time-coupled-rao-result.export.summary-filename", "summary.json"); try (ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream)) { - timeCoupledRaoResult.write(zipOutputStream, timeCoupledRaoInputWithNetworkPaths.getRaoInputs().map(RaoInputWithNetworkPaths::getCrac), properties); + timeCoupledRaoResult.write(zipOutputStream, postIcsTimeCoupledRaoInput.getRaoInputs().map(RaoInput::getCrac), properties); } } @@ -295,14 +297,14 @@ public static void generateRefProg(String outputPath, String raoResultsZipPath) // Load networks in networkTemporalData // Load redispatchingVolume per timestamp per operator Map> rdVolumes = new HashMap<>(); - for (OffsetDateTime offsetDateTime : timeCoupledRaoInputWithNetworkPaths.getTimestampsToRun()) { + for (OffsetDateTime offsetDateTime : postIcsTimeCoupledRaoInput.getTimestampsToRun()) { rdVolumes.put(offsetDateTime, new HashMap<>()); String filename = "RAO_RESULT_" + offsetDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")) + ".json"; FileInputStream raoResultInputStream = new FileInputStream(getFile(String.valueOf(tempDir.resolve(filename)))); - RaoResult raoResult = RaoResult.read(raoResultInputStream, timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac()); + RaoResult raoResult = RaoResult.read(raoResultInputStream, timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac()); // Load redispatching volumes - Crac crac = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).get().getCrac(); + Crac crac = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).get().getCrac(); Set> preventiveRangeActions = raoResult.getActivatedRangeActionsDuringState(crac.getPreventiveState()); Set redispatchingRangeActions = preventiveRangeActions.stream() .filter(InjectionRangeAction.class::isInstance) @@ -403,22 +405,22 @@ public static void generateNetworksWithPraFromResults(String outputPath, String FileOutputStream fileOutputStream = new FileOutputStream(getFile(getResourcesPath().concat(outputPath))); ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream); try { - for (OffsetDateTime offsetDateTime : timeCoupledRaoInputWithNetworkPaths.getTimestampsToRun()) { - State preventiveState = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getPreventiveState(); + for (OffsetDateTime offsetDateTime : timeCoupledRaoInput.getTimestampsToRun()) { + State preventiveState = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getPreventiveState(); String filename = "RAO_RESULT_" + offsetDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")) + ".json"; FileInputStream raoResultInputStream = new FileInputStream(getFile(String.valueOf(tempDir.resolve(filename)))); - RaoResult raoResult = RaoResult.read(raoResultInputStream, timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac()); + RaoResult raoResult = RaoResult.read(raoResultInputStream, timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac()); Set preventiveNetworkActions = raoResult.getActivatedNetworkActionsDuringState(preventiveState); Set> preventiveRangeActions = raoResult.getActivatedRangeActionsDuringState(preventiveState); - Network modifiedNetwork = Network.read(timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getPostIcsImportNetworkPath()); - Network initialNetwork = Network.read(timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getInitialNetworkPath()); + Network modifiedNetwork = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getNetwork(); + Network initialNetwork = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getNetwork(); // Apply PRAs on modified network preventiveNetworkActions.forEach(networkAction -> networkAction.apply(initialNetwork)); preventiveRangeActions.forEach(rangeAction -> { - double optimizedSetpoint = raoResult.getOptimizedSetPointOnState(preventiveState, rangeAction); + double optimizedSetpoint = raoResult.getOptimizedSetPointOnState(timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).get().getCrac().getPreventiveState(), rangeAction); if (rangeAction instanceof InjectionRangeAction) { applyRedispatchingAction((InjectionRangeAction) rangeAction, optimizedSetpoint, modifiedNetwork, initialNetwork); } else { @@ -426,7 +428,7 @@ public static void generateNetworksWithPraFromResults(String outputPath, String } }); // Write network - String path = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getPostIcsImportNetworkPath().split(".jiidm")[0].concat(".uct"); + String path = outputPath.split(".zip")[0] + "/" + offsetDateTime.format(DateTimeFormatter.ISO_DATE_TIME) + ".uct"; String name = path.substring(path.lastIndexOf("/") + 1); initialNetwork.write("UCTE", new Properties(), Path.of(path)); @@ -457,11 +459,11 @@ public static void iExportNetworksWithPras(String outputPath) throws IOException ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream); for (OffsetDateTime offsetDateTime : timeCoupledRaoResult.getTimestamps()) { - State preventiveState = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getPreventiveState(); + State preventiveState = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getPreventiveState(); Set preventiveNetworkActions = timeCoupledRaoResult.getIndividualRaoResult(offsetDateTime).getActivatedNetworkActionsDuringState(preventiveState); Set> preventiveRangeActions = timeCoupledRaoResult.getIndividualRaoResult(offsetDateTime).getActivatedRangeActionsDuringState(preventiveState); - Network modifiedNetwork = Network.read(timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getPostIcsImportNetworkPath()); - Network initialNetwork = Network.read(timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getInitialNetworkPath()); + Network modifiedNetwork = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getNetwork(); + Network initialNetwork = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getNetwork(); // Apply PRAs on modified network preventiveNetworkActions.forEach(networkAction -> networkAction.apply(initialNetwork)); @@ -474,7 +476,7 @@ public static void iExportNetworksWithPras(String outputPath) throws IOException } }); // Write network - String path = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getPostIcsImportNetworkPath().split(".jiidm")[0].concat(".uct"); + String path = getResourcesPath() + outputPath.split("/")[0] + "/" + offsetDateTime.format(DateTimeFormatter.ISO_DATE_TIME) + ".uct"; String name = path.substring(path.lastIndexOf("/") + 1); initialNetwork.write("UCTE", new Properties(), Path.of(path)); @@ -529,8 +531,8 @@ private static void applyRedispatchingAction(InjectionRangeAction injectionRange @Then("the optimized margin on {string} for timestamp {string} is {double} MW") public static void theOptimizedMarginOnCnecForTimestampIsMW(String cnecId, String timestamp, double margin) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - FlowCnec flowCnec = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getFlowCnec(cnecId); - Instant afterCra = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getLastInstant(); + FlowCnec flowCnec = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getFlowCnec(cnecId); + Instant afterCra = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getLastInstant(); assertEquals(margin, timeCoupledRaoResult.getIndividualRaoResult(offsetDateTime).getMargin(afterCra, flowCnec, Unit.MEGAWATT), RaoSteps.TOLERANCE_FLOW_IN_MEGAWATT); @@ -539,7 +541,7 @@ public static void theOptimizedMarginOnCnecForTimestampIsMW(String cnecId, Strin @Then("the functional cost for timestamp {string} is {double}") public static void theFunctionalCostForTimestampIs(String timestamp, double functionalCost) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - Instant afterCra = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getLastInstant(); + Instant afterCra = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getLastInstant(); assertEquals(functionalCost, timeCoupledRaoResult.getFunctionalCost(afterCra, offsetDateTime), RaoSteps.TOLERANCE_FLOW_IN_MEGAWATT); @@ -548,7 +550,7 @@ public static void theFunctionalCostForTimestampIs(String timestamp, double func @Then("the total cost for timestamp {string} is {double}") public static void theTotalCostForTimestampIs(String timestamp, double totalCost) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - Instant afterCra = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getLastInstant(); + Instant afterCra = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac().getLastInstant(); assertEquals(totalCost, timeCoupledRaoResult.getCost(afterCra, offsetDateTime), RaoSteps.TOLERANCE_FLOW_IN_MEGAWATT); @@ -556,8 +558,8 @@ public static void theTotalCostForTimestampIs(String timestamp, double totalCost @Then("the functional cost for all timestamps is {double}") public static void theFunctionalCostForAllTimestampsIs(double functionalCost) { - OffsetDateTime firstTimestamp = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getTimestamps().getFirst(); - Instant lastInstant = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(firstTimestamp).orElseThrow().getCrac().getLastInstant(); + OffsetDateTime firstTimestamp = timeCoupledRaoInput.getRaoInputs().getTimestamps().getFirst(); + Instant lastInstant = timeCoupledRaoInput.getRaoInputs().getData(firstTimestamp).orElseThrow().getCrac().getLastInstant(); assertEquals(functionalCost, timeCoupledRaoResult.getGlobalFunctionalCost(lastInstant), RaoSteps.TOLERANCE_FLOW_IN_MEGAWATT); @@ -565,8 +567,8 @@ public static void theFunctionalCostForAllTimestampsIs(double functionalCost) { @Then("the total cost for all timestamps is {double}") public static void theTotalCostForAllTimestampsIs(double totalCost) { - OffsetDateTime firstTimestamp = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getTimestamps().getFirst(); - Instant lastInstant = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(firstTimestamp).orElseThrow().getCrac().getLastInstant(); + OffsetDateTime firstTimestamp = timeCoupledRaoInput.getRaoInputs().getTimestamps().getFirst(); + Instant lastInstant = timeCoupledRaoInput.getRaoInputs().getData(firstTimestamp).orElseThrow().getCrac().getLastInstant(); assertEquals(totalCost, timeCoupledRaoResult.getGlobalCost(lastInstant), RaoSteps.TOLERANCE_FLOW_IN_MEGAWATT); @@ -575,7 +577,7 @@ public static void theTotalCostForAllTimestampsIs(double totalCost) { @When("I export F711 for business date {string}") // expected format yyyyMMdd public static void exportF711(String businessDate) { Map raoResults = new HashMap<>(); - timeCoupledRaoInputWithNetworkPaths.getTimestampsToRun().forEach(timestamp -> raoResults.put(timestamp, timeCoupledRaoResult.getIndividualRaoResult(timestamp))); + postIcsTimeCoupledRaoInput.getTimestampsToRun().forEach(timestamp -> raoResults.put(timestamp, timeCoupledRaoResult.getIndividualRaoResult(timestamp))); F711Utils.write( new TemporalDataImpl<>(raoResults), new TemporalDataImpl<>(cracCreationContexts).map(FbConstraintCreationContext.class::cast), @@ -591,10 +593,10 @@ public static void exportF711(String businessDate, String raoResultsZipPath) thr unzipZipToFolder(getResourcesPath().concat(raoResultsZipPath), tempDir); try { Map raoResults = new HashMap<>(); - for (OffsetDateTime timestamp : timeCoupledRaoInputWithNetworkPaths.getTimestampsToRun()) { + for (OffsetDateTime timestamp : postIcsTimeCoupledRaoInput.getTimestampsToRun()) { String filename = "RAO_RESULT_" + timestamp.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")) + ".json"; FileInputStream raoResultInputStream = new FileInputStream(getFile(String.valueOf(tempDir.resolve(filename)))); - RaoResult raoResult = RaoResult.read(raoResultInputStream, timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(timestamp).orElseThrow().getCrac()); + RaoResult raoResult = RaoResult.read(raoResultInputStream, postIcsTimeCoupledRaoInput.getRaoInputs().getData(timestamp).orElseThrow().getCrac()); raoResults.put(timestamp, raoResult); } F711Utils.write( @@ -646,20 +648,20 @@ public void statusShouldBe(String status) { @Then("the tap of PstRangeAction {string} at timestamp {string} after {string} at {string} should be {int}") public void theTapOfPstRangeActionPostContingencyShouldBe(String pstRangeActionId, String timestamp, String contingencyId, String instant, int chosenPstTap) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - Crac crac = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); + Crac crac = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); assertEquals(chosenPstTap, timeCoupledRaoResult.getIndividualRaoResult(offsetDateTime).getOptimizedTapOnState(crac.getState(contingencyId, crac.getInstant(instant)), (PstRangeAction) crac.getRangeAction(pstRangeActionId))); } @Then("the preventive tap of PstRangeAction {string} at timestamp {string} should be {int}") public void theTapOfPreventivePstRangeActionShouldBe(String pstRangeActionId, String timestamp, int chosenPstTap) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - Crac crac = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); + Crac crac = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); assertEquals(chosenPstTap, timeCoupledRaoResult.getIndividualRaoResult(offsetDateTime).getOptimizedTapOnState(crac.getPreventiveState(), (PstRangeAction) crac.getRangeAction(pstRangeActionId))); } private static void assertPowerValue(String networkElementId, String timestamp, double expectedPower) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - Crac crac = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); + Crac crac = postIcsTimeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); State preventiveState = crac.getPreventiveState(); Optional injectionRangeAction = crac.getRangeActions(preventiveState) .stream() @@ -678,7 +680,7 @@ private static void assertPowerValue(String networkElementId, String timestamp, private static boolean isRemedialActionUsed(String rangeActionId, String timestamp, String contingencyId, String instant) { OffsetDateTime offsetDateTime = getOffsetDateTimeFromBrusselsTimestamp(timestamp); - Crac crac = timeCoupledRaoInputWithNetworkPaths.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); + Crac crac = timeCoupledRaoInput.getRaoInputs().getData(offsetDateTime).orElseThrow().getCrac(); State state = getState(crac, contingencyId, instant); return timeCoupledRaoResult.getIndividualRaoResult(offsetDateTime).isActivatedDuringState(state, crac.getRemedialAction(rangeActionId)); }