Skip to content

Commit

Permalink
Dry run - 3rd proposal - full dry run only (powsybl#3123)
Browse files Browse the repository at this point in the history
* starts to implement full dryrun methods
* add getName method to network modifications
* add missing getName method
* switch copy to json

Signed-off-by: Nicolas Rol <[email protected]>
  • Loading branch information
rolnico authored Sep 24, 2024
1 parent 465eab1 commit 566354f
Show file tree
Hide file tree
Showing 95 changed files with 864 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ public ScriptNetworkModification(Closure<Void> script) {
this.script = Objects.requireNonNull(script);
}

@Override
public String getName() {
return "ScriptNetworkModification";
}

public Closure<Void> getScript() {
return script;
}
Expand Down
9 changes: 4 additions & 5 deletions iidm/iidm-modification/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@
<groupId>${project.groupId}</groupId>
<artifactId>powsybl-iidm-extensions</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>powsybl-iidm-serde</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>powsybl-loadflow-api</artifactId>
Expand Down Expand Up @@ -95,11 +99,6 @@
<artifactId>powsybl-iidm-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>powsybl-iidm-serde</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
package com.powsybl.iidm.modification;

import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.io.TreeDataFormat;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.commons.report.TypedValue;
import com.powsybl.computation.ComputationManager;
import com.powsybl.computation.local.LocalComputationManager;
import com.powsybl.iidm.modification.topology.DefaultNamingStrategy;
import com.powsybl.iidm.modification.topology.NamingStrategy;
import com.powsybl.iidm.serde.NetworkSerDe;
import com.powsybl.iidm.network.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -33,56 +36,135 @@ public void apply(Network network) {
apply(network, new DefaultNamingStrategy(), false, LocalComputationManager.getDefault(), ReportNode.NO_OP);
}

@Override
public boolean apply(Network network, boolean dryRun) {
return apply(network, new DefaultNamingStrategy(), false, LocalComputationManager.getDefault(), ReportNode.NO_OP, dryRun);
}

@Override
public void apply(Network network, ComputationManager computationManager) {
apply(network, new DefaultNamingStrategy(), false, computationManager, ReportNode.NO_OP);
}

@Override
public boolean apply(Network network, ComputationManager computationManager, boolean dryRun) {
return apply(network, new DefaultNamingStrategy(), false, computationManager, ReportNode.NO_OP, dryRun);
}

@Override
public void apply(Network network, ComputationManager computationManager, ReportNode reportNode) {
apply(network, new DefaultNamingStrategy(), false, computationManager, reportNode);
}

@Override
public boolean apply(Network network, ComputationManager computationManager, ReportNode reportNode, boolean dryRun) {
return apply(network, new DefaultNamingStrategy(), false, computationManager, reportNode, dryRun);
}

@Override
public void apply(Network network, ReportNode reportNode) {
apply(network, new DefaultNamingStrategy(), false, LocalComputationManager.getDefault(), reportNode);
}

@Override
public boolean apply(Network network, ReportNode reportNode, boolean dryRun) {
return apply(network, new DefaultNamingStrategy(), false, LocalComputationManager.getDefault(), reportNode, dryRun);
}

@Override
public void apply(Network network, boolean throwException, ReportNode reportNode) {
apply(network, new DefaultNamingStrategy(), throwException, LocalComputationManager.getDefault(), reportNode);
}

@Override
public boolean apply(Network network, boolean throwException, ReportNode reportNode, boolean dryRun) {
return apply(network, new DefaultNamingStrategy(), throwException, LocalComputationManager.getDefault(), reportNode, dryRun);
}

@Override
public void apply(Network network, boolean throwException, ComputationManager computationManager, ReportNode reportNode) {
apply(network, new DefaultNamingStrategy(), throwException, computationManager, reportNode);
}

@Override
public boolean apply(Network network, boolean throwException, ComputationManager computationManager, ReportNode reportNode, boolean dryRun) {
return apply(network, new DefaultNamingStrategy(), throwException, computationManager, reportNode, dryRun);
}

@Override
public void apply(Network network, NamingStrategy namingStrategy) {
apply(network, namingStrategy, false, LocalComputationManager.getDefault(), ReportNode.NO_OP);
}

@Override
public boolean apply(Network network, NamingStrategy namingStrategy, boolean dryRun) {
return apply(network, namingStrategy, false, LocalComputationManager.getDefault(), ReportNode.NO_OP, dryRun);
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, ComputationManager computationManager) {
apply(network, namingStrategy, false, computationManager, ReportNode.NO_OP);
}

@Override
public boolean apply(Network network, NamingStrategy namingStrategy, ComputationManager computationManager, boolean dryRun) {
return apply(network, namingStrategy, false, computationManager, ReportNode.NO_OP, dryRun);
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, ComputationManager computationManager, ReportNode reportNode) {
apply(network, namingStrategy, false, computationManager, reportNode);
}

@Override
public boolean apply(Network network, NamingStrategy namingStrategy, ComputationManager computationManager, ReportNode reportNode, boolean dryRun) {
return apply(network, namingStrategy, false, computationManager, reportNode, dryRun);
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, ReportNode reportNode) {
apply(network, namingStrategy, false, LocalComputationManager.getDefault(), reportNode);
}

@Override
public boolean apply(Network network, NamingStrategy namingStrategy, ReportNode reportNode, boolean dryRun) {
return apply(network, namingStrategy, false, LocalComputationManager.getDefault(), reportNode, dryRun);
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException, ReportNode reportNode) {
apply(network, namingStrategy, throwException, LocalComputationManager.getDefault(), reportNode);
}

@Override
public boolean apply(Network network, NamingStrategy namingStrategy, boolean throwException, ReportNode reportNode, boolean dryRun) {
return apply(network, namingStrategy, throwException, LocalComputationManager.getDefault(), reportNode, dryRun);
}

@Override
public boolean apply(Network network, NamingStrategy namingStrategy, boolean throwException, ComputationManager computationManager, ReportNode reportNode, boolean dryRun) {
if (dryRun) {
ReportNode dryRunReportNode = reportOnDryRunStart(network, reportNode);
try {
//TODO The following copy performs a JSON export/import. It will be more performant to change it to the BIN format.
Network dryRunNetwork = NetworkSerDe.copy(network, TreeDataFormat.JSON);
dryRunNetwork.setName(network.getNameOrId() + "_Dry-run");
apply(dryRunNetwork, namingStrategy, true, computationManager, dryRunReportNode);
} catch (PowsyblException powsyblException) {
reportOnInconclusiveDryRun(dryRunReportNode, powsyblException.getMessage());
return false;
}
dryRunReportNode.newReportNode()
.withMessageTemplate("networkModificationDryRun-success",
"Dry-run: Network modifications can successfully be applied on network '${networkNameOrId}'")
.withSeverity(TypedValue.INFO_SEVERITY)
.add();
} else {
apply(network, namingStrategy, throwException, computationManager, reportNode);
}
return true;
}

/**
* Utility during apply functions, logs or throw the message.
*
Expand All @@ -96,6 +178,32 @@ protected void logOrThrow(boolean throwException, String message) {
}
}

/**
* Returns the name of the network modification. That name corresponds to the type of network modification
* @return the name of the network modification
*/
public abstract String getName();

protected ReportNode reportOnDryRunStart(Network network, ReportNode reportNode) {
String templateKey = "networkModificationDryRun";
String messageTemplate = "Dry-run: Checking if network modification ${networkModification} can be applied on network '${networkNameOrId}'";
return reportNode.newReportNode()
.withMessageTemplate(templateKey, messageTemplate)
.withUntypedValue("networkModification", getName())
.withUntypedValue("networkNameOrId", network.getNameOrId())
.withSeverity(TypedValue.INFO_SEVERITY)
.add();
}

protected void reportOnInconclusiveDryRun(ReportNode reportNode, String cause) {
reportNode.newReportNode()
.withMessageTemplate("networkModificationDryRun-failure",
"Dry-run failed for ${networkModification}. The issue is: ${dryRunError}")
.withUntypedValue("dryRunError", cause)
.withUntypedValue("networkModification", getName())
.add();
}

@Override
public NetworkModificationImpact hasImpactOnNetwork(Network network) {
return DEFAULT_IMPACT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ public BatteryModification(String batteryId, Double targetP, Double targetQ) {
this.targetQ = targetQ;
}

@Override
public String getName() {
return "BatteryModification";
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException, ComputationManager computationManager,
ReportNode reportNode) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ public CloseSwitch(String switchId) {
this.switchId = Objects.requireNonNull(switchId);
}

@Override
public String getName() {
return "CloseSwitch";
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException,
ComputationManager computationManager, ReportNode reportNode) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ public ConnectGenerator(String generatorId) {
this.generatorId = generatorId;
}

@Override
public String getName() {
return "ConnectGenerator";
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException,
ComputationManager computationManager, ReportNode reportNode) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ public class ConnectableConnection extends AbstractConnectDisconnectModification
this.isTypeSwitchToOperate = predicate;
}

@Override
public String getName() {
return "ConnectableConnection";
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException, ComputationManager computationManager, ReportNode reportNode) {
// Get the connectable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ public DanglingLineModification(String danglingLineId, Double targetP0, Double t
this(danglingLineId, false, targetP0, targetQ0);
}

@Override
public String getName() {
return "DanglingLineModification";
}

public String getDanglingLineId() {
return danglingLineId;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ public GeneratorModification(String generatorId, Modifs modifs) {
this.modifs = modifs;
}

@Override
public String getName() {
return "GeneratorModification";
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException,
ComputationManager computationManager, ReportNode reportNode) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ public HvdcLineModification(String hvdcId, Boolean acEmulationEnabled, Double ac
this.relativeValue = relativeValue;
}

@Override
public String getName() {
return "HvdcLineModification";
}

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException, ComputationManager computationManager,
ReportNode reportNode) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ public LoadModification(String loadId, Double targetP0, Double targetQ0) {
this(loadId, false, targetP0, targetQ0);
}

@Override
public String getName() {
return "LoadModification";
}

public String getLoadId() {
return loadId;
}
Expand Down
Loading

0 comments on commit 566354f

Please sign in to comment.