|
7 | 7 | */ |
8 | 8 | package com.powsybl.openloadflow.ac; |
9 | 9 |
|
| 10 | +import com.powsybl.commons.report.ReportNode; |
| 11 | +import com.powsybl.computation.local.LocalComputationManager; |
10 | 12 | import com.powsybl.iidm.network.*; |
11 | 13 | import com.powsybl.iidm.network.extensions.VoltagePerReactivePowerControlAdder; |
12 | 14 | import com.powsybl.loadflow.LoadFlow; |
|
17 | 19 | import com.powsybl.openloadflow.OpenLoadFlowProvider; |
18 | 20 | import com.powsybl.openloadflow.network.AbstractLoadFlowNetworkFactory; |
19 | 21 | import com.powsybl.openloadflow.network.SlackBusSelectionMode; |
| 22 | +import com.powsybl.openloadflow.util.LoadFlowAssert; |
20 | 23 | import org.junit.jupiter.api.BeforeEach; |
21 | 24 | import org.junit.jupiter.api.Test; |
22 | 25 |
|
| 26 | +import java.io.IOException; |
| 27 | + |
23 | 28 | import static com.powsybl.openloadflow.util.LoadFlowAssert.assertVoltageEquals; |
24 | 29 | import static org.junit.jupiter.api.Assertions.assertEquals; |
25 | 30 | import static org.junit.jupiter.api.Assertions.assertTrue; |
@@ -193,6 +198,42 @@ void test() { |
193 | 198 | assertVoltageEquals(20, b3); // PV |
194 | 199 | } |
195 | 200 |
|
| 201 | + @Test |
| 202 | + void testMultipleSwitch() throws IOException { |
| 203 | + g2.newMinMaxReactiveLimits() |
| 204 | + .setMinQ(-179) |
| 205 | + .setMaxQ(700) |
| 206 | + .add(); |
| 207 | + g2.setTargetV(22); |
| 208 | + ReportNode reportNode = ReportNode.newRootReportNode().withMessageTemplate("test", "test").build(); |
| 209 | + LoadFlowResult result = loadFlowRunner.run(network, network.getVariantManager().getWorkingVariantId(), LocalComputationManager.getDefault(), parameters, reportNode); |
| 210 | + assertTrue(result.isFullyConverged()); |
| 211 | + // bus 1 and 3 switch PQ at first outer loop, then at next outer loop bus 3 go back PV |
| 212 | + assertVoltageEquals(17.441, b1); // PQ => v != 17 |
| 213 | + assertVoltageEquals(21.99, b2); // PQ => v != 22 |
| 214 | + assertVoltageEquals(20, b3); // PV |
| 215 | + String expected = """ |
| 216 | + + test |
| 217 | + + Load flow on network 'switch-pq-pv-test' |
| 218 | + + Network CC0 SC0 |
| 219 | + + Network info |
| 220 | + Network has 4 buses and 3 branches |
| 221 | + Network balance: active generation=300 MW, active load=300 MW, reactive generation=0 MVar, reactive load=200 MVar |
| 222 | + Angle reference bus: vl4_0 |
| 223 | + Slack bus: vl4_0 |
| 224 | + Outer loop VoltageMonitoring |
| 225 | + + Outer loop ReactiveLimits |
| 226 | + + Outer loop iteration 1 |
| 227 | + + 2 buses switched PV -> PQ (1 buses remain PV) |
| 228 | + Switch bus 'vl1_0' PV -> PQ, q=-200.872086 < minQ=-179 |
| 229 | + Switch bus 'vl2_0' PV -> PQ, q=712.632433 > maxQ=700 |
| 230 | + Outer loop VoltageMonitoring |
| 231 | + Outer loop ReactiveLimits |
| 232 | + AC load flow completed successfully (solverStatus=CONVERGED, outerloopStatus=STABLE) |
| 233 | + """; |
| 234 | + LoadFlowAssert.assertReportEqualsString(expected, reportNode); |
| 235 | + } |
| 236 | + |
196 | 237 | @Test |
197 | 238 | void testWithSlope() { |
198 | 239 | g3.remove(); |
|
0 commit comments