diff --git a/src/main/java/com/powsybl/openloadflow/network/LfNetwork.java b/src/main/java/com/powsybl/openloadflow/network/LfNetwork.java index f293cbf5d8..7c23b6f45e 100644 --- a/src/main/java/com/powsybl/openloadflow/network/LfNetwork.java +++ b/src/main/java/com/powsybl/openloadflow/network/LfNetwork.java @@ -549,7 +549,8 @@ public void fix(boolean minImpedance, double lowImpedanceThreshold) { } else { // zero impedance phase shifter controller or controlled branch is not supported branches.stream() - .filter(b -> b.isPhaseController() || b.isPhaseControlled()) + .filter(b -> b.isPhaseController() || b.isPhaseControlled() + || b.getGeneratorReactivePowerControl().isPresent()) .forEach(branch -> branch.setMinZ(lowImpedanceThreshold)); } } diff --git a/src/test/java/com/powsybl/openloadflow/ac/GeneratorRemoteControlTest.java b/src/test/java/com/powsybl/openloadflow/ac/GeneratorRemoteControlTest.java index c1050971ad..e4898ee4af 100644 --- a/src/test/java/com/powsybl/openloadflow/ac/GeneratorRemoteControlTest.java +++ b/src/test/java/com/powsybl/openloadflow/ac/GeneratorRemoteControlTest.java @@ -395,6 +395,33 @@ void testGeneratorRemoteReactivePowerControl() { assertReactivePowerEquals(targetQ, l12.getTerminal(TwoSides.ONE)); } + @Test + void testGeneratorRemoteReactivePowerControlOnZeroImpedanceBranch() { + // create a basic 4-buses network + Network network = FourBusNetworkFactory.createBaseNetwork(); + Generator g4 = network.getGenerator("g4"); + Line l34 = network.getLine("l34"); + l34.setR(0).setX(0); + + double targetQ = 1.0; + + // disable voltage control on g4 + g4.setTargetQ(0).setVoltageRegulatorOn(false); + + // generator g4 regulates reactive power on line 4->3 (on side of g4) + // which is zero impedant + g4.newExtension(RemoteReactivePowerControlAdder.class) + .withTargetQ(targetQ) + .withRegulatingTerminal(l34.getTerminal(TwoSides.TWO)) + .withEnabled(true).add(); + + parameters.getExtension(OpenLoadFlowParameters.class) + .setReactivePowerRemoteControl(true); + LoadFlowResult result = loadFlowRunner.run(network, parameters); + assertTrue(result.isFullyConverged()); + assertReactivePowerEquals(targetQ, l34.getTerminal(TwoSides.TWO)); + } + @Test void testDiscardedGeneratorRemoteReactivePowerControls() { // create a basic 4-buses network