MetrixTutorialSixBusesSecurityAnalysisFactory.java

package com.powsybl.openloadflow.network;

import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.serde.test.MetrixTutorialSixBusesFactory;

import java.util.Set;

public class MetrixTutorialSixBusesSecurityAnalysisFactory extends AbstractLoadFlowNetworkFactory {

    public static Network createWithCurrentLimits() {
        Network network = MetrixTutorialSixBusesFactory.create();

        Set<String> lowLimitLines = Set.of("S_SO_1", "S_SO_2");
        network.getGenerator("SO_G2")
                .setTargetP(680.0);

        // change resistance
        for (Line line : network.getLines()) {
            line.setR(0.2);
            if (lowLimitLines.contains(line.getId())) {
                line.newCurrentLimits1().setPermanentLimit(350.0).add();
                line.newCurrentLimits2().setPermanentLimit(350.0).add();
            } else {
                line.newCurrentLimits1().setPermanentLimit(400.0).add();
                line.newCurrentLimits2().setPermanentLimit(400.0).add();
            }
        }

        network.getTwoWindingsTransformer("NE_NO_1").setR(0.1);
        return network;
    }

    public static Network createWithCurrentLimits2() {
        Network network = MetrixTutorialSixBusesFactory.create();
        network.getVoltageLevel("SE_poste").setLowVoltageLimit(375);

        Set<String> specialLimitLines = Set.of("S_SE_1", "S_SE_2", "SE_NE_1", "SE_NE_2");
        network.getGenerator("SO_G2")
                .setTargetP(120.0);
        network.getGenerator("N_G")
                .setVoltageRegulatorOn(false)
                .setTargetP(600.0);
        network.getGenerator("SE_G")
                .setVoltageRegulatorOn(false)
                .setTargetP(50.0);
        network.getLoad("SE_L1")
                .setP0(300.0);

        // change resistance
        for (Line line : network.getLines()) {
            if (specialLimitLines.contains(line.getId())) {
                line.setR(90.0);
                line.newCurrentLimits1().setPermanentLimit(2000.0).add();
                line.newCurrentLimits2().setPermanentLimit(2000.0).add();
            } else {
                line.setR(0.2);
                line.newCurrentLimits1().setPermanentLimit(1000.0).add();
                line.newCurrentLimits2().setPermanentLimit(1000.0).add();
            }
        }

        network.getTwoWindingsTransformer("NE_NO_1").setR(0.1);
        return network;
    }

    public static Network createWithActivePowerLimits() {
        Network network = MetrixTutorialSixBusesFactory.create();

        network.getGenerator("SO_G2")
                .setTargetP(680.0);
        Set<String> lowLimitLines = Set.of("S_SO_1", "S_SO_2");
        // change resistance and add limits to all lines
        for (Line line : network.getLines()) {
            line.setR(0.2);
            if (lowLimitLines.contains(line.getId())) {
                line.newActivePowerLimits1().setPermanentLimit(250.0).add();
                line.newActivePowerLimits2().setPermanentLimit(250.0).add();
            } else {
                line.newActivePowerLimits1().setPermanentLimit(300.0).add();
                line.newActivePowerLimits2().setPermanentLimit(300.0).add();
            }
        }
        network.getTwoWindingsTransformer("NE_NO_1")
                .setR(0.1);

        return network;
    }

    public static Network createWithApparentPowerLimits() {
        Network network = MetrixTutorialSixBusesFactory.create();

        network.getGenerator("SO_G2")
                .setTargetP(680.0);
        Set<String> lowLimitLines = Set.of("S_SO_1", "S_SO_2");

        for (Line line : network.getLines()) {
            line.setR(0.2);
            if (lowLimitLines.contains(line.getId())) {
                line.newApparentPowerLimits1().setPermanentLimit(250.0).add();
                line.newApparentPowerLimits2().setPermanentLimit(250.0).add();
            } else {
                line.newApparentPowerLimits1().setPermanentLimit(300.0).add();
                line.newApparentPowerLimits2().setPermanentLimit(300.0).add();
            }
        }
        network.getTwoWindingsTransformer("NE_NO_1")
                .setR(0.1);
        return network;
    }
}