@@ -49,10 +49,7 @@ public AcSensitivityAnalysis(MatrixFactory matrixFactory, GraphDecrementalConnec
49
49
private void calculateSensitivityValues (List <LfSensitivityFactor <AcVariableType , AcEquationType >> lfFactors , List <SensitivityFactorGroup <AcVariableType , AcEquationType >> factorGroups , DenseMatrix factorsState ,
50
50
int contingencyIndex , SensitivityValueWriter valueWriter ) {
51
51
Set <LfSensitivityFactor <AcVariableType , AcEquationType >> lfFactorsSet = new HashSet <>(lfFactors );
52
- // ZERO status is for factors where variable element is in the main connected component and reference element is not.
53
- // Therefore, the sensitivity is known to value 0, but the reference cannot be known and is set to NaN.
54
- lfFactors .stream ().filter (factor -> factor .getStatus () == LfSensitivityFactor .Status .ZERO )
55
- .forEach (factor -> valueWriter .write (factor .getIndex (), contingencyIndex , 0 , Double .NaN ));
52
+
56
53
// VALID_ONLY_FOR_FUNCTION status is for factors where variable element is not in the main connected component but reference element is.
57
54
// Therefore, the sensitivity is known to value 0 and the reference value can be computed.
58
55
lfFactors .stream ().filter (factor -> factor .getStatus () == LfSensitivityFactor .Status .VALID_ONLY_FOR_FUNCTION )
@@ -208,16 +205,13 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
208
205
);
209
206
210
207
Map <String , SensitivityVariableSet > variableSetsById = variableSets .stream ().collect (Collectors .toMap (SensitivityVariableSet ::getId , Function .identity ()));
211
- SensitivityFactorHolder <AcVariableType , AcEquationType > factorHolder = readAndCheckFactors (network , variableSetsById , factorReader , lfNetwork );
212
- List <LfSensitivityFactor <AcVariableType , AcEquationType >> lfFactors = factorHolder .getAllFactors ();
213
- LOGGER .info ("Running AC sensitivity analysis with {} factors and {} contingencies" , lfFactors .size (), contingencies .size ());
208
+ SensitivityFactorHolder <AcVariableType , AcEquationType > allFactorHolder = readAndCheckFactors (network , variableSetsById , factorReader , lfNetwork );
209
+ List <LfSensitivityFactor <AcVariableType , AcEquationType >> allLfFactors = allFactorHolder .getAllFactors ();
210
+ LOGGER .info ("Running AC sensitivity analysis with {} factors and {} contingencies" , allLfFactors .size (), contingencies .size ());
214
211
215
- writeSkippedFactors (lfFactors , valueWriter );
216
212
// next we only work with valid and valid only for function factors
217
- List <LfSensitivityFactor .Status > validFactors = new ArrayList <>();
218
- validFactors .add (LfSensitivityFactor .Status .VALID );
219
- validFactors .add (LfSensitivityFactor .Status .VALID_ONLY_FOR_FUNCTION );
220
- lfFactors = lfFactors .stream ().filter (factor -> validFactors .contains (factor .getStatus ())).collect (Collectors .toList ());
213
+ var validFactorHolder = writeInvalidFactors (allFactorHolder , valueWriter );
214
+ var validLfFactors = validFactorHolder .getAllFactors ();
221
215
222
216
// create AC engine
223
217
AcLoadFlowParameters acParameters = OpenLoadFlowParameters .createAcParameters (network , lfParameters , lfParametersExt , matrixFactory , connectivityFactory , reporter , false , true );
@@ -228,7 +222,7 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
228
222
.run (reporter );
229
223
230
224
// index factors by variable group to compute a minimal number of states
231
- List <SensitivityFactorGroup <AcVariableType , AcEquationType >> factorGroups = createFactorGroups (lfFactors .stream ()
225
+ List <SensitivityFactorGroup <AcVariableType , AcEquationType >> factorGroups = createFactorGroups (validLfFactors .stream ()
232
226
.filter (factor -> factor .getStatus () == LfSensitivityFactor .Status .VALID ).collect (Collectors .toList ()));
233
227
234
228
// compute the participation for each injection factor (+1 on the injection and then -participation factor on all
@@ -269,8 +263,8 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
269
263
context .getJacobianMatrix ().solveTransposed (factorsStates );
270
264
271
265
// calculate sensitivity values
272
- setFunctionReferences (lfFactors );
273
- calculateSensitivityValues (factorHolder .getFactorsForBaseNetwork (), factorGroups , factorsStates , -1 , valueWriter );
266
+ setFunctionReferences (validLfFactors );
267
+ calculateSensitivityValues (validFactorHolder .getFactorsForBaseNetwork (), factorGroups , factorsStates , -1 , valueWriter );
274
268
275
269
GraphDecrementalConnectivity <LfBus > connectivity = lfNetwork .getConnectivity ();
276
270
@@ -282,8 +276,7 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
282
276
283
277
// Contingency not breaking connectivity
284
278
for (LfContingency lfContingency : lfContingencies .stream ().filter (lfContingency -> lfContingency .getBuses ().isEmpty ()).collect (Collectors .toSet ())) {
285
- List <LfSensitivityFactor <AcVariableType , AcEquationType >> contingencyFactors = factorHolder .getFactorsForContingency (lfContingency .getId ());
286
- contingencyFactors = contingencyFactors .stream ().filter (factor -> validFactors .contains (factor .getStatus ())).collect (Collectors .toList ());
279
+ List <LfSensitivityFactor <AcVariableType , AcEquationType >> contingencyFactors = validFactorHolder .getFactorsForContingency (lfContingency .getId ());
287
280
contingencyFactors .forEach (lfFactor -> {
288
281
lfFactor .setSensitivityValuePredefinedResult (null );
289
282
lfFactor .setFunctionPredefinedResult (null );
@@ -303,8 +296,7 @@ public void analyse(Network network, List<PropagatedContingency> contingencies,
303
296
304
297
// Contingency breaking connectivity
305
298
for (LfContingency lfContingency : lfContingencies .stream ().filter (lfContingency -> !lfContingency .getBuses ().isEmpty ()).collect (Collectors .toSet ())) {
306
- List <LfSensitivityFactor <AcVariableType , AcEquationType >> contingencyFactors = factorHolder .getFactorsForContingency (lfContingency .getId ());
307
- contingencyFactors = contingencyFactors .stream ().filter (factor -> validFactors .contains (factor .getStatus ())).collect (Collectors .toList ());
299
+ List <LfSensitivityFactor <AcVariableType , AcEquationType >> contingencyFactors = validFactorHolder .getFactorsForContingency (lfContingency .getId ());
308
300
contingencyFactors .forEach (lfFactor -> {
309
301
lfFactor .setSensitivityValuePredefinedResult (null );
310
302
lfFactor .setFunctionPredefinedResult (null ); });
0 commit comments