Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
3c9cb33
wip
RoxaneChen02 Mar 17, 2026
e13e8ec
first version of the code
RoxaneChen02 Mar 18, 2026
4bb418c
clean up the code
RoxaneChen02 Mar 19, 2026
839ae63
start test
RoxaneChen02 Mar 19, 2026
8b1d8d0
Merge branch 'main' into feat/ics_reader
RoxaneChen02 Mar 30, 2026
eeb5fe7
WIP - initiate p0RespectsGradients function
Godelaine Mar 30, 2026
1094f0b
add ics data importer
RoxaneChen02 Mar 30, 2026
574e733
complete
RoxaneChen02 Mar 30, 2026
47f8037
wip icsdatatest
RoxaneChen02 Mar 30, 2026
1ee0c18
remove unecessary test
RoxaneChen02 Mar 30, 2026
58394c5
test
RoxaneChen02 Mar 30, 2026
b4d71c7
update test
RoxaneChen02 Mar 30, 2026
18bdbb9
update log
RoxaneChen02 Mar 30, 2026
368e40e
update pom
RoxaneChen02 Mar 30, 2026
0b54b58
remove icsImporterTest
RoxaneChen02 Mar 30, 2026
e5f6ef1
validate
RoxaneChen02 Mar 30, 2026
5f26d8c
wip
RoxaneChen02 Mar 30, 2026
f00e4e8
Merge branch 'main' into idcc/debug
Godelaine Mar 31, 2026
4aeb5ee
Merge branch 'main' into feat/ics_reader
RoxaneChen02 Mar 31, 2026
42b0a3f
add ics util test
RoxaneChen02 Mar 31, 2026
1b36cea
add ics full process
RoxaneChen02 Mar 31, 2026
1626c79
gsk is optional !
RoxaneChen02 Mar 31, 2026
726030f
update steps
RoxaneChen02 Mar 31, 2026
6001ba5
remove gsk if ra only defined on a node
RoxaneChen02 Apr 1, 2026
f96a3b5
remove old code
RoxaneChen02 Apr 1, 2026
f63232b
revert update to be moved in other PR
RoxaneChen02 Apr 1, 2026
8a05188
update doc
RoxaneChen02 Apr 1, 2026
bc03c9d
update doc
RoxaneChen02 Apr 1, 2026
d8d5594
use default functions
RoxaneChen02 Apr 1, 2026
e220785
validate
RoxaneChen02 Apr 1, 2026
6172958
update pom
RoxaneChen02 Apr 1, 2026
597a593
update pom
RoxaneChen02 Apr 1, 2026
ff8ebd8
remove check not equal to one
RoxaneChen02 Apr 1, 2026
9a70a80
update file name
RoxaneChen02 Apr 1, 2026
759b624
move package
RoxaneChen02 Apr 1, 2026
d59fbf9
Release LazyNetwork
Godelaine Apr 2, 2026
a3bf060
sonar warning fix
RoxaneChen02 Apr 2, 2026
a2b8fd9
update pom
RoxaneChen02 Apr 2, 2026
e21dd19
update pom
RoxaneChen02 Apr 2, 2026
25daed4
rename field
RoxaneChen02 Apr 2, 2026
d03be8f
rename field
RoxaneChen02 Apr 2, 2026
442681c
update pom ?
RoxaneChen02 Apr 2, 2026
3dcb4aa
update pom ?
RoxaneChen02 Apr 2, 2026
9271ef0
fix MARMOT with lazy networls
bqth29 Apr 2, 2026
feb43c8
fix
RoxaneChen02 Apr 2, 2026
5727f6e
add a test
RoxaneChen02 Apr 2, 2026
557b51b
remove file not used
RoxaneChen02 Apr 2, 2026
7c9e7e2
validate
RoxaneChen02 Apr 2, 2026
47a8a14
update doc
RoxaneChen02 Apr 2, 2026
6f76e2c
close LazyNetworks
bqth29 Apr 7, 2026
15434ed
p0RespectsConstraints method
Godelaine Apr 7, 2026
3ccf480
add multi-threading (need to fix concurrent access to LF parameters)
bqth29 Apr 8, 2026
d77d1fb
missing logback and crac test files
Godelaine Apr 9, 2026
b8b53db
Merge remote-tracking branch 'origin/feat/ics_reader' into idcc/debug
Godelaine Apr 9, 2026
359207e
mark LazyNetwork as beta feature
bqth29 Apr 9, 2026
4147744
duplicate RaoParameters to concurrent accesses
bqth29 Apr 9, 2026
cf930fb
use ConcurrentHashMaps for TemporalDataImpl
bqth29 Apr 9, 2026
fd050a8
smart use of threads
bqth29 Apr 9, 2026
4ec7f91
fix existing UT
Godelaine Apr 10, 2026
340080e
Merge branch 'main' into idcc/debug
Godelaine Apr 10, 2026
0d64c43
remove print lp
Godelaine Apr 10, 2026
0c1ce9e
WIP
Godelaine Apr 10, 2026
1c4e5ae
WIP to make GeneratorConstraintsFillerTest pass
Godelaine Apr 10, 2026
cb7bef2
rollback GeneratorConstraintsFiller
bqth29 Apr 13, 2026
c19bdb2
Merge branch 'feature/refine-usage-of-lazy-networks' into idcc/debug …
Godelaine Apr 13, 2026
9ad4c4c
Merge branch 'main' into idcc/debug
Godelaine Apr 13, 2026
c4955b5
add UT for p0RespectsConstraints
Godelaine Apr 13, 2026
e9f6422
revert deleting cracs
Godelaine Apr 13, 2026
a754036
sonar
Godelaine Apr 13, 2026
8a38a3e
set PARALLELISM to 1 for Azure test
Godelaine Apr 16, 2026
73d9b67
Merge branch 'main' into idcc/debug
Godelaine Apr 17, 2026
98f3083
fix gradients check
pet-mit Apr 17, 2026
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 @@ -30,4 +30,6 @@ default List<OffsetDateTime> getTimestamps() {
void put(OffsetDateTime timestamp, T data);

<U> TemporalData<U> map(Function<T, U> function);

<U> TemporalData<U> mapMultiThreading(Function<T, U> function, int parallelism);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,15 @@
package com.powsybl.openrao.commons;

import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.function.Function;
import java.util.stream.Collectors;

Expand All @@ -20,15 +27,15 @@ public class TemporalDataImpl<T> implements TemporalData<T> {
private final Map<OffsetDateTime, T> dataPerTimestamp;

public TemporalDataImpl() {
this(new TreeMap<>());
this(new ConcurrentHashMap<>());
}

public TemporalDataImpl(Map<OffsetDateTime, ? extends T> dataPerTimestamp) {
this.dataPerTimestamp = new TreeMap<>(dataPerTimestamp);
this.dataPerTimestamp = new ConcurrentHashMap<>(dataPerTimestamp);
}

public Map<OffsetDateTime, T> getDataPerTimestamp() {
return new TreeMap<>(dataPerTimestamp);
return new ConcurrentHashMap<>(dataPerTimestamp);
}

public void put(OffsetDateTime timestamp, T data) {
Expand All @@ -38,4 +45,33 @@ public void put(OffsetDateTime timestamp, T data) {
public <U> TemporalData<U> map(Function<T, U> function) {
return new TemporalDataImpl<>(dataPerTimestamp.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> function.apply(entry.getValue()))));
}

public <U> TemporalData<U> mapMultiThreading(Function<T, U> function, int parallelism) {
try (ExecutorService executor = Executors.newFixedThreadPool(parallelism)) {
try {
List<Future<Map.Entry<OffsetDateTime, U>>> futures = new ArrayList<>();

for (Map.Entry<OffsetDateTime, T> entry : dataPerTimestamp.entrySet()) {
futures.add(executor.submit(() ->
Map.entry(entry.getKey(), function.apply(entry.getValue()))
));
}

Map<OffsetDateTime, U> result = new HashMap<>();

for (Future<Map.Entry<OffsetDateTime, U>> future : futures) {
Map.Entry<OffsetDateTime, U> e = future.get();
result.put(e.getKey(), e.getValue());
}

return new TemporalDataImpl<>(result);

} catch (InterruptedException | ExecutionException e) {
Thread.currentThread().interrupt();
throw new OpenRaoException(e);
} finally {
executor.shutdown();
}
}
}
}
5 changes: 5 additions & 0 deletions data/crac/crac-util/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@
</dependency>

<!-- Test scope -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
Expand Down
15 changes: 15 additions & 0 deletions data/crac/crac-util/src/test/resources/logback-test.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<root level="ERROR">
<appender-ref ref="STDOUT" />
</root>
<logger name="com.powsybl.openloadflow" level="ERROR"/>
<logger name="com.powsybl.math" level="ERROR"/>
<logger name="com.powsybl.openrao" level="DEBUG"/>
<logger name="com.powsybl.ucte.network.UcteLogger" level="OFF"/>
</configuration>
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@
* @return A map associating each node identifier to its corresponding generator identifier.
* Returns an empty map if the process is aborted due to missing network components.
*/
public static Map<String, String> createGeneratorAndLoadAndUpdateNetworks(TemporalData<Network> initialNetworksToModify,
public static Map<String, String> createGeneratorAndLoadAndUpdateNetworks(TemporalData<LazyNetwork> initialNetworksToModify,
String raId) {

Map<String, String> networkElementPerGskElement = new HashMap<>();
Expand All @@ -163,7 +163,7 @@
Double shiftKey = entry.getValue();
String generatorId = getGeneratorIdFromRaIdAndNodeId(raId, nodeId);

for (Map.Entry<OffsetDateTime, Network> networkEntry : initialNetworksToModify.getDataPerTimestamp().entrySet()) {
for (Map.Entry<OffsetDateTime, LazyNetwork> networkEntry : initialNetworksToModify.getDataPerTimestamp().entrySet()) {
OffsetDateTime dateTime = networkEntry.getKey();
Network network = networkEntry.getValue();

Expand Down Expand Up @@ -256,11 +256,18 @@

// Update nominal voltage in network
// TODO: More of a IDCC focused special processing ? Move elsewhere ?
TemporalData<Network> modifiedInitialNetworks = new TemporalDataImpl<>();
TemporalData<LazyNetwork> modifiedInitialNetworks = new TemporalDataImpl<>();
timeCoupledRaoInput.getRaoInputs().getDataPerTimestamp().forEach((dateTime, raoInput) -> {
Network network = raoInput.getNetwork();
updateNominalVoltage(network);
modifiedInitialNetworks.put(dateTime, network);
modifiedInitialNetworks.put(dateTime, new LazyNetwork(network));
if (network instanceof LazyNetwork lazyNetwork) {
try {
lazyNetwork.close();
} catch (Exception e) {
throw new OpenRaoException(e);
}
}
});

TemporalData<Crac> cracToModify = new TemporalDataImpl<>();
Expand Down Expand Up @@ -291,7 +298,16 @@
modifiedInitialNetworks.getDataPerTimestamp().forEach((dateTime, initialNetwork) -> {
String exportedNetworkPath = exportDirectory + dateTime.format(DateTimeFormatter.ofPattern("%y%m%d_%H%M%S")) + ".jiidm";
initialNetwork.write("JIIDM", new Properties(), Path.of(exportedNetworkPath));
postIcsRaoInputs.put(dateTime, RaoInput.build(new LazyNetwork(exportedNetworkPath), timeCoupledRaoInput.getRaoInputs().getData(dateTime).orElseThrow().getCrac()).build());
try (LazyNetwork postIcsNetwork = new LazyNetwork(exportedNetworkPath)) {
postIcsRaoInputs.put(dateTime, RaoInput.build(postIcsNetwork, timeCoupledRaoInput.getRaoInputs().getData(dateTime).orElseThrow().getCrac()).build());
} catch (Exception e) {
throw new OpenRaoException(e);
}
try {
initialNetwork.close();
} catch (Exception e) {
throw new RuntimeException(e);

Check warning on line 309 in data/ics-importer/src/main/java/com/powsybl/openrao/data/icsimporter/IcsData.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Replace generic exceptions with specific library exceptions or a custom exception.

See more on https://sonarcloud.io/project/issues?id=com.powsybl%3Aopen-rao&issues=AZ2GCyp4yZ9muLnTkjZa&open=AZ2GCyp4yZ9muLnTkjZa&pullRequest=1688
}
});

return new TimeCoupledRaoInput(postIcsRaoInputs, timeCoupledRaoInput.getTimestampsToRun(), timeCoupledRaoInput.getTimeCoupledConstraints());
Expand Down
Loading
Loading