@Override public List<CommandExecution> before(Path workingDir) throws IOException { network.getStateManager().setWorkingState(workingStateId); context = EurostagStabilization.this.before(workingDir); return Collections.singletonList(createCommandExecution()); }
public Network getNetwork() { network.getStateManager().setWorkingState(stateId); return network; }
@Override public CompletableFuture<StabilizationResult> runAsync(String workingStateId) { return CompletableFuture.supplyAsync(() -> { network.getStateManager().setWorkingState(workingStateId); return run(); }); }
@Override public CompletableFuture<StabilizationResult> runAsync(String workingStateId) { return CompletableFuture.supplyAsync(() -> { network.getStateManager().setWorkingState(workingStateId); return run(); }); }
@Override public StabilizationResult after(Path workingDir, ExecutionReport report) throws IOException { network.getStateManager().setWorkingState(workingStateId); return EurostagStabilization.this.after(workingDir, context, report); } });
private void removePostContingencyState(String contingencyStateId, Map<String, String> metrics) { network.getStateManager().setWorkingState(contingencyStateId); network.getStateManager().removeState(contingencyStateId); }
public void looseConstraints(String stateId, float margin, boolean applyToBaseCase) { if (network.getStateManager().getStateIds().contains(stateId)) { String workingStateId = network.getStateManager().getWorkingStateId(); network.getStateManager().setWorkingState(stateId); List<LimitViolation> violations = Security.checkLimits(network); looseConstraints(stateId, violations, margin, applyToBaseCase); network.getStateManager().setWorkingState(workingStateId); } else { throw new RuntimeException("No " + stateId + " in network " + network.getId() + ": cannot loose constraints"); } }
private void createPostContingencyState(Contingency contingency, String baseStateId, String contingencyStateId) { network.getStateManager().cloneState(baseStateId, contingencyStateId); network.getStateManager().setWorkingState(contingencyStateId); contingency.toTask().modify(network, computationManager); }
public static void applyInjections(Network network, String stateId, Map<String, Float> injections) { Objects.requireNonNull(network); Objects.requireNonNull(stateId); Objects.requireNonNull(injections); String originalStateId = network.getStateManager().getWorkingStateId(); network.getStateManager().setWorkingState(stateId); injections.keySet().forEach(injection -> { Load load = network.getLoad(injection); if (load != null) { double oldP = load.getTerminal().getP(); LOGGER.debug("Network {}, state {}: incrementing P of load {} from {} to {}", network.getId(), network.getStateManager().getWorkingStateId(), injection, oldP, oldP + injections.get(injection)); load.getTerminal().setP(oldP + injections.get(injection)); load.setP0(oldP + injections.get(injection)); } else { Generator generator = network.getGenerator(injection); if (generator != null) { double oldP = generator.getTerminal().getP(); LOGGER.debug("Network {}, state {}: incrementing P of generator {} from {} to {}", network.getId(), network.getStateManager().getWorkingStateId(), injection, oldP, oldP + injections.get(injection)); generator.getTerminal().setP(oldP + injections.get(injection)); generator.setTargetP(-oldP - injections.get(injection)); } else { LOGGER.error("No load or generator with id {} in network {}: cannot apply the injection", injection, network.getId()); } } }); network.getStateManager().setWorkingState(originalStateId); }
@Override public List<CommandExecution> before(Path workingDir) throws IOException { network.getStateManager().setWorkingState(workingStateId); // copy AMPL model for (String amplModelFileName : AMPL_MODEL_FILE_NAMES) { Files.copy(getClass().getResourceAsStream("/ampl/projector/" + amplModelFileName), workingDir.resolve(amplModelFileName)); } // copy the generators domains file Files.copy(config.getGeneratorsDomainsFile(), workingDir.resolve(AMPL_GENERATORS_DOMAINS_FILE_NAME)); // write input data mapper = AmplUtil.createMapper(network); mapper.dump(workingDir.resolve("mapper.csv")); new AmplNetworkWriter(network, new FileDataSource(workingDir, "ampl"), // "ampl_network_" mapper, new AmplExportConfig(AmplExportConfig.ExportScope.ALL, true, AmplExportConfig.ExportActionType.CURATIVE)) .write(); Command command = new SimpleCommandBuilder() .id("projector") .program(config.getAmplHomeDir().resolve("ampl").toString()) .args("projector.run") .build(); return Collections.singletonList(new CommandExecution(command, 1, 0)); }
network.getStateManager().setWorkingState(state.getName());
network.getStateManager().setWorkingState(postContingencyStateId); } else { network.getStateManager().setWorkingState(postContingencyStateId);
@Override public Void call() throws Exception { // compute post contingency state String postContingencyStateId = OnlineUtils.getPostContingencyId(stateId, contingency.getId()); try { boolean loadflowConverge = computePostContingencyState(network, stateId, contingency, postContingencyStateId); if (loadflowConverge) { logger.info(logHeader + "{}: computing post contingency violations for contingency {}", stateId, contingency.getId()); List<LimitViolation> violations = Security.checkLimits(network, parameters.getLimitReduction()); if (violations != null && !violations.isEmpty()) { logger.info(logHeader + "{}: storing post contingency violations/loadflow results for contingency {} in online db", stateId, contingency.getId()); onlineDb.storePostContingencyViolations(context.getWorkflowId(), Integer.valueOf(stateId), contingency.getId(), loadflowConverge, violations); } else { logger.info(logHeader + "{}: no post contingency violations for contingency {}", stateId, contingency.getId()); } } else { logger.info("{}: post contingency loadflow does not converge for contingency {}, skipping computing post contingency violations", stateId, contingency.getId()); } network.getStateManager().setWorkingState(stateId); } finally { if (network.getStateManager().getStateIds().contains(postContingencyStateId)) { network.getStateManager().removeState(postContingencyStateId); } } return null; } }
private void setNewHighVoltageLimit(String stateId, LimitViolation violation, float margin, boolean applyToBaseCase) { VoltageLevel voltageLevel = network.getVoltageLevel(violation.getSubjectId()); if (voltageLevel != null) { if (violation.getValue() > voltageLevel.getHighVoltageLimit()) { // it could already have been fixed double newLimit = getNewUpperLimit(violation, margin); LOGGER.debug("State {}: changing high voltage limit of voltage level {}: {} -> {}", stateId, voltageLevel.getId(), violation.getLimit(), newLimit); voltageLevel.setHighVoltageLimit(newLimit); if (applyToBaseCase && !StateManagerConstants.INITIAL_STATE_ID.equals(stateId)) { // change the limit also to basecase network.getStateManager().setWorkingState(StateManagerConstants.INITIAL_STATE_ID); voltageLevel = network.getVoltageLevel(violation.getSubjectId()); LOGGER.debug("State {}: changing high voltage limit of voltage level {}: {} -> {}", StateManagerConstants.INITIAL_STATE_ID, voltageLevel.getId(), violation.getLimit(), newLimit); voltageLevel.setHighVoltageLimit(newLimit); network.getStateManager().setWorkingState(stateId); } } } else { LOGGER.warn("State {}: cannot change high voltage limit of voltage level {}: no voltage level with this id in the network", stateId, violation.getSubjectId()); } }
String oldState = network.getStateManager().getWorkingStateId(); network.getStateManager().cloneState(oldState, topoCheckStateId); network.getStateManager().setWorkingState(topoCheckStateId); try { network.getStateManager().setWorkingState(oldState);
if (network.getStateManager().getStateIds().contains(stateId)) { String workingStateId = network.getStateManager().getWorkingStateId(); network.getStateManager().setWorkingState(stateId); LOGGER.info("Loosening constraints of network {}, state {}, using margin {}", network.getId(), network.getStateManager().setWorkingState(workingStateId); } else { throw new RuntimeException("No " + stateId + " in network " + network.getId() + ": cannot loose constraints");
protected static void reintegrateLfState(Network network, String workingStateId, boolean onlyVoltage) { network.getStateManager().setWorkingState(workingStateId); for (Generator g : network.getGenerators()) { Terminal t = g.getTerminal();
private void setNewLowVoltageLimit(String stateId, LimitViolation violation, float margin, boolean applyToBaseCase) { VoltageLevel voltageLevel = network.getVoltageLevel(violation.getSubjectId()); if (voltageLevel != null) { if (violation.getValue() < voltageLevel.getLowVoltageLimit()) { // it could already have been fixed double newLimit = getNewLowerLimit(violation, margin); LOGGER.debug("State {}: changing low voltage limit of voltage level {}: {} -> {}", stateId, voltageLevel.getId(), violation.getLimit(), newLimit); voltageLevel.setLowVoltageLimit(newLimit); if (applyToBaseCase && !StateManagerConstants.INITIAL_STATE_ID.equals(stateId)) { // change the limit also to basecase network.getStateManager().setWorkingState(StateManagerConstants.INITIAL_STATE_ID); voltageLevel = network.getVoltageLevel(violation.getSubjectId()); LOGGER.debug("State {}: changing low voltage limit of voltage level {}: {} -> {}", StateManagerConstants.INITIAL_STATE_ID, voltageLevel.getId(), violation.getLimit(), newLimit); voltageLevel.setLowVoltageLimit(newLimit); } } } else { LOGGER.warn("State {}: cannot change low voltage limit of voltage level {}: no voltage level with this id in the network", stateId, violation.getSubjectId()); } }
@Override public Boolean after(Path workingDir, ExecutionReport report) throws IOException { report.log(); if (report.getErrors().isEmpty()) { network.getStateManager().setWorkingState(workingStateId); Map<String, String> metrics = new HashMap<>(); new AmplNetworkReader(new FileDataSource(workingDir, "projector_results"/*"ampl_network_"*/), network, mapper) .readBuses() .readGenerators() .readBranches() .readLoads() .readPhaseTapChangers() .readRatioTapChangers() .readShunts() .readStaticVarcompensator() .readHvdcLines() .readLccConverterStations() .readVscConverterStations() .readMetrics(metrics); LOGGER.debug("Projector metrics: {}", metrics); } return report.getErrors().isEmpty(); } });
branch.newCurrentLimits1().setPermanentLimit(newLimit).add(); if (applyToBaseCase && !StateManagerConstants.INITIAL_STATE_ID.equals(stateId)) { // change the limit also to basecase network.getStateManager().setWorkingState(StateManagerConstants.INITIAL_STATE_ID); branch = network.getBranch(violation.getSubjectId()); LOGGER.debug("State {}: changing current limit 1 of branch {}: {} -> {}", newLimit); branch.newCurrentLimits1().setPermanentLimit(newLimit).add(); network.getStateManager().setWorkingState(stateId); branch.newCurrentLimits2().setPermanentLimit(newLimit).add(); if (applyToBaseCase && !StateManagerConstants.INITIAL_STATE_ID.equals(stateId)) { // change the limit also to basecase network.getStateManager().setWorkingState(StateManagerConstants.INITIAL_STATE_ID); branch = network.getBranch(violation.getSubjectId()); LOGGER.debug("State {}: changing current limit 2 of branch {}: {} -> {}", newLimit); branch.newCurrentLimits2().setPermanentLimit(newLimit).add(); network.getStateManager().setWorkingState(stateId);