From 4dffd5fca02bc3adbdd245e2ec1262d2841d16d6 Mon Sep 17 00:00:00 2001 From: Hugo SCHINDLER Date: Wed, 12 Feb 2025 14:06:31 +0100 Subject: [PATCH 1/7] Refactoring work with Olivier PERRIN commit investigate tests Add test Migrate from CgmesControlArea to Area Signed-off-by: Hugo SCHINDLER --- .../util/CgmesAreaUtils.java | 49 +++ .../util/CgmesBoundariesArea.java | 15 +- .../util/CgmesBoundariesAreaFactory.java | 6 +- .../util/CgmesVoltageLevelsArea.java | 16 +- .../util/CgmesVoltageLevelsAreaFactory.java | 10 +- .../util/CgmesBoundariesAreaTest.java | 35 ++- .../util/CgmesVoltageLevelsAreaTest.java | 53 +++- .../resources/controlAreaWithoutExtension.xml | 295 ++++++++++++++++++ pom.xml | 2 +- 9 files changed, 432 insertions(+), 49 deletions(-) create mode 100644 entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesAreaUtils.java create mode 100644 entsoe-cgmes-balances-adjustment/src/test/resources/controlAreaWithoutExtension.xml diff --git a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesAreaUtils.java b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesAreaUtils.java new file mode 100644 index 00000000..aa285a4d --- /dev/null +++ b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesAreaUtils.java @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2025, 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.entsoe.cgmes.balances_adjustment.util; + +import com.powsybl.iidm.network.*; + +import java.util.Optional; + +/** + * @author Hugo Schindler{@literal } + */ +public final class CgmesAreaUtils { + private CgmesAreaUtils() { + // Utility class + } + + static boolean hasAreaBoundaries(Area area) { + return area.getAreaBoundaryStream().map(AreaBoundary::getBoundary).anyMatch(Optional::isPresent); + } + + static boolean hasAreaBoundaryTerminals(Area area) { + return area.getAreaBoundaryStream().map(AreaBoundary::getTerminal).anyMatch(Optional::isPresent); + } + + static boolean isIdInAreaBoundaryTerminals(String elementId, Area area) { + return area.getAreaBoundaryStream() + .map(AreaBoundary::getTerminal) + .filter(Optional::isPresent) + .map(Optional::get) + .map(Terminal::getConnectable) + .map(Identifiable::getId) + .anyMatch(terminalId -> terminalId.equals(elementId)); + } + + static boolean isIdInAreaBoundariesDanglingLines(String elementId, Area area) { + return area.getAreaBoundaryStream() + .map(AreaBoundary::getBoundary) + .filter(Optional::isPresent) + .map(Optional::get) + .map(Boundary::getDanglingLine) + .map(Identifiable::getId) + .anyMatch(danglingLineId -> danglingLineId.equals(elementId)); + } +} diff --git a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesArea.java b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesArea.java index e15f9587..0df54fc4 100644 --- a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesArea.java +++ b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesArea.java @@ -7,14 +7,11 @@ package com.powsybl.entsoe.cgmes.balances_adjustment.util; import com.powsybl.balances_adjustment.util.NetworkArea; -import com.powsybl.cgmes.extensions.CgmesControlArea; import com.powsybl.cgmes.extensions.CgmesDanglingLineBoundaryNode; -import com.powsybl.iidm.network.Bus; +import com.powsybl.iidm.network.Area; import com.powsybl.iidm.network.DanglingLine; import com.powsybl.iidm.network.Network; -import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -26,12 +23,11 @@ class CgmesBoundariesArea implements NetworkArea { private final Set danglingLinesCache; - CgmesBoundariesArea(Network network, List areas) { + CgmesBoundariesArea(Network network, List areas) { danglingLinesCache = network.getDanglingLineStream() .filter(dl -> dl.getExtension(CgmesDanglingLineBoundaryNode.class) == null || !dl.getExtension(CgmesDanglingLineBoundaryNode.class).isHvdc()) .filter(dl -> dl.getTerminal().getBusView().getBus() != null && dl.getTerminal().getBusView().getBus().isInMainSynchronousComponent()) - .filter(dl -> areas.isEmpty() || areas.stream().anyMatch(area -> area.getTerminals().stream().anyMatch(t -> t.getConnectable().getId().equals(dl.getId())) - || area.getBoundaries().stream().anyMatch(b -> b.getDanglingLine().getId().equals(dl.getId())))) + .filter(dl -> areas.isEmpty() || areas.stream().anyMatch(area -> CgmesAreaUtils.isIdInAreaBoundaryTerminals(dl.getId(), area) || CgmesAreaUtils.isIdInAreaBoundariesDanglingLines(dl.getId(), area))) .collect(Collectors.toSet()); } @@ -39,9 +35,4 @@ class CgmesBoundariesArea implements NetworkArea { public double getNetPosition() { return danglingLinesCache.parallelStream().mapToDouble(dl -> dl.getTerminal().isConnected() ? -dl.getBoundary().getP() : 0).sum(); } - - @Override - public Collection getContainedBusViewBuses() { - return Collections.emptyList(); - } } diff --git a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaFactory.java b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaFactory.java index bd3c6692..62800678 100644 --- a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaFactory.java +++ b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaFactory.java @@ -8,7 +8,7 @@ import com.powsybl.balances_adjustment.util.NetworkArea; import com.powsybl.balances_adjustment.util.NetworkAreaFactory; -import com.powsybl.cgmes.extensions.CgmesControlArea; +import com.powsybl.iidm.network.Area; import com.powsybl.iidm.network.Network; import java.util.ArrayList; @@ -20,12 +20,12 @@ */ public class CgmesBoundariesAreaFactory implements NetworkAreaFactory { - private final List areas = new ArrayList<>(); + private final List areas = new ArrayList<>(); public CgmesBoundariesAreaFactory() { } - public CgmesBoundariesAreaFactory(List areas) { + public CgmesBoundariesAreaFactory(List areas) { this.areas.addAll(Objects.requireNonNull(areas)); } diff --git a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsArea.java b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsArea.java index dde60a9b..952d5746 100644 --- a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsArea.java +++ b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsArea.java @@ -7,7 +7,6 @@ package com.powsybl.entsoe.cgmes.balances_adjustment.util; import com.powsybl.balances_adjustment.util.NetworkArea; -import com.powsybl.cgmes.extensions.CgmesControlArea; import com.powsybl.cgmes.extensions.CgmesDanglingLineBoundaryNode; import com.powsybl.iidm.network.*; @@ -26,7 +25,7 @@ class CgmesVoltageLevelsArea implements NetworkArea { private final Set busesCache; - CgmesVoltageLevelsArea(Network network, CgmesControlArea area, List excludedXnodes, List voltageLevelIds) { + CgmesVoltageLevelsArea(Network network, Area area, List excludedXnodes, List voltageLevelIds) { this.voltageLevelIds.addAll(voltageLevelIds); danglingLineBordersCache = createDanglingLinesCache(network, area, excludedXnodes); @@ -38,14 +37,15 @@ class CgmesVoltageLevelsArea implements NetworkArea { .collect(Collectors.toSet()); } - private List createDanglingLinesCache(Network network, CgmesControlArea area, List excludedXnodes) { + private List createDanglingLinesCache(Network network, Area area, List excludedXnodes) { return network.getDanglingLineStream() .filter(this::isAreaBorder) .filter(dl -> dl.getTerminal().getBusView().getBus() != null && dl.getTerminal().getBusView().getBus().isInMainSynchronousComponent()) // Only consider connected dangling lines in main synchronous component (other synchronous components are not considered) .filter(dl -> dl.getExtension(CgmesDanglingLineBoundaryNode.class) == null || !dl.getExtension(CgmesDanglingLineBoundaryNode.class).isHvdc()) // Dangling lines connected to DC boundary points are disregarded .filter(dl -> { - if (area != null && (!area.getTerminals().isEmpty() || !area.getBoundaries().isEmpty())) { // if CgmesControlArea is defined, dangling lines with no associated tie flows are disregarded - return area.getTerminals().stream().anyMatch(t -> t.getConnectable().getId().equals(dl.getId())) || area.getBoundaries().stream().anyMatch(bd -> bd.getDanglingLine().getId().equals(dl.getId())); + if (area != null && (CgmesAreaUtils.hasAreaBoundaryTerminals(area) || CgmesAreaUtils.hasAreaBoundaries(area))) { // if CgmesControlArea is defined, dangling lines with no associated tie flows are disregarded + return CgmesAreaUtils.isIdInAreaBoundaryTerminals(dl.getId(), area) || + CgmesAreaUtils.isIdInAreaBoundariesDanglingLines(dl.getId(), area); } return true; }) @@ -58,15 +58,15 @@ private List createDanglingLinesCache(Network network, CgmesContro .toList(); } - private List> createBranchesCache(Network network, CgmesControlArea area) { + private List> createBranchesCache(Network network, Area area) { return network.getLineStream() .filter(this::isAreaBorder) .filter(b -> b.getTerminal1().getBusView().getBus() != null && b.getTerminal1().getBusView().getBus().isInMainSynchronousComponent() && b.getTerminal2().getBusView().getBus() != null && b.getTerminal2().getBusView().getBus().isInMainSynchronousComponent()) // Only consider branches connected on both sides and in main synchronous component (other synchronous components are not considered) .filter(b -> !b.hasProperty("isHvdc")) // necessary as extensions of merged lines are not well handled. FIXME: when it is merged on mergingview, this should be deleted. .filter(b -> { - if (area != null && (!area.getTerminals().isEmpty() || !area.getBoundaries().isEmpty())) { // if CgmesControlArea is defined, branches with no associated tie flows are disregarded - return area.getTerminals().stream().anyMatch(t -> b.getId().contains(t.getConnectable().getId())); + if (area != null && CgmesAreaUtils.hasAreaBoundaryTerminals(area)) { // if CgmesControlArea is defined, branches with no associated tie flows are disregarded + return CgmesAreaUtils.isIdInAreaBoundaryTerminals(b.getId(), area); } return true; }) diff --git a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaFactory.java b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaFactory.java index 6e8c05ff..cd3f533a 100644 --- a/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaFactory.java +++ b/entsoe-cgmes-balances-adjustment/src/main/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaFactory.java @@ -8,7 +8,7 @@ import com.powsybl.balances_adjustment.util.NetworkArea; import com.powsybl.balances_adjustment.util.NetworkAreaFactory; -import com.powsybl.cgmes.extensions.CgmesControlArea; +import com.powsybl.iidm.network.Area; import com.powsybl.iidm.network.Network; import java.util.Arrays; @@ -20,15 +20,15 @@ */ public class CgmesVoltageLevelsAreaFactory implements NetworkAreaFactory { - private final CgmesControlArea area; + private final Area area; private final List excludedXnodes; private final List voltageLevelIds; - public CgmesVoltageLevelsAreaFactory(CgmesControlArea area, String... voltageLevelIds) { + public CgmesVoltageLevelsAreaFactory(Area area, String... voltageLevelIds) { this(area, Arrays.asList(voltageLevelIds)); } - public CgmesVoltageLevelsAreaFactory(CgmesControlArea area, List voltageLevelIds) { + public CgmesVoltageLevelsAreaFactory(Area area, List voltageLevelIds) { this(area, null, voltageLevelIds); } @@ -36,7 +36,7 @@ public CgmesVoltageLevelsAreaFactory(List excludedXnodes, List v this(null, excludedXnodes, voltageLevelIds); } - public CgmesVoltageLevelsAreaFactory(CgmesControlArea area, List excludedXnodes, List voltageLevelIds) { + public CgmesVoltageLevelsAreaFactory(Area area, List excludedXnodes, List voltageLevelIds) { this.area = area; this.excludedXnodes = excludedXnodes; this.voltageLevelIds = Objects.requireNonNull(voltageLevelIds); diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java index b07070e8..a43524fd 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java @@ -8,14 +8,10 @@ import com.powsybl.balances_adjustment.util.NetworkArea; import com.powsybl.balances_adjustment.util.NetworkAreaFactory; -import com.powsybl.cgmes.extensions.CgmesControlAreas; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.test.DanglingLineNetworkFactory; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -38,21 +34,36 @@ void testWithNoArea() { } @Test - void testWithArea() { + void testWithAreaFromOldExtension() { Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); - NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(new ArrayList<>(network.getExtension(CgmesControlAreas.class).getCgmesControlAreas())); + NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); NetworkArea area = factory.create(network); - List ps = Stream.of( - network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6"), - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da"), - network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006")) - .map(dl -> dl.getBoundary().getP()).collect(Collectors.toList()); - double sum = ps.stream().mapToDouble(n -> n).sum(); + double sum = Stream.of( + network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6"), + network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da"), + network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006")) + .mapToDouble(dl -> dl.getBoundary().getP()).sum(); sum = sum + network.getTieLine("TL_fict").getDanglingLine1().getBoundary().getP(); // FIXME: we miss the line "_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2" because it is not a tie line. assertEquals(-sum, area.getNetPosition(), DELTA_POWER); assertTrue(area.getContainedBusViewBuses().isEmpty()); } + + @Test + void testWithAreaWithoutAreaExtension() { + Network network = Network.read("controlAreaWithoutExtension.xml", getClass().getResourceAsStream("/controlAreaWithoutExtension.xml")); + NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); + NetworkArea area = factory.create(network); + + double sum = Stream.of( + network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6"), + network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da"), + network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006")) + .mapToDouble(dl -> dl.getBoundary().getP()).sum(); + + assertEquals(-sum, area.getNetPosition(), DELTA_POWER); + assertTrue(area.getContainedBusViewBuses().isEmpty()); + } } diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java index 9f6ee250..7fbf0209 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java @@ -8,8 +8,7 @@ import com.powsybl.balances_adjustment.util.NetworkArea; import com.powsybl.balances_adjustment.util.NetworkAreaFactory; -import com.powsybl.cgmes.extensions.CgmesControlArea; -import com.powsybl.cgmes.extensions.CgmesControlAreas; +import com.powsybl.iidm.network.Area; import com.powsybl.iidm.network.Line; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.TieLine; @@ -25,14 +24,13 @@ */ class CgmesVoltageLevelsAreaTest { - private final String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; - private final Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); - static final double DELTA_POWER = 1e-5; @Test - void testWithArea() { - CgmesControlArea cgmesArea = network.getExtension(CgmesControlAreas.class).getCgmesControlArea("_BECONTROLAREA"); + void testWithAreaFromOldExtension() { + String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; + Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); + Area cgmesArea = network.getArea("_BECONTROLAREA"); NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(cgmesArea, voltageLevelsIds); NetworkArea area = factory.create(network); assertEquals(5, area.getContainedBusViewBuses().size()); @@ -51,7 +49,9 @@ void testWithArea() { } @Test - void testWithExcludedXnodes() { + void testWithExcludedXnodesFromOldExtension() { + String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; + Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(Arrays.asList("TN_Border_GY11", "XNODE"), Arrays.asList(voltageLevelsIds)); NetworkArea area = factory.create(network); assertEquals(5, area.getContainedBusViewBuses().size()); @@ -65,4 +65,41 @@ void testWithExcludedXnodes() { + lineFlow; assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); } + + @Test + void testWithAreaWithoutAreaExtension() { + String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; + Network network = Network.read("controlAreaWithoutExtension.xml", getClass().getResourceAsStream("/controlAreaWithoutExtension.xml")); + Area cgmesArea = network.getArea("_BECONTROLAREA"); + NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(cgmesArea, voltageLevelsIds); + NetworkArea area = factory.create(network); + assertEquals(5, area.getContainedBusViewBuses().size()); + + Line line = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); + double lineFlow = (line.getTerminal2().getP() - line.getTerminal1().getP()) / 2; + double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() + - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() + - network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006").getBoundary().getP() + + lineFlow; + assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); + } + + @Test + void testWithExcludedXnodesWithoutAreaExtension() { + String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; + Network network = Network.read("controlAreaWithoutExtension.xml", getClass().getResourceAsStream("/controlAreaWithoutExtension.xml")); + NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(Arrays.asList("TN_Border_GY11", "XNODE"), Arrays.asList(voltageLevelsIds)); + NetworkArea area = factory.create(network); + assertEquals(5, area.getContainedBusViewBuses().size()); + Line line1 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict"); + Line line2 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); + double lineFlow = (line1.getTerminal2().getP() - line1.getTerminal1().getP()) / 2 + + (line2.getTerminal1().getP() - line2.getTerminal2().getP()) / 2; + double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() + - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() + - network.getDanglingLine("_ed0c5d75-4a54-43c8-b782-b20d7431630b").getBoundary().getP() + + lineFlow; + assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); + } + } diff --git a/entsoe-cgmes-balances-adjustment/src/test/resources/controlAreaWithoutExtension.xml b/entsoe-cgmes-balances-adjustment/src/test/resources/controlAreaWithoutExtension.xml new file mode 100644 index 00000000..7d2926e8 --- /dev/null +++ b/entsoe-cgmes-balances-adjustment/src/test/resources/controlAreaWithoutExtension.xml @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + + + + + + + + _b9376bea-c75d-49f3-94ca-6a71fa0086a5 + + + _57ae9251-c022-4c67-a8eb-611ad54c963c + _4a7363a4-0b21-4f65-8bba-33e3a8f6bac3 + _f7f61a91-eca2-4492-8bd7-9ec2b28fc837 + _5b2c65b0-68ce-4530-85b7-385346a3b5e1 + _1fa19c281c8f4e1eaad9e1cab70f923e + + + _1ef0715a-d5a9-477b-b6e7-b635529ac140 + _70d962fb-a492-4c36-8cad-b5c584df53bd + _d238885e-d9b6-4edc-8567-6a68c605ed67 + _87ea56f3-962a-427a-85d6-13b1f9295174 + _8d7bad8bcc634e0796e362390d9040b6 + + + + + + + + + + _beffa353-7d10-421d-9c08-036b744b1cee + + + + + + + + + + + + + + + + _cbdf1842-74ed-4fce-a5d4-0296c82cbc92 + + + _d5e2e58e-ccf6-47d9-b3bb-3088eb7a9b6c + + + + + + + + + + _4bb5407b-b4a5-416c-80ad-1a778ada2b9b + + + + + + + + + + + + _a036b765-1669-4f64-acd3-1e8fbd513312 + + + + + + + + _22af3121-1a66-4546-bd80-4371f417c644 + + + + + _f3b56334-4638-49d3-a6a0-3f417422b8f5 + _24413233-26c3-4f7e-9f72-4461796938be + _d4affe50316740bdbbf4ae9c7cbf3cfd + _231a4cf8-5069-4d53-96e4-e839f073f1ea + _53072f42-f77b-47e2-bd9a-e097c910b173 + + + _02a244ca-8bcb-4e25-8613-e948b8ba1f22 + _6f014d4c-c1b0-4eed-8d6d-bae3bc87afcf + _051d49ba-4360-4372-86bf-50eb8cf29778 + _b9539c41-d114-4280-8a54-8ecec398091e + _f03d65b2a51049ffa533e433721145c1 + + + _c41978db-794b-4bae-953e-60fc519e87dd + _14b352cb-5574-40c5-bf83-0ed3574554a3 + _9d25a1f9e5d14d47b6dcde99c4380b40 + _f9f29835-8a31-4310-9780-b1ad26f3cbb0 + _c14d2036-72ec-4df3-b1b7-75d8afd9a1fe + + + + _ca7974cf-b25e-4898-9221-7154233e5eb2 + _1182d878-2eaa-4eec-91be-ce7b2b1e7f9a + _83cc66dd-8d93-4a2c-8103-f1f5a9cf7e2e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _2cd21c77-b8b1-4896-95fb-240f45b9ac89 + _6ebbef67-3061-4236-a6fd-6ccc4595f6c3 + _c3774d3f-f48c-4954-a0cf-b4572eb714fd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _ab7ece75-d726-48c8-a924-b0a9325e6d51 + _4c19ace6-c825-4c5b-87d9-031e6e6a3379 + _955d9cd0-4a10-4031-b008-60c0dc340a07 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _77f04391-aa23-49b6-b3e9-6089130bb5d5 + _699545b9-82b9-4331-bc80-538d73b4ba56 + + + _a4d42d33-ae54-4fe9-ad59-f30da0dfb809 + _05a17350-55f5-4a00-9a50-8c0048a25495 + + + + + + + + + 10BE------1 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 760cabcf..ea0e7d79 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ 17 - 6.6.0 + 6.7.0-SNAPSHOT 1.14.0 ../distribution-entsoe/target/site/jacoco-aggregate/jacoco.xml, From d174ab8e9225dc6c8c96641797e9339a519e843f Mon Sep 17 00:00:00 2001 From: Hugo SCHINDLER Date: Thu, 13 Feb 2025 11:52:16 +0100 Subject: [PATCH 2/7] Review Signed-off-by: Hugo SCHINDLER --- .../util/CgmesBoundariesAreaTest.java | 4 +- .../util/CgmesVoltageLevelsAreaTest.java | 54 ++++++++----------- ...thoutExtension.xml => iidmControlArea.xml} | 0 3 files changed, 25 insertions(+), 33 deletions(-) rename entsoe-cgmes-balances-adjustment/src/test/resources/{controlAreaWithoutExtension.xml => iidmControlArea.xml} (100%) diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java index a43524fd..e3f7fd98 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java @@ -52,8 +52,8 @@ void testWithAreaFromOldExtension() { } @Test - void testWithAreaWithoutAreaExtension() { - Network network = Network.read("controlAreaWithoutExtension.xml", getClass().getResourceAsStream("/controlAreaWithoutExtension.xml")); + void testWithIidmArea() { + Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); NetworkArea area = factory.create(network); diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java index 7fbf0209..ca48fdec 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java @@ -26,10 +26,26 @@ class CgmesVoltageLevelsAreaTest { static final double DELTA_POWER = 1e-5; + private static void assertNetPositionOfCgmesVoltageLevelsAreaWithExludedXNodes(Network network) { + String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; + NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(Arrays.asList("TN_Border_GY11", "XNODE"), Arrays.asList(voltageLevelsIds)); + NetworkArea area = factory.create(network); + assertEquals(5, area.getContainedBusViewBuses().size()); + Line line1 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict"); + Line line2 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); + double lineFlow = (line1.getTerminal2().getP() - line1.getTerminal1().getP()) / 2 + + (line2.getTerminal1().getP() - line2.getTerminal2().getP()) / 2; + double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() + - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() + - network.getDanglingLine("_ed0c5d75-4a54-43c8-b782-b20d7431630b").getBoundary().getP() + + lineFlow; + assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); + } + @Test void testWithAreaFromOldExtension() { - String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); + String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; Area cgmesArea = network.getArea("_BECONTROLAREA"); NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(cgmesArea, voltageLevelsIds); NetworkArea area = factory.create(network); @@ -50,26 +66,14 @@ void testWithAreaFromOldExtension() { @Test void testWithExcludedXnodesFromOldExtension() { - String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); - NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(Arrays.asList("TN_Border_GY11", "XNODE"), Arrays.asList(voltageLevelsIds)); - NetworkArea area = factory.create(network); - assertEquals(5, area.getContainedBusViewBuses().size()); - Line line1 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict"); - Line line2 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); - double lineFlow = (line1.getTerminal2().getP() - line1.getTerminal1().getP()) / 2 - + (line2.getTerminal1().getP() - line2.getTerminal2().getP()) / 2; - double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() - - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() - - network.getDanglingLine("_ed0c5d75-4a54-43c8-b782-b20d7431630b").getBoundary().getP() - + lineFlow; - assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); + assertNetPositionOfCgmesVoltageLevelsAreaWithExludedXNodes(network); } @Test - void testWithAreaWithoutAreaExtension() { + void testWithIidmArea() { + Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; - Network network = Network.read("controlAreaWithoutExtension.xml", getClass().getResourceAsStream("/controlAreaWithoutExtension.xml")); Area cgmesArea = network.getArea("_BECONTROLAREA"); NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(cgmesArea, voltageLevelsIds); NetworkArea area = factory.create(network); @@ -85,21 +89,9 @@ void testWithAreaWithoutAreaExtension() { } @Test - void testWithExcludedXnodesWithoutAreaExtension() { - String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; - Network network = Network.read("controlAreaWithoutExtension.xml", getClass().getResourceAsStream("/controlAreaWithoutExtension.xml")); - NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(Arrays.asList("TN_Border_GY11", "XNODE"), Arrays.asList(voltageLevelsIds)); - NetworkArea area = factory.create(network); - assertEquals(5, area.getContainedBusViewBuses().size()); - Line line1 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict"); - Line line2 = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); - double lineFlow = (line1.getTerminal2().getP() - line1.getTerminal1().getP()) / 2 - + (line2.getTerminal1().getP() - line2.getTerminal2().getP()) / 2; - double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() - - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() - - network.getDanglingLine("_ed0c5d75-4a54-43c8-b782-b20d7431630b").getBoundary().getP() - + lineFlow; - assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); + void testWithExcludedXnodes() { + Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); + assertNetPositionOfCgmesVoltageLevelsAreaWithExludedXNodes(network); } } diff --git a/entsoe-cgmes-balances-adjustment/src/test/resources/controlAreaWithoutExtension.xml b/entsoe-cgmes-balances-adjustment/src/test/resources/iidmControlArea.xml similarity index 100% rename from entsoe-cgmes-balances-adjustment/src/test/resources/controlAreaWithoutExtension.xml rename to entsoe-cgmes-balances-adjustment/src/test/resources/iidmControlArea.xml From 358e27c592225aa90700b7d4e175c15633efe918 Mon Sep 17 00:00:00 2001 From: Hugo SCHINDLER Date: Thu, 13 Feb 2025 14:52:01 +0100 Subject: [PATCH 3/7] Review from Olivier Signed-off-by: Hugo SCHINDLER --- .../util/CgmesBoundariesAreaTest.java | 42 ++++++++----------- .../util/CgmesVoltageLevelsAreaTest.java | 38 ++++++----------- .../src/test/resources/iidmControlArea.xml | 14 +++++-- 3 files changed, 41 insertions(+), 53 deletions(-) diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java index e3f7fd98..cb3807df 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java @@ -24,6 +24,22 @@ class CgmesBoundariesAreaTest { static double DELTA_POWER = 1e-5; + private static void extracted(Network network) { + NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); + NetworkArea area = factory.create(network); + + double sum = -Stream.of( + network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6"), + network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da"), + network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006"), + network.getDanglingLine("TL_1")) + .mapToDouble(dl -> dl.getBoundary().getP()).sum(); + // FIXME: we miss the line "_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2" because it is not a tie line. + + assertEquals(sum, area.getNetPosition(), DELTA_POWER); + assertTrue(area.getContainedBusViewBuses().isEmpty()); + } + @Test void testWithNoArea() { Network network = DanglingLineNetworkFactory.create(); @@ -36,34 +52,12 @@ void testWithNoArea() { @Test void testWithAreaFromOldExtension() { Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); - NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); - NetworkArea area = factory.create(network); - - double sum = Stream.of( - network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6"), - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da"), - network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006")) - .mapToDouble(dl -> dl.getBoundary().getP()).sum(); - - sum = sum + network.getTieLine("TL_fict").getDanglingLine1().getBoundary().getP(); - // FIXME: we miss the line "_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2" because it is not a tie line. - assertEquals(-sum, area.getNetPosition(), DELTA_POWER); - assertTrue(area.getContainedBusViewBuses().isEmpty()); + extracted(network); } @Test void testWithIidmArea() { Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); - NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); - NetworkArea area = factory.create(network); - - double sum = Stream.of( - network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6"), - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da"), - network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006")) - .mapToDouble(dl -> dl.getBoundary().getP()).sum(); - - assertEquals(-sum, area.getNetPosition(), DELTA_POWER); - assertTrue(area.getContainedBusViewBuses().isEmpty()); + extracted(network); } } diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java index ca48fdec..eb651d6c 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesVoltageLevelsAreaTest.java @@ -11,13 +11,11 @@ import com.powsybl.iidm.network.Area; import com.powsybl.iidm.network.Line; import com.powsybl.iidm.network.Network; -import com.powsybl.iidm.network.TieLine; import org.junit.jupiter.api.Test; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; /** * @author Miora Ralambotiana {@literal } @@ -42,28 +40,29 @@ private static void assertNetPositionOfCgmesVoltageLevelsAreaWithExludedXNodes(N assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); } - @Test - void testWithAreaFromOldExtension() { - Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); + private static void assertNetPositionOfCgmesVoltageLevelsArea(Network network) { String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; Area cgmesArea = network.getArea("_BECONTROLAREA"); NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(cgmesArea, voltageLevelsIds); NetworkArea area = factory.create(network); assertEquals(5, area.getContainedBusViewBuses().size()); + Line line = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); double lineFlow = (line.getTerminal2().getP() - line.getTerminal1().getP()) / 2; - assertFalse(Double.isNaN(lineFlow)); - TieLine tieLine = network.getTieLine("TL_fict"); - double tieLineFlow = -tieLine.getDanglingLine1().getBoundary().getP(); - assertFalse(Double.isNaN(tieLineFlow)); - double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() - network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006").getBoundary().getP() - + lineFlow + tieLineFlow; + - network.getDanglingLine("TL_1").getBoundary().getP() + + lineFlow; assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); } + @Test + void testWithAreaFromOldExtension() { + Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); + assertNetPositionOfCgmesVoltageLevelsArea(network); + } + @Test void testWithExcludedXnodesFromOldExtension() { Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); @@ -73,25 +72,12 @@ void testWithExcludedXnodesFromOldExtension() { @Test void testWithIidmArea() { Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); - String[] voltageLevelsIds = {"_d0486169-2205-40b2-895e-b672ecb9e5fc", "_4ba71b59-ee2f-450b-9f7d-cc2f1cc5e386", "_8bbd7e74-ae20-4dce-8780-c20f8e18c2e0", "_469df5f7-058f-4451-a998-57a48e8a56fe", "_b10b171b-3bc5-4849-bb1f-61ed9ea1ec7c"}; - Area cgmesArea = network.getArea("_BECONTROLAREA"); - NetworkAreaFactory factory = new CgmesVoltageLevelsAreaFactory(cgmesArea, voltageLevelsIds); - NetworkArea area = factory.create(network); - assertEquals(5, area.getContainedBusViewBuses().size()); - - Line line = network.getLine("_b58bf21a-096a-4dae-9a01-3f03b60c24c7_fict_2"); - double lineFlow = (line.getTerminal2().getP() - line.getTerminal1().getP()) / 2; - double realNetPosition = -network.getDanglingLine("_78736387-5f60-4832-b3fe-d50daf81b0a6").getBoundary().getP() - - network.getDanglingLine("_17086487-56ba-4979-b8de-064025a6b4da").getBoundary().getP() - - network.getDanglingLine("_b18cd1aa-7808-49b9-a7cf-605eaf07b006").getBoundary().getP() - + lineFlow; - assertEquals(realNetPosition, area.getNetPosition(), DELTA_POWER); + assertNetPositionOfCgmesVoltageLevelsArea(network); } @Test - void testWithExcludedXnodes() { + void testWithExcludedXnodesWithIidmArea() { Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); assertNetPositionOfCgmesVoltageLevelsAreaWithExludedXNodes(network); } - } diff --git a/entsoe-cgmes-balances-adjustment/src/test/resources/iidmControlArea.xml b/entsoe-cgmes-balances-adjustment/src/test/resources/iidmControlArea.xml index 7d2926e8..a1b2a202 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/resources/iidmControlArea.xml +++ b/entsoe-cgmes-balances-adjustment/src/test/resources/iidmControlArea.xml @@ -22,6 +22,10 @@ + + @@ -44,6 +48,10 @@ _87ea56f3-962a-427a-85d6-13b1f9295174 _8d7bad8bcc634e0796e362390d9040b6 + + @@ -264,7 +272,7 @@ - + 10BE------1 @@ -272,8 +280,8 @@ - - + + From 8becd22cb36742ad5feb4ce7cc1aadb52217db46 Mon Sep 17 00:00:00 2001 From: Hugo SCHINDLER Date: Fri, 14 Feb 2025 18:09:57 +0100 Subject: [PATCH 4/7] Review from Olivier Signed-off-by: Hugo SCHINDLER --- .../balances_adjustment/util/CgmesBoundariesAreaTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java index cb3807df..03ec88bf 100644 --- a/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java +++ b/entsoe-cgmes-balances-adjustment/src/test/java/com/powsybl/entsoe/cgmes/balances_adjustment/util/CgmesBoundariesAreaTest.java @@ -24,7 +24,7 @@ class CgmesBoundariesAreaTest { static double DELTA_POWER = 1e-5; - private static void extracted(Network network) { + private static void testWithArea(Network network) { NetworkAreaFactory factory = new CgmesBoundariesAreaFactory(network.getAreaStream().toList()); NetworkArea area = factory.create(network); @@ -52,12 +52,12 @@ void testWithNoArea() { @Test void testWithAreaFromOldExtension() { Network network = Network.read("controlArea.xiidm", getClass().getResourceAsStream("/controlArea.xiidm")); - extracted(network); + testWithArea(network); } @Test void testWithIidmArea() { Network network = Network.read("iidmControlArea.xml", getClass().getResourceAsStream("/iidmControlArea.xml")); - extracted(network); + testWithArea(network); } } From c50fb5d9ef318675f0d80ca58c0da72c338a8899 Mon Sep 17 00:00:00 2001 From: Hugo SCHINDLER Date: Fri, 21 Feb 2025 11:47:12 +0100 Subject: [PATCH 5/7] Test fix CI Signed-off-by: Hugo SCHINDLER --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 288de002..3ba40d5b 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 with: repository: powsybl/powsybl-core - ref: refs/heads/main + ref: refs/heads/remove_cgmes_control_areas_extension path: powsybl-core - name: Checkout powsybl-open-loadflow branch From 25d8c2dbe8879d865dbfd1474a92fa71eeafabda Mon Sep 17 00:00:00 2001 From: Hugo SCHINDLER Date: Fri, 21 Feb 2025 11:52:44 +0100 Subject: [PATCH 6/7] Fix CI Signed-off-by: Hugo SCHINDLER --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 3ba40d5b..b59c3656 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 with: repository: powsybl/powsybl-core - ref: refs/heads/remove_cgmes_control_areas_extension + ref: refs/heads/cgmes_control_areas_compatibility_serde path: powsybl-core - name: Checkout powsybl-open-loadflow branch From 341d5545ee51f9d41802244ba5aa72bda30353ef Mon Sep 17 00:00:00 2001 From: Olivier Perrin Date: Tue, 25 Feb 2025 11:34:06 +0100 Subject: [PATCH 7/7] Use core main branch in CI (core refactoring is now merged) Signed-off-by: Olivier Perrin --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index b59c3656..288de002 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v4 with: repository: powsybl/powsybl-core - ref: refs/heads/cgmes_control_areas_compatibility_serde + ref: refs/heads/main path: powsybl-core - name: Checkout powsybl-open-loadflow branch