LayoutNetworkFactory.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/.
*/
package com.powsybl.nad.layout;
import com.powsybl.iidm.network.*;
/**
* @author Luma Zamarreno {@literal <zamarrenolm at aia.es>}
*/
final class LayoutNetworkFactory {
private LayoutNetworkFactory() {
// Empty
}
public static Network createDiamond() {
Network network = com.powsybl.iidm.network.NetworkFactory.findDefault().createNetwork("diamond", "manual");
network.setName("diamond");
Substation subA = network.newSubstation().setId("A").add();
Bus subA400 = createBus(subA, 400);
Bus subA230 = createBus(subA, 230);
createTransformer(subA400, subA230);
Substation subB = network.newSubstation().setId("B").add();
Bus subB230 = createBus(subB, 230);
createLine(subA230, subB230);
Substation subC = network.newSubstation().setId("C").add();
Bus subC230 = createBus(subC, 230);
Bus subC66 = createBus(subC, 66);
Bus subC20 = createBus(subC, 20);
createTransformer(subC230, subC66);
createTransformer(subC66, subC20);
createLine(subB230, subC230);
Substation subD = network.newSubstation().setId("D").add();
Bus subD66 = createBus(subD, 66);
Bus subD10 = createBus(subD, 10);
createTransformer(subD66, subD10);
createLine(subC66, subD66);
Substation subE = network.newSubstation().setId("E").add();
Bus subE10 = createBus(subE, 10);
createLine(subD10, subE10);
Bus subF10 = createBus(network, "F", 10);
Bus subG10 = createBus(network, "G", 10);
Bus subH10 = createBus(network, "H", 10);
Bus subI10 = createBus(network, "I", 10);
Bus subJ10 = createBus(network, "J", 10);
Bus subK10 = createBus(network, "K", 10);
createLine(subE10, subF10);
createLine(subF10, subG10);
createLine(subG10, subH10);
createLine(subH10, subD10);
createLine(subF10, subI10);
createLine(subI10, subJ10);
createLine(subJ10, subK10);
createLine(subK10, subD10);
return network;
}
private static Bus createBus(Network network, String substationId, double nominalVoltage) {
Substation substation = network.newSubstation().setId(substationId).add();
return createBus(substation, nominalVoltage);
}
private static Bus createBus(Substation substation, double nominalVoltage) {
String vlId = String.format("%s %.0f", substation.getId(), nominalVoltage);
String busId = String.format("%s %s", vlId, "Bus");
return substation.newVoltageLevel()
.setId(vlId)
.setNominalV(nominalVoltage)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add()
.getBusBreakerView()
.newBus()
.setId(busId)
.add();
}
private static void createTransformer(Bus bus1, Bus bus2) {
Substation substation = bus1.getVoltageLevel().getSubstation().orElseThrow();
String id = String.format("%s %.0f %.0f",
substation.getId(),
bus1.getVoltageLevel().getNominalV(),
bus2.getVoltageLevel().getNominalV());
substation.newTwoWindingsTransformer().setId(id)
.setR(0.0)
.setX(1.0)
.setG(0.0)
.setB(0.0)
.setVoltageLevel1(bus1.getVoltageLevel().getId())
.setVoltageLevel2(bus2.getVoltageLevel().getId())
.setConnectableBus1(bus1.getId())
.setConnectableBus2(bus2.getId())
.setRatedU1(bus1.getVoltageLevel().getNominalV())
.setRatedU2(bus2.getVoltageLevel().getNominalV())
.setBus1(bus1.getId())
.setBus2(bus2.getId())
.add();
}
private static void createLine(Bus bus1, Bus bus2) {
String id = String.format("%s - %s",
bus1.getVoltageLevel().getSubstation().orElseThrow().getId(),
bus2.getVoltageLevel().getSubstation().orElseThrow().getId());
bus1.getNetwork().newLine().setId(id)
.setR(0.0)
.setX(1.0)
.setG1(0.0)
.setB1(0.0)
.setG2(0.0)
.setB2(0.0)
.setVoltageLevel1(bus1.getVoltageLevel().getId())
.setVoltageLevel2(bus2.getVoltageLevel().getId())
.setConnectableBus1(bus1.getId())
.setConnectableBus2(bus2.getId())
.setBus1(bus1.getId())
.setBus2(bus2.getId())
.add();
}
}