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 ;
26
+ import com .powsybl .network .store .client .PreloadingStrategy ;
24
27
import com .powsybl .security .*;
25
28
import com .powsybl .security .limitreduction .LimitReduction ;
26
29
import com .powsybl .ws .commons .LogUtils ;
42
45
import java .util .Objects ;
43
46
import java .util .UUID ;
44
47
import java .util .concurrent .CompletableFuture ;
48
+ import java .util .concurrent .TimeUnit ;
45
49
import java .util .concurrent .atomic .AtomicReference ;
46
50
import java .util .function .Consumer ;
47
51
import java .util .function .Function ;
@@ -92,6 +96,11 @@ public SecurityAnalysisResult run(SecurityAnalysisRunContext runContext) {
92
96
}
93
97
}
94
98
99
+ @ Override
100
+ protected PreloadingStrategy getNetworkPreloadingStrategy () {
101
+ return PreloadingStrategy .ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW ;
102
+ }
103
+
95
104
@ Override
96
105
protected String getComputationType () {
97
106
return COMPUTATION_TYPE ;
@@ -108,6 +117,22 @@ protected CompletableFuture<SecurityAnalysisResult> getCompletableFuture(Securit
108
117
.toList ();
109
118
List <LimitReduction > limitReductions = createLimitReductions (runContext );
110
119
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
+
111
136
SecurityAnalysisRunParameters runParameters = new SecurityAnalysisRunParameters ()
112
137
.setSecurityAnalysisParameters (runContext .getParameters ().securityAnalysisParameters ())
113
138
.setComputationManager (executionService .getComputationManager ())
@@ -116,7 +141,7 @@ protected CompletableFuture<SecurityAnalysisResult> getCompletableFuture(Securit
116
141
.setReportNode (runContext .getReportNode ());
117
142
118
143
return securityAnalysisRunner .runAsync (
119
- runContext . getNetwork () ,
144
+ network ,
120
145
variantId ,
121
146
n -> contingencies ,
122
147
runParameters )
0 commit comments