Skip to content

Commit 81a3a9f

Browse files
flo-duprolnico
andauthored
[NAD] Fix removed HVDC lines (#788)
* Fix: removed HVDC lines * Add and manage icons for LCC and VSC in NADs * Fix unit test * Merge paths in svg components --------- Signed-off-by: Florian Dupuy <florian.dupuy@rte-france.com> Co-authored-by: Nicolas Rol <nicolas.rol@rte-france.com>
1 parent b787aa9 commit 81a3a9f

87 files changed

Lines changed: 1484 additions & 2 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ private void fillInjectionsMap(VoltageLevel vl, Graph graph, Map<String, List<In
104104
vl.getShuntCompensators().forEach(sc -> addInjection(graph, sc, injectionsMap));
105105
vl.getBatteries().forEach(b -> addInjection(graph, b, injectionsMap));
106106
vl.getStaticVarCompensators().forEach(svc -> addInjection(graph, svc, injectionsMap));
107+
vl.getVscConverterStations().forEach(vsc -> {
108+
if (vsc.getHvdcLine() == null) {
109+
addInjection(graph, vsc, injectionsMap);
110+
}
111+
});
112+
vl.getLccConverterStations().forEach(lcc -> {
113+
if (lcc.getHvdcLine() == null) {
114+
addInjection(graph, lcc, injectionsMap);
115+
}
116+
});
107117
}
108118

109119
private void addInjection(Graph graph, com.powsybl.iidm.network.Injection<?> inj, Map<String, List<Injection>> injectionsMap) {
@@ -129,10 +139,18 @@ private static Injection.Type getInjectionType(com.powsybl.iidm.network.Injectio
129139
case LOAD -> Injection.Type.LOAD;
130140
case SHUNT_COMPENSATOR -> getShuntCompensatorType((ShuntCompensator) inj);
131141
case STATIC_VAR_COMPENSATOR -> Injection.Type.STATIC_VAR_COMPENSATOR;
142+
case HVDC_CONVERTER_STATION -> getInjectionTypeForHvdcConverterStation((HvdcConverterStation<?>) inj);
132143
default -> throw new AssertionError("Unexpected injection type: " + inj.getType());
133144
};
134145
}
135146

147+
private static Injection.Type getInjectionTypeForHvdcConverterStation(HvdcConverterStation<?> hvdcConverterStation) {
148+
return switch (hvdcConverterStation.getHvdcType()) {
149+
case LCC -> Injection.Type.LCC;
150+
case VSC -> Injection.Type.VSC;
151+
};
152+
}
153+
136154
private static Injection.Type getShuntCompensatorType(ShuntCompensator shuntCompensator) {
137155
return IidmUtil.isCapacitor(shuntCompensator) ? Injection.Type.SHUNT_COMPENSATOR_CAPACITOR : Injection.Type.SHUNT_COMPENSATOR_INDUCTOR;
138156
}
@@ -191,7 +209,7 @@ private void visitTieLine(TieLine tieLine, DanglingLine dl, Graph graph) {
191209
private void visitHvdcConverterStation(HvdcConverterStation<?> converterStation, Graph graph) {
192210
// check if the hvdc line was not already added (at the other side of the line)
193211
HvdcLine hvdcLine = converterStation.getHvdcLine();
194-
if (graph.containsEdge(hvdcLine.getId())) {
212+
if (hvdcLine == null || graph.containsEdge(hvdcLine.getId())) {
195213
return;
196214
}
197215

network-area-diagram/src/main/java/com/powsybl/nad/model/Injection.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ public enum Type {
2525
SHUNT_COMPENSATOR_INDUCTOR,
2626
STATIC_VAR_COMPENSATOR,
2727
GENERATOR,
28-
BATTERY
28+
BATTERY,
29+
LCC,
30+
VSC
2931
}
3032

3133
private final Type type;

network-area-diagram/src/main/resources/DefaultLibrary/components.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
.nad-capacitor {stroke: var(--nad-vl-color, lightgrey); stroke-width: 3; fill: none}
55
.nad-inductor {stroke: var(--nad-vl-color, lightgrey); stroke-width: 3; stroke-linejoin: round; stroke-linecap: round; fill: none}
66
.nad-svc {stroke: var(--nad-vl-color, lightgrey); stroke-width: 3; stroke-linejoin:round; fill: none}
7+
.nad-lcc {stroke: var(--nad-vl-color, lightgrey); stroke-width: 3; stroke-linecap:round; fill: none}
8+
.nad-vsc {stroke: var(--nad-vl-color, lightgrey); stroke-width: 3; stroke-linecap:round; fill: none}
79
.nad-disconnected .nad-load {stroke: lightgrey}
810
.nad-disconnected .nad-battery {stroke: lightgrey}
911
.nad-disconnected .nad-generator {stroke: lightgrey}

network-area-diagram/src/main/resources/DefaultLibrary/components.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,34 @@
8383
],
8484
"styleClass": "nad-svc"
8585
},
86+
{
87+
"type": "LCC",
88+
"size": {
89+
"width": 50.0,
90+
"height": 50.0
91+
},
92+
"subComponents": [
93+
{
94+
"name": "LCC",
95+
"fileName": "lcc.svg"
96+
}
97+
],
98+
"styleClass": "nad-lcc"
99+
},
100+
{
101+
"type": "VSC",
102+
"size": {
103+
"width": 50.0,
104+
"height": 50.0
105+
},
106+
"subComponents": [
107+
{
108+
"name": "VSC",
109+
"fileName": "vsc.svg"
110+
}
111+
],
112+
"styleClass": "nad-vsc"
113+
},
86114
{
87115
"type": "LOCK",
88116
"size": {
Lines changed: 9 additions & 0 deletions
Loading
Lines changed: 9 additions & 0 deletions
Loading

network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
*/
77
package com.powsybl.nad.svg;
88

9+
import com.powsybl.iidm.network.HvdcLine;
910
import com.powsybl.iidm.network.Network;
11+
import com.powsybl.iidm.network.test.FourSubstationsNodeBreakerFactory;
1012
import com.powsybl.iidm.network.test.HvdcTestNetwork;
1113
import com.powsybl.nad.AbstractTest;
1214
import com.powsybl.nad.build.iidm.VoltageLevelFilter;
@@ -46,4 +48,16 @@ void testHvdcVL1Depth1() {
4648
VoltageLevelFilter filter = VoltageLevelFilter.createVoltageLevelDepthFilter(network, network.getVoltageLevel("VL1").getId(), 1);
4749
assertSvgEquals("/hvdc-vl-depth-1.svg", network, filter);
4850
}
51+
52+
@Test
53+
void testHvdcLineRemoved() {
54+
Network network = FourSubstationsNodeBreakerFactory.create();
55+
assertSvgEquals("/hvdc_present.svg", network);
56+
setLayoutParameters(new LayoutParameters().setInjectionsAdded(true));
57+
assertSvgEquals("/hvdc_injections.svg", network);
58+
network.getHvdcLineStream().toList().forEach(HvdcLine::remove);
59+
assertSvgEquals("/hvdc_line_removed_injections.svg", network);
60+
setLayoutParameters(new LayoutParameters().setInjectionsAdded(false));
61+
assertSvgEquals("/hvdc_line_removed.svg", network);
62+
}
4963
}

network-area-diagram/src/test/resources/3wt.svg

Lines changed: 2 additions & 0 deletions
Loading

network-area-diagram/src/test/resources/3wt_disconnected.svg

Lines changed: 2 additions & 0 deletions
Loading

network-area-diagram/src/test/resources/3wt_disconnected_topological.svg

Lines changed: 2 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)