From c6ee6ffd39bf129ea4288295ebf0470efeb40411 Mon Sep 17 00:00:00 2001 From: Sophie Frasnedo Date: Fri, 8 Dec 2023 18:49:25 +0100 Subject: [PATCH] Allow input voltage levels that do not comply with the predicate to be displayed Signed-off-by: Sophie Frasnedo --- .../nad/build/iidm/VoltageLevelFilter.java | 15 +- .../powsybl/nad/NetworkAreaDiagramTest.java | 13 +- .../resources/IEEE_14_bus_voltage_filter3.svg | 501 ++++++++++++++++++ 3 files changed, 518 insertions(+), 11 deletions(-) create mode 100644 network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java index f73ced816..66d24b108 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java @@ -86,10 +86,9 @@ public static VoltageLevelFilter createVoltageLevelFilterWithPredicate(Network n throw new PowsyblException(UNKNOWN_VOLTAGE_LEVEL + voltageLevelId + "'"); } if (!voltageLevelPredicate.test(vl)) { - LOGGER.warn("vl '{}' has his nominal voltage out of the indicated thresholds", voltageLevelId); - } else { - startingSet.add(vl); + LOGGER.warn("vl '{}' does not comply with the predicate", voltageLevelId); } + startingSet.add(vl); } Set voltageLevels = new HashSet<>(); VoltageLevelFilter.traverseVoltageLevels(startingSet, depth, voltageLevels, voltageLevelPredicate); @@ -110,9 +109,9 @@ private static void traverseVoltageLevels(Set voltageLevelsDepth, } Set nextDepthVoltageLevels = new HashSet<>(); for (VoltageLevel vl : voltageLevelsDepth) { - if (!visitedVoltageLevels.contains(vl) && predicate.test(vl)) { + if (!visitedVoltageLevels.contains(vl)) { visitedVoltageLevels.add(vl); - vl.visitEquipments(new VlVisitor(nextDepthVoltageLevels, visitedVoltageLevels)); + vl.visitEquipments(new VlVisitor(nextDepthVoltageLevels, visitedVoltageLevels, predicate)); } } traverseVoltageLevels(nextDepthVoltageLevels, depth - 1, visitedVoltageLevels, predicate); @@ -130,10 +129,12 @@ private static void checkVoltageBoundValues(double nominalVoltageLowerBound, dou private static class VlVisitor extends DefaultTopologyVisitor { private final Set nextDepthVoltageLevels; private final Set visitedVoltageLevels; + private final Predicate voltageLevelPredicate; - public VlVisitor(Set nextDepthVoltageLevels, Set visitedVoltageLevels) { + public VlVisitor(Set nextDepthVoltageLevels, Set visitedVoltageLevels, Predicate voltageLevelPredicate) { this.nextDepthVoltageLevels = nextDepthVoltageLevels; this.visitedVoltageLevels = visitedVoltageLevels; + this.voltageLevelPredicate = voltageLevelPredicate; } @Override @@ -171,7 +172,7 @@ private void visitBranch(Branch branch, Branch.Side side) { private void visitTerminal(Terminal terminal) { VoltageLevel voltageLevel = terminal.getVoltageLevel(); - if (!visitedVoltageLevels.contains(voltageLevel)) { + if (!visitedVoltageLevels.contains(voltageLevel) && voltageLevelPredicate.test(voltageLevel)) { nextDepthVoltageLevels.add(voltageLevel); } } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java index e502d47fd..4eb75d46c 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java @@ -7,6 +7,7 @@ */ package com.powsybl.nad; +import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import com.google.common.jimfs.Configuration; @@ -25,13 +26,13 @@ import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import ch.qos.logback.classic.Logger; import org.slf4j.LoggerFactory; import java.nio.file.FileSystem; import java.nio.file.Path; import java.util.List; +import static com.powsybl.nad.build.iidm.VoltageLevelFilter.NO_FILTER; import static org.junit.jupiter.api.Assertions.*; /** @@ -68,7 +69,7 @@ void testDrawSvg() { NadParameters nadParameters = new NadParameters() .setSvgParameters(getSvgParameters()) .setStyleProviderFactory(this::getStyleProvider); - NetworkAreaDiagram.draw(network, svgFile, nadParameters, VoltageLevelFilter.NO_FILTER); + NetworkAreaDiagram.draw(network, svgFile, nadParameters, NO_FILTER); assertEquals(toString("/dangling_line_connected.svg"), getContentFile(svgFile)); } @@ -112,11 +113,15 @@ void testVoltageFilteredDiagramOutOfBound() { logWatcher.start(); ((Logger) LoggerFactory.getLogger(VoltageLevelFilter.class)).addAppender(logWatcher); Network network = IeeeCdfNetworkFactory.create14(); + Path svgFileVoltageFilter = fileSystem.getPath("nad-test-voltage-filter.svg"); List voltageLevelList = List.of("VL4"); - VoltageLevelFilter.createNominalVoltageUpperBoundFilter(network, voltageLevelList, 90, 2); + VoltageLevelFilter voltageLevelFilter = VoltageLevelFilter.createNominalVoltageUpperBoundFilter(network, voltageLevelList, 130, 2); + NetworkAreaDiagram.draw(network, svgFileVoltageFilter, new NadParameters(), voltageLevelFilter); + List logsList = logWatcher.list; assertEquals(1, logsList.size()); - assertEquals("vl 'VL4' has his nominal voltage out of the indicated thresholds", logsList.get(0).getFormattedMessage()); + assertEquals("vl 'VL4' does not comply with the predicate", logsList.get(0).getFormattedMessage()); + assertEquals(toString("/IEEE_14_bus_voltage_filter3.svg"), getContentFile(svgFileVoltageFilter)); } @Test diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg new file mode 100644 index 000000000..92c77bac8 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_voltage_filter3.svg @@ -0,0 +1,501 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VL10
+ + + + + +
+
+
12.6 kV / -15.1°
+
+
+ +
+
VL14
+ + + + + +
+
+
12.4 kV / -16.0°
+
+
+ +
+
VL4
+ + + + + +
+
+
137.6 kV / -10.3°
+
+
+ +
+
VL7
+ + + + + +
+
+
14.9 kV / -13.4°
+
+
+ +
+
VL8
+ + + + + +
+
+
21.8 kV / -13.4°
+
+
+ +
+
VL9
+ + + + + +
+
+
12.7 kV / -14.9°
+
+
+
+