AbstractTapChangerHolderTest.java
/**
* Copyright (c) 2024, 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.tck;
import com.powsybl.iidm.network.*;
import org.junit.jupiter.api.Test;
import static com.powsybl.iidm.network.PhaseTapChanger.RegulationMode.FIXED_TAP;
import static com.powsybl.iidm.network.RatioTapChanger.RegulationMode.VOLTAGE;
import static com.powsybl.iidm.network.TopologyKind.BUS_BREAKER;
import static com.powsybl.iidm.network.TwoSides.ONE;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Beno��t Chiquet {@literal <benoit.chiquet at rte-france.com>}
*/
public abstract class AbstractTapChangerHolderTest {
@Test
void shouldReuseCopiedPhaseTapChangerPropertiesFixedTapExample() {
Network network = exampleNetwork();
PhaseTapChanger existingPhaseTapChanger = network.getTwoWindingsTransformer("transformer")
.newPhaseTapChanger()
.setTapPosition(1)
.setRegulationValue(12)
.setRegulationMode(FIXED_TAP)
.setLowTapPosition(0)
.setRegulating(false)
.setTargetDeadband(3)
.beginStep().setAlpha(1).setRho(2).setR(3).setG(4).setB(5).setX(6)
.endStep()
.beginStep().setAlpha(2).setRho(3).setR(4).setG(5).setB(6).setX(7)
.endStep()
.beginStep().setAlpha(3).setRho(4).setR(5).setG(6).setB(7).setX(8)
.endStep()
.add();
PhaseTapChanger newPhaseTapChanger = network.getTwoWindingsTransformer("transformer2")
.newPhaseTapChanger(existingPhaseTapChanger)
.add();
assertEquals(existingPhaseTapChanger.getTapPosition(), newPhaseTapChanger.getTapPosition());
assertEquals(existingPhaseTapChanger.getLowTapPosition(), newPhaseTapChanger.getLowTapPosition());
assertEquals(existingPhaseTapChanger.getRegulationValue(), newPhaseTapChanger.getRegulationValue());
assertEquals(existingPhaseTapChanger.getRegulationMode(), newPhaseTapChanger.getRegulationMode());
assertEquals(existingPhaseTapChanger.isRegulating(), newPhaseTapChanger.isRegulating());
assertEquals(existingPhaseTapChanger.getTargetDeadband(), newPhaseTapChanger.getTargetDeadband());
newPhaseTapChanger.getAllSteps().forEach((tap, newStep) -> {
PhaseTapChangerStep existingStep = existingPhaseTapChanger.getStep(tap);
assertEquals(existingStep.getAlpha(), newStep.getAlpha());
assertEquals(existingStep.getRho(), newStep.getRho());
assertEquals(existingStep.getR(), newStep.getR());
assertEquals(existingStep.getG(), newStep.getG());
assertEquals(existingStep.getB(), newStep.getB());
assertEquals(existingStep.getX(), newStep.getX());
});
}
@Test
void shouldReuseCopiedPhaseTapChangerPropertiesActivePowerControlExample() {
Network network = exampleNetwork();
PhaseTapChanger existingPhaseTapChanger = network.getTwoWindingsTransformer("transformer")
.newPhaseTapChanger()
.setTapPosition(1)
.setRegulationValue(12)
.setRegulationMode(PhaseTapChanger.RegulationMode.ACTIVE_POWER_CONTROL)
.setRegulationTerminal(network.getTwoWindingsTransformer("transformer").getTerminal(ONE))
.setLowTapPosition(0)
.setRegulating(false)
.setTargetDeadband(3)
.beginStep().setAlpha(1).setRho(2).setR(3).setG(4).setB(5).setX(6)
.endStep()
.beginStep().setAlpha(2).setRho(3).setR(4).setG(5).setB(6).setX(7)
.endStep()
.beginStep().setAlpha(3).setRho(4).setR(5).setG(6).setB(7).setX(8)
.endStep()
.add();
PhaseTapChanger newPhaseTapChanger = network.getTwoWindingsTransformer("transformer2")
.newPhaseTapChanger(existingPhaseTapChanger)
.add();
assertEquals(existingPhaseTapChanger.getTapPosition(), newPhaseTapChanger.getTapPosition());
assertEquals(existingPhaseTapChanger.getLowTapPosition(), newPhaseTapChanger.getLowTapPosition());
assertEquals(existingPhaseTapChanger.getRegulationValue(), newPhaseTapChanger.getRegulationValue());
assertEquals(existingPhaseTapChanger.getRegulationMode(), newPhaseTapChanger.getRegulationMode());
assertEquals(existingPhaseTapChanger.isRegulating(), newPhaseTapChanger.isRegulating());
assertEquals(existingPhaseTapChanger.getTargetDeadband(), newPhaseTapChanger.getTargetDeadband());
assertEquals(existingPhaseTapChanger.getRegulationTerminal(), newPhaseTapChanger.getRegulationTerminal());
newPhaseTapChanger.getAllSteps().forEach((tap, newStep) -> {
PhaseTapChangerStep existingStep = existingPhaseTapChanger.getStep(tap);
assertEquals(existingStep.getAlpha(), newStep.getAlpha());
assertEquals(existingStep.getRho(), newStep.getRho());
assertEquals(existingStep.getR(), newStep.getR());
assertEquals(existingStep.getG(), newStep.getG());
assertEquals(existingStep.getB(), newStep.getB());
assertEquals(existingStep.getX(), newStep.getX());
});
}
@Test
void shouldReuseCopiedRatioTapChangerProperties() {
Network network = exampleNetwork();
RatioTapChanger existingRatioTapChanger = network.getTwoWindingsTransformer("transformer").newRatioTapChanger()
.setTapPosition(1)
.setTargetV(400)
.setRegulationValue(12)
.setRegulationMode(VOLTAGE)
.setLowTapPosition(0)
.setRegulating(false)
.setLoadTapChangingCapabilities(true)
.setTargetDeadband(3)
.beginStep().setRho(2).setR(3).setG(4).setB(5).setX(6)
.endStep()
.beginStep().setRho(3).setR(4).setG(5).setB(6).setX(7)
.endStep()
.beginStep().setRho(4).setR(5).setG(6).setB(7).setX(8)
.endStep()
.add();
RatioTapChanger newRatioTapChanger = network.getTwoWindingsTransformer("transformer2")
.newRatioTapChanger(existingRatioTapChanger)
.add();
assertEquals(existingRatioTapChanger.getTapPosition(), newRatioTapChanger.getTapPosition());
assertEquals(existingRatioTapChanger.getLowTapPosition(), newRatioTapChanger.getLowTapPosition());
assertEquals(existingRatioTapChanger.getRegulationValue(), newRatioTapChanger.getRegulationValue());
assertEquals(existingRatioTapChanger.getRegulationMode(), newRatioTapChanger.getRegulationMode());
assertEquals(existingRatioTapChanger.isRegulating(), newRatioTapChanger.isRegulating());
assertEquals(existingRatioTapChanger.getTargetDeadband(), newRatioTapChanger.getTargetDeadband());
assertEquals(existingRatioTapChanger.getRegulationTerminal(), newRatioTapChanger.getRegulationTerminal());
assertEquals(existingRatioTapChanger.getTargetV(), newRatioTapChanger.getTargetV());
assertEquals(existingRatioTapChanger.hasLoadTapChangingCapabilities(), newRatioTapChanger.hasLoadTapChangingCapabilities());
newRatioTapChanger.getAllSteps().forEach((tap, newStep) -> {
RatioTapChangerStep existingStep = existingRatioTapChanger.getStep(tap);
assertEquals(existingStep.getRho(), newStep.getRho());
assertEquals(existingStep.getR(), newStep.getR());
assertEquals(existingStep.getG(), newStep.getG());
assertEquals(existingStep.getB(), newStep.getB());
assertEquals(existingStep.getX(), newStep.getX());
});
}
Network exampleNetwork() {
Network network = Network.create("test", "test");
Substation substation = network.newSubstation()
.setId("substation")
.setCountry(Country.AD)
.add();
VoltageLevel vl1 = substation.newVoltageLevel()
.setId("vl1")
.setTopologyKind(BUS_BREAKER)
.setName("name")
.setNominalV(225)
.setLowVoltageLimit(200)
.setHighVoltageLimit(250)
.add();
vl1.getBusBreakerView().newBus().setId("bus1").add();
VoltageLevel vl2 = substation.newVoltageLevel()
.setId("vl2")
.setTopologyKind(BUS_BREAKER)
.setName("name")
.setNominalV(90)
.setLowVoltageLimit(80)
.setHighVoltageLimit(100)
.add();
vl2.getBusBreakerView().newBus().setId("bus2").add();
substation.newTwoWindingsTransformer()
.setId("transformer")
.setR(17)
.setX(10)
.setBus1("bus1")
.setBus2("bus2")
.add();
substation.newTwoWindingsTransformer()
.setId("transformer2")
.setR(12)
.setX(15)
.setBus1("bus1")
.setBus2("bus2")
.add();
return network;
}
}