DcDetailedNetworkTest.java
/**
* Copyright (c) 2025, Coreso SA (https://www.coreso.eu/) and TSCNET Services GmbH (https://www.tscnet.eu/)
* 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.iidm.network.impl;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.test.DcDetailedNetworkFactory;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Damien Jeandemange {@literal <damien.jeandemange at artelys.com>}
*/
class DcDetailedNetworkTest {
@Test
void testLccMonopoleGroundReturn() {
Network network = DcDetailedNetworkFactory.createLccMonopoleGroundReturn();
assertEquals(2, network.getBusView().getSynchronousComponents().size());
assertEquals(3, network.getSubnetworks().size());
assertEquals(4, network.getDcNodeCount());
assertEquals(1, network.getDcLineCount());
assertEquals(2, network.getLineCommutatedConverterCount());
assertEquals(2, network.getDcGroundCount());
assertTrue(network.getDcGround("dcGroundFr").getDcTerminal().isConnected());
assertTrue(network.getDcGround("dcGroundGb").getDcTerminal().isConnected());
}
@Test
void testLccMonopoleMetallicReturn() {
Network network = DcDetailedNetworkFactory.createLccMonopoleMetallicReturn();
assertEquals(2, network.getBusView().getSynchronousComponents().size());
assertEquals(3, network.getSubnetworks().size());
assertEquals(4, network.getDcNodeCount());
assertEquals(2, network.getDcLineCount());
assertEquals(2, network.getLineCommutatedConverterCount());
assertEquals(2, network.getDcGroundCount());
assertTrue(network.getDcGround("dcGroundFr").getDcTerminal().isConnected());
assertFalse(network.getDcGround("dcGroundGb").getDcTerminal().isConnected());
}
@Test
void testVscSymmetricalMonopole() {
Network network = DcDetailedNetworkFactory.createVscSymmetricalMonopole();
assertEquals(2, network.getBusView().getSynchronousComponents().size());
assertEquals(3, network.getSubnetworks().size());
assertEquals(4, network.getDcNodeCount());
assertEquals(2, network.getDcLineCount());
assertEquals(2, network.getVoltageSourceConverterCount());
assertEquals(0, network.getDcGroundCount());
}
@Test
void testVscAsymmetricalMonopole() {
Network network = DcDetailedNetworkFactory.createVscAsymmetricalMonopole();
assertEquals(2, network.getBusView().getSynchronousComponents().size());
assertEquals(3, network.getSubnetworks().size());
assertEquals(4, network.getDcNodeCount());
assertEquals(1, network.getDcLineCount());
assertEquals(2, network.getVoltageSourceConverterCount());
assertEquals(2, network.getDcGroundCount());
}
@Test
void testEquipmentTopologyVisitor() {
Network network = DcDetailedNetworkFactory.createLccMonopoleGroundReturn();
List<Connectable<?>> visited = new ArrayList<>();
TopologyVisitor topologyVisitor = new AbstractEquipmentTopologyVisitor() {
@Override
public <I extends Connectable<I>> void visitEquipment(Connectable<I> eq) {
if (eq instanceof AcDcConverter<?>) {
visited.add(eq);
}
}
};
network.getVoltageLevel(DcDetailedNetworkFactory.getVoltageLevelId(Country.FR, DcDetailedNetworkFactory.X_NODE_DC_1_FR, DcDetailedNetworkFactory.SUFFIX_150))
.visitEquipments(topologyVisitor);
assertEquals(2, visited.size());
visited.forEach(c -> assertSame(network.getLineCommutatedConverter("LccFr"), c));
}
@Test
void testTerminalTopologyVisitor() {
Network network = DcDetailedNetworkFactory.createLccMonopoleGroundReturn();
List<Terminal> visited = new ArrayList<>();
TopologyVisitor topologyVisitor = new AbstractTerminalTopologyVisitor() {
@Override
public void visitTerminal(Terminal t) {
if (t.getConnectable() instanceof AcDcConverter<?>) {
visited.add(t);
}
}
};
network.getVoltageLevel(DcDetailedNetworkFactory.getVoltageLevelId(Country.FR, DcDetailedNetworkFactory.X_NODE_DC_1_FR, DcDetailedNetworkFactory.SUFFIX_150))
.visitEquipments(topologyVisitor);
assertEquals(2, visited.size());
var lccFr = network.getLineCommutatedConverter("LccFr");
visited.forEach(t -> assertSame(lccFr, t.getConnectable()));
var terminalBySide = visited.stream().collect(Collectors.toMap(Terminal::getSide, Function.identity()));
assertSame(lccFr.getTerminal1(), terminalBySide.get(ThreeSides.ONE));
assertSame(lccFr.getTerminal2().orElseThrow(), terminalBySide.get(ThreeSides.TWO));
}
}