FourSubstationsNodeBreakerFactory.java

/**
 * Copyright (c) 2020, 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.test;

import com.powsybl.iidm.network.*;
import java.time.ZonedDateTime;

import java.util.Objects;

/**
 * This test network is constituted of four substations, with five voltage levels.
 * Below is a diagram of the network:
 * <div>
 *    <object data="doc-files/fourSubstationsNetwork.svg" type="image/svg+xml"></object>
 * </div>
 *
 *
 * @author Agnes Leroy {@literal <agnes.leroy at rte-france.com>}
 */

public final class FourSubstationsNodeBreakerFactory {

    public static final String S3VL1 = "S3VL1";

    private FourSubstationsNodeBreakerFactory() {
    }

    public static Network create() {
        return create(NetworkFactory.findDefault());
    }

    public static Network create(NetworkFactory networkFactory) {
        Objects.requireNonNull(networkFactory);

        Network network = networkFactory.createNetwork("fourSubstations", "test");
        network.setCaseDate(ZonedDateTime.parse("2017-06-25T17:43:00.000+01:00"));
        network.setForecastDistance(0);

        // First substation
        // It is constituted of 2 voltage levels
        // The second voltage levels comprises two busbar sections
        Substation s1 = network.newSubstation()
                .setId("S1")
                .add();
        VoltageLevel s1vl1 = s1.newVoltageLevel()
                .setId("S1VL1")
                .setNominalV(225.0)
                .setLowVoltageLimit(220.0)
                .setHighVoltageLimit(240.0)
                .setTopologyKind(TopologyKind.NODE_BREAKER)
                .add();
        BusbarSection busbarSectionS1VL1 = s1vl1.getNodeBreakerView().newBusbarSection()
                .setId("S1VL1_BBS")
                .setName("S1VL1_BBS")
                .setNode(0)
                .add();
        VoltageLevel s1vl2 = s1.newVoltageLevel()
                .setId("S1VL2")
                .setNominalV(400.0)
                .setLowVoltageLimit(390.0)
                .setHighVoltageLimit(440.0)
                .setTopologyKind(TopologyKind.NODE_BREAKER)
                .add();
        BusbarSection busbarSectionS1VL21 = s1vl2.getNodeBreakerView().newBusbarSection()
                .setId("S1VL2_BBS1")
                .setName("S1VL2_BBS1")
                .setNode(0)
                .add();
        BusbarSection busbarSectionS1VL22 = s1vl2.getNodeBreakerView().newBusbarSection()
                .setId("S1VL2_BBS2")
                .setName("S1VL2_BBS2")
                .setNode(1)
                .add();

        // Second substation
        Substation s2 = network.newSubstation()
                .setId("S2")
                .add();
        VoltageLevel s2vl1 = s2.newVoltageLevel()
                .setId("S2VL1")
                .setNominalV(400.0)
                .setLowVoltageLimit(390.0)
                .setHighVoltageLimit(440.0)
                .setTopologyKind(TopologyKind.NODE_BREAKER)
                .add();
        BusbarSection busbarSectionS2VL1 = s2vl1.getNodeBreakerView().newBusbarSection()
                .setId("S2VL1_BBS")
                .setName("S2VL1_BBS")
                .setNode(0)
                .add();

        // Third substation
        Substation s3 = network.newSubstation()
                .setId("S3")
                .add();
        VoltageLevel s3vl1 = s3.newVoltageLevel()
                .setId(S3VL1)
                .setNominalV(400.0)
                .setLowVoltageLimit(390.0)
                .setHighVoltageLimit(440.0)
                .setTopologyKind(TopologyKind.NODE_BREAKER)
                .add();
        BusbarSection busbarSectionS3VL1 = s3vl1.getNodeBreakerView().newBusbarSection()
                .setId("S3VL1_BBS")
                .setName("S3VL1_BBS")
                .setNode(0)
                .add();

        // Fourth substation
        Substation s4 = network.newSubstation()
                .setId("S4")
                .add();
        VoltageLevel s4vl1 = s4.newVoltageLevel()
                .setId("S4VL1")
                .setNominalV(400.0)
                .setLowVoltageLimit(390.0)
                .setHighVoltageLimit(440.0)
                .setTopologyKind(TopologyKind.NODE_BREAKER)
                .add();
        BusbarSection busbarSectionS4VL1 = s4vl1.getNodeBreakerView().newBusbarSection()
                .setId("S4VL1_BBS")
                .setName("S4VL1_BBS")
                .setNode(0)
                .add();

        // Connect a load on the first voltage level of substation 1
        createSwitch(s1vl1, "S1VL1_BBS_LD1_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 1);
        createSwitch(s1vl1, "S1VL1_LD1_BREAKER", SwitchKind.BREAKER, false, 1, 2);
        Load load1 = s1vl1.newLoad()
                .setId("LD1")
                .setLoadType(LoadType.UNDEFINED)
                .setP0(80)
                .setQ0(10)
                .setNode(2)
                .add();
        load1.getTerminal().setP(80.0).setQ(10.0);

        // Connect a TWT between the two voltage levels of substation 1, on the bus bar section 1 of the second voltage level
        // TWT could be connected to bbs 2 of the second VL through a second disconnector, which is open at the moment
        createSwitch(s1vl1, "S1VL1_BBS_TWT_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 3);
        createSwitch(s1vl1, "S1VL1_TWT_BREAKER", SwitchKind.BREAKER, false, 3, 4);
        createSwitch(s1vl2, "S1VL2_BBS1_TWT_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 2);
        createSwitch(s1vl2, "S1VL2_BBS2_TWT_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 1, 2);
        createSwitch(s1vl2, "S1VL2_TWT_BREAKER", SwitchKind.BREAKER, false, 2, 3);

        TwoWindingsTransformer twt = s1.newTwoWindingsTransformer()
                .setId("TWT")
                .setR(2.0)
                .setX(14.745)
                .setG(0.0)
                .setB(3.2E-5)
                .setRatedU1(225.0)
                .setRatedU2(400.0)
                .setNode1(4)
                .setVoltageLevel1("S1VL1")
                .setNode2(3)
                .setVoltageLevel2("S1VL2")
                .add();
        twt.newCurrentLimits1()
                .setPermanentLimit(1031.0)
                .add();
        twt.newCurrentLimits2()
                .setPermanentLimit(1031.0)
                .add();
        twt.newPhaseTapChanger()
                .setLowTapPosition(0)
                .setTapPosition(15)
                .setRegulationMode(PhaseTapChanger.RegulationMode.FIXED_TAP)
                .setRegulating(false)
                .setRegulationTerminal(twt.getTerminal(TwoSides.ONE))
                .beginStep().setR(39.78473).setX(29.784725).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-42.8).endStep()
                .beginStep().setR(31.720245).setX(21.720242).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-40.18).endStep()
                .beginStep().setR(23.655737).setX(13.655735).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-37.54).endStep()
                .beginStep().setR(16.263271).setX(6.263268).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-34.9).endStep()
                .beginStep().setR(9.542847).setX(4.542842).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-32.26).endStep()
                .beginStep().setR(3.4944773).setX(3.4944773).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-29.6).endStep()
                .beginStep().setR(-1.8818557).setX(-1.8818527).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-26.94).endStep()
                .beginStep().setR(-7.258195).setX(-3.2581954).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-24.26).endStep()
                .beginStep().setR(-11.962485).setX(-7.962484).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-21.58).endStep()
                .beginStep().setR(-15.994745).setX(-11.994745).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-18.9).endStep()
                .beginStep().setR(-19.354952).setX(-15.354952).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-16.22).endStep()
                .beginStep().setR(-22.043127).setX(-22.043129).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-13.52).endStep()
                .beginStep().setR(-24.73129).setX(-24.731287).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-10.82).endStep()
                .beginStep().setR(-26.747417).setX(-26.747417).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-8.12).endStep()
                .beginStep().setR(-28.091503).setX(-28.091503).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-5.42).endStep()
                .beginStep().setR(-28.763538).setX(-28.763536).setG(0.0).setB(0.0).setRho(1.0).setAlpha(-2.7).endStep()
                .beginStep().setR(-28.763538).setX(-28.763536).setG(0.0).setB(0.0).setRho(1.0).setAlpha(0.0).endStep()
                .beginStep().setR(-28.763538).setX(-28.763536).setG(0.0).setB(0.0).setRho(1.0).setAlpha(2.7).endStep()
                .beginStep().setR(-28.091503).setX(-28.091503).setG(0.0).setB(0.0).setRho(1.0).setAlpha(5.42).endStep()
                .beginStep().setR(-26.747417).setX(-26.747417).setG(0.0).setB(0.0).setRho(1.0).setAlpha(8.12).endStep()
                .beginStep().setR(-24.73129).setX(-24.731287).setG(0.0).setB(0.0).setRho(1.0).setAlpha(10.82).endStep()
                .beginStep().setR(-22.043127).setX(-22.043129).setG(0.0).setB(0.0).setRho(1.0).setAlpha(13.52).endStep()
                .beginStep().setR(-19.354952).setX(-19.354952).setG(0.0).setB(0.0).setRho(1.0).setAlpha(16.22).endStep()
                .beginStep().setR(-15.994745).setX(-15.994745).setG(0.0).setB(0.0).setRho(1.0).setAlpha(18.9).endStep()
                .beginStep().setR(-11.962485).setX(-11.962484).setG(0.0).setB(0.0).setRho(1.0).setAlpha(21.58).endStep()
                .beginStep().setR(-7.258195).setX(-7.2581954).setG(0.0).setB(0.0).setRho(1.0).setAlpha(24.26).endStep()
                .beginStep().setR(-1.8818557).setX(-1.8818527).setG(0.0).setB(0.0).setRho(1.0).setAlpha(26.94).endStep()
                .beginStep().setR(3.4944773).setX(3.4944773).setG(0.0).setB(0.0).setRho(1.0).setAlpha(29.6).endStep()
                .beginStep().setR(9.542847).setX(9.542842).setG(0.0).setB(0.0).setRho(1.0).setAlpha(32.26).endStep()
                .beginStep().setR(16.263271).setX(16.263268).setG(0.0).setB(0.0).setRho(1.0).setAlpha(34.9).endStep()
                .beginStep().setR(23.655737).setX(23.655735).setG(0.0).setB(0.0).setRho(1.0).setAlpha(37.54).endStep()
                .beginStep().setR(31.720245).setX(31.720242).setG(0.0).setB(0.0).setRho(1.0).setAlpha(40.18).endStep()
                .beginStep().setR(39.78473).setX(39.784725).setG(0.0).setB(0.0).setRho(1.0).setAlpha(42.8).endStep()
                .add();
        twt.newRatioTapChanger()
                .beginStep().setR(0.0).setX(0.0).setB(0.0).setG(0.0).setRho(0.85).endStep()
                .beginStep().setR(0.0).setX(0.0).setB(0.0).setG(0.0).setRho(1).endStep()
                .beginStep().setR(0.0).setX(0.0).setB(0.0).setG(0.0).setRho(1.15).endStep()
                .setLowTapPosition(0)
                .setTapPosition(1)
                .setLoadTapChangingCapabilities(true)
                .setRegulating(true)
                .setRegulationMode(RatioTapChanger.RegulationMode.VOLTAGE)
                .setRegulationValue(225.0)
                .setTargetDeadband(0)
                .setRegulationTerminal(twt.getTerminal(TwoSides.ONE))
                .add();
        twt.getTerminal1().setP(-80.0).setQ(-10.0);
        twt.getTerminal2().setP(80.0809).setQ(5.4857);

        // Connect a VSC station to BBS2 of the second voltage level of substation 1, with a possibility to connect it to BBS1
        createSwitch(s1vl2, "S1VL2_BBS1_VSC1_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 0, 4);
        createSwitch(s1vl2, "S1VL2_BBS2_VSC1_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 1, 4);
        createSwitch(s1vl2, "S1VL2_VSC1_BREAKER", SwitchKind.BREAKER, false, 4, 5);
        VscConverterStation vsc1 = s1vl2.newVscConverterStation()
                .setId("VSC1")
                .setName("VSC1")
                .setNode(5)
                .setLossFactor(1.1f)
                .setReactivePowerSetpoint(500)
                .setVoltageSetpoint(400)
                .setVoltageRegulatorOn(true)
                .add();
        vsc1.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(-100.0)
                .setMinQ(-550.0)
                .setMaxQ(570.0)
                .endPoint()
                .beginPoint()
                .setP(100.0)
                .setMinQ(-550.0)
                .setMaxQ(570.0)
                .endPoint()
                .add();
        vsc1.getTerminal().setP(10.1100).setQ(-512.0814);

        // Connect three hydro generators on the bbs 1 of the second voltage level of substation 1, with a possibility to connect them onto bbs 2
        createSwitch(s1vl2, "S1VL2_BBS1_GH1_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 6);
        createSwitch(s1vl2, "S1VL2_BBS1_GH2_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 8);
        createSwitch(s1vl2, "S1VL2_BBS1_GH3_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 10);
        createSwitch(s1vl2, "S1VL2_BBS2_GH1_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 1, 6);
        createSwitch(s1vl2, "S1VL2_BBS2_GH2_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 1, 8);
        createSwitch(s1vl2, "S1VL2_BBS2_GH3_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 1, 10);
        createSwitch(s1vl2, "S1VL2_GH1_BREAKER", SwitchKind.BREAKER, false, 6, 7);
        createSwitch(s1vl2, "S1VL2_GH2_BREAKER", SwitchKind.BREAKER, false, 8, 9);
        createSwitch(s1vl2, "S1VL2_GH3_BREAKER", SwitchKind.BREAKER, false, 10, 11);

        Generator generatorHydro1 = s1vl2.newGenerator()
                .setId("GH1")
                .setEnergySource(EnergySource.HYDRO)
                .setMinP(0.0)
                .setMaxP(100.0)
                .setVoltageRegulatorOn(true)
                .setTargetP(85.3570)
                .setTargetV(400.0)
                .setTargetQ(512.081)
                .setNode(7)
                .add();
        generatorHydro1.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(0.0)
                .setMinQ(-769.3)
                .setMaxQ(860.0)
                .endPoint()
                .beginPoint()
                .setP(100.0)
                .setMinQ(-864.55)
                .setMaxQ(946.25)
                .endPoint()
                .add();
        generatorHydro1.getTerminal().setP(-85.3570).setQ(-512.0814);

        Generator generatorHydro2 = s1vl2.newGenerator()
                .setId("GH2")
                .setEnergySource(EnergySource.HYDRO)
                .setMinP(0.0)
                .setMaxP(200.0)
                .setVoltageRegulatorOn(true)
                .setTargetP(90)
                .setTargetV(400.0)
                .setTargetQ(512.081)
                .setNode(9)
                .add();
        generatorHydro2.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(0.0)
                .setMinQ(-556.8)
                .setMaxQ(557.4)
                .endPoint()
                .beginPoint()
                .setP(200.0)
                .setMinQ(-553.514)
                .setMaxQ(536.4)
                .endPoint()
                .add();
        generatorHydro2.getTerminal().setP(-90.0).setQ(-512.0814);

        Generator generatorHydro3 = s1vl2.newGenerator()
                .setId("GH3")
                .setEnergySource(EnergySource.HYDRO)
                .setMinP(0.0)
                .setMaxP(200.0)
                .setVoltageRegulatorOn(true)
                .setTargetP(155.714)
                .setTargetV(400)
                .setTargetQ(512.081)
                .setNode(11)
                .add();
        generatorHydro3.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(0.0)
                .setMinQ(-680.6)
                .setMaxQ(688.1)
                .endPoint()
                .beginPoint()
                .setP(200.0)
                .setMinQ(-681.725)
                .setMaxQ(716.3500004)
                .endPoint()
                .add();
        generatorHydro3.getTerminal().setP(-155.7140).setQ(-512.0814);

        // Connect three loads on the bbs 2, with a possibility to connect them onto bbs 1
        createSwitch(s1vl2, "S1VL2_BBS1_LD2_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 0, 12);
        createSwitch(s1vl2, "S1VL2_BBS1_LD3_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 0, 14);
        createSwitch(s1vl2, "S1VL2_BBS1_LD4_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 0, 16);
        createSwitch(s1vl2, "S1VL2_BBS2_LD2_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 1, 12);
        createSwitch(s1vl2, "S1VL2_BBS2_LD3_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 1, 14);
        createSwitch(s1vl2, "S1VL2_BBS2_LD4_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 1, 16);
        createSwitch(s1vl2, "S1VL2_LD2_BREAKER", SwitchKind.BREAKER, false, 12, 13);
        createSwitch(s1vl2, "S1VL2_LD3_BREAKER", SwitchKind.BREAKER, false, 14, 15);
        createSwitch(s1vl2, "S1VL2_LD4_BREAKER", SwitchKind.BREAKER, false, 16, 17);

        Load load2 = s1vl2.newLoad()
                .setId("LD2")
                .setLoadType(LoadType.UNDEFINED)
                .setP0(60)
                .setQ0(5)
                .setNode(13)
                .add();
        load2.getTerminal().setP(60.0).setQ(5.0);

        Load load3 = s1vl2.newLoad()
                .setId("LD3")
                .setLoadType(LoadType.UNDEFINED)
                .setP0(60)
                .setQ0(5)
                .setNode(15)
                .add();
        load3.getTerminal().setP(60.0).setQ(5.0);

        Load load4 = s1vl2.newLoad()
                .setId("LD4")
                .setLoadType(LoadType.UNDEFINED)
                .setP0(40)
                .setQ0(5)
                .setNode(17)
                .add();
        load4.getTerminal().setP(40.0).setQ(5.0);

        // Connect a shunt on the BBS1, with a possibility to connect it to BBS2
        createSwitch(s1vl2, "S1VL2_BBS1_SHUNT_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 18);
        createSwitch(s1vl2, "S1VL2_BBS2_SHUNT_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 1, 18);
        createSwitch(s1vl2, "S1VL2_SHUNT_BREAKER", SwitchKind.BREAKER, false, 18, 19);

        ShuntCompensator shunt = s1vl2.newShuntCompensator()
                .setId("SHUNT")
                .setNode(19)
                .setSectionCount(1)
                .newLinearModel().setMaximumSectionCount(1).setBPerSection(-0.012).add()
                .add();
        shunt.getTerminal().setQ(1920.0);

        createSwitch(s1vl2, "S1VL2_BBS1_LCC1_DISCONNECTOR", SwitchKind.DISCONNECTOR, true, 0, 20);
        createSwitch(s1vl2, "S1VL2_BBS2_LCC1_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 1, 20);
        createSwitch(s1vl2, "S1VL2_LCC1_BREAKER", SwitchKind.BREAKER, false, 20, 21);

        LccConverterStation lcc1 = s1vl2.newLccConverterStation()
                .setId("LCC1")
                .setName("LCC1")
                .setNode(21)
                .setLossFactor(1.1f)
                .setPowerFactor(0.6f)
                .add();
        lcc1.getTerminal().setP(80.8800);

        // Add a coupler between the two busbar sections
        createSwitch(s1vl2, "S1VL2_BBS1_COUPLER_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 22);
        createSwitch(s1vl2, "S1VL2_BBS2_COUPLER_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 1, 23);
        createSwitch(s1vl2, "S1VL2_COUPLER", SwitchKind.BREAKER, false, 22, 23);

        // Connect a thermal generator on the second substation
        createSwitch(s2vl1, "S2VL1_BBS_GTH1_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 1);
        createSwitch(s2vl1, "S2VL1_GTH1_BREAKER", SwitchKind.BREAKER, false, 1, 2);
        Generator generatorThermal1 = s2vl1.newGenerator()
                .setId("GTH1")
                .setEnergySource(EnergySource.THERMAL)
                .setMinP(0.0)
                .setMaxP(100.0)
                .setVoltageRegulatorOn(false)
                .setTargetP(100.0)
                .setTargetV(400)
                .setTargetQ(70)
                .setNode(2)
                .add();
        generatorThermal1.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(0.0)
                .setMinQ(-76.8)
                .setMaxQ(77.4)
                .endPoint()
                .beginPoint()
                .setP(100.0)
                .setMinQ(-73.514)
                .setMaxQ(76.4)
                .endPoint()
                .add();
        generatorThermal1.getTerminal().setP(-100.0).setQ(-70.0);

        // Connect a second VSC station on the second substation
        createSwitch(s2vl1, "S2VL1_BBS_VSC2_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 3);
        createSwitch(s2vl1, "S2VL1_VSC2_BREAKER", SwitchKind.BREAKER, false, 3, 4);
        VscConverterStation vsc2 = s2vl1.newVscConverterStation()
                .setId("VSC2")
                .setName("VSC2")
                .setNode(4)
                .setLossFactor(1.1f)
                .setReactivePowerSetpoint(120)
                .setVoltageSetpoint(0)
                .setVoltageRegulatorOn(false)
                .add();
        vsc2.newMinMaxReactiveLimits()
                .setMinQ(-400.0)
                .setMaxQ(500.0)
                .add();
        vsc2.getTerminal().setP(-9.8900).setQ(-120.0);

        // The substations 1 and 2 are linked through an HVDC line
        network.newHvdcLine()
                .setId("HVDC1")
                .setName("HVDC1")
                .setConverterStationId1("VSC1")
                .setConverterStationId2("VSC2")
                .setR(1)
                .setNominalV(400)
                .setConvertersMode(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER)
                .setMaxP(300.0)
                .setActivePowerSetpoint(10)
                .add();

        // The substations 2 and 3 are connected through a line
        createSwitch(s2vl1, "S2VL1_BBS_LINES2S3_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 5);
        createSwitch(s2vl1, "S2VL1_LINES2S3_BREAKER", SwitchKind.BREAKER, false, 5, 6);
        createSwitch(s3vl1, "S3VL1_BBS_LINES2S3_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 1);
        createSwitch(s3vl1, "S3VL1_LINES2S3_BREAKER", SwitchKind.BREAKER, false, 1, 2);
        Line lineS2S3 = network.newLine()
                .setId("LINE_S2S3")
                .setR(0.009999999)
                .setX(19.100000024)
                .setG1(0.0)
                .setB1(0.0)
                .setG2(0.0)
                .setB2(0.0)
                .setNode1(6)
                .setVoltageLevel1("S2VL1")
                .setNode2(2)
                .setVoltageLevel2(S3VL1)
                .add();
        lineS2S3.getTerminal1().setP(109.8893).setQ(190.0229);
        lineS2S3.getTerminal2().setP(-109.8864).setQ(-184.5171);

        // Connect a load onto the third substation
        createSwitch(s3vl1, "S3VL1_BBS_LD5_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 3);
        createSwitch(s3vl1, "S3VL1_LD5_BREAKER", SwitchKind.BREAKER, false, 3, 4);
        Load load5 = s3vl1.newLoad()
                .setId("LD5")
                .setLoadType(LoadType.UNDEFINED)
                .setP0(200)
                .setQ0(5)
                .setNode(4)
                .add();
        load5.getTerminal().setP(200.0).setQ(5.0);

        // Connect a thermal generator onto the third substation
        createSwitch(s3vl1, "S3VL1_BBS_GTH2_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 5);
        createSwitch(s3vl1, "S3VL1_GTH2_BREAKER", SwitchKind.BREAKER, false, 5, 6);
        Generator generatorThermal2 = s3vl1.newGenerator()
                .setId("GTH2")
                .setEnergySource(EnergySource.THERMAL)
                .setMinP(0.0)
                .setMaxP(400.0)
                .setVoltageRegulatorOn(true)
                .setTargetP(250.9944)
                .setTargetV(400)
                .setTargetQ(71.8487)
                .setNode(6)
                .add();
        generatorThermal2.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(0.0)
                .setMinQ(-169.3)
                .setMaxQ(200.0)
                .endPoint()
                .beginPoint()
                .setP(400.0)
                .setMinQ(-174.55)
                .setMaxQ(176.25)
                .endPoint()
                .add();
        generatorThermal2.getTerminal().setP(-250.9944).setQ(71.8487);

        // The stations 3 and 4 are linked by a line
        createSwitch(s3vl1, "S3VL1_BBS_LINES3S4_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 7);
        createSwitch(s3vl1, "S3VL1_LINES3S4_BREAKER", SwitchKind.BREAKER, false, 7, 8);
        createSwitch(s4vl1, "S4VL1_BBS_LINES3S4_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 5);
        createSwitch(s4vl1, "S4VL1_LINES3S4_BREAKER", SwitchKind.BREAKER, false, 5, 6);
        Line lineS3S4 = network.newLine()
                .setId("LINE_S3S4")
                .setR(0.009999999)
                .setX(13.100000024)
                .setG1(0.0)
                .setB1(0.0)
                .setG2(0.0)
                .setB2(0.0)
                .setNode1(8)
                .setVoltageLevel1(S3VL1)
                .setNode2(6)
                .setVoltageLevel2("S4VL1")
                .add();
        lineS3S4.getTerminal1().setP(240.0036).setQ(2.1751);
        lineS3S4.getTerminal2().setP(-240.0).setQ(2.5415);
        lineS3S4.newCurrentLimits1()
                .setPermanentLimit(931.0)
                .add();
        lineS3S4.newCurrentLimits2()
                .setPermanentLimit(931.0)
                .beginTemporaryLimit()
                .setName("IST")
                .setValue(1640.0)
                .setFictitious(true)
                .setAcceptableDuration(Integer.MAX_VALUE)
                .endTemporaryLimit()
                .beginTemporaryLimit()
                .setName("LD71")
                .setValue(Double.MAX_VALUE)
                .setAcceptableDuration(60)
                .endTemporaryLimit()
                .add();

        // Connect an LCC station to the third substation
        createSwitch(s3vl1, "S3VL1_BBS_LCC2_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 9);
        createSwitch(s3vl1, "S3VL1_LCC2_BREAKER", SwitchKind.BREAKER, false, 9, 10);
        LccConverterStation lcc2 = s3vl1.newLccConverterStation()
                .setId("LCC2")
                .setName("LCC2")
                .setNode(10)
                .setLossFactor(1.1f)
                .setPowerFactor(0.6f)
                .add();
        lcc2.getTerminal().setP(-79.1200);

        // The substations 1 and 3 are linked by an HVDC line
        network.newHvdcLine()
                .setId("HVDC2")
                .setName("HVDC2")
                .setConverterStationId1("LCC1")
                .setConverterStationId2("LCC2")
                .setR(1)
                .setNominalV(400)
                .setConvertersMode(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER)
                .setMaxP(300.0)
                .setActivePowerSetpoint(80)
                .add();

        // Connect a load to the fourth substation
        createSwitch(s4vl1, "S4VL1_BBS_LD6_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 1);
        createSwitch(s4vl1, "S4VL1_LD6_BREAKER", SwitchKind.BREAKER, false, 1, 2);
        Load load6 = s4vl1.newLoad()
                .setId("LD6")
                .setLoadType(LoadType.UNDEFINED)
                .setP0(240)
                .setQ0(10)
                .setNode(2)
                .add();
        load6.getTerminal().setP(240.0).setQ(10.0);

        // Connect a static var compensator to the fourth substation
        createSwitch(s4vl1, "S4VL1_BBS_SVC_DISCONNECTOR", SwitchKind.DISCONNECTOR, false, 0, 3);
        createSwitch(s4vl1, "S4VL1_SVC_BREAKER", SwitchKind.BREAKER, false, 3, 4);
        StaticVarCompensator svc = s4vl1.newStaticVarCompensator()
                .setId("SVC")
                .setNode(4)
                .setBmin(-5e-2)
                .setBmax(5e-2)
                .setRegulationMode(StaticVarCompensator.RegulationMode.VOLTAGE)
                .setVoltageSetpoint(400)
                .add();
        svc.getTerminal().setQ(-12.5415);

        busbarSectionS1VL1.getTerminal().getBusView().getBus()
                .setV(224.6139)
                .setAngle(2.2822);
        busbarSectionS1VL21.getTerminal().getBusView().getBus()
                .setV(400.0)
                .setAngle(0.0);
        busbarSectionS1VL22.getTerminal().getBusView().getBus()
                .setV(400.0)
                .setAngle(0.0);
        busbarSectionS2VL1.getTerminal().getBusView().getBus()
                .setV(408.8470)
                .setAngle(0.7347);
        busbarSectionS3VL1.getTerminal().getBusView().getBus()
                .setV(400.0)
                .setAngle(0.0);
        busbarSectionS4VL1.getTerminal().getBusView().getBus()
                .setV(400.0)
                .setAngle(-1.1259);

        return network;

    }

    private static void createSwitch(VoltageLevel vl, String id, SwitchKind kind, boolean open, int node1, int node2) {
        vl.getNodeBreakerView().newSwitch()
                .setId(id)
                .setName(id)
                .setKind(kind)
                .setRetained(kind.equals(SwitchKind.BREAKER))
                .setOpen(open)
                .setFictitious(false)
                .setNode1(node1)
                .setNode2(node2)
                .add();
    }
}