From ec33e0effdb170bc825c4e8b0bceb0f2eaf3abb9 Mon Sep 17 00:00:00 2001 From: Didier Vidal Date: Mon, 24 Mar 2025 11:20:09 +0100 Subject: [PATCH 1/3] fix double slack distribution in SA DC Signed-off-by: Didier Vidal --- .../com/powsybl/openloadflow/dc/DcLoadFlowEngine.java | 4 +++- .../sa/WoodburyDcSecurityAnalysisWithActionsTest.java | 11 +++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/powsybl/openloadflow/dc/DcLoadFlowEngine.java b/src/main/java/com/powsybl/openloadflow/dc/DcLoadFlowEngine.java index e5e052014d..6bc7a1841b 100644 --- a/src/main/java/com/powsybl/openloadflow/dc/DcLoadFlowEngine.java +++ b/src/main/java/com/powsybl/openloadflow/dc/DcLoadFlowEngine.java @@ -74,7 +74,9 @@ public static double distributeSlack(LfNetwork network, Collection buses, public static double getActivePowerMismatch(Collection buses) { double mismatch = 0; for (LfBus b : buses) { - mismatch += b.getGenerationTargetP() - b.getLoadTargetP(); + if (!b.isDisabled()) { + mismatch += b.getGenerationTargetP() - b.getLoadTargetP(); + } } return -mismatch; } diff --git a/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java b/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java index 54a708400c..e7e7c5d1f1 100644 --- a/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java +++ b/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java @@ -17,6 +17,7 @@ import com.powsybl.contingency.LoadContingency; import com.powsybl.iidm.network.Network; import com.powsybl.loadflow.LoadFlowParameters; +import com.powsybl.loadflow.LoadFlowResult; import com.powsybl.openloadflow.OpenLoadFlowParameters; import com.powsybl.openloadflow.network.PhaseControlFactory; import com.powsybl.openloadflow.network.SlackBusSelectionMode; @@ -219,9 +220,9 @@ void testSaDcPhaseTapChangerTapPositionChangeAlphaOnly(boolean dcFastMode) { assertEquals(network.getTwoWindingsTransformer("PS1").getTerminal2().getP(), brRelPS1.getP2(), LoadFlowAssert.DELTA_POWER); } - // TODO Does not work in DC mode - to fix in a separate PR - @Test - void testSaDcPhaseTapChangerTapPositionChangeWithConnectivityBreak() { + @ParameterizedTest + @ValueSource(booleans = {false, true}) + void testSaDcPhaseTapChangerTapPositionChangeWithConnectivityBreak(boolean fastDcMode) { Network network = PhaseControlFactory.createNetworkWith3Buses(); List monitors = createAllBranchesMonitors(network); @@ -235,6 +236,8 @@ void testSaDcPhaseTapChangerTapPositionChangeWithConnectivityBreak() { OpenLoadFlowParameters.create(parameters) .setSlackBusId("VL2_0") .setSlackBusSelectionMode(SlackBusSelectionMode.NAME); + securityAnalysisParameters.getExtension(OpenSecurityAnalysisParameters.class) + .setDcFastMode(fastDcMode); SecurityAnalysisResult result = runSecurityAnalysis(network, contingencies, monitors, securityAnalysisParameters, operatorStrategies, actions, ReportNode.NO_OP); @@ -254,7 +257,7 @@ void testSaDcPhaseTapChangerTapPositionChangeWithConnectivityBreak() { // Apply remedial action network.getTwoWindingsTransformer("PS1").getPhaseTapChanger().setTapPosition(0); - loadFlowRunner.run(network, parameters); + LoadFlowResult lfResult = loadFlowRunner.run(network, parameters); // Compare results on the line L12 assertEquals(network.getLine("L12").getTerminal1().getP(), brAbsL12.getP1(), LoadFlowAssert.DELTA_POWER); From a69d8dec09e10ec95a6d244dcbd98ea80630c88e Mon Sep 17 00:00:00 2001 From: Hadrien Date: Mon, 24 Mar 2025 12:02:30 +0100 Subject: [PATCH 2/3] Clean Signed-off-by: Hadrien --- .../sa/WoodburyDcSecurityAnalysisWithActionsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java b/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java index e7e7c5d1f1..c2c5bd02c3 100644 --- a/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java +++ b/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java @@ -257,7 +257,7 @@ void testSaDcPhaseTapChangerTapPositionChangeWithConnectivityBreak(boolean fastD // Apply remedial action network.getTwoWindingsTransformer("PS1").getPhaseTapChanger().setTapPosition(0); - LoadFlowResult lfResult = loadFlowRunner.run(network, parameters); + loadFlowRunner.run(network, parameters); // Compare results on the line L12 assertEquals(network.getLine("L12").getTerminal1().getP(), brAbsL12.getP1(), LoadFlowAssert.DELTA_POWER); From 8dc37fc12bbb31d4f945097fe51bd8d46e0ff255 Mon Sep 17 00:00:00 2001 From: Hadrien Date: Mon, 24 Mar 2025 12:05:33 +0100 Subject: [PATCH 3/3] Fix import Signed-off-by: Hadrien --- .../sa/WoodburyDcSecurityAnalysisWithActionsTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java b/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java index c2c5bd02c3..8b434a088d 100644 --- a/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java +++ b/src/test/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysisWithActionsTest.java @@ -17,7 +17,6 @@ import com.powsybl.contingency.LoadContingency; import com.powsybl.iidm.network.Network; import com.powsybl.loadflow.LoadFlowParameters; -import com.powsybl.loadflow.LoadFlowResult; import com.powsybl.openloadflow.OpenLoadFlowParameters; import com.powsybl.openloadflow.network.PhaseControlFactory; import com.powsybl.openloadflow.network.SlackBusSelectionMode;