Skip to content

Commit

Permalink
Clean after review
Browse files Browse the repository at this point in the history
Signed-off-by: Clement Philipot <[email protected]>
  • Loading branch information
cphili committed Feb 6, 2025
1 parent c5f6b5b commit 8526da0
Show file tree
Hide file tree
Showing 59 changed files with 270 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public NetworkModification toModification() {
case CONSTANT_Q -> 0d;
case CONSTANT_PQ_RATIO -> p0PercentChange;
};
return new PercentChangeLoadModification(loadId, p0PercentChange, q0PercentChange, true);
return new PercentChangeLoadModification(loadId, p0PercentChange, q0PercentChange);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,9 @@ void shuntCompensatorAction() {
.withSectionCount(2)
.build();
NetworkModification modif = action2.toModification();
ValidationException e = assertThrows(ValidationException.class, () -> modif.apply(network));
PowsyblException e = assertThrows(PowsyblException.class, () -> modif.apply(network, new DefaultNamingStrategy(), true, LocalComputationManager.getDefault(), ReportNode.NO_OP));
assertEquals("Shunt compensator 'SHUNT': the current number (2) of section should be lesser than the maximum number of section (1)", e.getMessage());
assertDoesNotThrow(() -> modif.apply(network));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
*/
package com.powsybl.action.ial.dsl;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.modification.NetworkModification;
import com.powsybl.iidm.network.Network;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -51,15 +52,25 @@ public List<NetworkModification> getModifications() {
return modifications;
}

public void run(Network network, ComputationManager computationManager) {
public void run(Network network, boolean throwException, ComputationManager computationManager) {
for (NetworkModification task : modifications) {
task.apply(network, computationManager);
task.apply(network, throwException, computationManager, ReportNode.NO_OP);
}
}

public void run(Network network, ComputationManager computationManager) {
run(network, true, computationManager);
}

public void run(Network network) {
for (NetworkModification task : modifications) {
task.apply(network);
task.apply(network, true, ReportNode.NO_OP);
}
}

public void run(Network network, boolean throwException) {
for (NetworkModification task : modifications) {
task.apply(network, throwException, ReportNode.NO_OP);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
package com.powsybl.contingency.tasks;

import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.local.LocalComputationManager;
import com.powsybl.contingency.Contingency;
import com.powsybl.iidm.modification.topology.DefaultNamingStrategy;
import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.TwoWindingsTransformer;
Expand Down Expand Up @@ -44,12 +47,14 @@ void lineTrippingTest() {
assertFalse(line.getTerminal2().isConnected());

NetworkModification unknownLineModif = Contingency.line("NOT_EXISTS").toModification();
Exception e1 = assertThrows(PowsyblException.class, () -> unknownLineModif.apply(network));
Exception e1 = assertThrows(PowsyblException.class, () -> unknownLineModif.apply(network, new DefaultNamingStrategy(), true, LocalComputationManager.getDefault(), ReportNode.NO_OP));
assertEquals("Line 'NOT_EXISTS' not found", e1.getMessage());
assertDoesNotThrow(() -> unknownLineModif.apply(network));

NetworkModification unknownVlModif = Contingency.line("NHV1_NHV2_1", "NOT_EXISTS_VL").toModification();
Exception e2 = assertThrows(PowsyblException.class, () -> unknownVlModif.apply(network));
Exception e2 = assertThrows(PowsyblException.class, () -> unknownVlModif.apply(network, new DefaultNamingStrategy(), true, LocalComputationManager.getDefault(), ReportNode.NO_OP));
assertEquals("VoltageLevel 'NOT_EXISTS_VL' not connected to LINE 'NHV1_NHV2_1'", e2.getMessage());
assertDoesNotThrow(() -> unknownVlModif.apply(network));
}

@Test
Expand All @@ -73,12 +78,14 @@ void transformerTrippingTest() {
assertFalse(transformer.getTerminal2().isConnected());

NetworkModification modifUnknown2wt = Contingency.twoWindingsTransformer("NOT_EXISTS").toModification();
Exception e1 = assertThrows(PowsyblException.class, () -> modifUnknown2wt.apply(network));
Exception e1 = assertThrows(PowsyblException.class, () -> modifUnknown2wt.apply(network, new DefaultNamingStrategy(), true, LocalComputationManager.getDefault(), ReportNode.NO_OP));
assertEquals("Two windings transformer 'NOT_EXISTS' not found", e1.getMessage());
assertDoesNotThrow(() -> modifUnknown2wt.apply(network));

NetworkModification modifUnknownVl = Contingency.twoWindingsTransformer("NHV2_NLOAD", "NOT_EXISTS_VL").toModification();
Exception e2 = assertThrows(PowsyblException.class, () -> modifUnknownVl.apply(network));
Exception e2 = assertThrows(PowsyblException.class, () -> modifUnknownVl.apply(network, new DefaultNamingStrategy(), true, LocalComputationManager.getDefault(), ReportNode.NO_OP));
assertEquals("VoltageLevel 'NOT_EXISTS_VL' not connected to TWO_WINDINGS_TRANSFORMER 'NHV2_NLOAD'", e2.getMessage());
assertDoesNotThrow(() -> modifUnknownVl.apply(network));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public void applyModification(Network network, boolean isPlanned, boolean throwE
// Disconnect the identifiable if it exists
if (identifiable == null) {
ModificationLogs.logOrThrow(throwException, "Identifiable '" + identifiableId + "' not found");
return;
} else {
disconnectIdentifiable(identifiable, network, isPlanned, throwException, reportNode);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
Switch sw = network.getSwitch(switchId);
if (sw == null) {
ModificationLogs.logOrThrow(throwException, "Switch '" + switchId + "' not found");
return;
} else {
sw.setOpen(false);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE

if (g == null) {
ModificationLogs.logOrThrow(throwException, "Generator '" + generatorId + "' not found");
return;
} else {
connect(g);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
// Connect the element if it exists
if (identifiable == null) {
ModificationLogs.logOrThrow(throwException, "Identifiable '" + identifiableId + "' not found");
return;
} else {
connectIdentifiable(identifiable, network, throwException, reportNode);
}
Expand All @@ -90,6 +91,7 @@ private void connectIdentifiable(Identifiable<?> identifiable, Network network,
hasBeenConnected = hvdcLine.connectConverterStations(isTypeSwitchToOperate, side == null ? null : side.toTwoSides());
} else {
ModificationLogs.logOrThrow(throwException, String.format("Connection not implemented for identifiable '%s'", identifiableId));
return;
}
} finally {
network.getReportNodeContext().popReportNode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
package com.powsybl.iidm.modification;

import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.modification.util.ModificationLogs;
import com.powsybl.computation.ComputationManager;
import com.powsybl.iidm.network.LoadingLimits;
import com.powsybl.iidm.network.Network;
Expand Down Expand Up @@ -42,13 +41,16 @@ public LoadFlowBasedPhaseShifterOptimizer(ComputationManager computationManager)
this(computationManager, LoadFlowBasedPhaseShifterOptimizerConfig.load());
}

private void runLoadFlow(Network network, String workingStateId, boolean throwException) {

String loadFlowName = config.getLoadFlowName().orElse(null);
LoadFlowResult result = LoadFlow.find(loadFlowName)
.run(network, workingStateId, computationManager, LoadFlowParameters.load());
if (!result.isOk()) {
ModificationLogs.logOrThrow(throwException, "Load flow diverged during phase shifter optimization");
private void runLoadFlow(Network network, String workingStateId) {
try {
String loadFlowName = config.getLoadFlowName().orElse(null);
LoadFlowResult result = LoadFlow.find(loadFlowName)
.run(network, workingStateId, computationManager, LoadFlowParameters.load());
if (!result.isOk()) {
throw new PowsyblException("Load flow diverged during phase shifter optimization");
}
} catch (Exception e) {
throw new PowsyblException(e);
}
}

Expand All @@ -61,14 +63,13 @@ private static double getLimit(TwoWindingsTransformer phaseShifter) {
}

@Override
public void findMaximalFlowTap(Network network, String phaseShifterId, boolean throwException) {

public void findMaximalFlowTap(Network network, String phaseShifterId) {
TwoWindingsTransformer phaseShifter = network.getTwoWindingsTransformer(phaseShifterId);
if (phaseShifter == null) {
ModificationLogs.logOrThrow(throwException, "Phase shifter '" + phaseShifterId + "' not found");
throw new PowsyblException("Phase shifter '" + phaseShifterId + "' not found");
}
if (!phaseShifter.hasPhaseTapChanger()) {
ModificationLogs.logOrThrow(throwException, "Transformer '" + phaseShifterId + "' is not a phase shifter");
throw new PowsyblException("Transformer '" + phaseShifterId + "' is not a phase shifter");
}

int optimalTap;
Expand All @@ -77,12 +78,11 @@ public void findMaximalFlowTap(Network network, String phaseShifterId, boolean t
String stateId = network.getVariantManager().getWorkingVariantId();
String tmpStateId = "phase-shifter-optim-" + UUID.randomUUID();
network.getVariantManager().cloneVariant(stateId, tmpStateId);

try {
network.getVariantManager().setWorkingVariant(tmpStateId);
runLoadFlow(network, tmpStateId, throwException);
runLoadFlow(network, tmpStateId);
if (phaseShifter.getTerminal1().getI() >= phaseShifter.getCurrentLimits1().map(LoadingLimits::getPermanentLimit).orElseThrow(PowsyblException::new)) {
ModificationLogs.logOrThrow(throwException, "Phase shifter already overloaded");
throw new PowsyblException("Phase shifter already overloaded");
}
int tapPosInc = 1; // start by incrementing tap +1
double i;
Expand All @@ -97,7 +97,7 @@ public void findMaximalFlowTap(Network network, String phaseShifterId, boolean t
phaseShifter.getPhaseTapChanger().setTapPosition(tapPos);

// run load flow
runLoadFlow(network, tmpStateId, throwException);
runLoadFlow(network, tmpStateId);

// wrong direction, negate the increment
if (getI(phaseShifter) < i) {
Expand All @@ -115,7 +115,7 @@ public void findMaximalFlowTap(Network network, String phaseShifterId, boolean t
phaseShifter.getPhaseTapChanger().setTapPosition(optimalTap);

// just to be sure, check that with the previous tap, phase shifter is not overloaded...
runLoadFlow(network, tmpStateId, throwException);
runLoadFlow(network, tmpStateId);
// check there phase shifter is not overloaded
if (getI(phaseShifter) >= limit) {
throw new IllegalStateException("Phase shifter should not be overload");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
Switch sw = network.getSwitch(switchId);
if (sw == null) {
ModificationLogs.logOrThrow(throwException, "Switch '" + switchId + "' not found");
return;
} else {
sw.setOpen(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
package com.powsybl.iidm.modification;

import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.iidm.modification.topology.NamingStrategy;
Expand All @@ -27,13 +28,13 @@ public class PercentChangeLoadModification extends AbstractNetworkModification {
private double q0PercentChange;
private double p0PercentChange;

public PercentChangeLoadModification(String loadId, double p0PercentChange, double q0PercentChange, boolean throwException) {
public PercentChangeLoadModification(String loadId, double p0PercentChange, double q0PercentChange) {
this.loadId = Objects.requireNonNull(loadId);
if (p0PercentChange < -100) {
ModificationLogs.logOrThrow(throwException, "The active power of " + loadId + " cannot decrease by more than 100% (current value: " + p0PercentChange + ")");
throw new PowsyblException("The active power of " + loadId + " cannot decrease by more than 100% (current value: " + p0PercentChange + ")");
}
if (q0PercentChange < -100) {
ModificationLogs.logOrThrow(throwException, "The reactive power of " + loadId + " cannot decrease by more than 100% (current value: " + q0PercentChange + ")");
throw new PowsyblException("The reactive power of " + loadId + " cannot decrease by more than 100% (current value: " + q0PercentChange + ")");
}
this.p0PercentChange = p0PercentChange;
this.q0PercentChange = q0PercentChange;
Expand All @@ -49,6 +50,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
Load load = network.getLoad(loadId);
if (load == null) {
ModificationLogs.logOrThrow(throwException, "Load '" + loadId + "' not found");
return;
} else {
double p0 = load.getP0();
load.setP0(p0 + (p0 * p0PercentChange / 100));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
*/
package com.powsybl.iidm.modification;

import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.iidm.modification.topology.NamingStrategy;
import com.powsybl.iidm.modification.util.ModificationLogs;
import com.powsybl.iidm.network.Network;

import java.util.Objects;
Expand All @@ -33,7 +35,12 @@ public String getName() {
@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException,
ComputationManager computationManager, ReportNode reportNode) {
new LoadFlowBasedPhaseShifterOptimizer(computationManager)
.findMaximalFlowTap(network, phaseShifterId, throwException);
try {
new LoadFlowBasedPhaseShifterOptimizer(computationManager)
.findMaximalFlowTap(network, phaseShifterId);
} catch (PowsyblException powsyblException) {
ModificationLogs.logOrThrow(throwException, "Unable to find maximal flow tap");
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
*/
public interface PhaseShifterOptimizer {

void findMaximalFlowTap(Network network, String phaseShifterId, boolean throwException);
void findMaximalFlowTap(Network network, String phaseShifterId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,11 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
TwoWindingsTransformer phaseShifter = network.getTwoWindingsTransformer(phaseShifterId);
if (phaseShifter == null) {
ModificationLogs.logOrThrow(throwException, "Transformer '" + phaseShifterId + "' not found");
return;
}
if (!phaseShifter.hasPhaseTapChanger()) {
ModificationLogs.logOrThrow(throwException, "Transformer '" + phaseShifterId + "' is not a phase shifter");
return;
}
phaseShifter.getPhaseTapChanger().setTapPosition(tapPosition);
phaseShifter.getPhaseTapChanger().setRegulating(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,12 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
TwoWindingsTransformer phaseShifter = network.getTwoWindingsTransformer(phaseShifterId);
if (phaseShifter == null) {
ModificationLogs.logOrThrow(throwException, "Transformer '" + phaseShifterId + "' not found");
return;
}
PhaseTapChanger phaseTapChanger = phaseShifter.getPhaseTapChanger();
if (phaseTapChanger == null) {
ModificationLogs.logOrThrow(throwException, "Transformer '" + phaseShifterId + "' is not a phase shifter");
return;
}
adjustTapPosition(phaseTapChanger);
phaseTapChanger.setRegulating(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
Generator generator = network.getGenerator(generatorId);
if (generator == null) {
ModificationLogs.logOrThrow(throwException, "Generator '" + generatorId + "' not found");
return;
} else if (!generator.getId().equals(generator.getRegulatingTerminal().getConnectable().getId())) {
setLocalRegulation(generator, reportNode);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@
*/
package com.powsybl.iidm.modification;

import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.iidm.modification.topology.NamingStrategy;
import com.powsybl.iidm.modification.util.ModificationLogs;
import com.powsybl.iidm.modification.util.VoltageRegulationUtils;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.ShuntCompensator;
import com.powsybl.iidm.network.Terminal;

import java.util.Objects;

Expand Down Expand Up @@ -48,17 +52,21 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
return;
}

if (connect != null) {
Terminal t = shuntCompensator.getTerminal();
if (connect.booleanValue()) {
t.connect();
setTargetV(shuntCompensator);
} else {
t.disconnect();
try {
if (connect != null) {
Terminal t = shuntCompensator.getTerminal();
if (connect.booleanValue()) {
t.connect();
setTargetV(shuntCompensator);
} else {
t.disconnect();
}
}
}
if (sectionCount != null) {
shuntCompensator.setSectionCount(sectionCount);
if (sectionCount != null) {
shuntCompensator.setSectionCount(sectionCount);
}
} catch (PowsyblException powsyblException) {
ModificationLogs.logOrThrow(throwException, powsyblException.getMessage());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public void apply(Network network, NamingStrategy namingStrategy, boolean throwE
applyTwoWindingsTransformer(network, twoWindingsTransformer, throwException);
} else {
ModificationLogs.logOrThrow(throwException, "No matching transformer found with ID:" + getTransformerId());
return;
}
}

Expand Down
Loading

0 comments on commit 8526da0

Please sign in to comment.