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