ReactiveInjectionNetworkFactory.java

package com.powsybl.openloadflow.network;

import com.powsybl.iidm.network.Bus;
import com.powsybl.iidm.network.EnergySource;
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.Network;

/**
 * A Network factory of various combination of manually controlled reactive injections
 */
public class ReactiveInjectionNetworkFactory extends AbstractLoadFlowNetworkFactory {

    static Generator createGeneratorPQ(Bus b, String id, double p, double q) {
        Generator g = b.getVoltageLevel()
                .newGenerator()
                .setId(id)
                .setBus(b.getId())
                .setConnectableBus(b.getId())
                .setEnergySource(EnergySource.OTHER)
                .setMinP(0)
                .setMaxP(2 * p)
                .setTargetP(p)
                .setTargetQ(q)
                .setVoltageRegulatorOn(false)
                .add();
        g.getTerminal().setP(-p).setQ(-q);
        return g;
    }

    /**
     * <pre>
     * g1 (PV)           g2(PQ)
     * |                 |
     * b1                b2
     * |                 |
     * b3 ---------------+
     * |
     * l3 (PQ)
     * </pre>
     * @return
     */
    public static Network createTwoGensOneLoad() {
        Network network = Network.create("test", "code");
        Bus b1 = createBus(network, "b1", 10);
        Bus b2 = createBus(network, "b2", 10);
        Bus b3 = createBus(network, "b3", 10);
        Generator g1 = createGenerator(b1, "g1", 10d, 10d);
        Generator g2 = createGeneratorPQ(b2, "g2", 10d, 10d);
        Line l13 = createLine(network, b1, b3, "l13", 0.1d);
        Line l23 = createLine(network, b2, b3, "l23", 0.1d);
        Load l3 = createLoad(b3, "l3", 20, 0);
        return network;
    }

}