NodeBreakerNetworkFactory.java
/**
* Copyright (c) 2021, 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.openloadflow.network;
import com.powsybl.iidm.network.*;
public final class NodeBreakerNetworkFactory {
private NodeBreakerNetworkFactory() {
}
/**
* <pre>
* G
* C |
* BBS1 -------[+]------- BBS2 VL1
* | [+] B1
* | |
* L1 | | L2
* | |
* B3 [+] [+] B4
* BBS3 ----------------- VL2
* |
* LD
* </pre>
* 6 buses
* 6 branches
*
* G
* |
* o--C--o
* | |
* | B1
* | |
* | o
* | |
* L1 L2
* | |
* o o
* | |
* B3 B4
* | |
* ---o---
* |
* LD
*
* @author Gael Macharel {@literal <gael.macherel at artelys.com>}
*/
public static Network create() {
Network network = Network.create("test", "test");
Substation s = network.newSubstation()
.setId("S")
.add();
VoltageLevel vl1 = s.newVoltageLevel()
.setId("VL1")
.setNominalV(400)
.setLowVoltageLimit(370.)
.setHighVoltageLimit(420.)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
vl1.getNodeBreakerView().newBusbarSection()
.setId("BBS1")
.setNode(0)
.add();
vl1.getNodeBreakerView().newBusbarSection()
.setId("BBS2")
.setNode(1)
.add();
vl1.getNodeBreakerView().newDisconnector()
.setId("D")
.setNode1(0)
.setNode2(6)
.add();
vl1.getNodeBreakerView().newBreaker()
.setId("C")
.setNode1(6)
.setNode2(1)
.setRetained(true)
.add();
vl1.getNodeBreakerView().newBreaker()
.setId("B1")
.setNode1(1)
.setNode2(3)
.add();
vl1.getNodeBreakerView().newInternalConnection()
.setNode1(1)
.setNode2(4)
.add();
vl1.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(5)
.add();
vl1.newGenerator()
.setId("G")
.setNode(4)
.setMinP(0.0)
.setMaxP(1000.0)
.setVoltageRegulatorOn(true)
.setTargetV(398)
.setTargetP(603.77)
.setTargetQ(301.0)
.add();
VoltageLevel vl2 = s.newVoltageLevel()
.setId("VL2")
.setNominalV(400)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.setLowVoltageLimit(370.)
.setHighVoltageLimit(420.)
.add();
vl2.getNodeBreakerView().newBusbarSection()
.setId("BBS3")
.setNode(0)
.add();
vl2.getNodeBreakerView().newBreaker()
.setId("B3")
.setNode1(0)
.setNode2(1)
.setRetained(true)
.add();
vl2.getNodeBreakerView().newBreaker()
.setId("B4")
.setNode1(0)
.setNode2(2)
.add();
vl2.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(3)
.add();
vl2.newLoad()
.setId("LD")
.setNode(3)
.setP0(600.0)
.setQ0(200.0)
.add();
network.newLine()
.setId("L1")
.setVoltageLevel1("VL1")
.setNode1(5)
.setVoltageLevel2("VL2")
.setNode2(1)
.setR(3.0)
.setX(33.0)
.setB1(386E-6 / 2)
.setB2(386E-6 / 2)
.add();
network.newLine()
.setId("L2")
.setVoltageLevel1("VL1")
.setNode1(3)
.setVoltageLevel2("VL2")
.setNode2(2)
.setR(3.0)
.setX(33.0)
.setB1(386E-6 / 2)
.setB2(386E-6 / 2)
.add();
network.getLine("L1").newCurrentLimits1().setPermanentLimit(940.0).add();
network.getLine("L1").newCurrentLimits2().setPermanentLimit(940.0).add();
network.getLine("L2").newCurrentLimits1().setPermanentLimit(940.0).add();
network.getLine("L2").newCurrentLimits2().setPermanentLimit(940.0).add();
return network;
}
/**
* <pre>
* G
* | C
* BBS1 ----------[+]------------------ BBS2 VL1
* | [+] B1 B5 [+]
* | | |
* | | PS1 |
* | | | LD2
* | | B8 [+] |
* L1 | | L2 ------------ BBS4 VL3
* | | B9 [+] [+] B10
* | | | |
* | | L3 | | L4
* | | | |
* B3 [+] [+] B4 B6 [+] [+] B7
* BBS3 ------------------------------------- VL2
* |
* LD
* </pre>
*
* @author Pierre Arvy {@literal <pierre.arvy at artelys.com>}
*/
public static Network createWith4Bars() {
Network network = create();
network.getVoltageLevel("VL1").getNodeBreakerView().newBreaker()
.setId("B5")
.setNode1(1)
.setNode2(7)
.add();
network.getVoltageLevel("VL2").getNodeBreakerView().newBreaker()
.setId("B6")
.setNode1(0)
.setNode2(4)
.add();
network.getVoltageLevel("VL2").getNodeBreakerView().newBreaker()
.setId("B7")
.setNode1(0)
.setNode2(5)
.add();
VoltageLevel vl3 = network.getSubstation("S").newVoltageLevel()
.setId("VL3")
.setNominalV(400)
.setLowVoltageLimit(370.)
.setHighVoltageLimit(420.)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
vl3.getNodeBreakerView().newBusbarSection()
.setId("BBS4")
.setNode(0)
.add();
vl3.getNodeBreakerView().newBreaker()
.setId("B8")
.setNode1(0)
.setNode2(1)
.add();
vl3.getNodeBreakerView().newBreaker()
.setId("B9")
.setNode1(0)
.setNode2(2)
.add();
vl3.getNodeBreakerView().newBreaker()
.setId("B10")
.setNode1(0)
.setNode2(3)
.add();
vl3.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(4)
.add();
vl3.newLoad()
.setId("LD2")
.setNode(4)
.setP0(200.0)
.setQ0(50.0)
.add();
TwoWindingsTransformer ps1 = network.getSubstation("S").newTwoWindingsTransformer()
.setId("PS1")
.setVoltageLevel1("VL1")
.setNode1(7)
.setVoltageLevel2("VL3")
.setNode2(1)
.setRatedU1(400)
.setRatedU2(400)
.setR(0)
.setX(100.0)
.setG(0.0)
.setB(0.0)
.add();
ps1.newPhaseTapChanger()
.setTapPosition(1)
.setRegulationTerminal(ps1.getTerminal2())
.setRegulationMode(PhaseTapChanger.RegulationMode.FIXED_TAP)
.setRegulationValue(200)
.beginStep()
.setAlpha(-5)
.setRho(1.0)
.setR(0.0)
.setX(50)
.setG(0.0)
.setB(0.0)
.endStep()
.beginStep()
.setAlpha(-5)
.setRho(1.0)
.setR(0.0)
.setX(100)
.setG(0.0)
.setB(0.0)
.endStep()
.add();
network.newLine()
.setId("L3")
.setVoltageLevel1("VL2")
.setNode1(4)
.setVoltageLevel2("VL3")
.setNode2(2)
.setR(3.0)
.setX(33.0)
.setB1(386E-6 / 2)
.setB2(386E-6 / 2)
.add();
network.newLine()
.setId("L4")
.setVoltageLevel1("VL3")
.setNode1(3)
.setVoltageLevel2("VL2")
.setNode2(5)
.setR(3.0)
.setX(33.0)
.setB1(386E-6 / 2)
.setB2(386E-6 / 2)
.add();
return network;
}
private static void createBar(VoltageLevel vl, String id, int node) {
vl.getNodeBreakerView().newBusbarSection().setId(id).setNode(node).add();
}
private static void createBreaker(VoltageLevel vl, String id, int node1, int node2) {
vl.getNodeBreakerView().newBreaker().setId(id).setNode1(node1).setNode2(node2).add();
}
private static void createConnection(VoltageLevel vl, int node1, int node2) {
vl.getNodeBreakerView().newInternalConnection().setNode1(node1).setNode2(node2).add();
}
private static void createGenerator(VoltageLevel vl, String id, int node, double v, double p, double q) {
vl.newGenerator()
.setId(id)
.setNode(node)
.setMinP(-4999.99)
.setMaxP(4999.99)
.setVoltageRegulatorOn(true)
.setTargetV(v)
.setTargetP(p)
.setTargetQ(q)
.add();
}
private static void createLine(Network network, String id, String vl1, int node1, String vl2, int node2) {
network.newLine()
.setId(id)
.setVoltageLevel1(vl1)
.setNode1(node1)
.setVoltageLevel2(vl2)
.setNode2(node2)
.setR(3.0)
.setX(33.0)
.setB1(386E-6 / 2)
.setB2(386E-6 / 2)
.add();
network.getLine(id).newCurrentLimits1().setPermanentLimit(940.0).add();
network.getLine(id).newCurrentLimits2().setPermanentLimit(940.0).add();
}
/**
*
* <pre>
* G1 (400MW) G2 (200MW)
* | C1 BBS2 C2 |
* BBS1 -------[+] -------[+]------- BBS3 VL1
* B1 [+] | [+] B4
* | | |
* L1 | L2 | L3 |
* | | |
* B2 [+] B3 [+] [+] B5
* BBS4 --------------------------- VL2
* |
* LD (600MW)
*</pre>
*
* @author Sylvain Leclerc {@literal <sylvain.leclerc at rte-france.com>}
*/
public static Network create3Bars() {
Network network = Network.create("test", "test");
Substation s = network.newSubstation()
.setId("S")
.add();
VoltageLevel vl1 = s.newVoltageLevel()
.setId("VL1")
.setNominalV(400)
.setLowVoltageLimit(370.)
.setHighVoltageLimit(420.)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
createBar(vl1, "BBS1", 0);
createBar(vl1, "BBS2", 1);
createBar(vl1, "BBS3", 2);
createBreaker(vl1, "C1", 0, 1);
createBreaker(vl1, "C2", 1, 2);
createBreaker(vl1, "B1", 0, 5);
createConnection(vl1, 1, 6);
createBreaker(vl1, "B4", 2, 7);
createGenerator(vl1, "G1", 3, 400, 400, 0);
createConnection(vl1, 0, 3);
createGenerator(vl1, "G2", 4, 400, 200, 0);
createConnection(vl1, 2, 4);
VoltageLevel vl2 = s.newVoltageLevel()
.setId("VL2")
.setNominalV(400)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.setLowVoltageLimit(370.)
.setHighVoltageLimit(420.)
.add();
createBar(vl2, "BBS4", 0);
createBreaker(vl2, "B2", 0, 2);
createBreaker(vl2, "B3", 0, 3);
createBreaker(vl2, "B5", 0, 4);
vl2.newLoad()
.setId("LD")
.setNode(1)
.setP0(600.0)
.setQ0(200.0)
.add();
createConnection(vl2, 0, 1);
createLine(network, "L1", "VL1", 5, "VL2", 2);
createLine(network, "L2", "VL1", 6, "VL2", 3);
createLine(network, "L3", "VL1", 7, "VL2", 4);
return network;
}
/**
*
* <pre>
* G1 (3) G2 (4)
* | C1 BBS2 (1) C2 |
* BBS1 (0) -------[+] ------------[+]------- BBS3 (2)
* |
* LD (5)
*</pre>
*
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public static Network create3barsAndJustOneVoltageLevel() {
Network network = Network.create("test", "test");
Substation s = network.newSubstation()
.setId("S")
.add();
VoltageLevel vl1 = s.newVoltageLevel()
.setId("VL1")
.setNominalV(400)
.setLowVoltageLimit(370.)
.setHighVoltageLimit(420.)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
createBar(vl1, "BBS1", 0);
createBar(vl1, "BBS2", 1);
createBar(vl1, "BBS3", 2);
createBreaker(vl1, "C1", 0, 1);
createBreaker(vl1, "C2", 1, 2);
network.getSwitch("C1").setRetained(true);
network.getSwitch("C2").setRetained(true);
createGenerator(vl1, "G1", 3, 400, 400, 0);
createConnection(vl1, 0, 3);
createGenerator(vl1, "G2", 4, 400, 200, 0);
createConnection(vl1, 2, 4);
vl1.newLoad()
.setId("LD")
.setNode(5)
.setP0(600.0)
.setQ0(200.0)
.add();
createConnection(vl1, 1, 5);
return network;
}
}