RegulatingTerminalConversionTest.java

/**
 * Copyright (c) 2022, 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.cgmes.conversion.test;

import com.powsybl.cgmes.conformity.Cgmes3ModifiedCatalog;
import com.powsybl.cgmes.conformity.CgmesConformity1ModifiedCatalog;
import com.powsybl.cgmes.conversion.Conversion;
import com.powsybl.cgmes.model.GridModelReference;
import com.powsybl.iidm.network.*;
import org.junit.jupiter.api.Test;

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

/**
 * @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
 * @author Jos�� Antonio Marqu��s {@literal <marquesja at aia.es>}
 */
class RegulatingTerminalConversionTest {

    @Test
    void microGridBaseCaseRegulatingTerminalsDefinedOnSwitches() {
        Conversion.Config config = new Conversion.Config();
        Network n = networkModel(Cgmes3ModifiedCatalog.microGridBaseCaseRegulatingTerminalsDefinedOnSwitches(), config);

        // Flow control in transformer
        TwoWindingsTransformer tw2t = n.getTwoWindingsTransformer("a708c3bc-465d-4fe7-b6ef-6fa6408a62b0");
        assertNotNull(tw2t);
        PhaseTapChanger ptc = tw2t.getPhaseTapChanger();
        assertNotNull(ptc);

        Terminal regulatingTerminal = ptc.getRegulationTerminal();
        Terminal terminal = tw2t.getTerminal2();
        assertEquals(terminal, regulatingTerminal);

        // Opposite sign
        double regulationValue = ptc.getRegulationValue();
        assertEquals(65.0, regulationValue, 0.0);

        // Voltage control
        Generator gen = n.getGenerator("550ebe0d-f2b2-48c1-991f-cebea43a21aa");
        assertNotNull(gen);

        regulatingTerminal = gen.getRegulatingTerminal();
        terminal = gen.getTerminal();
        assertEquals(terminal, regulatingTerminal);

        regulationValue = gen.getTargetV();
        assertEquals(21.987, regulationValue, 0.0);
    }

    @Test
    void microGridBaseBECaseRegulatingTerminalsDefinedOnSwitches() {
        Conversion.Config config = new Conversion.Config();
        Network n = networkModel(CgmesConformity1ModifiedCatalog.microGridBaseCaseBERegulatingTerminalsDefinedOnSwitches(), config);

        // Flow control in transformer
        TwoWindingsTransformer tw2t = n.getTwoWindingsTransformer("a708c3bc-465d-4fe7-b6ef-6fa6408a62b0");
        assertNotNull(tw2t);
        PhaseTapChanger ptc = tw2t.getPhaseTapChanger();
        assertNotNull(ptc);

        Terminal regulatingTerminal = ptc.getRegulationTerminal();
        Terminal terminal = tw2t.getTerminal2();
        assertEquals(terminal, regulatingTerminal);

        // same sign
        double regulationValue = ptc.getRegulationValue();
        assertEquals(-65.0, regulationValue, 0.0);

        // Voltage control
        Generator gen = n.getGenerator("550ebe0d-f2b2-48c1-991f-cebea43a21aa");
        assertNotNull(gen);

        regulatingTerminal = gen.getRegulatingTerminal();
        terminal = gen.getTerminal();
        assertEquals(terminal, regulatingTerminal);

        regulationValue = gen.getTargetV();
        assertEquals(21.987, regulationValue, 0.0);
    }

    private Network networkModel(GridModelReference testGridModel, Conversion.Config config) {
        config.setConvertSvInjections(true);
        return ConversionUtil.networkModel(testGridModel, config);
    }
}