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

AC security analysis: make contingency propagation optional #571

Merged
merged 10 commits into from
Jul 5, 2022
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
*/
public class ContingencyTripping {

private static final ContingencyTripping NO_OP_TRIPPING = new ContingencyTripping(Collections.emptyList());

private final List<? extends Terminal> terminals;

public ContingencyTripping(List<? extends Terminal> terminals) {
Expand All @@ -26,54 +28,59 @@ public ContingencyTripping(Terminal terminal) {
this(Collections.singletonList(terminal));
}

public static ContingencyTripping createBranchTripping(Network network, String branchId) {
return createBranchTripping(network, branchId, null);
public static ContingencyTripping createBranchTripping(Network network, Branch<?> branch) {
return createBranchTripping(network, branch, null);
}

public static ContingencyTripping createBranchTripping(Network network, String branchId, String voltageLevelId) {
public static ContingencyTripping createBranchTripping(Network network, Branch<?> branch, String voltageLevelId) {
Objects.requireNonNull(network);
Objects.requireNonNull(branchId);

Branch<?> branch = network.getBranch(branchId);
if (branch == null) {
throw new PowsyblException("Branch '" + branchId + "' not found in the network");
}
Objects.requireNonNull(branch);

if (voltageLevelId != null) {
if (voltageLevelId.equals(branch.getTerminal1().getVoltageLevel().getId())) {
return new ContingencyTripping(branch.getTerminal1());
} else if (voltageLevelId.equals(branch.getTerminal2().getVoltageLevel().getId())) {
return new ContingencyTripping(branch.getTerminal2());
} else {
throw new PowsyblException("VoltageLevel '" + voltageLevelId + "' not connected to branch '" + branchId + "'");
throw new PowsyblException("VoltageLevel '" + voltageLevelId + "' not connected to branch '" + branch.getId() + "'");
}
} else {
return new ContingencyTripping(branch.getTerminals());
}
}

public static ContingencyTripping createDanglingLineTripping(Network network, String dlId) {
public static ContingencyTripping createInjectionTripping(Network network, Injection<?> injection) {
Objects.requireNonNull(network);
Objects.requireNonNull(dlId);

DanglingLine danglingLine = network.getDanglingLine(dlId);
if (danglingLine == null) {
throw new PowsyblException("Dangling line '" + dlId + "' not found in the network");
}
Objects.requireNonNull(injection);

return new ContingencyTripping(danglingLine.getTerminal());
return new ContingencyTripping(injection.getTerminal());
}

public static ContingencyTripping createThreeWindingsTransformerTripping(Network network, String twtId) {
public static ContingencyTripping createThreeWindingsTransformerTripping(Network network, ThreeWindingsTransformer twt) {
Objects.requireNonNull(network);
Objects.requireNonNull(twtId);
Objects.requireNonNull(twt);

ThreeWindingsTransformer twt = network.getThreeWindingsTransformer(twtId);
if (twt == null) {
throw new PowsyblException("Three windings transformer '" + twtId + "' not found in the network");
}
return new ContingencyTripping(twt.getTerminals());
}

return new ContingencyTripping(List.of(twt.getLeg1().getTerminal(), twt.getLeg2().getTerminal(), twt.getLeg3().getTerminal()));
public static ContingencyTripping createContingencyTripping(Network network, Identifiable<?> identifiable) {
switch (identifiable.getType()) {
case LINE:
case TWO_WINDINGS_TRANSFORMER:
return ContingencyTripping.createBranchTripping(network, (Branch<?>) identifiable);
case DANGLING_LINE:
case GENERATOR:
case LOAD:
case SHUNT_COMPENSATOR:
return ContingencyTripping.createInjectionTripping(network, (Injection<?>) identifiable);
case THREE_WINDINGS_TRANSFORMER:
return ContingencyTripping.createThreeWindingsTransformerTripping(network, (ThreeWindingsTransformer) identifiable);
case HVDC_LINE:
case SWITCH:
return ContingencyTripping.NO_OP_TRIPPING;
default:
throw new UnsupportedOperationException("Unsupported contingency element type: " + identifiable.getType());
}
}

public void traverse(Set<Switch> switchesToOpen, Set<Terminal> terminalsToDisconnect) {
Expand Down
Loading