Test3WTPhaseTapChanger.java

/**
 * Copyright (c) 2025, 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.sld.iidm;

import com.powsybl.iidm.network.PhaseTapChanger;
import com.powsybl.iidm.network.ThreeWindingsTransformer;
import com.powsybl.iidm.network.ThreeWindingsTransformer.Leg;
import com.powsybl.iidm.network.test.ThreeWindingsTransformerNetworkFactory;
import com.powsybl.sld.builders.NetworkGraphBuilder;
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * @author Giovanni Ferrari {@literal <giovanni.ferrari at soft.it>}
 */
class Test3WTPhaseTapChanger extends AbstractTestCaseIidm {

    @BeforeEach
    public void setUp() {
        network = ThreeWindingsTransformerNetworkFactory.create();
        network.getThreeWindingsTransformer("3WT").getLeg1().getTerminal().setP(-2800.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);
        graphBuilder = new NetworkGraphBuilder(network);
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnLeg1() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg1());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel1Leg.svg");
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnLeg2() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg2());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel1Leg2.svg");
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnLeg3() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg3());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel1Leg3.svg");
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnLegs1and2() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg1());
        addPhaseTapChanger(twt.getLeg2());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel2Legs.svg");
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnLegs2and3() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg2());
        addPhaseTapChanger(twt.getLeg3());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel2Legs23.svg");
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnLegs1and3() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg1());
        addPhaseTapChanger(twt.getLeg3());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel2Legs13.svg");
    }

    @Test
    void testVoltageLevelGraph3wtWithPhaseTagChangerOnAllLegs() {
        ThreeWindingsTransformer twt = network.getThreeWindingsTransformer("3WT");
        addPhaseTapChanger(twt.getLeg1());
        addPhaseTapChanger(twt.getLeg2());
        addPhaseTapChanger(twt.getLeg3());
        testSvg("/Test3WTPhaseTapChangerVoltageLevel3Legs.svg");
    }

    private void addPhaseTapChanger(Leg leg) {
        leg.newPhaseTapChanger()
                .setTapPosition(1)
                .setRegulationTerminal(leg.getTerminal())
                .setRegulationMode(PhaseTapChanger.RegulationMode.FIXED_TAP)
                .setRegulationValue(200)
                .beginStep()
                .setAlpha(-20.0)
                .setRho(1.0)
                .setR(0.0)
                .setX(0.0)
                .setG(0.0)
                .setB(0.0)
                .endStep()
                .beginStep()
                .setAlpha(0.0)
                .setRho(1.0)
                .setR(0.0)
                .setX(0.0)
                .setG(0.0)
                .setB(0.0)
                .endStep()
                .beginStep()
                .setAlpha(20.0)
                .setRho(1.0)
                .setR(0.0)
                .setX(0.0)
                .setG(0.0)
                .setB(0.0)
                .endStep()
                .add();
    }

    private void testSvg(String svgName) {
        graphBuilder = new NetworkGraphBuilder(network);
        // Build substation graph and run layout
        VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph("VL_132");
        voltageLevelGraphLayout(g);

        assertEquals(toString(svgName), toSVG(g, svgName));
    }
}