Skip to content

Commit b227526

Browse files
authored
Fix BusbarSectionFinderTraverser: handle internal branch case (#110)
Signed-off-by: Rehili Ghazwa <[email protected]>
1 parent 1db9dfb commit b227526

File tree

2 files changed

+73
-36
lines changed

2 files changed

+73
-36
lines changed

src/main/java/org/gridsuite/modification/modifications/BusbarSectionFinderTraverser.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ public TraverseResult traverse(Switch aSwitch) {
8888
int sourceNode = visitedNodes.containsKey(node1) ? node1 : node2;
8989
int targetNode = visitedNodes.containsKey(node1) ? node2 : node1;
9090
NodeState sourceState = visitedNodes.get(sourceNode);
91+
if (sourceState == null) {
92+
return TraverseResult.TERMINATE_PATH;
93+
}
9194
NodeState newState = new NodeState(sourceState.depth + 1, sourceState.allClosed && !aSwitch.isOpen());
9295
visitedNodes.put(targetNode, newState);
9396
lastSwitch = new SwitchInfo(aSwitch.getId(), aSwitch.isOpen());

src/test/java/org/gridsuite/modification/utils/BusbarSectionFinderTraverserTest.java

Lines changed: 70 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void setUp() {
4545
.add();
4646

4747
VoltageLevel vl2 = s1.newVoltageLevel()
48-
.setId("VLGEN2")
48+
.setId("VL2")
4949
.setNominalV(24.0)
5050
.setTopologyKind(TopologyKind.NODE_BREAKER)
5151
.add();
@@ -55,19 +55,19 @@ void setUp() {
5555
.setNode(1)
5656
.add();
5757
vl2.getNodeBreakerView().newBusbarSection()
58-
.setId("BBS2_1")
59-
.setName("BBS2_1")
58+
.setId("BBS1_2")
59+
.setName("BBS1_2")
6060
.setNode(2)
6161
.add();
6262
vl2.getNodeBreakerView().newBusbarSection()
63-
.setId("BBS1_2")
64-
.setName("BBS1_2")
65-
.setNode(3)
63+
.setId("BBS2_1")
64+
.setName("BBS2_1")
65+
.setNode(4)
6666
.add();
6767
vl2.getNodeBreakerView().newBusbarSection()
6868
.setId("BBS2_2")
6969
.setName("BBS2_2")
70-
.setNode(4)
70+
.setNode(5)
7171
.add();
7272

7373
vl2.getNodeBreakerView()
@@ -96,20 +96,34 @@ void setUp() {
9696
.add();
9797

9898
//Fork topology
99-
createSwitch(vl2, "DISC_BBS1.1_BBS1.2", "DISC_BBS1.1_BBS1.2", SwitchKind.DISCONNECTOR, false, false, false, 1, 3);
100-
createSwitch(vl2, "DISC_BBS2.1_BBS2.2", "DISC_BBS2.1_BBS2.2", SwitchKind.DISCONNECTOR, false, true, false, 2, 4);
101-
createSwitch(vl2, "DISC_BBS1_2", "DISC_BBS1_2", SwitchKind.DISCONNECTOR, false, true, false, 3, 5);
102-
createSwitch(vl2, "DISC_BBS2_2", "DISC_BBS2_2", SwitchKind.DISCONNECTOR, false, true, false, 4, 5);
103-
createSwitch(vl2, "BRK_FORK", "BRK_FORK", SwitchKind.BREAKER, false, true, false, 5, 6);
104-
createSwitch(vl2, "DISC_LINE_1_2", "DISC_LINE_1_2", SwitchKind.DISCONNECTOR, false, false, false, 6, 7);
105-
createSwitch(vl2, "DISC_LINE_2_2", "DISC_LINE_2_2", SwitchKind.DISCONNECTOR, false, false, false, 6, 8);
106-
createSwitch(vl2, "BRK_LINE_1_2", "BRK_LINE_1_2", SwitchKind.BREAKER, false, false, false, 7, 10);
107-
createSwitch(vl2, "BRK_LINE_2_2", "BRK_LINE_2_2", SwitchKind.BREAKER, false, false, false, 8, 9);
99+
createSwitch(vl2, "DISC_BBS1.1_BBS1.2", "DISC_BBS1.1_BBS1.2", SwitchKind.DISCONNECTOR, false, false, false, 1, 2);
100+
createSwitch(vl2, "DISC_BBS2.1_BBS2.2", "DISC_BBS2.1_BBS2.2", SwitchKind.DISCONNECTOR, false, true, false, 4, 5);
101+
createSwitch(vl2, "DISC_BBS1_2", "DISC_BBS1_2", SwitchKind.DISCONNECTOR, false, true, false, 2, 7);
102+
createSwitch(vl2, "DISC_BBS2_2", "DISC_BBS2_2", SwitchKind.DISCONNECTOR, false, true, false, 5, 7);
103+
createSwitch(vl2, "BRK_FORK", "BRK_FORK", SwitchKind.BREAKER, false, true, false, 7, 8);
104+
createSwitch(vl2, "DISC_LINE_1_2", "DISC_LINE_1_2", SwitchKind.DISCONNECTOR, false, false, false, 8, 9);
105+
createSwitch(vl2, "DISC_LINE_2_2", "DISC_LINE_2_2", SwitchKind.DISCONNECTOR, false, false, false, 8, 10);
106+
createSwitch(vl2, "BRK_LINE_1_2", "BRK_LINE_1_2", SwitchKind.BREAKER, false, false, false, 9, 11);
107+
createSwitch(vl2, "BRK_LINE_2_2", "BRK_LINE_2_2", SwitchKind.BREAKER, false, false, false, 10, 12);
108+
109+
// Internal Connection
110+
createSwitch(vl2, "DISC_BUS1_2_TD1", "DISC_BUS1_2_TD1", SwitchKind.DISCONNECTOR, false, false, false, 2, 13);
111+
createSwitch(vl2, "DISC_BUS2_2_TD1", "DISC_BUS2_2_TD1", SwitchKind.DISCONNECTOR, false, false, false, 5, 14);
112+
113+
// BYPASS topology
114+
createSwitch(vl2, "DISC_BBS1_1", "DISC_BBS1_1", SwitchKind.DISCONNECTOR, false, true, false, 1, 20);
115+
createSwitch(vl2, "DISC_BBS2_1", "DISC_BBS2_1", SwitchKind.DISCONNECTOR, false, true, false, 4, 23);
116+
createSwitch(vl2, "DISC_BYPASS", "DISC_BYPASS", SwitchKind.DISCONNECTOR, false, true, false, 20, 23);
117+
createSwitch(vl2, "DISC_LINE_1_1", "DISC_LINE_1_1", SwitchKind.DISCONNECTOR, false, true, false, 20, 17);
118+
createSwitch(vl2, "DISC_LINE_2_1", "DISC_LINE_2_1", SwitchKind.DISCONNECTOR, false, true, false, 23, 26);
119+
createSwitch(vl2, "BRK_LINE_1_1", "BRK_LINE_1_1", SwitchKind.BREAKER, false, true, false, 17, 18);
120+
createSwitch(vl2, "BRK_LINE_2_1", "BRK_LINE_2_1", SwitchKind.BREAKER, false, true, false, 26, 27);
121+
108122
network.newLine()
109123
.setId("LINE_1_2")
110124
.setName("LINE_1_2")
111-
.setVoltageLevel1("VLGEN2")
112-
.setNode1(10)
125+
.setVoltageLevel1("VL2")
126+
.setNode1(11)
113127
.setVoltageLevel2("VL1")
114128
.setNode2(11)
115129
.setR(2.0)
@@ -123,33 +137,24 @@ void setUp() {
123137
network.newLine()
124138
.setId("LINE_2_2")
125139
.setName("LINE_2_2")
126-
.setVoltageLevel1("VLGEN2")
127-
.setNode1(9)
140+
.setVoltageLevel1("VL2")
141+
.setNode1(12)
128142
.setVoltageLevel2("VL1")
129-
.setNode2(21)
143+
.setNode2(20)
130144
.setR(2.0)
131145
.setX(25.0)
132146
.setG1(0.0)
133147
.setB1(300E-6 / 2)
134148
.setG2(0.0)
135149
.setB2(300E-6 / 2)
136150
.add();
137-
138-
// BYPASS topology
139-
createSwitch(vl2, "DISC_BBS1_1", "DISC_BBS1_1", SwitchKind.DISCONNECTOR, false, true, false, 1, 15);
140-
createSwitch(vl2, "DISC_BBS2_1", "DISC_BBS2_1", SwitchKind.DISCONNECTOR, false, true, false, 2, 18);
141-
createSwitch(vl2, "DISC_BYPASS", "DISC_BYPASS", SwitchKind.DISCONNECTOR, false, true, false, 15, 18);
142-
createSwitch(vl2, "DISC_LINE_1_1", "DISC_LINE_1_1", SwitchKind.DISCONNECTOR, false, true, false, 15, 11);
143-
createSwitch(vl2, "DISC_LINE_2_1", "DISC_LINE_2_1", SwitchKind.DISCONNECTOR, false, true, false, 18, 21);
144-
createSwitch(vl2, "BRK_LINE_1_1", "BRK_LINE_1_1", SwitchKind.BREAKER, false, true, false, 11, 12);
145-
createSwitch(vl2, "BRK_LINE_2_1", "BRK_LINE_2_1", SwitchKind.BREAKER, false, true, false, 21, 23);
146151
network.newLine()
147152
.setId("LINE_1_1")
148153
.setName("LINE_1_1")
149-
.setVoltageLevel1("VLGEN2")
150-
.setNode1(12)
154+
.setVoltageLevel1("VL2")
155+
.setNode1(18)
151156
.setVoltageLevel2("VL1")
152-
.setNode2(3)
157+
.setNode2(13)
153158
.setR(2.0)
154159
.setX(25.0)
155160
.setG1(0.0)
@@ -161,10 +166,10 @@ void setUp() {
161166
network.newLine()
162167
.setId("LINE_2_1")
163168
.setName("LINE_2_1")
164-
.setVoltageLevel1("VLGEN2")
165-
.setNode1(23)
169+
.setVoltageLevel1("VL2")
170+
.setNode1(27)
166171
.setVoltageLevel2("VL1")
167-
.setNode2(41)
172+
.setNode2(14)
168173
.setR(2.0)
169174
.setX(25.0)
170175
.setG1(0.0)
@@ -173,6 +178,18 @@ void setUp() {
173178
.setB2(300E-6 / 2)
174179
.add();
175180

181+
s1.newTwoWindingsTransformer()
182+
.setId("TD1")
183+
.setName("TD1")
184+
.setVoltageLevel1("VL2")
185+
.setNode1(13)
186+
.setVoltageLevel2("VL2")
187+
.setNode2(14)
188+
.setR(0.24)
189+
.setX(2.4)
190+
.setG(0.0)
191+
.setB(0.0)
192+
.add();
176193
network.getVariantManager().setWorkingVariant(VariantManagerConstants.INITIAL_VARIANT_ID);
177194
}
178195

@@ -250,5 +267,22 @@ void testWithAllClosedSwitch() {
250267
assertEquals("DISC_BBS2_1", result21.lastSwitch().id());
251268
assertTrue(result21.allClosedSwitch());
252269
}
270+
271+
@Test
272+
void testWithInternalConnection() {
273+
TwoWindingsTransformer td1 = network.getTwoWindingsTransformer("TD1");
274+
BusbarSectionFinderTraverser.BusbarSectionResult result1 = BusbarSectionFinderTraverser.getBusbarSectionResult(td1.getTerminal1());
275+
BusbarSectionFinderTraverser.BusbarSectionResult result2 = BusbarSectionFinderTraverser.getBusbarSectionResult(td1.getTerminal2());
276+
assertNotNull(result1);
277+
assertEquals("BBS1_2", result1.busbarSectionId());
278+
assertEquals(1, result1.depth());
279+
assertTrue(result1.allClosedSwitch());
280+
assertEquals("DISC_BUS1_2_TD1", result1.lastSwitch().id());
281+
assertNotNull(result2);
282+
assertEquals("BBS2_2", result2.busbarSectionId());
283+
assertEquals(1, result2.depth());
284+
assertEquals("DISC_BUS2_2_TD1", result2.lastSwitch().id());
285+
assertTrue(result2.allClosedSwitch());
286+
}
253287
}
254288

0 commit comments

Comments
 (0)