ComponentsTest.java
/**
* Copyright (c) 2022, 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.iidm.network.impl;
import com.powsybl.iidm.network.HvdcLine;
import com.powsybl.iidm.network.LoadType;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.TopologyKind;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Damien Jeandemange {@literal <damien.jeandemange at artelys.com>}
*/
class ComponentsTest {
/**
*
* <pre>
* Gen1 Gen2
* | |
* Bus1--Lcc1-----(DCLine)------Lcc2--Bus2
* | |
* Load1 Load2
*
* </pre>
*/
@Test
void dcLineConnected() {
final var network = createSmallDcNetwork();
final var connectedComponents = network.getBusView().getConnectedComponents();
final var synchronousComponents = network.getBusView().getSynchronousComponents();
// one connected component of size 2
assertEquals(1, connectedComponents.size());
connectedComponents.forEach(cc -> assertEquals(2, cc.getSize()));
// two synchronous components of size 1
assertEquals(2, synchronousComponents.size());
synchronousComponents.forEach(sc -> assertEquals(1, sc.getSize()));
}
@Test
void dcLineDisconnected() {
final var network = createSmallDcNetwork();
network.getLccConverterStation("Lcc1").getTerminal().disconnect();
network.getLccConverterStation("Lcc2").getTerminal().disconnect();
final var connectedComponents = network.getBusView().getConnectedComponents();
final var synchronousComponents = network.getBusView().getSynchronousComponents();
// two connected components of size 1
assertEquals(2, connectedComponents.size());
connectedComponents.forEach(cc -> assertEquals(1, cc.getSize()));
// two synchronous components of size 1
assertEquals(2, synchronousComponents.size());
synchronousComponents.forEach(sc -> assertEquals(1, sc.getSize()));
}
private Network createSmallDcNetwork() {
final var network = Network.create("smallDc", "test");
final var voltageLevel1 = network.newVoltageLevel()
.setId("voltageLevel1")
.setNominalV(400.0d)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add();
final var bus1 = voltageLevel1.getBusBreakerView().newBus()
.setId("Bus1")
.add();
voltageLevel1.newLoad().setId("Load1")
.setP0(100).setQ0(20)
.setLoadType(LoadType.UNDEFINED)
.setBus(bus1.getId())
.setConnectableBus(bus1.getId())
.add();
voltageLevel1.newGenerator().setId("Gen1")
.setMinP(-500)
.setMaxP(500)
.setTargetP(150)
.setTargetV(405)
.setVoltageRegulatorOn(true)
.setBus(bus1.getId())
.setConnectableBus(bus1.getId())
.add();
final var voltageLevel2 = network.newVoltageLevel()
.setId("voltageLevel2")
.setNominalV(400.0d)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add();
final var bus2 = voltageLevel2.getBusBreakerView().newBus()
.setId("Bus2")
.add();
voltageLevel2.newLoad().setId("Load2")
.setP0(100).setQ0(20)
.setLoadType(LoadType.UNDEFINED)
.setBus(bus2.getId())
.setConnectableBus(bus2.getId())
.add();
voltageLevel2.newGenerator().setId("Gen2")
.setMinP(-500)
.setMaxP(500)
.setTargetP(50)
.setTargetV(405.0d)
.setVoltageRegulatorOn(true)
.setBus(bus2.getId())
.setConnectableBus(bus2.getId())
.add();
voltageLevel1.newLccConverterStation()
.setId("Lcc1")
.setBus(bus1.getId())
.setConnectableBus(bus1.getId())
.setPowerFactor(0.95f)
.setLossFactor(0.99f)
.add();
voltageLevel2.newLccConverterStation()
.setId("Lcc2")
.setBus(bus2.getId())
.setConnectableBus(bus2.getId())
.setPowerFactor(0.95f)
.setLossFactor(0.99f)
.add();
network.newHvdcLine()
.setId("DcLine")
.setR(1)
.setNominalV(300)
.setConverterStationId1("Lcc1")
.setConverterStationId2("Lcc2")
.setMaxP(2000)
.setActivePowerSetpoint(50)
.setConvertersMode(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER)
.add();
return network;
}
}