Skip to content

Commit

Permalink
Add async run to OpenReac runner (#49)
Browse files Browse the repository at this point in the history
Signed-off-by: BOUHOURS Antoine <antoine.bouhours@rte-france.com>
  • Loading branch information
antoinebhs authored Jan 8, 2024
1 parent 2104ad2 commit 74796c7
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
29 changes: 29 additions & 0 deletions open-reac/src/main/java/com/powsybl/openreac/OpenReacRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
import com.powsybl.openreac.parameters.output.OpenReacResult;
import com.powsybl.openreac.parameters.output.OpenReacStatus;

import java.util.Objects;
import java.util.concurrent.CompletableFuture;

/**
* @author Nicolas Pierre <nicolas.pierre at artelys.com>
*/
Expand All @@ -43,11 +46,37 @@ public static OpenReacResult run(Network network, String variantId, OpenReacPara
* @return All information about the run and possible modifications to apply.
*/
public static OpenReacResult run(Network network, String variantId, OpenReacParameters parameters, OpenReacConfig config, ComputationManager manager) {
Objects.requireNonNull(network);
Objects.requireNonNull(variantId);
Objects.requireNonNull(parameters);
Objects.requireNonNull(config);
Objects.requireNonNull(manager);
parameters.checkIntegrity(network);
AmplModel reactiveOpf = OpenReacModel.buildModel();
OpenReacAmplIOFiles amplIoInterface = new OpenReacAmplIOFiles(parameters, network, config.isDebug());
AmplResults run = AmplModelRunner.run(network, variantId, reactiveOpf, manager, amplIoInterface);
return new OpenReacResult(run.isSuccess() && amplIoInterface.checkErrors() ? OpenReacStatus.OK : OpenReacStatus.NOT_OK,
amplIoInterface, run.getIndicators());
}

/**
* Run OpenReac on the given network. It will NOT modify the network.
* @param variantId the network variant to use. It will set the variant on the network.
* @param parameters Parameters to customize the OpenReac run.
* @param config allows debugging
* @return All information about the run and possible modifications to apply.
*/
public static CompletableFuture<OpenReacResult> runAsync(Network network, String variantId, OpenReacParameters parameters, OpenReacConfig config, ComputationManager manager) {
Objects.requireNonNull(network);
Objects.requireNonNull(variantId);
Objects.requireNonNull(parameters);
Objects.requireNonNull(config);
Objects.requireNonNull(manager);
parameters.checkIntegrity(network);
AmplModel reactiveOpf = OpenReacModel.buildModel();
OpenReacAmplIOFiles amplIoInterface = new OpenReacAmplIOFiles(parameters, network, config.isDebug());
CompletableFuture<AmplResults> runAsync = AmplModelRunner.runAsync(network, variantId, reactiveOpf, manager, amplIoInterface);
return runAsync.thenApply(run -> new OpenReacResult(run.isSuccess() && amplIoInterface.checkErrors() ? OpenReacStatus.OK : OpenReacStatus.NOT_OK,
amplIoInterface, run.getIndicators()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -217,6 +218,31 @@ public void testOutputFileParsing() throws IOException {
}
}

@Test
void testRunAsync() throws IOException {
Network network = IeeeCdfNetworkFactory.create14();
String subFolder = "openreac-output-ieee14";
OpenReacParameters parameters = new OpenReacParameters();
setDefaultVoltageLimits(network); // set default voltage limits to every voltage levels of the network
LocalCommandExecutor localCommandExecutor = new TestLocalCommandExecutor(
List.of(subFolder + "/reactiveopf_results_generators.csv",
subFolder + "/reactiveopf_results_indic.txt",
subFolder + "/reactiveopf_results_rtc.csv",
subFolder + "/reactiveopf_results_shunts.csv",
subFolder + "/reactiveopf_results_static_var_compensators.csv",
subFolder + "/reactiveopf_results_vsc_converter_stations.csv"));
// To really run open reac, use the commented line below. Be sure that open-reac/src/test/resources/com/powsybl/config/test/config.yml contains your ampl path
// try (ComputationManager computationManager = new LocalComputationManager()) {
try (ComputationManager computationManager = new LocalComputationManager(new LocalComputationConfig(tmpDir),
localCommandExecutor, ForkJoinPool.commonPool())) {
CompletableFuture<OpenReacResult> openReacResults = OpenReacRunner.runAsync(network,
network.getVariantManager().getWorkingVariantId(), parameters, new OpenReacConfig(true),
computationManager);
OpenReacResult openReacResult = openReacResults.join();
assertEquals(OpenReacStatus.OK, openReacResult.getStatus());
}
}

private void testAllModifAndLoadFlow(Network network, String subFolder, OpenReacParameters parameters) throws IOException {
LocalCommandExecutor localCommandExecutor = new TestLocalCommandExecutor(
List.of(subFolder + "/reactiveopf_results_generators.csv",
Expand Down

0 comments on commit 74796c7

Please sign in to comment.