77package com .powsybl .loadflow .simple .ac ;
88
99import com .powsybl .commons .PowsyblException ;
10+ import com .powsybl .loadflow .simple .ac .macro .MacroAction ;
11+ import com .powsybl .loadflow .simple .ac .macro .MacroActionContext ;
1012import com .powsybl .loadflow .simple .network .LfBus ;
1113import com .powsybl .loadflow .simple .network .LfNetwork ;
1214import com .powsybl .loadflow .simple .network .PerUnit ;
@@ -76,46 +78,7 @@ public boolean run(MacroActionContext context) {
7678 while (!participatingBuses .isEmpty ()
7779 && Math .abs (remainingMismatch ) > SLACK_EPSILON ) {
7880
79- // normalize participation factors at each iteration start as some
80- // buses might have reach a limit and have been discarded
81- normalizeParticipationFactors (participatingBuses );
82-
83- double done = 0d ;
84- Iterator <ParticipatingBus > it = participatingBuses .iterator ();
85- while (it .hasNext ()) {
86- ParticipatingBus participatingBus = it .next ();
87- LfBus bus = participatingBus .bus ;
88- double factor = participatingBus .factor ;
89-
90- double minP = bus .getMinP ();
91- double maxP = bus .getMaxP ();
92- double generationTargetP = bus .getGenerationTargetP ();
93-
94- // we don't want to change the generation sign
95- if (generationTargetP < 0 ) {
96- maxP = Math .min (maxP , 0 );
97- } else {
98- minP = Math .max (minP , 0 );
99- }
100-
101- double newGenerationTargetP = generationTargetP + remainingMismatch * factor ;
102- if (remainingMismatch > 0 && newGenerationTargetP > maxP ) {
103- newGenerationTargetP = maxP ;
104- it .remove ();
105- } else if (remainingMismatch < 0 && newGenerationTargetP < minP ) {
106- newGenerationTargetP = minP ;
107- it .remove ();
108- }
109-
110- if (LOGGER .isTraceEnabled ()) {
111- LOGGER .trace ("Rescale '{}' active power target: {} -> {}" ,
112- bus .getId (), generationTargetP , newGenerationTargetP );
113- }
114- bus .setGenerationTargetP (newGenerationTargetP );
115- done += newGenerationTargetP - generationTargetP ;
116- }
117-
118- remainingMismatch -= done ;
81+ remainingMismatch -= run (participatingBuses , remainingMismatch );
11982
12083 iteration ++;
12184 }
@@ -135,4 +98,47 @@ public boolean run(MacroActionContext context) {
13598
13699 return false ;
137100 }
101+
102+ private double run (List <ParticipatingBus > participatingBuses , double remainingMismatch ) {
103+ // normalize participation factors at each iteration start as some
104+ // buses might have reach a limit and have been discarded
105+ normalizeParticipationFactors (participatingBuses );
106+
107+ double done = 0d ;
108+ Iterator <ParticipatingBus > it = participatingBuses .iterator ();
109+ while (it .hasNext ()) {
110+ ParticipatingBus participatingBus = it .next ();
111+ LfBus bus = participatingBus .bus ;
112+ double factor = participatingBus .factor ;
113+
114+ double minP = bus .getMinP ();
115+ double maxP = bus .getMaxP ();
116+ double generationTargetP = bus .getGenerationTargetP ();
117+
118+ // we don't want to change the generation sign
119+ if (generationTargetP < 0 ) {
120+ maxP = Math .min (maxP , 0 );
121+ } else {
122+ minP = Math .max (minP , 0 );
123+ }
124+
125+ double newGenerationTargetP = generationTargetP + remainingMismatch * factor ;
126+ if (remainingMismatch > 0 && newGenerationTargetP > maxP ) {
127+ newGenerationTargetP = maxP ;
128+ it .remove ();
129+ } else if (remainingMismatch < 0 && newGenerationTargetP < minP ) {
130+ newGenerationTargetP = minP ;
131+ it .remove ();
132+ }
133+
134+ if (LOGGER .isTraceEnabled ()) {
135+ LOGGER .trace ("Rescale '{}' active power target: {} -> {}" ,
136+ bus .getId (), generationTargetP , newGenerationTargetP );
137+ }
138+ bus .setGenerationTargetP (newGenerationTargetP );
139+ done += newGenerationTargetP - generationTargetP ;
140+ }
141+
142+ return done ;
143+ }
138144}
0 commit comments