AbstractNetworksTest.java
/**
* Copyright (c) 2018, RTE (https://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 com.powsybl.iidm.network.test.BatteryNetworkFactory;
import com.powsybl.iidm.network.test.DanglingLineNetworkFactory;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import com.powsybl.iidm.network.test.FourSubstationsNodeBreakerFactory;
import com.powsybl.iidm.network.util.Networks;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
/**
* @author Chamseddine BENHAMED {@literal <chamseddine.benhamed at rte-france.com>}
*/
public abstract class AbstractNetworksTest {
@Test
public void printBalanceSummaryTest() throws IOException {
try (Writer writer = new StringWriter()) {
Network network = EurostagTutorialExample1Factory.createWithMultipleConnectedComponents();
Networks.printBalanceSummary("", network, writer);
assertEquals("Active balance at step '':" + System.lineSeparator() +
"+-----------------------+--------------------------------+----------------------------------+\n" +
"| | Main CC connected/disconnected | Others CC connected/disconnected |\n" +
"+-----------------------+--------------------------------+----------------------------------+\n" +
"| Bus count | 4 | 3 |\n" +
"| Load count | 1 | 0 | 1 | 1 |\n" +
"| Load (MW) | 600.0 | 0.0 | 600.0 | 600.0 |\n" +
"| Generator count | 1 | 0 | 1 | 1 |\n" +
"| Max generation (MW) | 9999.99 | 0.0 | 9999.99 | 9999.99 |\n" +
"| Generation (MW) | 607.0 | 0.0 | 607.0 | 607.0 |\n" +
"| Shunt at nom V (MVar) | 0.0 0.0 (0) | 0.0 0.0 (0) | 0.0 0.0 (0) | 0.00576 0.0 (1) |\n" +
"+-----------------------+-------------+------------------+-------------+--------------------+" + System.lineSeparator() +
"Connected loads in other CC: [LOAD2]" + System.lineSeparator() +
"Disconnected loads in other CC: [LOAD3]" + System.lineSeparator() +
"Connected generators in other CC: [GEN2]" + System.lineSeparator() +
"Disconnected generators in other CC: [GEN3]" + System.lineSeparator() +
"Disconnected shunts in other CC: [SHUNT]" + System.lineSeparator(),
writer.toString());
}
}
@Test
public void applySolvedValuesTest() {
Network network = FourSubstationsNodeBreakerFactory.create();
ShuntCompensator shuntCompensator = network.getShuntCompensator("SHUNT");
shuntCompensator.setSolvedSectionCount(0);
TwoWindingsTransformer twt = network.getTwoWindingsTransformer("TWT");
twt.getPhaseTapChanger().setSolvedTapPosition(13);
twt.getRatioTapChanger().setSolvedTapPosition(2);
// Modify p and q of load so that it is different to P0 and Q0
Load load = network.getLoad("LD1");
load.getTerminal().setP(81).setQ(11);
// Modify p, q and v of generator so that it is different to the targets
Generator generator = network.getGenerator("GH1");
generator.getTerminal().setP(-86).setQ(-512);
generator.getTerminal().getBusView().getBus().setV(401);
assertNotEquals(shuntCompensator.getSolvedSectionCount(), shuntCompensator.getSectionCount());
assertNotEquals(twt.getPhaseTapChanger().getSolvedTapPosition(), twt.getPhaseTapChanger().getTapPosition());
assertNotEquals(twt.getRatioTapChanger().getSolvedTapPosition(), twt.getRatioTapChanger().getTapPosition());
assertNotEquals(load.getTerminal().getP(), load.getP0());
assertNotEquals(load.getTerminal().getQ(), load.getQ0());
assertNotEquals(-generator.getTerminal().getP(), generator.getTargetP());
assertNotEquals(-generator.getTerminal().getQ(), generator.getTargetQ());
assertNotEquals(generator.getTerminal().getBusBreakerView().getBus().getV(), generator.getTargetV());
Networks.applySolvedValues(network);
assertEquals(shuntCompensator.getSolvedSectionCount(), shuntCompensator.getSectionCount());
assertEquals(twt.getPhaseTapChanger().getSolvedTapPosition(), twt.getPhaseTapChanger().getTapPosition());
assertEquals(twt.getRatioTapChanger().getSolvedTapPosition(), twt.getRatioTapChanger().getTapPosition());
assertEquals(load.getTerminal().getP(), load.getP0());
assertEquals(load.getTerminal().getQ(), load.getQ0());
assertEquals(-generator.getTerminal().getP(), generator.getTargetP());
assertEquals(-generator.getTerminal().getQ(), generator.getTargetQ());
assertEquals(generator.getTerminal().getBusBreakerView().getBus().getV(), generator.getTargetV());
}
@Test
public void applySolvedValuesBattery() {
Network network = BatteryNetworkFactory.create();
Battery battery = network.getBattery("BAT");
assertNotEquals(battery.getTerminal().getP(), battery.getTargetP());
assertNotEquals(battery.getTerminal().getQ(), battery.getTargetQ());
Networks.applySolvedValues(network);
assertEquals(-battery.getTerminal().getP(), battery.getTargetP());
assertEquals(-battery.getTerminal().getQ(), battery.getTargetQ());
}
@Test
public void applySolvedValuesDanglingLine() {
Network network = DanglingLineNetworkFactory.createWithGeneration();
DanglingLine dl = network.getDanglingLine("DL");
dl.getTerminal().setP(441).setQ(30);
dl.getTerminal().getBusView().getBus().setV(100);
assertNotEquals(-dl.getTerminal().getP(), dl.getGeneration().getTargetP());
assertNotEquals(dl.getTerminal().getBusView().getBus().getV(), dl.getGeneration().getTargetV());
Networks.applySolvedValues(network);
assertEquals(-dl.getTerminal().getP(), dl.getGeneration().getTargetP());
assertEquals(dl.getTerminal().getBusView().getBus().getV(), dl.getGeneration().getTargetV());
dl.getGeneration().setVoltageRegulationOn(false).setTargetV(Double.NaN).setTargetQ(35);
assertNotEquals(-dl.getTerminal().getQ(), dl.getGeneration().getTargetQ());
Networks.applySolvedValues(network);
assertEquals(-dl.getTerminal().getQ(), dl.getGeneration().getTargetQ());
}
}