LfBranchDisconnectionTest.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.openloadflow.ac;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import com.powsybl.math.matrix.DenseMatrixFactory;
import com.powsybl.openloadflow.ac.solver.AcSolverStatus;
import com.powsybl.openloadflow.network.EurostagFactory;
import com.powsybl.openloadflow.network.LfBranch;
import com.powsybl.openloadflow.network.LfNetwork;
import com.powsybl.openloadflow.network.LfNetworkParameters;
import com.powsybl.openloadflow.network.impl.Networks;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
class LfBranchDisconnectionTest {
private static final double DELTA = 1E-5;
@Test
void test() {
Network network = EurostagFactory.fix(EurostagTutorialExample1Factory.create());
LfNetwork lfNetwork = Networks.load(network, new LfNetworkParameters()).get(0);
LfBranch lfl1 = lfNetwork.getBranchById("NHV1_NHV2_1");
lfl1.setDisconnectionAllowedSide1(true);
lfl1.setDisconnectionAllowedSide2(true);
AcLoadFlowParameters acParameters = new AcLoadFlowParameters()
.setMatrixFactory(new DenseMatrixFactory());
try (var context = new AcLoadFlowContext(lfNetwork, acParameters)) {
AcLoadFlowResult result = new AcloadFlowEngine(context)
.run();
assertEquals(AcSolverStatus.CONVERGED, result.getSolverStatus());
assertEquals(3.02444, lfl1.getP1().eval(), DELTA);
assertEquals(0.98739, lfl1.getQ1().eval(), DELTA);
assertEquals(-3.00434, lfl1.getP2().eval(), DELTA);
assertEquals(-1.37187, lfl1.getQ2().eval(), DELTA);
lfl1.setConnectedSide1(false);
result = new AcloadFlowEngine(context)
.run();
assertEquals(AcSolverStatus.CONVERGED, result.getSolverStatus());
assertEquals(0, lfl1.getP1().eval(), 0);
assertEquals(0, lfl1.getQ1().eval(), 0);
assertEquals(1.587E-4, lfl1.getP2().eval(), DELTA);
assertEquals(-0.5432, lfl1.getQ2().eval(), DELTA);
lfl1.setConnectedSide1(true);
result = new AcloadFlowEngine(context)
.run();
assertEquals(AcSolverStatus.CONVERGED, result.getSolverStatus());
assertEquals(3.02444, lfl1.getP1().eval(), DELTA);
assertEquals(0.98739, lfl1.getQ1().eval(), DELTA);
assertEquals(-3.00434, lfl1.getP2().eval(), DELTA);
assertEquals(-1.37187, lfl1.getQ2().eval(), DELTA);
lfl1.setConnectedSide2(false);
result = new AcloadFlowEngine(context)
.run();
assertEquals(AcSolverStatus.CONVERGED, result.getSolverStatus());
assertEquals(1.752e-4, lfl1.getP1().eval(), DELTA);
assertEquals(-0.61995, lfl1.getQ1().eval(), DELTA);
assertEquals(0, lfl1.getP2().eval(), 0);
assertEquals(0, lfl1.getQ2().eval(), 0);
lfl1.setConnectedSide2(true);
result = new AcloadFlowEngine(context)
.run();
assertEquals(AcSolverStatus.CONVERGED, result.getSolverStatus());
assertEquals(3.02444, lfl1.getP1().eval(), DELTA);
assertEquals(0.98739, lfl1.getQ1().eval(), DELTA);
assertEquals(-3.00434, lfl1.getP2().eval(), DELTA);
assertEquals(-1.37187, lfl1.getQ2().eval(), DELTA);
lfl1.setConnectedSide1(false);
lfl1.setConnectedSide2(false);
result = new AcloadFlowEngine(context)
.run();
assertEquals(AcSolverStatus.CONVERGED, result.getSolverStatus());
assertTrue(Double.isNaN(lfl1.getP1().eval()));
assertTrue(Double.isNaN(lfl1.getQ1().eval()));
assertTrue(Double.isNaN(lfl1.getP2().eval()));
assertTrue(Double.isNaN(lfl1.getQ2().eval()));
}
}
}