ScalableTestNetwork.java

/**
 * Copyright (c) 2019, 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.modification.scalable;

import com.powsybl.iidm.network.*;

/**
 * @author Ameni Walha {@literal <ameni.walha at rte-france.com>}
 */
final class ScalableTestNetwork {
    private ScalableTestNetwork() {
        throw new IllegalStateException("No default constructor in utility class");
    }

    static Network createNetwork() {
        Network network = Network.create("network", "test");
        Substation s = network.newSubstation()
                .setId("s")
                .setCountry(Country.US)
                .add();
        VoltageLevel vl = s.newVoltageLevel()
                .setId("vl1")
                .setNominalV(380.0)
                .setLowVoltageLimit(0.8 * 380.0)
                .setHighVoltageLimit(1.2 * 380.0)
                .setTopologyKind(TopologyKind.BUS_BREAKER)
                .add();
        vl.getBusBreakerView().newBus()
                .setId("bus1")
                .add();
        vl.newGenerator()
                .setId("g1")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setMinP(0.0)
                .setMaxP(100.0)
                .setTargetP(0.0)
                .setVoltageRegulatorOn(false)
                .setTargetQ(0.0)
                .add();
        vl.newGenerator()
                .setId("g2")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setMinP(0.0)
                .setMaxP(100.0)
                .setTargetP(0.0)
                .setVoltageRegulatorOn(false)
                .setTargetQ(0.0)
                .add();
        vl.newGenerator()
                .setId("g3")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setMinP(0.0)
                .setMaxP(100.0)
                .setTargetP(0.0)
                .setVoltageRegulatorOn(true)
                .setTargetV(1.0)
                .add();
        vl.newLoad()
                .setId("l1")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setP0(100.0)
                .setQ0(0.0)
                .setLoadType(LoadType.UNDEFINED)
                .add();

        VoltageLevel vl2 = s.newVoltageLevel()
                .setId("vl2")
                .setTopologyKind(TopologyKind.BUS_BREAKER)
                .setNominalV(380)
                .add();
        vl2.getBusBreakerView().newBus()
                .setId("bus2")
                .add();
        network.newLine()
                .setId("l12")
                .setVoltageLevel1("vl1")
                .setConnectableBus1("bus1")
                .setBus1("bus1")
                .setVoltageLevel2("vl2")
                .setConnectableBus2("bus2")
                .setBus2("bus2")
                .setR(1)
                .setX(1)
                .setG1(0)
                .setG2(0)
                .setB1(0)
                .setB2(0)
                .add();
        return network;
    }

    static Network createNetworkWithDanglingLine() {
        Network network = Network.create("network", "test");
        Substation s = network.newSubstation()
                .setId("s")
                .setCountry(Country.US)
                .add();
        VoltageLevel vl = s.newVoltageLevel()
                .setId("vl1")
                .setNominalV(380.0)
                .setLowVoltageLimit(0.8 * 380.0)
                .setHighVoltageLimit(1.2 * 380.0)
                .setTopologyKind(TopologyKind.BUS_BREAKER)
                .add();
        vl.getBusBreakerView().newBus()
                .setId("bus1")
                .add();
        vl.newGenerator()
                .setId("g1")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setMinP(0.0)
                .setMaxP(100.0)
                .setTargetP(50.0)
                .setVoltageRegulatorOn(false)
                .setTargetQ(0.0)
                .add();
        vl.newGenerator()
                .setId("g2")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setMinP(0.0)
                .setMaxP(100.0)
                .setTargetP(50.0)
                .setVoltageRegulatorOn(false)
                .setTargetQ(0.0)
                .add();
        vl.newGenerator()
                .setId("g3")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setMinP(0.0)
                .setMaxP(100.0)
                .setTargetP(50.0)
                .setVoltageRegulatorOn(true)
                .setTargetV(1.0)
                .add();
        vl.newLoad()
                .setId("l1")
                .setBus("bus1")
                .setConnectableBus("bus1")
                .setP0(100.0)
                .setQ0(0.0)
                .setLoadType(LoadType.UNDEFINED)
                .add();

        VoltageLevel vl2 = s.newVoltageLevel()
                .setId("vl2")
                .setTopologyKind(TopologyKind.BUS_BREAKER)
                .setNominalV(380)
                .add();
        vl2.getBusBreakerView().newBus()
                .setId("bus2")
                .add();
        vl2.newDanglingLine()
                .setId("dl2")
                .setBus("bus2")
                .setConnectableBus("bus2")
                .setP0(50.0)
                .setQ0(0.0)
                .setR(0.0)
                .setX(10.)
                .setB(0.0)
                .setG(0.0)
                .add();

        network.newLine()
                .setId("l12")
                .setVoltageLevel1("vl1")
                .setConnectableBus1("bus1")
                .setBus1("bus1")
                .setVoltageLevel2("vl2")
                .setConnectableBus2("bus2")
                .setBus2("bus2")
                .setR(1)
                .setX(1)
                .setG1(0)
                .setG2(0)
                .setB1(0)
                .setB2(0)
                .add();
        return network;
    }

