ShuntVoltageControlOuterLoop.java
/**
* Copyright (c) 2021, 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.outerloop;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.openloadflow.ac.AcOuterLoopContext;
import com.powsybl.openloadflow.lf.outerloop.OuterLoopResult;
import com.powsybl.openloadflow.lf.outerloop.OuterLoopStatus;
import com.powsybl.openloadflow.network.LfShunt;
import com.powsybl.openloadflow.network.VoltageControl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Anne Tilloy {@literal <anne.tilloy at rte-france.com>}
*/
public class ShuntVoltageControlOuterLoop extends AbstractShuntVoltageControlOuterLoop {
private static final Logger LOGGER = LoggerFactory.getLogger(ShuntVoltageControlOuterLoop.class);
public static final String NAME = "ShuntVoltageControl";
@Override
public String getName() {
return NAME;
}
@Override
public void initialize(AcOuterLoopContext context) {
context.getNetwork().<LfShunt>getControllerElements(VoltageControl.Type.SHUNT)
.forEach(controllerShunt -> controllerShunt.setVoltageControlEnabled(true));
}
@Override
public OuterLoopResult check(AcOuterLoopContext context, ReportNode reportNode) {
OuterLoopStatus status = OuterLoopStatus.STABLE;
if (context.getIteration() == 0) {
for (LfShunt controllerShunt : context.getNetwork().<LfShunt>getControllerElements(VoltageControl.Type.SHUNT)) {
controllerShunt.setVoltageControlEnabled(false);
// round the susceptance to the closest section
double b = controllerShunt.getB();
controllerShunt.dispatchB();
LOGGER.trace("Round susceptance of '{}': {} -> {}", controllerShunt.getId(), b, controllerShunt.getB());
status = OuterLoopStatus.UNSTABLE;
}
}
return new OuterLoopResult(this, status);
}
}