/** * This implementation takes the current value to be checked from the Network. */ @Override public void checkCurrent(Branch branch, Branch.Side side, Consumer<LimitViolation> consumer) { checkCurrent(branch, side, branch.getTerminal(side).getI(), consumer); }
private static VoltageLevel getVoltageLevel(LimitViolation limitViolation, Network network) { Objects.requireNonNull(network); Objects.requireNonNull(limitViolation); Identifiable identifiable = network.getIdentifiable(limitViolation.getSubjectId()); if (identifiable instanceof Branch) { Branch branch = (Branch) identifiable; return branch.getTerminal(limitViolation.getSide()).getVoltageLevel(); } else if (identifiable instanceof Injection) { Injection injection = (Injection) identifiable; return injection.getTerminal().getVoltageLevel(); } else if (identifiable instanceof VoltageLevel) { return (VoltageLevel) identifiable; } else if (identifiable instanceof Bus) { Bus bus = (Bus) identifiable; return bus.getVoltageLevel(); } else { throw new AssertionError("Unexpected identifiable type: " + identifiable.getClass()); } }
@Override public void checkCurrent(Branch branch, Branch.Side side, double value, Consumer<LimitViolation> consumer) { Branch.Overload overload = LimitViolationUtils.checkTemporaryLimits(branch, side, limitReduction, value); if (currentLimitTypes.contains(Security.CurrentLimitType.TATL) && (overload != null)) { consumer.accept(new LimitViolation(branch.getId(), branch.getName(), LimitViolationType.CURRENT, overload.getPreviousLimitName(), overload.getTemporaryLimit().getAcceptableDuration(), overload.getPreviousLimit(), limitReduction, branch.getTerminal(side).getI(), side)); } else if (currentLimitTypes.contains(Security.CurrentLimitType.PATL)) { checkPermanentLimit(branch, side, value, consumer); } }
@Override public void onPreContingencyResult(RunningContext context, LimitViolationsResult preContingencyResult) { for (LimitViolation limitViolation : preContingencyResult.getLimitViolations()) { if (limitViolation.getLimitType() == LimitViolationType.CURRENT) { Branch branch = context.getNetwork().getBranch(limitViolation.getSubjectId()); double preContingencyValue = branch.getTerminal(limitViolation.getSide()).getP(); limitViolation.addExtension(ActivePowerExtension.class, new ActivePowerExtension(preContingencyValue)); } } }
@Override public void onPostContingencyResult(RunningContext context, PostContingencyResult postContingencyResult) { String workingStateId = context.getNetwork().getVariantManager().getWorkingVariantId(); for (LimitViolation limitViolation : postContingencyResult.getLimitViolationsResult().getLimitViolations()) { if (limitViolation.getLimitType() == LimitViolationType.CURRENT) { Branch branch = context.getNetwork().getBranch(limitViolation.getSubjectId()); context.getNetwork().getVariantManager().setWorkingVariant(context.getInitialStateId()); limitViolation.addExtension(CurrentExtension.class, new CurrentExtension(branch.getTerminal(limitViolation.getSide()).getI())); double preContingencyValue = branch.getTerminal(limitViolation.getSide()).getP(); context.getNetwork().getVariantManager().setWorkingVariant(workingStateId); double postContingencyValue = branch.getTerminal(limitViolation.getSide()).getP(); limitViolation.addExtension(ActivePowerExtension.class, new ActivePowerExtension(preContingencyValue, postContingencyValue)); } } } }