    static Network createNetworkwithDanglingLineAndBattery() {
        Network network = Network.create("network", "test");

        // Substation
        Substation s = network.newSubstation()
            .setId("s")
            .setCountry(Country.US)
            .add();

        // First voltage level
        VoltageLevel vl = s.newVoltageLevel()
            .setId("vl1")
            .setNominalV(380.0)
            .setLowVoltageLimit(0.8 * 380.0)
            .setHighVoltageLimit(1.2 * 380.0)
            .setTopologyKind(TopologyKind.BUS_BREAKER)
            .add();
        vl.getBusBreakerView().newBus()
            .setId("bus1")
            .add();
        vl.newGenerator()
            .setId("g1")
            .setBus("bus1")
            .setConnectableBus("bus1")
            .setMinP(0.0)
            .setMaxP(150.0)
            .setTargetP(80.0)
            .setVoltageRegulatorOn(false)
            .setTargetQ(0.0)
            .add();
        vl.newGenerator()
            .setId("g2")
            .setBus("bus1")
            .setConnectableBus("bus1")
            .setMinP(10.0)
            .setMaxP(100.0)
            .setTargetP(50.0)
            .setVoltageRegulatorOn(false)
            .setTargetQ(0.0)
            .add();
        vl.newGenerator()
            .setId("g3")
            .setBus("bus1")
            .setConnectableBus("bus1")
            .setMinP(20.0)
            .setMaxP(80.0)
            .setTargetP(30.0)
            .setVoltageRegulatorOn(true)
            .setTargetV(1.0)
            .add();
        vl.newLoad()
            .setId("l1")
            .setBus("bus1")
            .setConnectableBus("bus1")
            .setP0(100.0)
            .setQ0(0.0)
            .setLoadType(LoadType.UNDEFINED)
            .add();
        vl.newLoad()
            .setId("l2")
            .setBus("bus1")
            .setConnectableBus("bus1")
            .setP0(80.0)
            .setQ0(0.0)
            .setLoadType(LoadType.UNDEFINED)
            .add();
        vl.newLoad()
            .setId("l3")
            .setBus("bus1")
            .setConnectableBus("bus1")
            .setP0(50.0)
            .setQ0(0.0)
            .setLoadType(LoadType.UNDEFINED)
            .add();

        // Second Voltage level
        VoltageLevel vl2 = s.newVoltageLevel()
            .setId("vl2")
            .setTopologyKind(TopologyKind.BUS_BREAKER)
            .setNominalV(380)
            .add();
        vl2.getBusBreakerView().newBus()
            .setId("bus2")
            .add();
        vl2.newDanglingLine()
            .setId("dl1")
            .setBus("bus2")
            .setConnectableBus("bus2")
            .setP0(50.0)
            .setQ0(0.0)
            .setR(0.0)
            .setX(10.)
            .setB(0.0)
            .setG(0.0)
            .add();
        Battery battery = vl2.newBattery()
            .setId("BAT")
            .setBus("bus2")
            .setConnectableBus("bus2")
            .setTargetP(9999.99)
            .setTargetQ(9999.99)
            .setMinP(-9999.99)
            .setMaxP(9999.99)
            .add();
        battery.newMinMaxReactiveLimits()
            .setMinQ(-9999.99)
            .setMaxQ(9999.99)
            .add();
        battery.getTerminal().setP(-605);
        battery.getTerminal().setQ(-225);

        // Line between the two voltage levels
        network.newLine()
            .setId("l12")
            .setVoltageLevel1("vl1")
            .setConnectableBus1("bus1")
            .setBus1("bus1")
            .setVoltageLevel2("vl2")
            .setConnectableBus2("bus2")
            .setBus2("bus2")
            .setR(1)
            .setX(1)
            .setG1(0)
            .setG2(0)
            .setB1(0)
            .setB2(0)
            .add();
        return network;
    }
}