1818import com .powsybl .iidm .criteria .duration .PermanentDurationCriterion ;
1919import com .powsybl .iidm .network .LimitType ;
2020import com .powsybl .iidm .network .Network ;
21+ import com .powsybl .iidm .network .NetworkFactory ;
2122import com .powsybl .iidm .network .VariantManagerConstants ;
23+ import com .powsybl .iidm .serde .NetworkSerDe ;
2224import com .powsybl .loadflow .LoadFlowResult ;
2325import com .powsybl .network .store .client .NetworkStoreService ;
26+ import com .powsybl .network .store .client .PreloadingStrategy ;
2427import com .powsybl .security .*;
2528import com .powsybl .security .limitreduction .LimitReduction ;
2629import com .powsybl .ws .commons .LogUtils ;
4245import java .util .Objects ;
4346import java .util .UUID ;
4447import java .util .concurrent .CompletableFuture ;
48+ import java .util .concurrent .TimeUnit ;
4549import java .util .concurrent .atomic .AtomicReference ;
4650import java .util .function .Consumer ;
4751import java .util .function .Function ;
@@ -92,6 +96,11 @@ public SecurityAnalysisResult run(SecurityAnalysisRunContext runContext) {
9296 }
9397 }
9498
99+ @ Override
100+ protected PreloadingStrategy getNetworkPreloadingStrategy () {
101+ return PreloadingStrategy .ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW ;
102+ }
103+
95104 @ Override
96105 protected String getComputationType () {
97106 return COMPUTATION_TYPE ;
@@ -108,6 +117,22 @@ protected CompletableFuture<SecurityAnalysisResult> getCompletableFuture(Securit
108117 .toList ();
109118 List <LimitReduction > limitReductions = createLimitReductions (runContext );
110119
120+ Network network = runContext .getNetwork ();
121+ // FIXME: Remove this part when multithread variant access is implemented in the network-store
122+ if (runContext .getProvider ().equals ("OpenLoadFlow" )) {
123+ long startTime = System .nanoTime ();
124+ Network originalNetwork = runContext .getNetwork ();
125+ String originalVariant = originalNetwork .getVariantManager ().getWorkingVariantId ();
126+ originalNetwork .getVariantManager ().setWorkingVariant (variantId );
127+
128+ network = NetworkSerDe .copy (originalNetwork , NetworkFactory .find ("Default" ));
129+ if (!variantId .equals (VariantManagerConstants .INITIAL_VARIANT_ID )) {
130+ network .getVariantManager ().cloneVariant (VariantManagerConstants .INITIAL_VARIANT_ID , variantId );
131+ }
132+ LOGGER .info ("Network copied to iidm-impl in {} ms" , TimeUnit .NANOSECONDS .toMillis (System .nanoTime () - startTime ));
133+ originalNetwork .getVariantManager ().setWorkingVariant (originalVariant );
134+ }
135+
111136 SecurityAnalysisRunParameters runParameters = new SecurityAnalysisRunParameters ()
112137 .setSecurityAnalysisParameters (runContext .getParameters ().securityAnalysisParameters ())
113138 .setComputationManager (executionService .getComputationManager ())
@@ -116,7 +141,7 @@ protected CompletableFuture<SecurityAnalysisResult> getCompletableFuture(Securit
116141 .setReportNode (runContext .getReportNode ());
117142
118143 return securityAnalysisRunner .runAsync (
119- runContext . getNetwork () ,
144+ network ,
120145 variantId ,
121146 n -> contingencies ,
122147 runParameters )
0 commit comments