Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Substation automation system #811

Merged
merged 43 commits into from
Nov 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
436c7ae
Current limit automaton simulation
geofjamg Feb 19, 2023
c9ab21c
Wip
geofjamg Feb 19, 2023
9a8f3cf
Wip
geofjamg Feb 19, 2023
b4c96c8
Merge branch 'main' into automaton2
geofjamg Mar 7, 2023
b08290e
Merge branch 'main' into automaton2
geofjamg May 15, 2023
34c92a0
Fix merge
geofjamg May 15, 2023
b72f94b
Wip
geofjamg May 20, 2023
ea20d1a
Wip
geofjamg May 20, 2023
8a4289a
Wip
geofjamg May 20, 2023
47e6c63
Wip
geofjamg May 20, 2023
6ac7542
Wip
geofjamg May 20, 2023
2f143e9
Wip
geofjamg May 20, 2023
a414875
Wip
geofjamg May 21, 2023
1e1006f
Merge branch 'main' into automaton2
geofjamg Jul 3, 2023
77134c9
Fix
geofjamg Jul 3, 2023
8787036
Merge branch 'main' into automaton2
geofjamg Oct 16, 2023
7331cdf
Wip
geofjamg Oct 16, 2023
3c38a7a
Merge branch 'main' into automaton2
geofjamg Oct 16, 2023
db356e2
Wip
geofjamg Oct 16, 2023
211eaa5
Wip
geofjamg Oct 16, 2023
4f1fea3
Wip
geofjamg Oct 16, 2023
bd6f307
Wip
geofjamg Oct 16, 2023
b201e49
Wip
geofjamg Oct 16, 2023
7518849
Wip
geofjamg Oct 16, 2023
c7f61ad
Wip
geofjamg Oct 16, 2023
83faddf
Wip
geofjamg Oct 16, 2023
f8e1be1
Wip
geofjamg Oct 17, 2023
4d3dabb
Merge branch 'main' into automaton2
geofjamg Oct 17, 2023
eee52a5
Wip
geofjamg Oct 17, 2023
2bd65b2
Merge branch 'main' into automaton2
geofjamg Oct 17, 2023
58ecdf3
Merge branch 'main' into automaton2
geofjamg Oct 18, 2023
dc4f77e
Fix
geofjamg Oct 20, 2023
f168409
Merge remote-tracking branch 'origin/automaton2' into automaton2
geofjamg Oct 20, 2023
a1dc2b8
Wip
geofjamg Oct 20, 2023
9703e12
Merge branch 'main' into automaton2
geofjamg Oct 30, 2023
9018a6e
Wip
geofjamg Oct 30, 2023
b96d523
Wip
geofjamg Oct 30, 2023
f77f136
Wip
geofjamg Oct 30, 2023
51411e6
Merge branch 'main' into automaton2
geofjamg Oct 31, 2023
090c210
Wip
geofjamg Oct 31, 2023
c72ee2a
Merge branch 'main' into automaton2
geofjamg Nov 3, 2023
fa6f75c
Fix
geofjamg Nov 3, 2023
8d96250
Merge branch 'main' into automaton2
geofjamg Nov 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,11 @@ protected static Optional<AcOuterLoop> createPhaseControlOuterLoop(LoadFlowParam
protected static Optional<AcOuterLoop> createPhaseControlOuterLoop(LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt) {
return createPhaseControlOuterLoop(parameters, parametersExt.getPhaseShifterControlMode());
}

protected static Optional<AcOuterLoop> createAutomationSystemOuterLoop(OpenLoadFlowParameters parametersExt) {
if (parametersExt.isSimulateAutomationSystems()) {
return Optional.of(new AutomationSystemOuterLoop());
}
return Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public List<AcOuterLoop> configure(LoadFlowParameters parameters, OpenLoadFlowPa
createTransformerVoltageControlOuterLoop(parameters, parametersExt).ifPresent(outerLoops::add);
// shunt compensator voltage control
createShuntVoltageControlOuterLoop(parameters, parametersExt).ifPresent(outerLoops::add);
// automation system
createAutomationSystemOuterLoop(parametersExt).ifPresent(outerLoops::add);
return outerLoops;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ public class ExplicitAcOuterLoopConfig extends AbstractAcOuterLoopConfig {
SecondaryVoltageControlOuterLoop.NAME,
ShuntVoltageControlOuterLoop.NAME,
SimpleTransformerVoltageControlOuterLoop.NAME,
TransformerVoltageControlOuterLoop.NAME);
TransformerVoltageControlOuterLoop.NAME,
AutomationSystemOuterLoop.NAME);

private static Optional<AcOuterLoop> createOuterLoop(String name, LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt) {
return switch (name) {
Expand All @@ -57,6 +58,7 @@ private static Optional<AcOuterLoop> createOuterLoop(String name, LoadFlowParame
case TransformerVoltageControlOuterLoop.NAME -> createTransformerVoltageControlOuterLoop(parameters,
OpenLoadFlowParameters.TransformerVoltageControlMode.AFTER_GENERATOR_VOLTAGE_CONTROL,
parametersExt.getIncrementalTransformerVoltageControlOuterLoopMaxTapShift());
case AutomationSystemOuterLoop.NAME -> createAutomationSystemOuterLoop(parametersExt);
default -> throw new PowsyblException("Unknown outer loop '" + name + "'");
};
}
Expand Down
27 changes: 23 additions & 4 deletions src/main/java/com/powsybl/openloadflow/OpenLoadFlowParameters.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ public enum SlackDistributionFailureBehavior {

private static final String DC_APPROXIMATION_TYPE_PARAM_NAME = "dcApproximationType";

public static final String SIMULATE_AUTOMATION_SYSTEMS_PARAM_NAME = "simulateAutomationSystems";

private static <E extends Enum<E>> List<Object> getEnumPossibleValues(Class<E> enumClass) {
return EnumSet.allOf(enumClass).stream().map(Enum::name).collect(Collectors.toList());
}
Expand Down Expand Up @@ -277,7 +279,8 @@ private static <E extends Enum<E>> List<Object> getEnumPossibleValues(Class<E> e
new Parameter(MAX_VOLTAGE_CHANGE_STATE_VECTOR_SCALING_MAX_DPHI_PARAM_NAME, ParameterType.DOUBLE, "Max voltage angle change for the max voltage change state vector scaling", MaxVoltageChangeStateVectorScaling.DEFAULT_MAX_DPHI),
new Parameter(LINE_PER_UNIT_MODE_PARAM_NAME, ParameterType.STRING, "Line per unit mode", LinePerUnitMode.IMPEDANCE.name(), getEnumPossibleValues(LinePerUnitMode.class)),
new Parameter(USE_LOAD_MODEL_PARAM_NAME, ParameterType.BOOLEAN, "Use load model (with voltage dependency) for simulation", LfNetworkParameters.USE_LOAD_MODE_DEFAULT_VALUE),
new Parameter(DC_APPROXIMATION_TYPE_PARAM_NAME, ParameterType.STRING, "DC approximation type", DcEquationSystemCreationParameters.DC_APPROXIMATION_TYPE_DEFAULT_VALUE.name(), getEnumPossibleValues(DcApproximationType.class))
new Parameter(DC_APPROXIMATION_TYPE_PARAM_NAME, ParameterType.STRING, "DC approximation type", DcEquationSystemCreationParameters.DC_APPROXIMATION_TYPE_DEFAULT_VALUE.name(), getEnumPossibleValues(DcApproximationType.class)),
new Parameter(SIMULATE_AUTOMATION_SYSTEMS_PARAM_NAME, ParameterType.BOOLEAN, "Automation systems simulation", LfNetworkParameters.SIMULATE_AUTOMATION_SYSTEMS_DEFAULT_VALUE)
);

public enum VoltageInitModeOverride {
Expand Down Expand Up @@ -429,6 +432,8 @@ public enum ReactiveRangeCheckMode {

private DcApproximationType dcApproximationType = DcEquationSystemCreationParameters.DC_APPROXIMATION_TYPE_DEFAULT_VALUE;

private boolean simulateAutomationSystems = LfNetworkParameters.SIMULATE_AUTOMATION_SYSTEMS_DEFAULT_VALUE;

@Override
public String getName() {
return "open-load-flow-parameters";
Expand Down Expand Up @@ -971,6 +976,15 @@ public OpenLoadFlowParameters setDcApproximationType(DcApproximationType dcAppro
return this;
}

public boolean isSimulateAutomationSystems() {
return simulateAutomationSystems;
}

public OpenLoadFlowParameters setSimulateAutomationSystems(boolean simulateAutomationSystems) {
this.simulateAutomationSystems = simulateAutomationSystems;
return this;
}

public static OpenLoadFlowParameters load() {
return load(PlatformConfig.defaultConfig());
}
Expand Down Expand Up @@ -1035,7 +1049,7 @@ public static OpenLoadFlowParameters load(PlatformConfig platformConfig) {
.setLinePerUnitMode(config.getEnumProperty(LINE_PER_UNIT_MODE_PARAM_NAME, LinePerUnitMode.class, LfNetworkParameters.LINE_PER_UNIT_MODE_DEFAULT_VALUE))
.setUseLoadModel(config.getBooleanProperty(USE_LOAD_MODEL_PARAM_NAME, LfNetworkParameters.USE_LOAD_MODE_DEFAULT_VALUE))
.setDcApproximationType(config.getEnumProperty(DC_APPROXIMATION_TYPE_PARAM_NAME, DcApproximationType.class, DcEquationSystemCreationParameters.DC_APPROXIMATION_TYPE_DEFAULT_VALUE))
);
.setSimulateAutomationSystems(config.getBooleanProperty(SIMULATE_AUTOMATION_SYSTEMS_PARAM_NAME, LfNetworkParameters.SIMULATE_AUTOMATION_SYSTEMS_DEFAULT_VALUE)));
return parameters;
}

Expand Down Expand Up @@ -1161,6 +1175,8 @@ public OpenLoadFlowParameters update(Map<String, String> properties) {
.ifPresent(prop -> this.setUseLoadModel(Boolean.parseBoolean(prop)));
Optional.ofNullable(properties.get(DC_APPROXIMATION_TYPE_PARAM_NAME))
.ifPresent(prop -> this.setDcApproximationType(DcApproximationType.valueOf(prop)));
Optional.ofNullable(properties.get(SIMULATE_AUTOMATION_SYSTEMS_PARAM_NAME))
.ifPresent(prop -> this.setSimulateAutomationSystems(Boolean.parseBoolean(prop)));
return this;
}

Expand Down Expand Up @@ -1221,6 +1237,7 @@ public Map<String, Object> toMap() {
map.put(LINE_PER_UNIT_MODE_PARAM_NAME, linePerUnitMode);
map.put(USE_LOAD_MODEL_PARAM_NAME, useLoadModel);
map.put(DC_APPROXIMATION_TYPE_PARAM_NAME, dcApproximationType);
map.put(SIMULATE_AUTOMATION_SYSTEMS_PARAM_NAME, simulateAutomationSystems);
return map;
}

Expand Down Expand Up @@ -1343,7 +1360,8 @@ static LfNetworkParameters getNetworkParameters(LoadFlowParameters parameters, O
.setAsymmetrical(parametersExt.isAsymmetrical())
.setMinNominalVoltageTargetVoltageCheck(parametersExt.getMinNominalVoltageTargetVoltageCheck())
.setLinePerUnitMode(parametersExt.getLinePerUnitMode())
.setUseLoadModel(parametersExt.isUseLoadModel());
.setUseLoadModel(parametersExt.isUseLoadModel())
.setSimulateAutomationSystems(parametersExt.isSimulateAutomationSystems());
}

public static AcLoadFlowParameters createAcParameters(Network network, LoadFlowParameters parameters, OpenLoadFlowParameters parametersExt,
Expand Down Expand Up @@ -1559,7 +1577,8 @@ public static boolean equals(LoadFlowParameters parameters1, LoadFlowParameters
extension1.getMaxVoltageChangeStateVectorScalingMaxDphi() == extension2.getMaxVoltageChangeStateVectorScalingMaxDphi() &&
extension1.getLinePerUnitMode() == extension2.getLinePerUnitMode() &&
extension1.isUseLoadModel() == extension2.isUseLoadModel() &&
extension1.getDcApproximationType() == extension2.getDcApproximationType();
extension1.getDcApproximationType() == extension2.getDcApproximationType() &&
extension1.isSimulateAutomationSystems() == extension2.isSimulateAutomationSystems();
}

public static LoadFlowParameters clone(LoadFlowParameters parameters) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.powsybl.openloadflow.graph.NaiveGraphConnectivityFactory;
import com.powsybl.openloadflow.lf.outerloop.OuterLoop;
import com.powsybl.openloadflow.network.*;
import com.powsybl.openloadflow.network.impl.LfNetworkList;
import com.powsybl.openloadflow.network.impl.LfNetworkLoaderImpl;
import com.powsybl.openloadflow.network.impl.Networks;
import com.powsybl.openloadflow.network.util.ZeroImpedanceFlows;
Expand Down Expand Up @@ -88,6 +89,7 @@ public String getVersion() {

private GraphConnectivityFactory<LfBus, LfBranch> getConnectivityFactory(OpenLoadFlowParameters parametersExt) {
return parametersExt.isNetworkCacheEnabled() && !parametersExt.getActionableSwitchesIds().isEmpty()
|| parametersExt.isSimulateAutomationSystems()
? new NaiveGraphConnectivityFactory<>(LfBus::getNum)
: connectivityFactory;
}
Expand Down Expand Up @@ -135,7 +137,9 @@ private LoadFlowResult runAc(Network network, LoadFlowParameters parameters, Ope
results = new AcLoadFlowFromCache(network, parameters, parametersExt, acParameters, reporter)
.run();
} else {
results = AcloadFlowEngine.run(network, new LfNetworkLoaderImpl(), acParameters, reporter);
try (LfNetworkList lfNetworkList = Networks.load(network, acParameters.getNetworkParameters(), new LfTopoConfig(), reporter)) {
results = AcloadFlowEngine.run(lfNetworkList.getList(), acParameters);
}
}

// we reset the state if at least one component needs a network update.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import com.powsybl.openloadflow.lf.outerloop.DistributedSlackContextData;
import com.powsybl.openloadflow.lf.outerloop.OuterLoopStatus;
import com.powsybl.openloadflow.network.LfNetwork;
import com.powsybl.openloadflow.network.LfNetworkLoader;
import com.powsybl.openloadflow.network.util.PreviousValueVoltageInitializer;
import com.powsybl.openloadflow.network.util.VoltageInitializer;
import com.powsybl.openloadflow.util.Reports;
Expand Down Expand Up @@ -208,9 +207,8 @@ public AcLoadFlowResult run() {
return result;
}

public static <T> List<AcLoadFlowResult> run(T network, LfNetworkLoader<T> networkLoader, AcLoadFlowParameters parameters, Reporter reporter) {
return LfNetwork.load(network, networkLoader, parameters.getNetworkParameters(), reporter)
.stream()
public static List<AcLoadFlowResult> run(List<LfNetwork> lfNetworks, AcLoadFlowParameters parameters) {
return lfNetworks.stream()
.map(n -> {
if (n.isValid()) {
try (AcLoadFlowContext context = new AcLoadFlowContext(n, parameters)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Copyright (c) 2023, 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/.
*/
package com.powsybl.openloadflow.ac.outerloop;

import com.powsybl.commons.reporter.Reporter;
import com.powsybl.openloadflow.ac.AcOuterLoopContext;
import com.powsybl.openloadflow.graph.GraphConnectivity;
import com.powsybl.openloadflow.lf.outerloop.OuterLoopStatus;
import com.powsybl.openloadflow.network.*;
import com.powsybl.openloadflow.network.impl.LfSwitch;
import com.powsybl.openloadflow.util.PerUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashSet;
import java.util.Set;

/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public class AutomationSystemOuterLoop implements AcOuterLoop {

private static final Logger LOGGER = LoggerFactory.getLogger(AutomationSystemOuterLoop.class);

public static final String NAME = "AutomationSystem";

@Override
public String getName() {
return NAME;
}

@Override
public OuterLoopStatus check(AcOuterLoopContext context, Reporter reporter) {
OuterLoopStatus status = OuterLoopStatus.STABLE;
LfNetwork network = context.getNetwork();
Set<LfBranch> branchesToOpen = new HashSet<>();
Set<LfBranch> branchesToClose = new HashSet<>();
for (LfOverloadManagementSystem system : network.getOverloadManagementSystems()) {
LfBranch branchToMonitor = system.getMonitoredBranch();
if (branchToMonitor.isConnectedAtBothSides()) {
double i1 = branchToMonitor.getI1().eval();
double threshold = system.getThreshold();
if (i1 > threshold) {
double ib = PerUnit.ib(branchToMonitor.getBus1().getNominalV());
LfSwitch switchToOperate = system.getSwitchToOperate();
if (system.isSwitchOpen() && switchToOperate.isConnectedAtBothSides()) {
LOGGER.debug("Line '{}' is overloaded ({} A > {} A), open switch '{}'",
branchToMonitor.getId(), i1 * ib, threshold * ib, switchToOperate.getId());
branchesToOpen.add(switchToOperate);
} else if (!system.isSwitchOpen() && !switchToOperate.isConnectedAtBothSides()) {
LOGGER.debug("Line '{}' is overloaded ({} A > {} A), close switch '{}'",
branchToMonitor.getId(), i1 * ib, threshold * ib, switchToOperate.getId());
branchesToClose.add(switchToOperate);
}
}
}
}

if (branchesToOpen.size() + branchesToClose.size() > 0) {
GraphConnectivity<LfBus, LfBranch> connectivity = network.getConnectivity();
branchesToOpen.forEach(connectivity::removeEdge);
branchesToClose.forEach(branch -> connectivity.addEdge(branch.getBus1(), branch.getBus2(), branch));
LfAction.updateBusesAndBranchStatus(connectivity);
status = OuterLoopStatus.UNSTABLE;
annetill marked this conversation as resolved.
Show resolved Hide resolved
}

return status;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ protected void updateComponents() {
computeConnectivity();
}

@Override
public boolean supportTemporaryChangesNesting() {
return false;
}

@Override
public void startTemporaryChanges() {
if (!getModificationsContexts().isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ public interface GraphConnectivity<V, E> {

void removeEdge(E edge);

boolean supportTemporaryChangesNesting();

/**
* Start recording topological changes to undo them later by a {@link #undoTemporaryChanges} call.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ protected void updateConnectivity(EdgeRemove<V, E> edgeRemove) {
}
}

@Override
public boolean supportTemporaryChangesNesting() {
return true;
}

@Override
public void startTemporaryChanges() {
super.startTemporaryChanges();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ public NaiveGraphConnectivity(ToIntFunction<V> numGetter) {
this.numGetter = Objects.requireNonNull(numGetter);
}

@Override
public boolean supportTemporaryChangesNesting() {
return true;
}

protected void updateComponents() {
if (components == null) {
components = new int[getGraph().vertexSet().size()];
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/powsybl/openloadflow/network/LfNetwork.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ public double getLowValue() {
}
}

protected final List<LfOverloadManagementSystem> overloadManagementSystems = new ArrayList<>();

public LfNetwork(int numCC, int numSC, SlackBusSelector slackBusSelector, int maxSlackBusCount,
GraphConnectivityFactory<LfBus, LfBranch> connectivityFactory, Reporter reporter) {
this.numCC = numCC;
Expand Down Expand Up @@ -601,6 +603,12 @@ public GraphConnectivity<LfBus, LfBranch> getConnectivity() {
.filter(b -> b.getBus1() != null && b.getBus2() != null)
.forEach(b -> connectivity.addEdge(b.getBus1(), b.getBus2(), b));
connectivity.setMainComponentVertex(getSlackBus());
// this is necessary to create a first temporary changes level in order to allow
// some outer loop to change permanently the connectivity (with automation systems for instance)
// this one will never be reverted
if (connectivity.supportTemporaryChangesNesting()) {
connectivity.startTemporaryChanges();
}
}
return connectivity;
}
Expand Down Expand Up @@ -735,6 +743,14 @@ public List<LfBus> getControlledBuses(VoltageControl.Type type) {
.collect(Collectors.toList());
}

public void addOverloadManagementSystem(LfOverloadManagementSystem overloadManagementSystem) {
overloadManagementSystems.add(Objects.requireNonNull(overloadManagementSystem));
}

public List<LfOverloadManagementSystem> getOverloadManagementSystems() {
return overloadManagementSystems;
}

@Override
public String toString() {
return getId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ public class LfNetworkParameters {

public static final Set<Country> SLACK_BUS_COUNTRY_FILTER_DEFAULT_VALUE = Collections.emptySet();

public static final boolean SIMULATE_AUTOMATION_SYSTEMS_DEFAULT_VALUE = false;

private SlackBusSelector slackBusSelector = new FirstSlackBusSelector(SLACK_BUS_COUNTRY_FILTER_DEFAULT_VALUE);

private GraphConnectivityFactory<LfBus, LfBranch> connectivityFactory = new EvenShiloachGraphDecrementalConnectivityFactory<>();
Expand Down Expand Up @@ -123,6 +125,8 @@ public class LfNetworkParameters {

private boolean useLoadModel = USE_LOAD_MODE_DEFAULT_VALUE;

private boolean simulateAutomationSystems = SIMULATE_AUTOMATION_SYSTEMS_DEFAULT_VALUE;

public LfNetworkParameters() {
}

Expand Down Expand Up @@ -158,7 +162,9 @@ public LfNetworkParameters(LfNetworkParameters other) {
this.secondaryVoltageControl = other.secondaryVoltageControl;
this.cacheEnabled = other.cacheEnabled;
this.asymmetrical = other.asymmetrical;
this.linePerUnitMode = other.linePerUnitMode;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:-)

this.useLoadModel = other.useLoadModel;
this.simulateAutomationSystems = other.simulateAutomationSystems;
}

public SlackBusSelector getSlackBusSelector() {
Expand Down Expand Up @@ -468,6 +474,15 @@ public LfNetworkParameters setUseLoadModel(boolean useLoadModel) {
return this;
}

public boolean isSimulateAutomationSystems() {
return simulateAutomationSystems;
}

public LfNetworkParameters setSimulateAutomationSystems(boolean simulateAutomationSystems) {
this.simulateAutomationSystems = simulateAutomationSystems;
return this;
}

@Override
public String toString() {
return "LfNetworkParameters(" +
Expand Down Expand Up @@ -502,6 +517,7 @@ public String toString() {
", minNominalVoltageTargetVoltageCheck=" + minNominalVoltageTargetVoltageCheck +
", linePerUnitMode=" + linePerUnitMode +
", useLoadModel=" + useLoadModel +
", simulateAutomationSystems=" + simulateAutomationSystems +
')';
}
}
Loading
Loading