@@ -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 {
@@ -750,12 +754,12 @@ protected SecurityAnalysisResult runSimulations(LfNetwork lfNetwork, List<Propag
750754
751755 lfContingency .apply (loadFlowParameters .getBalanceType ());
752756
753- contingencyActivePowerLossDistribution .run (lfNetwork , lfContingency , propagatedContingency .getContingency (), securityAnalysisParameters , contingencyLoadFlowParameters , postContSimReportNode );
757+ double preDistributedActivePower = contingencyActivePowerLossDistribution .run (lfNetwork , lfContingency , propagatedContingency .getContingency (), securityAnalysisParameters , contingencyLoadFlowParameters , postContSimReportNode );
754758
755759 var postContingencyResult = runPostContingencySimulation (lfNetwork , context , propagatedContingency .getContingency (),
756760 lfContingency , preContingencyLimitViolationManager ,
757761 securityAnalysisParameters ,
758- preContingencyNetworkResult , createResultExtension , limitReductions );
762+ preContingencyNetworkResult , createResultExtension , limitReductions , preDistributedActivePower );
759763 postContingencyResults .add (postContingencyResult );
760764
761765 if (contingencyLoadFlowParameters != null &&
@@ -819,7 +823,8 @@ protected SecurityAnalysisResult runSimulations(LfNetwork lfNetwork, List<Propag
819823 preContingencyLoadFlowResult .toComponentResultStatus ().status (),
820824 new LimitViolationsResult (preContingencyLimitViolationManager .getLimitViolations ()),
821825 new NetworkResult (preContingencyNetworkResult .getBranchResults (), preContingencyNetworkResult .getBusResults (),
822- preContingencyNetworkResult .getThreeWindingsTransformerResults ()), Double .NaN ),
826+ preContingencyNetworkResult .getThreeWindingsTransformerResults ()),
827+ preContingencyLoadFlowResult .getDistributedActivePower () * PerUnit .SB ),
823828 postContingencyResults , operatorStrategyResults );
824829 }
825830 }
@@ -865,13 +870,14 @@ protected PostContingencyResult runPostContingencySimulation(LfNetwork network,
865870 LimitViolationManager preContingencyLimitViolationManager ,
866871 SecurityAnalysisParameters securityAnalysisParameters ,
867872 PreContingencyNetworkResult preContingencyNetworkResult , boolean createResultExtension ,
868- List <LimitReduction > limitReductions ) {
873+ List <LimitReduction > limitReductions , double preDistributedActivePower ) {
869874 logPostContingencyStart (network , lfContingency );
870875
871876 Stopwatch stopwatch = Stopwatch .createStarted ();
872877
873878 // restart LF on post contingency equation system
874- PostContingencyComputationStatus status = runActionLoadFlow (context ); // FIXME: change name.
879+ R result = createLoadFlowEngine (context ).run ();
880+ PostContingencyComputationStatus status = postContingencyStatusFromLoadFlowResult (result );
875881 var postContingencyLimitViolationManager = new LimitViolationManager (preContingencyLimitViolationManager , limitReductions , securityAnalysisParameters .getIncreasedViolationsParameters ());
876882
877883 LoadFlowModel loadFlowModel = securityAnalysisParameters .getLoadFlowParameters ().isDc () ? LoadFlowModel .DC : LoadFlowModel .AC ;
@@ -893,12 +899,15 @@ protected PostContingencyResult runPostContingencySimulation(LfNetwork network,
893899 lfContingency .getDisconnectedGenerationActivePower () * PerUnit .SB ,
894900 lfContingency .getDisconnectedElementIds ());
895901
896- return new PostContingencyResult (contingency , status ,
902+ return new PostContingencyResult (
903+ contingency ,
904+ status ,
897905 new LimitViolationsResult (postContingencyLimitViolationManager .getLimitViolations ()),
898906 new NetworkResult (postContingencyNetworkResult .getBranchResults (),
899907 postContingencyNetworkResult .getBusResults (),
900908 postContingencyNetworkResult .getThreeWindingsTransformerResults ()),
901- connectivityResult , Double .NaN );
909+ connectivityResult ,
910+ (preDistributedActivePower + result .getDistributedActivePower ()) * PerUnit .SB );
902911 }
903912
904913 protected void logPostContingencyStart (LfNetwork network , LfContingency lfContingency ) {
@@ -934,7 +943,8 @@ protected OperatorStrategyResult runActionSimulation(LfNetwork network, C contex
934943 Stopwatch stopwatch = Stopwatch .createStarted ();
935944
936945 // restart LF on post contingency and post actions equation system
937- PostContingencyComputationStatus status = runActionLoadFlow (context );
946+ R result = createLoadFlowEngine (context ).run ();
947+ PostContingencyComputationStatus status = postContingencyStatusFromLoadFlowResult (result );
938948 var postActionsViolationManager = new LimitViolationManager (preContingencyLimitViolationManager , limitReductions , securityAnalysisParameters .getIncreasedViolationsParameters ());
939949 LoadFlowModel loadFlowModel = securityAnalysisParameters .getLoadFlowParameters ().isDc () ? LoadFlowModel .DC : LoadFlowModel .AC ;
940950 var postActionsNetworkResult = new PreContingencyNetworkResult (network , new AbstractNetworkResult .StateMonitorIndexes (monitorIndex , zeroImpedanceMonitoredIndex ), createResultExtension ,
@@ -958,7 +968,7 @@ protected OperatorStrategyResult runActionSimulation(LfNetwork network, C contex
958968 new NetworkResult (postActionsNetworkResult .getBranchResults (),
959969 postActionsNetworkResult .getBusResults (),
960970 postActionsNetworkResult .getThreeWindingsTransformerResults ()),
961- Double . NaN )
971+ result . getDistributedActivePower () * PerUnit . SB )
962972 ));
963973 }
964974
@@ -972,8 +982,4 @@ protected void logActionEnd(LfNetwork network, OperatorStrategy operatorStrategy
972982 operatorStrategy .getContingencyContext ().getContingencyId (), network , stopwatch .elapsed (TimeUnit .MILLISECONDS ));
973983 }
974984
975- protected PostContingencyComputationStatus runActionLoadFlow (C context ) {
976- R result = createLoadFlowEngine (context ).run ();
977- return postContingencyStatusFromLoadFlowResult (result );
978- }
979985}
0 commit comments