BatteryNetworkFactory.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.network.test;

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

import java.util.Objects;

/**
 * @author Ghiles Abdellah {@literal <ghiles.abdellah at rte-france.com>}
 */
public final class BatteryNetworkFactory {

    private static final String VLGEN = "VLGEN";
    private static final String VLBAT = "VLBAT";

    private BatteryNetworkFactory() {
    }

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

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

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

        // 2 Substations
        Substation p1 = network.newSubstation()
                .setId("P1")
                .setCountry(Country.FR)
                .setTso("R")
                .setGeographicalTags("A")
                .add();
        Substation p2 = network.newSubstation()
                .setId("P2")
                .setCountry(Country.FR)
                .setTso("R")
                .setGeographicalTags("B")
                .add();

        // 2 VoltageLevels
        VoltageLevel vlgen = p1.newVoltageLevel()
                .setId(VLGEN)
                .setNominalV(400)
                .setTopologyKind(TopologyKind.BUS_BREAKER)
                .add();
        VoltageLevel vlbat = p2.newVoltageLevel()
                .setId(VLBAT)
                .setNominalV(400)
                .setTopologyKind(TopologyKind.BUS_BREAKER)
                .add();

        // 2 Bus
        Bus ngen = vlgen.getBusBreakerView().newBus()
                .setId("NGEN")
                .add();
        Bus nbat = vlbat.getBusBreakerView().newBus()
                .setId("NBAT")
                .add();

        // 2 lines
        network.newLine()
                .setId("NHV1_NHV2_1")
                .setVoltageLevel1(vlgen.getId())
                .setBus1(ngen.getId())
                .setConnectableBus1(ngen.getId())
                .setVoltageLevel2(vlbat.getId())
                .setBus2(nbat.getId())
                .setConnectableBus2(nbat.getId())
                .setR(3.0)
                .setX(33.0)
                .setG1(0.0)
                .setB1(386E-6 / 2)
                .setG2(0.0)
                .setB2(386E-6 / 2)
                .add();
        network.newLine()
                .setId("NHV1_NHV2_2")
                .setVoltageLevel1(vlgen.getId())
                .setBus1(ngen.getId())
                .setConnectableBus1(ngen.getId())
                .setVoltageLevel2(vlbat.getId())
                .setBus2(nbat.getId())
                .setConnectableBus2(nbat.getId())
                .setR(3.0)
                .setX(33.0)
                .setG1(0.0)
                .setB1(386E-6 / 2)
                .setG2(0.0)
                .setB2(386E-6 / 2)
                .add();

        // Add Components
        Generator generator = vlgen.newGenerator()
                .setId("GEN")
                .setBus(ngen.getId())
                .setConnectableBus(ngen.getId())
                .setEnergySource(EnergySource.OTHER)
                .setMinP(-9999.99)
                .setMaxP(9999.99)
                .setVoltageRegulatorOn(true)
                .setTargetV(24.5)
                .setTargetP(607.0)
                .setTargetQ(301.0)
                .add();
        generator.getTerminal().setP(-605);
        generator.getTerminal().setQ(-225);
        generator.newMinMaxReactiveLimits()
                .setMinQ(-9999.99)
                .setMaxQ(9999.99)
                .add();
        Battery battery = vlbat.newBattery()
                .setId("BAT")
                .setBus(nbat.getId())
                .setConnectableBus(nbat.getId())
                .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);
        Battery battery2 = vlbat.newBattery()
                .setId("BAT2")
                .setBus(nbat.getId())
                .setConnectableBus(nbat.getId())
                .setTargetP(100)
                .setTargetQ(200)
                .setMinP(-200)
                .setMaxP(200)
                .add();
        battery2.newReactiveCapabilityCurve()
                .beginPoint()
                .setP(0)
                .setMinQ(-59.3)
                .setMaxQ(60.0)
                .endPoint()
                .beginPoint()
                .setP(70.0)
                .setMinQ(-54.55)
                .setMaxQ(46.25)
                .endPoint()
                .add();
        battery2.getTerminal().setP(-605);
        battery2.getTerminal().setQ(-225);
        vlbat.newLoad()
                .setId("LOAD")
                .setLoadType(LoadType.UNDEFINED)
                .setBus(nbat.getId())
                .setConnectableBus(nbat.getId())
                .setP0(600.0)
                .setQ0(200.0)
                .add();

        return network;
    }
}