@@ -227,9 +227,10 @@ SecurityAnalysisResult runSimulationsOnAllComponents(LfNetworkList networks, Lis
227227 }
228228
229229 // run simulation on first lfNetwork to initialize results structures
230- LfNetwork firstNetwork = networkToSimulate .remove ( 0 );
230+ LfNetwork firstNetwork = networkToSimulate .removeFirst ( );
231231 SecurityAnalysisResult result = runSimulations (firstNetwork , propagatedContingencies , parameters , securityAnalysisParameters ,
232232 operatorStrategies , actions , limitReductions , contingencyActivePowerLossDistribution );
233+ double preContingencyDistributedActivePower = result .getPreContingencyResult ().getDistributedActivePower ();
233234
234235 List <PostContingencyResult > postContingencyResults = result .getPostContingencyResults ();
235236 List <OperatorStrategyResult > operatorStrategyResults = result .getOperatorStrategyResults ();
@@ -249,6 +250,7 @@ SecurityAnalysisResult runSimulationsOnAllComponents(LfNetworkList networks, Lis
249250 operatorStrategies , actions , limitReductions , contingencyActivePowerLossDistribution );
250251
251252 // Merge into first result
253+ preContingencyDistributedActivePower += resultOtherComponent .getPreContingencyResult ().getDistributedActivePower ();
252254 // PreContingency results first
253255 preContingencyViolations .addAll (resultOtherComponent .getPreContingencyResult ().getLimitViolationsResult ().getLimitViolations ());
254256 mergedPreContingencyNetworkResult = mergeNetworkResult (mergedPreContingencyNetworkResult , resultOtherComponent .getPreContingencyResult ().getNetworkResult ());
@@ -262,7 +264,7 @@ SecurityAnalysisResult runSimulationsOnAllComponents(LfNetworkList networks, Lis
262264 PreContingencyResult mergedPrecontingencyResult =
263265 new PreContingencyResult (result .getPreContingencyResult ().getStatus (),
264266 new LimitViolationsResult (preContingencyViolations ),
265- mergedPreContingencyNetworkResult , Double . NaN );
267+ mergedPreContingencyNetworkResult , preContingencyDistributedActivePower );
266268 return new SecurityAnalysisResult (mergedPrecontingencyResult , postContingencyResults , operatorStrategyResults );
267269 }
268270
@@ -291,7 +293,8 @@ void mergeSecurityAnalysisResult(SecurityAnalysisResult resultToMerge, Map<Strin
291293
292294 PostContingencyResult mergedPostContingencyResult =
293295 new PostContingencyResult (originalResult .getContingency (), originalResult .getStatus (),
294- new LimitViolationsResult (violations ), mergedNetworkResult , originalResult .getConnectivityResult (), Double .NaN );
296+ new LimitViolationsResult (violations ), mergedNetworkResult , originalResult .getConnectivityResult (),
297+ originalResult .getDistributedActivePower () + postContingencyResult .getDistributedActivePower ());
295298
296299 postContingencyResults .put (contingencyId , mergedPostContingencyResult );
297300 } else {
@@ -317,7 +320,8 @@ void mergeSecurityAnalysisResult(SecurityAnalysisResult resultToMerge, Map<Strin
317320
318321 OperatorStrategyResult .ConditionalActionsResult mergedConditionalActionResult
319322 = new OperatorStrategyResult .ConditionalActionsResult (conditionalActionsResult .getConditionalActionsId (),
320- conditionalActionsResult .getStatus (), new LimitViolationsResult (violations ), mergedNetworkResult , Double .NaN );
323+ conditionalActionsResult .getStatus (), new LimitViolationsResult (violations ), mergedNetworkResult ,
324+ originalRes .get ().getDistributedActivePower () + conditionalActionsResult .getDistributedActivePower ());
321325 conditionalActionsResults .add (mergedConditionalActionResult );
322326
323327 } else {
@@ -751,12 +755,12 @@ protected SecurityAnalysisResult runSimulations(LfNetwork lfNetwork, List<Propag
751755
752756 lfContingency .apply (loadFlowParameters .getBalanceType ());
753757
754- contingencyActivePowerLossDistribution .run (lfNetwork , lfContingency , propagatedContingency .getContingency (), securityAnalysisParameters , contingencyLoadFlowParameters , postContSimReportNode );
758+ double preDistributedActivePower = contingencyActivePowerLossDistribution .run (lfNetwork , lfContingency , propagatedContingency .getContingency (), securityAnalysisParameters , contingencyLoadFlowParameters , postContSimReportNode );
755759
756760 var postContingencyResult = runPostContingencySimulation (lfNetwork , context , propagatedContingency .getContingency (),
757761 lfContingency , preContingencyLimitViolationManager ,
758762 securityAnalysisParameters ,
759- preContingencyNetworkResult , createResultExtension , limitReductions );
763+ preContingencyNetworkResult , createResultExtension , limitReductions , preDistributedActivePower );
760764 postContingencyResults .add (postContingencyResult );
761765
762766 if (contingencyLoadFlowParameters != null &&
@@ -820,7 +824,8 @@ protected SecurityAnalysisResult runSimulations(LfNetwork lfNetwork, List<Propag
820824 preContingencyLoadFlowResult .toComponentResultStatus ().status (),
821825 new LimitViolationsResult (preContingencyLimitViolationManager .getLimitViolations ()),
822826 new NetworkResult (preContingencyNetworkResult .getBranchResults (), preContingencyNetworkResult .getBusResults (),
823- preContingencyNetworkResult .getThreeWindingsTransformerResults ()), Double .NaN ),
827+ preContingencyNetworkResult .getThreeWindingsTransformerResults ()),
828+ preContingencyLoadFlowResult .getDistributedActivePower () * PerUnit .SB ),
824829 postContingencyResults , operatorStrategyResults );
825830 }
826831 }
@@ -866,13 +871,14 @@ protected PostContingencyResult runPostContingencySimulation(LfNetwork network,
866871 LimitViolationManager preContingencyLimitViolationManager ,
867872 SecurityAnalysisParameters securityAnalysisParameters ,
868873 PreContingencyNetworkResult preContingencyNetworkResult , boolean createResultExtension ,
869- List <LimitReduction > limitReductions ) {
874+ List <LimitReduction > limitReductions , double preDistributedActivePower ) {
870875 logPostContingencyStart (network , lfContingency );
871876
872877 Stopwatch stopwatch = Stopwatch .createStarted ();
873878
874879 // restart LF on post contingency equation system
875- PostContingencyComputationStatus status = runActionLoadFlow (context ); // FIXME: change name.
880+ R result = createLoadFlowEngine (context ).run ();
881+ PostContingencyComputationStatus status = postContingencyStatusFromLoadFlowResult (result );
876882 var postContingencyLimitViolationManager = new LimitViolationManager (preContingencyLimitViolationManager , limitReductions , securityAnalysisParameters .getIncreasedViolationsParameters ());
877883
878884 LoadFlowModel loadFlowModel = securityAnalysisParameters .getLoadFlowParameters ().isDc () ? LoadFlowModel .DC : LoadFlowModel .AC ;
@@ -894,12 +900,15 @@ protected PostContingencyResult runPostContingencySimulation(LfNetwork network,
894900 lfContingency .getDisconnectedGenerationActivePower () * PerUnit .SB ,
895901 lfContingency .getDisconnectedElementIds ());
896902
897- return new PostContingencyResult (contingency , status ,
903+ return new PostContingencyResult (
904+ contingency ,
905+ status ,
898906 new LimitViolationsResult (postContingencyLimitViolationManager .getLimitViolations ()),
899907 new NetworkResult (postContingencyNetworkResult .getBranchResults (),
900908 postContingencyNetworkResult .getBusResults (),
901909 postContingencyNetworkResult .getThreeWindingsTransformerResults ()),
902- connectivityResult , Double .NaN );
910+ connectivityResult ,
911+ (preDistributedActivePower + result .getDistributedActivePower ()) * PerUnit .SB );
903912 }
904913
905914 protected void logPostContingencyStart (LfNetwork network , LfContingency lfContingency ) {
@@ -935,7 +944,8 @@ protected OperatorStrategyResult runActionSimulation(LfNetwork network, C contex
935944 Stopwatch stopwatch = Stopwatch .createStarted ();
936945
937946 // restart LF on post contingency and post actions equation system
938- PostContingencyComputationStatus status = runActionLoadFlow (context );
947+ R result = createLoadFlowEngine (context ).run ();
948+ PostContingencyComputationStatus status = postContingencyStatusFromLoadFlowResult (result );
939949 var postActionsViolationManager = new LimitViolationManager (preContingencyLimitViolationManager , limitReductions , securityAnalysisParameters .getIncreasedViolationsParameters ());
940950 LoadFlowModel loadFlowModel = securityAnalysisParameters .getLoadFlowParameters ().isDc () ? LoadFlowModel .DC : LoadFlowModel .AC ;
941951 var postActionsNetworkResult = new PreContingencyNetworkResult (network , new AbstractNetworkResult .StateMonitorIndexes (monitorIndex , zeroImpedanceMonitoredIndex ), createResultExtension ,
@@ -959,7 +969,7 @@ protected OperatorStrategyResult runActionSimulation(LfNetwork network, C contex
959969 new NetworkResult (postActionsNetworkResult .getBranchResults (),
960970 postActionsNetworkResult .getBusResults (),
961971 postActionsNetworkResult .getThreeWindingsTransformerResults ()),
962- Double . NaN )
972+ result . getDistributedActivePower () * PerUnit . SB )
963973 ));
964974 }
965975
@@ -973,8 +983,4 @@ protected void logActionEnd(LfNetwork network, OperatorStrategy operatorStrategy
973983 operatorStrategy .getContingencyContext ().getContingencyId (), network , stopwatch .elapsed (TimeUnit .MILLISECONDS ));
974984 }
975985
976- protected PostContingencyComputationStatus runActionLoadFlow (C context ) {
977- R result = createLoadFlowEngine (context ).run ();
978- return postContingencyStatusFromLoadFlowResult (result );
979- }
980986}
0 commit comments