UcteConverterHelperTest.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.ucte.converter.util;

import com.powsybl.commons.datasource.ReadOnlyDataSource;
import com.powsybl.commons.datasource.ResourceDataSource;
import com.powsybl.commons.datasource.ResourceSet;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.NetworkFactory;
import com.powsybl.ucte.converter.UcteImporter;
import org.apache.commons.math3.complex.Complex;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import static com.powsybl.ucte.converter.util.UcteConverterHelper.*;
import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Abdelsalem HEDHILI  {@literal <abdelsalem.hedhili at rte-france.com>}
 */
class UcteConverterHelperTest {

    private static Network reference;

    private static Network reference2;

    @BeforeAll
    static void setup() {
        ReadOnlyDataSource dataSource = new ResourceDataSource("expectedExport", new ResourceSet("/", "expectedExport.uct"));
        reference = new UcteImporter().importData(dataSource, NetworkFactory.findDefault(), null);

        ReadOnlyDataSource dataSource2 = new ResourceDataSource("expectedExport2", new ResourceSet("/", "expectedExport2.uct"));
        reference2 = new UcteImporter().importData(dataSource2, NetworkFactory.findDefault(), null);
    }

    @Test
    void calculatePhaseDuTest() {
        assertEquals(2.0000, calculatePhaseDu(reference.getTwoWindingsTransformer("0BBBBB5  0AAAAA2  1")), 0.00001);
        assertNotEquals(2.0001, calculatePhaseDu(reference.getTwoWindingsTransformer("0BBBBB5  0AAAAA2  1")), 0.00001);
    }

    @Test
    void calculateSymmAngleDuTest() {
        assertEquals(1.573, calculateSymmAngleDu(reference.getTwoWindingsTransformer("ZABCD221 ZEFGH221 1")), 0.0001);
    }

    @Test
    void calculateAsymmAngleDuAndAngleTest() {
        Complex du = calculateAsymmAngleDuAndAngle(reference.getTwoWindingsTransformer("HDDDDD2  HCCCCC1  1"), false);
        assertEquals(0.9, du.abs(), 0.0001);
        assertEquals(60.0, Math.toDegrees(du.getArgument()), 0.0001);
    }

    @Test
    void calculatePhaseDuTest2() {
        assertEquals(-2.000, calculatePhaseDu(reference2.getTwoWindingsTransformer("0BBBBB5  0AAAAA2  1")), 0.00001);
        assertEquals(-1.57, calculateSymmAngleDu(reference2.getTwoWindingsTransformer("ZABCD221 ZEFGH221 1")), 0.00001); // loss of one decimal with sign

        Complex duRef2 = calculateAsymmAngleDuAndAngle(reference2.getTwoWindingsTransformer("HDDDDD2  HCCCCC1  1"), false);

        double angleExpected = Math.toRadians(-120.0);
        double moduleExpected = -0.900;
        Complex duExpected = new Complex(Math.cos(angleExpected), Math.sin(angleExpected)).multiply(moduleExpected);

        assertEquals(duExpected.getReal(), duRef2.getReal(), 0.0001);
        assertEquals(duExpected.getImaginary(), duRef2.getImaginary(), 0.0001);

        ReadOnlyDataSource dataSource = new ResourceDataSource("expectedExport4", new ResourceSet("/", "expectedExport4.uct"));
        Network reference4 = new UcteImporter().importData(dataSource, NetworkFactory.findDefault(), null);

        Complex duRef4 = calculateAsymmAngleDuAndAngle(reference4.getTwoWindingsTransformer("HDDDDD2  HCCCCC1  1"), false);

        double angleExpected4 = Math.toRadians(-120.0);
        double moduleExpected4 = 1.833;
        Complex duExpected4 = new Complex(Math.cos(angleExpected4), Math.sin(angleExpected4)).multiply(moduleExpected4);

        assertEquals(duExpected4.getReal(), duRef4.getReal(), 0.0001);
        assertEquals(duExpected4.getImaginary(), duRef4.getImaginary(), 0.0001);

        ReadOnlyDataSource dataSource6 = new ResourceDataSource("expectedExport5", new ResourceSet("/", "expectedExport5.uct"));
        Network reference6 = new UcteImporter().importData(dataSource6, NetworkFactory.findDefault(), null);

        Complex duRef6 = calculateAsymmAngleDuAndAngle(reference6.getTwoWindingsTransformer("HDDDDD2  HCCCCC1  1"), false);
        assertEquals(0.990, duRef6.abs(), 0.00001);
        assertEquals(90.00, Math.toDegrees(duRef6.getArgument()), 0.00001); // loss of one decimal with sign
    }

}