18
18
import com .powsybl .iidm .criteria .duration .PermanentDurationCriterion ;
19
19
import com .powsybl .iidm .network .LimitType ;
20
20
import com .powsybl .iidm .network .Network ;
21
+ import com .powsybl .iidm .network .NetworkFactory ;
21
22
import com .powsybl .iidm .network .VariantManagerConstants ;
23
+ import com .powsybl .iidm .serde .NetworkSerDe ;
22
24
import com .powsybl .loadflow .LoadFlowResult ;
23
25
import com .powsybl .network .store .client .NetworkStoreService ;
24
26
import com .powsybl .security .*;
42
44
import java .util .Objects ;
43
45
import java .util .UUID ;
44
46
import java .util .concurrent .CompletableFuture ;
47
+ import java .util .concurrent .TimeUnit ;
45
48
import java .util .concurrent .atomic .AtomicReference ;
46
49
import java .util .function .Consumer ;
47
50
import java .util .function .Function ;
@@ -108,6 +111,22 @@ protected CompletableFuture<SecurityAnalysisResult> getCompletableFuture(Securit
108
111
.toList ();
109
112
List <LimitReduction > limitReductions = createLimitReductions (runContext );
110
113
114
+ Network network = runContext .getNetwork ();
115
+ // FIXME: Remove this part when multithread variant access is implemented in the network-store
116
+ if (runContext .getProvider ().equals ("OpenLoadFlow" )) {
117
+ long startTime = System .nanoTime ();
118
+ Network originalNetwork = runContext .getNetwork ();
119
+ String originalVariant = originalNetwork .getVariantManager ().getWorkingVariantId ();
120
+ originalNetwork .getVariantManager ().setWorkingVariant (variantId );
121
+
122
+ network = NetworkSerDe .copy (originalNetwork , NetworkFactory .find ("Default" ));
123
+ if (!variantId .equals (VariantManagerConstants .INITIAL_VARIANT_ID )) {
124
+ network .getVariantManager ().cloneVariant (VariantManagerConstants .INITIAL_VARIANT_ID , variantId );
125
+ }
126
+ LOGGER .info ("Network copied to iidm-impl in {} ms" , TimeUnit .NANOSECONDS .toMillis (System .nanoTime () - startTime ));
127
+ originalNetwork .getVariantManager ().setWorkingVariant (originalVariant );
128
+ }
129
+
111
130
SecurityAnalysisRunParameters runParameters = new SecurityAnalysisRunParameters ()
112
131
.setSecurityAnalysisParameters (runContext .getParameters ().securityAnalysisParameters ())
113
132
.setComputationManager (executionService .getComputationManager ())
@@ -116,7 +135,7 @@ protected CompletableFuture<SecurityAnalysisResult> getCompletableFuture(Securit
116
135
.setReportNode (runContext .getReportNode ());
117
136
118
137
return securityAnalysisRunner .runAsync (
119
- runContext . getNetwork () ,
138
+ network ,
120
139
variantId ,
121
140
n -> contingencies ,
122
141
runParameters )
0 commit comments