TestNetworkFactory.java
/**
* Copyright (c) 2023, 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.dynawo.commons;
import com.powsybl.iidm.network.*;
import java.time.ZonedDateTime;
import java.util.List;
/**
* @author Florian Dupuy {@literal <florian.dupuy at rte-france.com>}
*/
public final class TestNetworkFactory {
private TestNetworkFactory() {
}
static Network createMultiBusesVoltageLevelNetwork() {
Network network = Network.create("multiBusesVl", "test")
.setCaseDate(ZonedDateTime.parse("2023-02-17T05:41:11.194+01:00"));
Substation s = network.newSubstation().setId("substation").add();
VoltageLevel vl1 = s.newVoltageLevel().setId("vl1").setNominalV(250).setTopologyKind(TopologyKind.NODE_BREAKER).add();
vl1.getNodeBreakerView().newBusbarSection().setId("Busbar1").setNode(0).add();
vl1.getNodeBreakerView().newBusbarSection().setId("Busbar2").setNode(4).add();
vl1.getNodeBreakerView().newDisconnector().setNode1(0).setNode2(1).setId("d1").add();
vl1.getNodeBreakerView().newDisconnector().setNode1(0).setNode2(2).setId("d2").add();
vl1.getNodeBreakerView().newDisconnector().setNode1(0).setNode2(3).setId("d3").add();
vl1.getNodeBreakerView().newBreaker().setNode1(0).setNode2(4).setId("coupler").setOpen(true).add();
vl1.getNodeBreakerView().newDisconnector().setNode1(0).setNode2(5).setId("d4").add();
vl1.getNodeBreakerView().newDisconnector().setNode1(4).setNode2(6).setId("d5").add();
vl1.newLoad().setId("load1").setP0(10.0).setQ0(5.0).setNode(1).add()
.getTerminal().setP(10.1).setQ(4.0);
vl1.newLoad().setId("load2").setP0(12.0).setQ0(1.0).setNode(2).add()
.getTerminal().setP(12.3).setQ(2.0);
vl1.newLoad().setId("load3").setP0(22.0).setQ0(3.0).setNode(3).add()
.getTerminal().setP(22.5).setQ(4.0);
vl1.newLoad().setId("load4").setP0(-2.0).setQ0(-1.0).setNode(6).add()
.getTerminal().setP(-1.1).setQ(0.0);
VoltageLevel vl2 = s.newVoltageLevel().setId("vl2").setNominalV(250).setTopologyKind(TopologyKind.BUS_BREAKER).add();
Bus b1 = vl2.getBusBreakerView().newBus().setId("b1").add();
Bus b2 = vl2.getBusBreakerView().newBus().setId("b2").add();
Bus b3 = vl2.getBusBreakerView().newBus().setId("b3").add();
vl2.getBusBreakerView().newSwitch().setId("c1").setBus1(b1.getId()).setBus2(b2.getId()).add();
vl2.getBusBreakerView().newSwitch().setId("c2").setBus1(b2.getId()).setBus2(b3.getId()).add();
vl2.newGenerator().setId("g1").setBus(b1.getId()).setTargetP(101).setTargetV(390).setMinP(0).setMaxP(150).setVoltageRegulatorOn(true).add();
vl2.newLoad().setId("load5").setP0(37.0).setQ0(1.0).setBus(b2.getId()).add()
.getTerminal().setP(36.1).setQ(4.0);
vl2.newLoad().setId("load6").setP0(13.0).setQ0(6.0).setBus(b2.getId()).add()
.getTerminal().setP(10.1).setQ(7.0);
vl2.newLoad().setId("load7").setP0(7.0).setQ0(-4.0).setBus(b3.getId()).add()
.getTerminal().setP(7.1).setQ(-4.1);
network.newLine().setId("l1").setVoltageLevel1(vl1.getId()).setNode1(5).setVoltageLevel2(vl2.getId()).setBus2(b1.getId())
.setR(1).setX(3).setG1(0).setG2(0).setB1(0).setB2(0).add();
return network;
}
/**
* Create a test network with two voltage levels in the same substation, one of node breaker topology kind, one of
* bus breaker topology kind. Each voltage level contains loads which correspond to the given <code>loadStates</code>
* @param loadStates the list of states corresponding to the loads to create
* @return the test network generated
*/
static Network createMultiLoadsBusesNetwork(List<LoadState> loadStates) {
Network network = Network.create("multiLoads", "test")
.setCaseDate(ZonedDateTime.parse("2023-02-17T05:41:11.194+01:00"));
Substation s = network.newSubstation().setId("substation").add();
// First node breaker voltage level
VoltageLevel vl1 = s.newVoltageLevel().setId("vl1").setNominalV(250).setTopologyKind(TopologyKind.NODE_BREAKER).add();
vl1.getNodeBreakerView().newBusbarSection().setId("Busbar").setNode(0).add();
for (int i = 0; i < loadStates.size(); i++) {
LoadState loadState = loadStates.get(i);
vl1.getNodeBreakerView().newDisconnector().setNode1(0).setNode2(i + 1).setId("d" + (i + 1)).add();
vl1.newLoad().setId("load" + (i + 1)).setNode(i + 1).setP0(loadState.p0()).setQ0(loadState.q0()).add()
.getTerminal().setP(loadState.p()).setQ(loadState.q());
}
vl1.getNodeBreakerView().newDisconnector().setNode1(0).setNode2(loadStates.size() + 1).setId("d" + (loadStates.size() + 1)).add();
// Second bus breaker voltage level
VoltageLevel vl2 = s.newVoltageLevel().setId("vl2").setNominalV(250).setTopologyKind(TopologyKind.BUS_BREAKER).add();
Bus b1 = vl2.getBusBreakerView().newBus().setId("b1").add();
Bus b2 = vl2.getBusBreakerView().newBus().setId("b2").add();
vl2.getBusBreakerView().newSwitch().setId("c1").setBus1(b1.getId()).setBus2(b2.getId()).add();
vl2.newGenerator().setId("g1").setBus(b1.getId()).setTargetP(101).setTargetV(390).setMinP(0).setMaxP(150).setVoltageRegulatorOn(true).add();
for (int i = 0; i < loadStates.size(); i++) {
LoadState loadState = loadStates.get(i);
vl2.newLoad().setId("load" + (loadStates.size() + i + 1)).setBus(b2.getId()).setP0(loadState.p0()).setQ0(loadState.q0()).add()
.getTerminal().setP(loadState.p()).setQ(loadState.q());
}
// Line between the two voltage levels
network.newLine().setId("l1").setVoltageLevel1(vl1.getId()).setNode1(loadStates.size() + 1).setVoltageLevel2(vl2.getId()).setBus2(b1.getId())
.setR(1).setX(3).setG1(0).setG2(0).setB1(0).setB2(0).add();
return network;
}
}