AcLoadFlowBatteryTest.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.openloadflow.ac;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.extensions.VoltageRegulationAdder;
import com.powsybl.iidm.network.test.BatteryNetworkFactory;
import com.powsybl.loadflow.LoadFlow;
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.loadflow.LoadFlowResult;
import com.powsybl.math.matrix.DenseMatrixFactory;
import com.powsybl.openloadflow.OpenLoadFlowParameters;
import com.powsybl.openloadflow.OpenLoadFlowProvider;
import com.powsybl.openloadflow.network.SlackBusSelectionMode;
import com.powsybl.openloadflow.util.LoadFlowAssert;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static com.powsybl.openloadflow.util.LoadFlowAssert.*;
import static org.junit.jupiter.api.Assertions.assertTrue;
class AcLoadFlowBatteryTest {
private Network network;
private Bus genBus;
private Bus batBus;
private Generator generator;
private Battery battery1;
private Battery battery2;
private LoadFlow.Runner loadFlowRunner;
private LoadFlowParameters parameters;
@BeforeEach
void setUp() {
network = BatteryNetworkFactory.create();
genBus = network.getBusBreakerView().getBus("NGEN");
batBus = network.getBusBreakerView().getBus("NBAT");
generator = network.getGenerator("GEN");
generator.setMinP(0).setMaxP(1000).setTargetV(401.);
battery1 = network.getBattery("BAT");
battery1.setMinP(-1000).setMaxP(1000).setTargetQ(0).setTargetP(0);
battery2 = network.getBattery("BAT2");
battery2.setTargetP(-1000).setMaxP(1000);
loadFlowRunner = new LoadFlow.Runner(new OpenLoadFlowProvider(new DenseMatrixFactory()));
parameters = new LoadFlowParameters().setUseReactiveLimits(true)
.setDistributedSlack(true);
OpenLoadFlowParameters.create(parameters)
.setSlackBusSelectionMode(SlackBusSelectionMode.MOST_MESHED);
}
@Test
void test() {
battery2.newExtension(VoltageRegulationAdder.class)
.withTargetV(401)
.withVoltageRegulatorOn(false)
.add();
LoadFlowResult result = loadFlowRunner.run(network, parameters);
assertTrue(result.isFullyConverged());
assertVoltageEquals(401, genBus);
LoadFlowAssert.assertAngleEquals(5.916573, genBus);
assertVoltageEquals(397.660, batBus);
LoadFlowAssert.assertAngleEquals(0.0, batBus);
}
@Test
void testWithVoltageControl() {
generator.setVoltageRegulatorOn(false);
battery2.newExtension(VoltageRegulationAdder.class)
.withTargetV(401)
.withVoltageRegulatorOn(true)
.add();
LoadFlowResult result = loadFlowRunner.run(network, parameters);
assertTrue(result.isFullyConverged());
assertVoltageEquals(417.328, genBus);
LoadFlowAssert.assertAngleEquals(5.468356, genBus);
assertVoltageEquals(401.0, batBus);
LoadFlowAssert.assertAngleEquals(0.0, batBus);
assertActivePowerEquals(1000.0, battery2.getTerminal());
assertReactivePowerEquals(122.716, battery2.getTerminal());
}
}