Skip to content

Commit e17dc47

Browse files
authored
Fix generator targetP update in AC-DC networks (#1373)
Signed-off-by: b.perreyon <baptiste.perreyon@supergrid-institute.com>
1 parent 64cfda2 commit e17dc47

2 files changed

Lines changed: 74 additions & 14 deletions

File tree

src/main/java/com/powsybl/openloadflow/network/LfAcDcNetwork.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public LfAcDcNetwork(List<LfNetwork> acNetworks, List<LfNetwork> dcNetworks) {
3030
this.acNetworks = List.copyOf(acNetworks);
3131
this.dcNetworks = List.copyOf(dcNetworks);
3232

33+
// Add LfElements in the LfAcDcNetwork. Their number is therefore updated to match the global LfAcDcNetwork object.
34+
// However their getNetwork() method still returns the original LfNetwork they belong to.
35+
// Having all elements in the LfAcDcNetwork allows to simulate load flow the whole connected network
36+
// The attributes acNetworks and dcNetworks also allow to access a "child" etwork individually.
3337
for (LfNetwork network : acNetworks) {
3438
network.getBuses().forEach(this::addBus);
3539
network.getBranches().forEach(this::addBranch);
@@ -40,7 +44,20 @@ public LfAcDcNetwork(List<LfNetwork> acNetworks, List<LfNetwork> dcNetworks) {
4044
network.getDcBuses().forEach(this::addDcBus);
4145
network.getDcLines().forEach(this::addDcLine);
4246
}
47+
}
4348

49+
@Override
50+
public void addListener(LfNetworkListener listener) {
51+
// LfElements getNetwork() method returns the original LfNetwork they belong to.
52+
// Therefore, any listener attached to the LfAcDcNetwork should be attached to the "children" LfNetworks in order
53+
// to be triggered when accessing the original LfNetwork listeners through an LfElement via the method getNetwork()
54+
super.addListener(listener);
55+
for (LfNetwork acNetwork : acNetworks) {
56+
acNetwork.addListener(listener);
57+
}
58+
for (LfNetwork dcNetwork : dcNetworks) {
59+
dcNetwork.addListener(listener);
60+
}
4461
}
4562

4663
@Override

src/test/java/com/powsybl/openloadflow/acdc/AcDcLoadFlowTest.java

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ void testVscAsymmetricalMonopole() {
227227

228228
Bus busGb150 = network.getBusBreakerView().getBus("BUSDC-GB-xNodeDc1gb-150");
229229
assertVoltageEquals(150.043375, busGb150);
230-
assertAngleEquals(2.976066, busGb150);
230+
assertAngleEquals(2.977430, busGb150);
231231

232232
Bus busFr400 = network.getBusBreakerView().getBus("BUSDC-FR-xNodeDc1fr-400");
233233
assertVoltageEquals(399.551518, busFr400);
@@ -239,7 +239,7 @@ void testVscAsymmetricalMonopole() {
239239

240240
Bus busGb = network.getBusBreakerView().getBus("BUS-GB");
241241
assertVoltageEquals(400.000000, busGb);
242-
assertAngleEquals(-0.00061, busGb);
242+
assertAngleEquals(0.000754, busGb);
243243

244244
DcNode dcNodeGbNeg = network.getDcNode("dcNodeGbNeg");
245245
assertVoltageEquals(0.000000, dcNodeGbNeg);
@@ -255,7 +255,7 @@ void testVscAsymmetricalMonopole() {
255255

256256
Generator genFr = network.getGenerator("GEN-FR");
257257
assertActivePowerEquals(-2000.732810, genFr.getTerminal());
258-
assertReactivePowerEquals(-10.470861, genFr.getTerminal());
258+
assertReactivePowerEquals(-10.617409, genFr.getTerminal());
259259

260260
VoltageSourceConverter vscFr = network.getVoltageSourceConverter("VscFr");
261261
assertActivePowerEquals(200.806464, vscFr.getTerminal1());
@@ -274,10 +274,10 @@ void testVscAsymmetricalMonopole() {
274274
assertDcPowerEquals(-200.000000, dcLinePos.getDcTerminal2());
275275

276276
Line acLine = network.getLine("acLine");
277-
assertActivePowerEquals(0.327588, acLine.getTerminal1());
278-
assertActivePowerEquals(-0.327588, acLine.getTerminal2());
279-
assertReactivePowerEquals(-0.065519, acLine.getTerminal1());
280-
assertReactivePowerEquals(0.065519, acLine.getTerminal2());
277+
assertActivePowerEquals(-0.405145, acLine.getTerminal1());
278+
assertActivePowerEquals(0.405145, acLine.getTerminal2());
279+
assertReactivePowerEquals(0.081032, acLine.getTerminal1());
280+
assertReactivePowerEquals(-0.081032, acLine.getTerminal2());
281281
}
282282

283283
@Test
@@ -312,7 +312,7 @@ void testVscSymmetricalMonopole() {
312312

313313
Bus busGb150 = network.getBusBreakerView().getBus("BUSDC-GB-xNodeDc1gb-150");
314314
assertVoltageEquals(150.043375, busGb150);
315-
assertAngleEquals(2.976065, busGb150);
315+
assertAngleEquals(2.978183, busGb150);
316316

317317
Bus busFr400 = network.getBusBreakerView().getBus("BUSDC-FR-xNodeDc1fr-400");
318318
assertVoltageEquals(399.557158, busFr400);
@@ -329,8 +329,8 @@ void testVscSymmetricalMonopole() {
329329
assertVoltageEquals(-250.000000, dcNodeFrPos);
330330

331331
Generator genGb = network.getGenerator("GEN-GB");
332-
assertActivePowerEquals(-2001.713011, genGb.getTerminal());
333-
assertReactivePowerEquals(-10.448402, genGb.getTerminal());
332+
assertActivePowerEquals(-2001.137135, genGb.getTerminal());
333+
assertReactivePowerEquals(-10.220984, genGb.getTerminal());
334334

335335
VoltageSourceConverter vscFr = network.getVoltageSourceConverter("VscFr");
336336
assertActivePowerEquals(201.626136, vscFr.getTerminal1());
@@ -359,10 +359,10 @@ void testVscSymmetricalMonopole() {
359359
assertDcPowerEquals(0.000013, dlGroundPos.getDcTerminal1());
360360

361361
Line acLine = network.getLine("acLine");
362-
assertActivePowerEquals(0.327588, acLine.getTerminal1());
363-
assertActivePowerEquals(-0.327588, acLine.getTerminal2());
364-
assertReactivePowerEquals(-0.065519, acLine.getTerminal1());
365-
assertReactivePowerEquals(0.065519, acLine.getTerminal2());
362+
assertActivePowerEquals(-0.809547, acLine.getTerminal1());
363+
assertActivePowerEquals(0.809547, acLine.getTerminal2());
364+
assertReactivePowerEquals(0.161920, acLine.getTerminal1());
365+
assertReactivePowerEquals(-0.161920, acLine.getTerminal2());
366366
}
367367

368368
@Test
@@ -410,6 +410,49 @@ void testAcDcExample() {
410410
assertDcPowerEquals(-49.359850, dl34.getDcTerminal2());
411411
}
412412

413+
@Test
414+
void testAcDcExampleOtherSlack() {
415+
// 2 converters, 1 AC Network, the first converter controls Pac, and the second one Vdc
416+
// The slack bus is located to another AC bus
417+
network = AcDcNetworkFactory.createAcDcNetwork1();
418+
parametersExt.setSlackBusSelectionMode(SlackBusSelectionMode.NAME)
419+
.setSlackBusId("vl2_0");
420+
LoadFlowResult result = loadFlowRunner.run(network, parameters);
421+
assertTrue(result.isFullyConverged());
422+
423+
DcNode dn3 = network.getDcNode("dn3");
424+
assertVoltageEquals(400.012374, dn3);
425+
426+
DcNode dn4 = network.getDcNode("dn4");
427+
assertVoltageEquals(400.000000, dn4);
428+
429+
Generator g1 = network.getGenerator("g1");
430+
assertActivePowerEquals(-101.35133, g1.getTerminal());
431+
assertReactivePowerEquals(-20.212180, g1.getTerminal());
432+
433+
VoltageSourceConverter conv23 = network.getVoltageSourceConverter("conv23");
434+
assertActivePowerEquals(50.000000, conv23.getTerminal1());
435+
assertReactivePowerEquals(0.000000, conv23.getTerminal1());
436+
assertDcPowerEquals(-49.361373, conv23.getDcTerminal1());
437+
assertDcPowerEquals(0.000000, conv23.getDcTerminal2());
438+
439+
VoltageSourceConverter conv45 = network.getVoltageSourceConverter("conv45");
440+
assertActivePowerEquals(-48.721223, conv45.getTerminal1());
441+
assertReactivePowerEquals(0.000000, conv45.getTerminal1());
442+
assertDcPowerEquals(49.359850, conv45.getDcTerminal1());
443+
assertDcPowerEquals(0.000000, conv45.getDcTerminal2());
444+
445+
Line l12 = network.getLine("l12");
446+
assertActivePowerEquals(101.35133, l12.getTerminal1());
447+
assertReactivePowerEquals(20.212180, l12.getTerminal1());
448+
assertActivePowerEquals(-101.28111, l12.getTerminal2());
449+
assertReactivePowerEquals(-20.002003, l12.getTerminal2());
450+
451+
DcLine dl34 = network.getDcLine("dl34");
452+
assertDcPowerEquals(49.361372, dl34.getDcTerminal1());
453+
assertDcPowerEquals(-49.359850, dl34.getDcTerminal2());
454+
}
455+
413456
@Test
414457
void testAcDcExampleWithOtherControl() {
415458
//2 converters, 1 AC Network, the first converter controls Vdc, and the second one Pac

0 commit comments

Comments
 (0)