ThreeWindingsTransformerNetworkFactory.java
/**
* Copyright (c) 2018, 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 Mathieu Bague {@literal <mathieu.bague at rte-france.com>}
*/
public final class ThreeWindingsTransformerNetworkFactory {
public static Network create() {
return create(NetworkFactory.findDefault());
}
public static Network create(NetworkFactory networkFactory) {
Objects.requireNonNull(networkFactory);
Network network = networkFactory.createNetwork("three-windings-transformer", "test");
network.setCaseDate(ZonedDateTime.parse("2018-03-05T13:30:30.486+01:00"));
Substation substation = network.newSubstation()
.setId("SUBSTATION")
.setCountry(Country.FR)
.add();
VoltageLevel vl1 = substation.newVoltageLevel()
.setId("VL_132")
.setNominalV(132.0)
.setLowVoltageLimit(118.8)
.setHighVoltageLimit(145.2)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add();
Bus bus132 = vl1.getBusBreakerView().newBus()
.setId("BUS_132")
.add();
bus132.setV(133.584).setAngle(-9.62);
vl1.newGenerator()
.setId("GEN_132")
.setBus("BUS_132")
.setMinP(0.0)
.setMaxP(140)
.setTargetP(7.2)
.setTargetV(135)
.setVoltageRegulatorOn(true)
.add();
VoltageLevel vl2 = substation.newVoltageLevel()
.setId("VL_33")
.setNominalV(33.0)
.setLowVoltageLimit(29.7)
.setHighVoltageLimit(36.3)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add();
Bus bus33 = vl2.getBusBreakerView().newBus()
.setId("BUS_33")
.add();
bus33.setV(34.881).setAngle(-15.24);
Load load33 = vl2.newLoad()
.setId("LOAD_33")
.setBus("BUS_33")
.setP0(11.2)
.setQ0(7.5)
.add();
load33.getTerminal()
.setP(11.2)
.setQ(7.5);
VoltageLevel vl3 = substation.newVoltageLevel()
.setId("VL_11")
.setNominalV(11.0)
.setLowVoltageLimit(9.9)
.setHighVoltageLimit(12.1)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add();
Bus bus11 = vl3.getBusBreakerView().newBus()
.setId("BUS_11")
.add();
bus11.setV(11.781).setAngle(-15.24);
Load load11 = vl3.newLoad()
.setId("LOAD_11")
.setBus("BUS_11")
.setP0(0.0)
.setQ0(-10.6)
.add();
load11.getTerminal()
.setP(0.0)
.setQ(-10.6);
ThreeWindingsTransformer twt = substation.newThreeWindingsTransformer()
.setId("3WT")
.setRatedU0(132.0)
.newLeg1()
.setR(17.424)
.setX(1.7424)
.setG(0.00573921028466483)
.setB(0.000573921028466483)
.setRatedU(132.0)
.setVoltageLevel(vl1.getId())
.setBus(bus132.getId())
.add()
.newLeg2()
.setR(1.089)
.setX(0.1089)
.setG(0.0)
.setB(0.0)
.setRatedU(33.0)
.setVoltageLevel(vl2.getId())
.setBus(bus33.getId())
.add()
.newLeg3()
.setR(0.121)
.setX(0.0121)
.setG(0.0)
.setB(0.0)
.setRatedU(11.0)
.setVoltageLevel(vl3.getId())
.setBus(bus11.getId())
.add()
.add();
twt.getLeg2().newRatioTapChanger()
.beginStep()
.setRho(0.9)
.setR(0.9801)
.setX(0.09801)
.setG(0.08264462809917356)
.setB(0.008264462809917356)
.endStep()
.beginStep()
.setRho(1.0)
.setR(1.089)
.setX(0.1089)
.setG(0.09182736455463728)
.setB(0.009182736455463728)
.endStep()
.beginStep()
.setRho(1.1)
.setR(1.1979)
.setX(0.11979)
.setG(0.10101010101010101)
.setB(0.010101010101010101)
.endStep()
.setTapPosition(2)
.setLoadTapChangingCapabilities(true)
.setRegulating(true)
.setRegulationMode(RatioTapChanger.RegulationMode.VOLTAGE)
.setRegulationValue(33.0)
.setTargetDeadband(0)
.setRegulationTerminal(load33.getTerminal())
.add();
twt.getLeg3().newRatioTapChanger()
.beginStep()
.setRho(0.9)
.setR(0.1089)
.setX(0.01089)
.setG(0.8264462809917356)
.setB(0.08264462809917356)
.endStep()
.beginStep()
.setRho(1.0)
.setR(0.121)
.setX(0.0121)
.setG(0.8264462809917356)
.setB(0.08264462809917356)
.endStep()
.beginStep()
.setRho(1.1)
.setR(0.1331)
.setX(0.01331)
.setG(0.9090909090909092)
.setB(0.09090909090909092)
.endStep()
.setTapPosition(0)
.setLoadTapChangingCapabilities(true)
.setRegulating(false)
.setRegulationMode(RatioTapChanger.RegulationMode.VOLTAGE)
.setRegulationValue(11.0)
.setRegulationTerminal(load11.getTerminal())
.add();
return network;
}
public static Network createWithUnsortedEnds(NetworkFactory networkFactory) {
Objects.requireNonNull(networkFactory);
Network network = networkFactory.createNetwork("three-windings-transformer-with-unsorted-ends", "test");
network.setCaseDate(ZonedDateTime.parse("2018-03-05T13:30:30.486+01:00"));
Substation substation = network.newSubstation()
.setId("SUBSTATION")
.setCountry(Country.FR)
.add();
VoltageLevel vl1 = substation.newVoltageLevel()
.setId("VL_132")
.setNominalV(132.0)
.setLowVoltageLimit(118.8)
.setHighVoltageLimit(145.2)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
vl1.getNodeBreakerView().newBusbarSection()
.setId("busbarSection_132")
.setName("busbarSection_132")
.setNode(0)
.add();
vl1.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(1)
.add();
vl1.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(2)
.add();
vl1.newGenerator()
.setId("GEN_132")
.setNode(1)
.setMinP(0.0)
.setMaxP(140)
.setTargetP(7.2)
.setTargetV(135)
.setVoltageRegulatorOn(true)
.add();
VoltageLevel vl2 = substation.newVoltageLevel()
.setId("VL_33")
.setNominalV(33.0)
.setLowVoltageLimit(29.7)
.setHighVoltageLimit(36.3)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
vl2.getNodeBreakerView().newBusbarSection()
.setId("busbarSection_33")
.setName("busbarSection_33")
.setNode(0)
.add();
vl2.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(1)
.add();
vl2.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(2)
.add();
Load load33 = vl2.newLoad()
.setId("LOAD_33")
.setNode(1)
.setP0(11.2)
.setQ0(7.5)
.add();
load33.getTerminal()
.setP(11.2)
.setQ(7.5);
VoltageLevel vl3 = substation.newVoltageLevel()
.setId("VL_11")
.setNominalV(11.0)
.setLowVoltageLimit(9.9)
.setHighVoltageLimit(12.1)
.setTopologyKind(TopologyKind.NODE_BREAKER)
.add();
vl3.getNodeBreakerView().newBusbarSection()
.setId("busbarSection_11")
.setName("busbarSection_11")
.setNode(0)
.add();
vl3.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(1)
.add();
vl3.getNodeBreakerView().newInternalConnection()
.setNode1(0)
.setNode2(2)
.add();
Load load11 = vl3.newLoad()
.setId("LOAD_11")
.setNode(1)
.setP0(0.0)
.setQ0(-10.6)
.add();
load11.getTerminal()
.setP(0.0)
.setQ(-10.6);
ThreeWindingsTransformer twt = substation.newThreeWindingsTransformer()
.setId("3WT")
.setRatedU0(132.0)
.newLeg1()
.setR(0.121)
.setX(0.0121)
.setG(0.0)
.setB(0.0)
.setRatedU(11.0)
.setVoltageLevel(vl3.getId())
.setNode(2)
.add()
.newLeg2()
.setR(17.424)
.setX(1.7424)
.setG(0.00573921028466483)
.setB(0.000573921028466483)
.setRatedU(132.0)
.setVoltageLevel(vl1.getId())
.setNode(2)
.add()
.newLeg3()
.setR(1.089)
.setX(0.1089)
.setG(0.0)
.setB(0.0)
.setRatedU(33.0)
.setVoltageLevel(vl2.getId())
.setNode(2)
.add()
.add();
twt.getLeg3().newRatioTapChanger()
.beginStep()
.setRho(0.9)
.setR(0.9801)
.setX(0.09801)
.setG(0.08264462809917356)
.setB(0.008264462809917356)
.endStep()
.beginStep()
.setRho(1.0)
.setR(1.089)
.setX(0.1089)
.setG(0.09182736455463728)
.setB(0.009182736455463728)
.endStep()
.beginStep()
.setRho(1.1)
.setR(1.1979)
.setX(0.11979)
.setG(0.10101010101010101)
.setB(0.010101010101010101)
.endStep()
.setTapPosition(2)
.setLoadTapChangingCapabilities(true)
.setRegulating(true)
.setRegulationMode(RatioTapChanger.RegulationMode.VOLTAGE)
.setRegulationValue(33.0)
.setTargetDeadband(0)
.setRegulationTerminal(load33.getTerminal())
.add();
twt.getLeg1().newRatioTapChanger()
.beginStep()
.setRho(0.9)
.setR(0.1089)
.setX(0.01089)
.setG(0.8264462809917356)
.setB(0.08264462809917356)
.endStep()
.beginStep()
.setRho(1.0)
.setR(0.121)
.setX(0.0121)
.setG(0.8264462809917356)
.setB(0.08264462809917356)
.endStep()
.beginStep()
.setRho(1.1)
.setR(0.1331)
.setX(0.01331)
.setG(0.9090909090909092)
.setB(0.09090909090909092)
.endStep()
.setTapPosition(0)
.setLoadTapChangingCapabilities(true)
.setRegulating(false)
.setRegulationMode(RatioTapChanger.RegulationMode.VOLTAGE)
.setRegulationValue(11.0)
.setRegulationTerminal(load11.getTerminal())
.add();
return network;
}
public static Network createWithCurrentLimits() {
Network network = create();
network.getThreeWindingsTransformer("3WT").getLeg1().newCurrentLimits()
.setPermanentLimit(1000.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(1200.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(1400.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg2().newCurrentLimits()
.setPermanentLimit(100.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(120.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(140.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg3().newCurrentLimits()
.setPermanentLimit(10.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(12.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(14.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
return network;
}
public static Network createWithUnsortedEndsAndCurrentLimits() {
Network network = createWithUnsortedEnds(NetworkFactory.findDefault());
network.getThreeWindingsTransformer("3WT").getLeg1().newCurrentLimits()
.setPermanentLimit(1000.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(1200.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(1400.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg2().newCurrentLimits()
.setPermanentLimit(100.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(120.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(140.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg3().newCurrentLimits()
.setPermanentLimit(10.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(12.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(14.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
return network;
}
public static Network createWithApparentPowerLimits() {
Network network = create();
network.getThreeWindingsTransformer("3WT").getLeg1().newApparentPowerLimits()
.setPermanentLimit(1000.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(1200.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(1400.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg2().newApparentPowerLimits()
.setPermanentLimit(100.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(120.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(140.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg3().newApparentPowerLimits()
.setPermanentLimit(10.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(12.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(14.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
return network;
}
public static Network createWithActivePowerLimits() {
Network network = create();
network.getThreeWindingsTransformer("3WT").getLeg1().newActivePowerLimits()
.setPermanentLimit(1000.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(1200.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(1400.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg2().newActivePowerLimits()
.setPermanentLimit(100.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(120.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(140.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
network.getThreeWindingsTransformer("3WT").getLeg3().newActivePowerLimits()
.setPermanentLimit(10.0)
.beginTemporaryLimit()
.setName("20'")
.setValue(12.0)
.setAcceptableDuration(20 * 60)
.endTemporaryLimit()
.beginTemporaryLimit()
.setName("10'")
.setValue(14.0)
.setAcceptableDuration(10 * 60)
.endTemporaryLimit()
.add();
return network;
}
public static Network createWithCurrentLimitsAndTerminalsPAndQ() {
Network network = createWithCurrentLimits();
network.getThreeWindingsTransformer("3WT").getLeg1().getTerminal().setP(1400.0).setQ(400.0);
network.getThreeWindingsTransformer("3WT").getLeg2().getTerminal().setP(1400.0).setQ(400.0);
network.getThreeWindingsTransformer("3WT").getLeg3().getTerminal().setP(1400.0).setQ(400.0);
return network;
}
private ThreeWindingsTransformerNetworkFactory() {
}
}