From ae5dae788542278eb8121f5398510b557f67c48d Mon Sep 17 00:00:00 2001 From: Florian Dupuy <66690739+flo-dup@users.noreply.github.com> Date: Tue, 5 Nov 2024 17:06:45 +0100 Subject: [PATCH 1/5] Fix disconnected bus in bus breaker topology (#657) * Add unit test * Fix the bus breaker connection check Signed-off-by: Florian Dupuy --- .../iidm/HighlightLineStateStyleProvider.java | 2 +- .../sld/iidm/TestCaseBusDisconnected.java | 73 +++++ .../TestCaseBusBreakerBusConnected.svg | 262 ++++++++++++++++++ .../TestCaseNodeBreakerBbsConnected.svg | 236 ++++++++++++++++ 4 files changed, 572 insertions(+), 1 deletion(-) create mode 100644 single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseBusDisconnected.java create mode 100644 single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseBusBreakerBusConnected.svg create mode 100644 single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseNodeBreakerBbsConnected.svg diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/styles/iidm/HighlightLineStateStyleProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/styles/iidm/HighlightLineStateStyleProvider.java index b4f1af68f..0c8cdc489 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/styles/iidm/HighlightLineStateStyleProvider.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/styles/iidm/HighlightLineStateStyleProvider.java @@ -57,7 +57,7 @@ private boolean isBusOrBbsConnected(BusNode busNode) { } else { Bus bus = network.getBusBreakerView().getBus(equipmentId); if (bus != null) { - return bus.getConnectedTerminalStream().anyMatch(Terminal::isConnected); + return bus.getVoltageLevel().getBusView().getMergedBus(bus.getId()) != null; } return true; // should not happen } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseBusDisconnected.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseBusDisconnected.java new file mode 100644 index 000000000..0e490e11c --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseBusDisconnected.java @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * SPDX-License-Identifier: MPL-2.0 + */ +package com.powsybl.sld.iidm; + +import com.powsybl.diagram.test.Networks; +import com.powsybl.iidm.network.*; +import com.powsybl.sld.builders.NetworkGraphBuilder; +import com.powsybl.sld.model.graphs.VoltageLevelGraph; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy {@literal } + */ +class TestCaseBusDisconnected extends AbstractTestCaseIidm { + + @BeforeEach + @Override + public void setUp() throws IOException { + network = Network.create("testCaseBusNodeDisconnected", "testCaseBusNodeDisconnected"); + graphBuilder = new NetworkGraphBuilder(network); + substation = Networks.createSubstation(network, "s", "s", Country.FR); + + // bus breaker topology + VoltageLevel vlBb = Networks.createVoltageLevel(substation, "vlBb", "vlBb", TopologyKind.BUS_BREAKER, 225); + Bus b1 = vlBb.getBusBreakerView().newBus().setId("b1").add(); + Bus b2 = vlBb.getBusBreakerView().newBus().setId("b2").add(); + Bus b3 = vlBb.getBusBreakerView().newBus().setId("b3").add(); + vlBb.getBusBreakerView().newSwitch().setId("s12").setBus1(b1.getId()).setBus2(b2.getId()).add(); + vlBb.getBusBreakerView().newSwitch().setId("s23").setOpen(true).setBus1(b2.getId()).setBus2(b3.getId()).add(); + + // node breaker topology + VoltageLevel vlNb = Networks.createVoltageLevel(substation, "vlNb", "vlNb", TopologyKind.NODE_BREAKER, 225); + vlNb.getNodeBreakerView().newBusbarSection().setId("bbs1").setNode(0).add(); + vlNb.getNodeBreakerView().newBusbarSection().setId("bbs2").setNode(1).add(); + vlNb.getNodeBreakerView().newSwitch().setId("sLine").setKind(SwitchKind.DISCONNECTOR).setNode1(0).setNode2(2).add(); + vlNb.getNodeBreakerView().newSwitch().setId("sLoad").setOpen(true).setKind(SwitchKind.DISCONNECTOR).setNode1(1).setNode2(3).add(); + vlNb.newLoad().setNode(3).setId("load").setP0(10).setQ0(10).add(); + + network.newLine().setId("line") + .setG1(0).setB1(0).setVoltageLevel1(vlBb.getId()).setBus1(b2.getId()) + .setG2(0).setB2(0).setVoltageLevel2(vlNb.getId()).setNode2(2) + .setR(1).setX(1) + .add(); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("provideTestData") + void test(String testName, String vlId, String svgResourceName) { + VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph(vlId); + voltageLevelGraphLayout(g); + assertEquals(toString(svgResourceName), toSVG(g, svgResourceName)); + } + + private static List provideTestData() { + return List.of( + Arguments.of("Test bus connected/disconnected", "vlBb", "/TestCaseBusBreakerBusConnected.svg"), + Arguments.of("Test busbarSection connected/disconnected", "vlNb", "/TestCaseNodeBreakerBbsConnected.svg") + ); + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseBusBreakerBusConnected.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseBusBreakerBusConnected.svg new file mode 100644 index 000000000..d6abdaa57 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseBusBreakerBusConnected.svg @@ -0,0 +1,262 @@ + + + + + + + + b1 + + + + b2 + + + + b3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + line + + + + diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseNodeBreakerBbsConnected.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseNodeBreakerBbsConnected.svg new file mode 100644 index 000000000..6450d7108 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseNodeBreakerBbsConnected.svg @@ -0,0 +1,236 @@ + + + + + + + + bbs1 + + + + bbs2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + load + + + + From b68a4f0acd9ef6dfbef04a04285b6635db5a0913 Mon Sep 17 00:00:00 2001 From: Olivier Perrin Date: Mon, 2 Dec 2024 09:49:46 +0100 Subject: [PATCH 2/5] Fix GraphMetadata serialization: attributes' order (#659) Signed-off-by: Olivier Perrin --- .../src/main/java/com/powsybl/sld/svg/GraphMetadata.java | 6 ++++++ .../test/resources/substDiag_with_hvdc_line_metadata.json | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java index b488dbb07..b36599c83 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; import com.powsybl.commons.json.JsonUtil; @@ -32,6 +33,11 @@ public class GraphMetadata extends AbstractMetadata { @JsonInclude(JsonInclude.Include.NON_NULL) + // On some systems, the export order is determined by the order of the 1st encountered JsonCreator's attributes + // and "unescapedId" is put in last place. But on other systems, the export order is determined by the getters' order + // and "unescapedId" is put in 1st place, which leads to comparison errors in the unit tests. + // To prevent this discrepancy, the order is manually fixed. + @JsonPropertyOrder(value = {"unescapedId", "id", "vid", "nextVId", "componentType", "open", "direction", "vlabel", "equipmentId", "labels"}) public static class NodeMetadata { private final String unescapedId; diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_with_hvdc_line_metadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_with_hvdc_line_metadata.json index 5a38191b5..63b95725b 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_with_hvdc_line_metadata.json +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_with_hvdc_line_metadata.json @@ -123,6 +123,7 @@ "positionName" : "NW_LABEL" } ] }, { + "unescapedId" : "LCC_1", "id" : "idLCC_95_1", "vid" : "VoltageLevel1", "nextVId" : "VoltageLevel2", @@ -134,8 +135,7 @@ "labels" : [ { "id" : "LCC_1_S_LABEL", "positionName" : "S_LABEL" - } ], - "unescapedId" : "LCC_1" + } ] }, { "id" : "LABEL_VL_VoltageLevel1", "vid" : "VoltageLevel1", @@ -164,6 +164,7 @@ "vlabel" : false, "labels" : [ ] }, { + "unescapedId" : "VSC_1", "id" : "idVSC_95_1", "vid" : "VoltageLevel1", "nextVId" : "VoltageLevel2", @@ -175,8 +176,7 @@ "labels" : [ { "id" : "VSC_1_N_LABEL", "positionName" : "N_LABEL" - } ], - "unescapedId" : "VSC_1" + } ] }, { "id" : "idBUSCO_95_Bus1_95_VSC_95_1", "vid" : "VoltageLevel1", From e74ec423780139adf1e62d450b4cbd9b2e708a7c Mon Sep 17 00:00:00 2001 From: Sophie Frasnedo <93923177+So-Fras@users.noreply.github.com> Date: Wed, 4 Dec 2024 18:29:18 +0100 Subject: [PATCH 3/5] Bump powsybl-core to 6.6.0-RC1 (#660) Signed-off-by: Sophie Frasnedo --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4939e08e2..ff98abf0d 100644 --- a/pom.xml +++ b/pom.xml @@ -73,7 +73,7 @@ **/generated/**/* - 6.5.0 + 6.6.0-RC1 From 4d0ec3bae3585be6902d458b9c0470d134b93943 Mon Sep 17 00:00:00 2001 From: Olivier Perrin Date: Thu, 12 Dec 2024 10:29:07 +0100 Subject: [PATCH 4/5] Bump powsybl-parent to v20 (#662) Signed-off-by: Olivier Perrin --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff98abf0d..50d0349b8 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ com.powsybl powsybl-parent - 15 + 20 powsybl-diagram From f81d978b55224db20004be63ec9bd37adee47bcb Mon Sep 17 00:00:00 2001 From: Massimo Ferraro Date: Mon, 16 Dec 2024 12:16:44 +0100 Subject: [PATCH 5/5] Add fictitious flag to node metadata in network area diagram (#663) * Add fictitious flag to node metadata in network area diagram * Moved isFictitious method to Node interface Signed-off-by: massimo.ferraro --- .../com/powsybl/nad/model/AbstractNode.java | 9 +- .../java/com/powsybl/nad/model/BusNode.java | 2 +- .../main/java/com/powsybl/nad/model/Node.java | 2 + .../java/com/powsybl/nad/model/TextNode.java | 2 +- .../com/powsybl/nad/model/ThreeWtNode.java | 2 +- .../powsybl/nad/model/VoltageLevelNode.java | 8 +- .../nad/svg/metadata/DiagramMetadata.java | 3 +- .../nad/svg/metadata/NodeMetadata.java | 10 +- .../powsybl/nad/svg/DiagramMetadataTest.java | 26 +- .../IEEE_14_bus_fictitious_metadata.json | 490 ++++++++++++++++++ 10 files changed, 534 insertions(+), 20 deletions(-) create mode 100644 network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java index 8da5bec13..9d694b7ac 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java @@ -14,12 +14,14 @@ public abstract class AbstractNode extends AbstractIdentifiable implements Node private int width; private int height; private Point position; + private final boolean fictitious; - protected AbstractNode(String diagramId, String equipmentId, String name) { + protected AbstractNode(String diagramId, String equipmentId, String name, boolean fictitious) { super(diagramId, equipmentId, name); position = new Point(); width = 0; height = 0; + this.fictitious = fictitious; } @Override @@ -47,6 +49,11 @@ public double getY() { return position.getY(); } + @Override + public boolean isFictitious() { + return fictitious; + } + public int getWidth() { return width; } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java index 599654c38..28e789ea9 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java @@ -18,7 +18,7 @@ public class BusNode extends AbstractNode { private int nbNeighbouringBusNodes; public BusNode(String diagramId, String id) { - super(diagramId, id, null); + super(diagramId, id, null, false); } public void setRingIndex(int ringIndex) { diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java index 5c004bc6e..5fb41afae 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java @@ -20,4 +20,6 @@ public interface Node extends Identifiable { double getX(); double getY(); + + boolean isFictitious(); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java index ca6a48438..71c42fe5d 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java @@ -14,7 +14,7 @@ public class TextNode extends AbstractNode { private Point edgeConnection; public TextNode(String diagramId) { - super(diagramId, null, null); + super(diagramId, null, null, false); edgeConnection = new Point(); } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java index 94455f337..f2d6f050d 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java @@ -12,7 +12,7 @@ public class ThreeWtNode extends AbstractNode { public ThreeWtNode(String diagramId, String equipmentId, String nameOrId) { - super(diagramId, equipmentId, nameOrId); + super(diagramId, equipmentId, nameOrId, false); } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java index 7036cd86b..27535f3e9 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java @@ -15,7 +15,6 @@ public class VoltageLevelNode extends AbstractNode { private final List busNodes = new ArrayList<>(); - private final boolean fictitious; private final boolean visible; private boolean hasUnknownBusNode = false; @@ -24,8 +23,7 @@ public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, b } public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious, boolean visible) { - super(diagramId, equipmentId, nameOrId); - this.fictitious = fictitious; + super(diagramId, equipmentId, nameOrId, fictitious); this.visible = visible; } @@ -57,8 +55,4 @@ public void setHasUnknownBusNode(boolean hasUnknownBusNode) { public boolean hasUnknownBusNode() { return hasUnknownBusNode; } - - public boolean isFictitious() { - return fictitious; - } } diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/DiagramMetadata.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/DiagramMetadata.java index 2f68946c3..7d8bb51ff 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/DiagramMetadata.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/DiagramMetadata.java @@ -107,7 +107,8 @@ public DiagramMetadata addMetadata(Graph graph) { getPrefixedId(node.getDiagramId()), node.getEquipmentId(), round(node.getX()), - round(node.getY())))); + round(node.getY()), + node.isFictitious()))); graph.getBranchEdgeStream().forEach(edge -> edgesMetadata.add(new EdgeMetadata( getPrefixedId(edge.getDiagramId()), edge.getEquipmentId(), diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/NodeMetadata.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/NodeMetadata.java index 6060cbec9..ccdea86b9 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/NodeMetadata.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/NodeMetadata.java @@ -18,14 +18,17 @@ public class NodeMetadata extends AbstractMetadataItem { private final double x; private final double y; + private final boolean fictitious; public NodeMetadata(@JsonProperty("svgId") String svgId, @JsonProperty("equipmentId") String equipmentId, @JsonProperty("x") double x, - @JsonProperty("y") double y) { + @JsonProperty("y") double y, + @JsonProperty("fictitious") boolean fictitious) { super(svgId, equipmentId); this.x = x; this.y = y; + this.fictitious = fictitious; } public double getX() { @@ -35,4 +38,9 @@ public double getX() { public double getY() { return y; } + + @JsonInclude(JsonInclude.Include.NON_DEFAULT) + public boolean isFictitious() { + return fictitious; + } } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/DiagramMetadataTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/DiagramMetadataTest.java index 198daa635..71777a984 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/DiagramMetadataTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/DiagramMetadataTest.java @@ -9,6 +9,7 @@ import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; +import com.powsybl.ieeecdf.converter.IeeeCdfNetworkFactory; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.test.ThreeWindingsTransformerNetworkFactory; import com.powsybl.nad.AbstractTest; @@ -86,12 +87,22 @@ void test() { @Test void test3wt() { - // Referenced json file - String referenceMetadata = "/3wt_metadata.json"; - // Write Metadata as temporary json file Network network = ThreeWindingsTransformerNetworkFactory.create(); + testMetadata(network, "/3wt_metadata.json", 3, 4, 3, 3); + } + + @Test + void testFictitious() { + Network network = IeeeCdfNetworkFactory.create14(); + network.getVoltageLevel("VL12").setFictitious(true); + network.getVoltageLevel("VL14").setFictitious(true); + testMetadata(network, "/IEEE_14_bus_fictitious_metadata.json", 14, 14, 20, 14); + } + + private void testMetadata(Network network, String referenceMetadata, int busNodesNumber, int nodesNumber, int edgesNumber, int textNodesNumber) { Graph graph = new NetworkGraphBuilder(network, VoltageLevelFilter.NO_FILTER).buildGraph(); new BasicForceLayout().run(graph, getLayoutParameters()); + // Write Metadata as temporary json file Path outMetadataPath = tmpDir.resolve("metadata.json"); new DiagramMetadata(getLayoutParameters(), getSvgParameters()).addMetadata(graph).writeJson(outMetadataPath); // Read generated json file @@ -102,10 +113,11 @@ void test3wt() { assertEquals(expected, actual); // Read metadata from file DiagramMetadata diagramMetadata = DiagramMetadata.parseJson(outMetadataPath); - assertEquals(3, diagramMetadata.getBusNodesMetadata().size()); - assertEquals(4, diagramMetadata.getNodesMetadata().size()); - assertEquals(3, diagramMetadata.getEdgesMetadata().size()); - assertEquals(3, diagramMetadata.getTextNodesMetadata().size()); + // Check read metadata + assertEquals(busNodesNumber, diagramMetadata.getBusNodesMetadata().size()); + assertEquals(nodesNumber, diagramMetadata.getNodesMetadata().size()); + assertEquals(edgesNumber, diagramMetadata.getEdgesMetadata().size()); + assertEquals(textNodesNumber, diagramMetadata.getTextNodesMetadata().size()); } private void writeMetadata(DiagramMetadata metadata, Path outPath) { diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json new file mode 100644 index 000000000..d1066833d --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious_metadata.json @@ -0,0 +1,490 @@ +{ + "layoutParameters" : { + "textNodesForceLayout" : false, + "springRepulsionFactorForceLayout" : 0.0, + "textNodeFixedShift" : { + "x" : 100.0, + "y" : -40.0 + }, + "maxSteps" : 1000, + "textNodeEdgeConnectionYShift" : 25.0 + }, + "svgParameters" : { + "diagramPadding" : { + "left" : 200.0, + "top" : 200.0, + "right" : 200.0, + "bottom" : 200.0 + }, + "insertNameDesc" : true, + "svgWidthAndHeightAdded" : true, + "cssLocation" : "INSERTED_IN_SVG", + "sizeConstraint" : "FIXED_WIDTH", + "fixedWidth" : 800, + "fixedHeight" : -1, + "fixedScale" : 0.2, + "arrowShift" : 30.0, + "arrowLabelShift" : 19.0, + "converterStationWidth" : 70.0, + "voltageLevelCircleRadius" : 30.0, + "fictitiousVoltageLevelCircleRadius" : 15.0, + "transformerCircleRadius" : 20.0, + "nodeHollowWidth" : 15.0, + "edgesForkLength" : 80.0, + "edgesForkAperture" : 60.0, + "edgeStartShift" : 0.0, + "unknownBusNodeExtraRadius" : 10.0, + "loopDistance" : 120.0, + "loopEdgesAperture" : 60.0, + "loopControlDistance" : 40.0, + "edgeInfoAlongEdge" : true, + "edgeNameDisplayed" : false, + "interAnnulusSpace" : 5.0, + "svgPrefix" : "", + "idDisplayed" : false, + "substationDescriptionDisplayed" : false, + "arrowHeight" : 10.0, + "busLegend" : true, + "voltageLevelDetails" : false, + "languageTag" : "en", + "voltageValuePrecision" : 1, + "powerValuePrecision" : 0, + "angleValuePrecision" : 1, + "currentValuePrecision" : 0, + "edgeInfoDisplayed" : "ACTIVE_POWER", + "pstArrowHeadSize" : 8.0, + "undefinedValueSymbol" : "" + }, + "busNodes" : [ { + "svgId" : "1", + "equipmentId" : "VL1_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "0" + }, { + "svgId" : "3", + "equipmentId" : "VL10_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "2" + }, { + "svgId" : "5", + "equipmentId" : "VL11_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "4" + }, { + "svgId" : "7", + "equipmentId" : "VL12_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "6" + }, { + "svgId" : "9", + "equipmentId" : "VL13_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "8" + }, { + "svgId" : "11", + "equipmentId" : "VL14_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "10" + }, { + "svgId" : "13", + "equipmentId" : "VL2_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "12" + }, { + "svgId" : "15", + "equipmentId" : "VL3_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "14" + }, { + "svgId" : "17", + "equipmentId" : "VL4_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "16" + }, { + "svgId" : "19", + "equipmentId" : "VL5_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "18" + }, { + "svgId" : "21", + "equipmentId" : "VL6_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "20" + }, { + "svgId" : "23", + "equipmentId" : "VL7_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "22" + }, { + "svgId" : "25", + "equipmentId" : "VL8_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "24" + }, { + "svgId" : "27", + "equipmentId" : "VL9_0", + "nbNeighbours" : 0, + "index" : 0, + "vlNode" : "26" + } ], + "nodes" : [ { + "svgId" : "0", + "equipmentId" : "VL1", + "x" : 379.5, + "y" : -897.76 + }, { + "svgId" : "2", + "equipmentId" : "VL10", + "x" : -586.21, + "y" : 325.09 + }, { + "svgId" : "4", + "equipmentId" : "VL11", + "x" : -781.48, + "y" : -92.63 + }, { + "svgId" : "6", + "equipmentId" : "VL12", + "x" : -156.95, + "y" : -227.74, + "fictitious" : true + }, { + "svgId" : "8", + "equipmentId" : "VL13", + "x" : -299.94, + "y" : 73.32 + }, { + "svgId" : "10", + "equipmentId" : "VL14", + "x" : -202.47, + "y" : 556.41, + "fictitious" : true + }, { + "svgId" : "12", + "equipmentId" : "VL2", + "x" : 556.21, + "y" : -541.57 + }, { + "svgId" : "14", + "equipmentId" : "VL3", + "x" : 844.8, + "y" : -305.76 + }, { + "svgId" : "16", + "equipmentId" : "VL4", + "x" : 459.93, + "y" : -101.51 + }, { + "svgId" : "18", + "equipmentId" : "VL5", + "x" : 175.68, + "y" : -542.18 + }, { + "svgId" : "20", + "equipmentId" : "VL6", + "x" : -404.28, + "y" : -368.04 + }, { + "svgId" : "22", + "equipmentId" : "VL7", + "x" : 526.92, + "y" : 376.56 + }, { + "svgId" : "24", + "equipmentId" : "VL8", + "x" : 807.02, + "y" : 692.3 + }, { + "svgId" : "26", + "equipmentId" : "VL9", + "x" : 88.08, + "y" : 340.05 + } ], + "edges" : [ { + "svgId" : "28", + "equipmentId" : "L1-2-1", + "node1" : "0", + "node2" : "12", + "busNode1" : "1", + "busNode2" : "13", + "type" : "LineEdge" + }, { + "svgId" : "29", + "equipmentId" : "L1-5-1", + "node1" : "0", + "node2" : "18", + "busNode1" : "1", + "busNode2" : "19", + "type" : "LineEdge" + }, { + "svgId" : "30", + "equipmentId" : "L9-10-1", + "node1" : "26", + "node2" : "2", + "busNode1" : "27", + "busNode2" : "3", + "type" : "LineEdge" + }, { + "svgId" : "31", + "equipmentId" : "L10-11-1", + "node1" : "2", + "node2" : "4", + "busNode1" : "3", + "busNode2" : "5", + "type" : "LineEdge" + }, { + "svgId" : "32", + "equipmentId" : "L6-11-1", + "node1" : "20", + "node2" : "4", + "busNode1" : "21", + "busNode2" : "5", + "type" : "LineEdge" + }, { + "svgId" : "33", + "equipmentId" : "L6-12-1", + "node1" : "20", + "node2" : "6", + "busNode1" : "21", + "busNode2" : "7", + "type" : "LineEdge" + }, { + "svgId" : "34", + "equipmentId" : "L12-13-1", + "node1" : "6", + "node2" : "8", + "busNode1" : "7", + "busNode2" : "9", + "type" : "LineEdge" + }, { + "svgId" : "35", + "equipmentId" : "L6-13-1", + "node1" : "20", + "node2" : "8", + "busNode1" : "21", + "busNode2" : "9", + "type" : "LineEdge" + }, { + "svgId" : "36", + "equipmentId" : "L13-14-1", + "node1" : "8", + "node2" : "10", + "busNode1" : "9", + "busNode2" : "11", + "type" : "LineEdge" + }, { + "svgId" : "37", + "equipmentId" : "L9-14-1", + "node1" : "26", + "node2" : "10", + "busNode1" : "27", + "busNode2" : "11", + "type" : "LineEdge" + }, { + "svgId" : "38", + "equipmentId" : "L2-3-1", + "node1" : "12", + "node2" : "14", + "busNode1" : "13", + "busNode2" : "15", + "type" : "LineEdge" + }, { + "svgId" : "39", + "equipmentId" : "L2-4-1", + "node1" : "12", + "node2" : "16", + "busNode1" : "13", + "busNode2" : "17", + "type" : "LineEdge" + }, { + "svgId" : "40", + "equipmentId" : "L2-5-1", + "node1" : "12", + "node2" : "18", + "busNode1" : "13", + "busNode2" : "19", + "type" : "LineEdge" + }, { + "svgId" : "41", + "equipmentId" : "L3-4-1", + "node1" : "14", + "node2" : "16", + "busNode1" : "15", + "busNode2" : "17", + "type" : "LineEdge" + }, { + "svgId" : "42", + "equipmentId" : "L4-5-1", + "node1" : "16", + "node2" : "18", + "busNode1" : "17", + "busNode2" : "19", + "type" : "LineEdge" + }, { + "svgId" : "43", + "equipmentId" : "T4-7-1", + "node1" : "16", + "node2" : "22", + "busNode1" : "17", + "busNode2" : "23", + "type" : "TwoWtEdge" + }, { + "svgId" : "44", + "equipmentId" : "T4-9-1", + "node1" : "16", + "node2" : "26", + "busNode1" : "17", + "busNode2" : "27", + "type" : "TwoWtEdge" + }, { + "svgId" : "45", + "equipmentId" : "T5-6-1", + "node1" : "18", + "node2" : "20", + "busNode1" : "19", + "busNode2" : "21", + "type" : "TwoWtEdge" + }, { + "svgId" : "46", + "equipmentId" : "L7-8-1", + "node1" : "22", + "node2" : "24", + "busNode1" : "23", + "busNode2" : "25", + "type" : "LineEdge" + }, { + "svgId" : "47", + "equipmentId" : "L7-9-1", + "node1" : "22", + "node2" : "26", + "busNode1" : "23", + "busNode2" : "27", + "type" : "LineEdge" + } ], + "textNodes" : [ { + "svgId" : "0-textnode", + "equipmentId" : "VL1", + "vlNode" : "0", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "2-textnode", + "equipmentId" : "VL10", + "vlNode" : "2", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "4-textnode", + "equipmentId" : "VL11", + "vlNode" : "4", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "6-textnode", + "equipmentId" : "VL12", + "vlNode" : "6", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "8-textnode", + "equipmentId" : "VL13", + "vlNode" : "8", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "10-textnode", + "equipmentId" : "VL14", + "vlNode" : "10", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "12-textnode", + "equipmentId" : "VL2", + "vlNode" : "12", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "14-textnode", + "equipmentId" : "VL3", + "vlNode" : "14", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "16-textnode", + "equipmentId" : "VL4", + "vlNode" : "16", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "18-textnode", + "equipmentId" : "VL5", + "vlNode" : "18", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "20-textnode", + "equipmentId" : "VL6", + "vlNode" : "20", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "22-textnode", + "equipmentId" : "VL7", + "vlNode" : "22", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "24-textnode", + "equipmentId" : "VL8", + "vlNode" : "24", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + }, { + "svgId" : "26-textnode", + "equipmentId" : "VL9", + "vlNode" : "26", + "shiftX" : 100.0, + "shiftY" : -40.0, + "connectionShiftX" : 100.0, + "connectionShiftY" : -15.0 + } ] +}