Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.powsybl.openrao.data.raoresult.io.cne.core;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.contingency.Contingency;
import com.powsybl.contingency.ContingencyElementType;
import com.powsybl.iidm.network.TwoSides;
Expand Down Expand Up @@ -73,7 +74,7 @@ public void setUp() {
.newInstant(CURATIVE_INSTANT_ID, InstantKind.CURATIVE);
curativeInstant = crac.getInstant(CURATIVE_INSTANT_ID);
raoResult = Mockito.mock(RaoResult.class);
raoParameters = new RaoParameters();
raoParameters = new RaoParameters(ReportNode.NO_OP);

properties = new Properties();
properties.setProperty("rao-result.export.core-cne.relative-positive-margins", "true");
Expand Down Expand Up @@ -242,7 +243,7 @@ void testExportPreventivePureMnec() {
.add();

mockCnecResult(cnec1, 80, 20, 200, .1);
raoParameters.addExtension(OpenRaoSearchTreeParameters.class, new OpenRaoSearchTreeParameters());
raoParameters.addExtension(OpenRaoSearchTreeParameters.class, new OpenRaoSearchTreeParameters(ReportNode.NO_OP));
getSensitivityWithLoadFlowParameters(raoParameters).getLoadFlowParameters().setDc(true);

raoParameters.getObjectiveFunctionParameters().setType(ObjectiveFunctionParameters.ObjectiveFunctionType.MAX_MIN_RELATIVE_MARGIN);
Expand Down Expand Up @@ -284,7 +285,7 @@ void testExportPreventiveCnecAndMnec() {
mockCnecResult(cnec1, 80, 20, 200, .1);

raoParameters.getObjectiveFunctionParameters().setType(ObjectiveFunctionParameters.ObjectiveFunctionType.MAX_MIN_RELATIVE_MARGIN);
raoParameters.addExtension(OpenRaoSearchTreeParameters.class, new OpenRaoSearchTreeParameters());
raoParameters.addExtension(OpenRaoSearchTreeParameters.class, new OpenRaoSearchTreeParameters(ReportNode.NO_OP));
getSensitivityWithLoadFlowParameters(raoParameters).getLoadFlowParameters().setDc(true);
CneHelper cneHelper = new CneHelper(crac, raoResult, properties, CORE_CNE_EXPORT_PROPERTIES_PREFIX);
CoreCneCnecsCreator cneCnecsCreator = new CoreCneCnecsCreator(cneHelper, new MockCracCreationContext(crac));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.powsybl.openrao.monitoring;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.LoadFlowParameters;
import com.powsybl.openrao.commons.PhysicalParameter;
Expand All @@ -28,7 +29,7 @@
/**
* @author Roxane Chen {@literal <roxane.chen at rte-france.com>}
*/
public class MonitoringTest {
class MonitoringTest {

@Test
void testRunMonitoringOnMultiCurative() throws IOException {
Expand All @@ -40,9 +41,9 @@ void testRunMonitoringOnMultiCurative() throws IOException {

Network network = Network.read("voltage_monitoring.xiidm", getClass().getResourceAsStream("/voltage_monitoring.xiidm"));
Crac crac = Crac.read("voltage_monitoring_with_multicurative_cnec.json", getClass().getResourceAsStream("/voltage_monitoring_with_multicurative_cnec.json"), network);
RaoParameters raoParameters = JsonRaoParameters.read(getClass().getResourceAsStream("/monitoring_parameters.json"));
RaoParameters raoParameters = JsonRaoParameters.read(getClass().getResourceAsStream("/monitoring_parameters.json"), ReportNode.NO_OP);

RaoResult raoResult = new Castor().run(RaoInput.build(network, crac).build(), raoParameters).join();
RaoResult raoResult = new Castor().run(RaoInput.build(network, crac).build(), raoParameters, ReportNode.NO_OP).join();

MonitoringInput monitoringInput = new MonitoringInput.MonitoringInputBuilder()
.withCrac(crac)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.powsybl.openrao.monitoring;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.contingency.ContingencyElementType;
import com.powsybl.iidm.network.Network;
Expand Down Expand Up @@ -656,9 +657,9 @@ void testVoltageMonitoringOfCnecsOnDifferentInstants() throws IOException {
// If we have a curative voltage cnec we should show the margin in the raoResult after CRA.
network = Network.read("voltage_monitoring.xiidm", getClass().getResourceAsStream("/voltage_monitoring.xiidm"));
crac = Crac.read("voltage_monitoring_with_preventive_crac.json", getClass().getResourceAsStream("/voltage_monitoring_with_preventive_crac.json"), network);
RaoParameters raoParameters = JsonRaoParameters.read(getClass().getResourceAsStream("/monitoring_parameters.json"));
RaoParameters raoParameters = JsonRaoParameters.read(getClass().getResourceAsStream("/monitoring_parameters.json"), ReportNode.NO_OP);

raoResult = new Castor().run(RaoInput.build(network, crac).build(), raoParameters).join();
raoResult = new Castor().run(RaoInput.build(network, crac).build(), raoParameters, ReportNode.NO_OP).join();
assertTrue(raoResult.isSecure(PhysicalParameter.FLOW)); // FIXME: crashes if no physical parameter provided

MonitoringInput monitoringInput = MonitoringInput.buildWithVoltage(network, crac, raoResult).build();
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@
<maven.jar.version>3.3.0</maven.jar.version>
<maven.jvnet.jaxb.version>4.0.8</maven.jvnet.jaxb.version>
<mockito.core.version>5.12.0</mockito.core.version>
<powsybl.core.version>7.1.2</powsybl.core.version>
<powsybl.core.version>7.2.0-SNAPSHOT</powsybl.core.version>
<powsybl.entsoe.version>3.1.0</powsybl.entsoe.version>
<powsybl.openloadflow.version>2.1.1</powsybl.openloadflow.version>
<rdf4j.version>5.1.3</rdf4j.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.commons.util.ServiceLoaderCache;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.data.raoresult.api.RaoResult;
import com.powsybl.openrao.raoapi.parameters.RaoParameters;
import com.powsybl.openrao.raoapi.reports.RaoApiReports;
import com.powsybl.tools.Version;

import java.time.Instant;
Expand All @@ -22,8 +24,6 @@
import java.util.ServiceLoader;
import java.util.concurrent.CompletableFuture;

import static com.powsybl.openrao.commons.logs.OpenRaoLoggerProvider.BUSINESS_WARNS;

/**
* RA optimisation main API. It is a utility class (so with only static methods) used as an entry point for running
* a RA optimisation allowing to choose either a specific find implementation or just to rely on default one.
Expand Down Expand Up @@ -51,50 +51,84 @@ public Runner(RaoProvider provider) {
this.provider = Objects.requireNonNull(provider);
}

public CompletableFuture<RaoResult> runAsync(RaoInput raoInput, RaoParameters parameters, Instant targetEndInstant) {
public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput,
final RaoParameters parameters,
final Instant targetEndInstant,
final ReportNode reportNode) {
Objects.requireNonNull(raoInput, "RAO input should not be null");
Objects.requireNonNull(parameters, "parameters should not be null");

Version openRaoVersion = ServiceLoader.load(Version.class).stream()
.map(ServiceLoader.Provider::get)
.filter(version -> version.getRepositoryName().equals("open-rao"))
.findFirst().orElseThrow();
BUSINESS_WARNS.warn("Running RAO using Open RAO version {} from git commit {}.", openRaoVersion.getMavenProjectVersion(), openRaoVersion.getGitVersion());

return provider.run(raoInput, parameters, targetEndInstant);
RaoApiReports.reportRaoVersionAndGitCommit(reportNode, openRaoVersion.getMavenProjectVersion(), openRaoVersion.getGitVersion());

return provider.run(raoInput, parameters, targetEndInstant, reportNode);
}

public CompletableFuture<RaoResult> runAsync(RaoInput raoInput, RaoParameters parameters) {
return runAsync(raoInput, parameters, null);
public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput, final RaoParameters parameters, final Instant targetEndInstant) {
return runAsync(raoInput, parameters, targetEndInstant, ReportNode.NO_OP);
}

public CompletableFuture<RaoResult> runAsync(RaoInput raoInput) {
return runAsync(raoInput, (Instant) null);
public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput, final RaoParameters parameters, final ReportNode reportNode) {
return runAsync(raoInput, parameters, null, reportNode);
}

public CompletableFuture<RaoResult> runAsync(RaoInput raoInput, Instant targetEndInstant) {
return runAsync(raoInput, RaoParameters.load(), targetEndInstant);
public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput, final RaoParameters parameters) {
return runAsync(raoInput, parameters, null, ReportNode.NO_OP);
}

public RaoResult run(RaoInput raoInput, RaoParameters parameters, Instant targetEndInstant) {
public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput, final ReportNode reportNode) {
return runAsync(raoInput, (Instant) null, reportNode);
}

public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput) {
return runAsync(raoInput, (Instant) null, ReportNode.NO_OP);
}

public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput, final Instant targetEndInstant, final ReportNode reportNode) {
return runAsync(raoInput, RaoParameters.load(reportNode), targetEndInstant, reportNode);
}

public CompletableFuture<RaoResult> runAsync(final RaoInput raoInput, final Instant targetEndInstant) {
return runAsync(raoInput, RaoParameters.load(ReportNode.NO_OP), targetEndInstant, ReportNode.NO_OP);
}

public RaoResult run(final RaoInput raoInput, final RaoParameters parameters, final Instant targetEndInstant, final ReportNode reportNode) {
Objects.requireNonNull(raoInput, "RAO input should not be null");
Objects.requireNonNull(parameters, "parameters should not be null");
Objects.requireNonNull(reportNode, "ReportNode should not be null");

Version openRaoVersion = ServiceLoader.load(Version.class).stream()
.map(ServiceLoader.Provider::get)
.filter(version -> version.getRepositoryName().equals("open-rao"))
.findFirst().orElseThrow();
BUSINESS_WARNS.warn("Running RAO using Open RAO version {} from git commit {}.", openRaoVersion.getMavenProjectVersion(), openRaoVersion.getGitVersion());

return provider.run(raoInput, parameters, targetEndInstant).join();
RaoApiReports.reportRaoVersionAndGitCommit(reportNode, openRaoVersion.getMavenProjectVersion(), openRaoVersion.getGitVersion());

return provider.run(raoInput, parameters, targetEndInstant, reportNode).join();
}

public RaoResult run(final RaoInput raoInput, final RaoParameters parameters, final Instant targetEndInstant) {
return run(raoInput, parameters, targetEndInstant, ReportNode.NO_OP);
}

public RaoResult run(final RaoInput raoInput, final RaoParameters parameters, final ReportNode reportNode) {
return run(raoInput, parameters, null, reportNode);
}

public RaoResult run(final RaoInput raoInput, final RaoParameters parameters) {
return run(raoInput, parameters, ReportNode.NO_OP);
}

public RaoResult run(RaoInput raoInput, RaoParameters parameters) {
return run(raoInput, parameters, null);
public RaoResult run(final RaoInput raoInput, final ReportNode reportNode) {
return run(raoInput, RaoParameters.load(reportNode), null, reportNode);
}

public RaoResult run(RaoInput raoInput) {
return run(raoInput, RaoParameters.load(), null);
public RaoResult run(final RaoInput raoInput) {
return run(raoInput, ReportNode.NO_OP);
}

public String getName() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.powsybl.openrao.raoapi;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.openrao.data.raoresult.api.RaoResult;
import com.powsybl.openrao.raoapi.parameters.RaoParameters;

Expand All @@ -22,9 +23,10 @@ public interface RaoProvider {
/**
* @param raoInput Data to optimize. Contains a Crac, a Network, the ID of the current network variant, and more
* @param parameters RAO parameters.
* @param reportNode Parent reportNode.
* @return A completable future of a RaoComputationResult it gathers all the optimization results.
*/
CompletableFuture<RaoResult> run(RaoInput raoInput, RaoParameters parameters);
CompletableFuture<RaoResult> run(RaoInput raoInput, RaoParameters parameters, ReportNode reportNode);

CompletableFuture<RaoResult> run(RaoInput raoInput, RaoParameters parameters, Instant targetEndInstant);
CompletableFuture<RaoResult> run(RaoInput raoInput, RaoParameters parameters, Instant targetEndInstant, ReportNode reportNode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.commons.util.ServiceLoaderCache;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.data.raoresult.api.TimeCoupledRaoResult;
import com.powsybl.openrao.raoapi.parameters.RaoParameters;
import com.powsybl.openrao.raoapi.reports.RaoApiReports;
import com.powsybl.tools.Version;

import java.util.List;
import java.util.Objects;
import java.util.ServiceLoader;

import static com.powsybl.openrao.commons.logs.OpenRaoLoggerProvider.BUSINESS_WARNS;

/**
* @author Thomas Bouquet {@literal <thomas.bouquet at rte-france.com>}
*/
Expand All @@ -40,9 +40,11 @@ private TimeCoupledRao() {
public static class Runner {

private final TimeCoupledRaoProvider provider;
private final ReportNode reportNode;

public Runner(TimeCoupledRaoProvider provider) {
public Runner(final TimeCoupledRaoProvider provider, final ReportNode reportNode) {
this.provider = Objects.requireNonNull(provider);
this.reportNode = reportNode;
}

public TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters) {
Expand All @@ -53,13 +55,13 @@ public TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput, Ra
.map(ServiceLoader.Provider::get)
.filter(version -> version.getRepositoryName().equals("open-rao"))
.findFirst().orElseThrow();
BUSINESS_WARNS.warn("Running RAO using Open RAO version {} from git commit {}.", openRaoVersion.getMavenProjectVersion(), openRaoVersion.getGitVersion());
RaoApiReports.reportRaoVersionAndGitCommit(reportNode, openRaoVersion.getMavenProjectVersion(), openRaoVersion.getGitVersion());

return provider.run(raoInput, parameters).join();
return provider.run(raoInput, parameters, reportNode).join();
}

public TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput) {
return run(raoInput, RaoParameters.load());
return run(raoInput, RaoParameters.load(reportNode));
}

public String getName() {
Expand All @@ -74,8 +76,8 @@ public String getName() {
* @param name name of the RAO implementation, null if we want to use default one
* @return a runner for RAO implementation named {@code name}
*/
public static TimeCoupledRao.Runner find(String name) {
return find(name, RAO_PROVIDERS.get(), PlatformConfig.defaultConfig());
public static TimeCoupledRao.Runner find(final String name, final ReportNode reportNode) {
return find(name, RAO_PROVIDERS.get(), PlatformConfig.defaultConfig(), reportNode);
}

/**
Expand All @@ -84,8 +86,8 @@ public static TimeCoupledRao.Runner find(String name) {
* @throws OpenRaoException in case we cannot find a default implementation
* @return a runner for default RAO implementation
*/
public static TimeCoupledRao.Runner find() {
return find(null);
public static TimeCoupledRao.Runner find(final ReportNode reportNode) {
return find(null, reportNode);
}

/**
Expand All @@ -98,7 +100,10 @@ public static TimeCoupledRao.Runner find() {
* @param platformConfig platform config to look for default flowbased implementation name
* @return a runner for flowbased implementation named {@code name}
*/
public static TimeCoupledRao.Runner find(String name, List<TimeCoupledRaoProvider> providers, PlatformConfig platformConfig) {
public static TimeCoupledRao.Runner find(final String name,
final List<TimeCoupledRaoProvider> providers,
final PlatformConfig platformConfig,
final ReportNode reportNode) {
Objects.requireNonNull(providers);
Objects.requireNonNull(platformConfig);

Expand Down Expand Up @@ -130,14 +135,14 @@ public static TimeCoupledRao.Runner find(String name, List<TimeCoupledRaoProvide
.orElseThrow(() -> new OpenRaoException("RA optimizer provider '" + raOptimizerName + "' not found"));
}

return new TimeCoupledRao.Runner(provider);
return new TimeCoupledRao.Runner(provider, reportNode);
}

public static TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters) {
return find().run(raoInput, parameters);
public static TimeCoupledRaoResult run(final TimeCoupledRaoInputWithNetworkPaths raoInput, final RaoParameters parameters, final ReportNode reportNode) {
return find(reportNode).run(raoInput, parameters);
}

public static TimeCoupledRaoResult run(TimeCoupledRaoInputWithNetworkPaths raoInput) {
return find().run(raoInput);
public static TimeCoupledRaoResult run(final TimeCoupledRaoInputWithNetworkPaths raoInput, final ReportNode reportNode) {
return find(reportNode).run(raoInput);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.powsybl.openrao.raoapi;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.openrao.data.raoresult.api.TimeCoupledRaoResult;
import com.powsybl.openrao.raoapi.parameters.RaoParameters;

Expand All @@ -23,5 +24,5 @@ public interface TimeCoupledRaoProvider {
* @param parameters RAO parameters.
* @return A completable future of a RaoComputationResult for each timestamp.
*/
CompletableFuture<TimeCoupledRaoResult> run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters);
CompletableFuture<TimeCoupledRaoResult> run(TimeCoupledRaoInputWithNetworkPaths raoInput, RaoParameters parameters, ReportNode reportNode);
}
Loading
Loading