Skip to content

Commit 6d98cb0

Browse files
author
Riad Benradi
committed
fixes about the test
Signed-off-by: Riad Benradi <riad.benradi_externe@rte-france.com>
1 parent 17e30ba commit 6d98cb0

6 files changed

Lines changed: 87 additions & 40 deletions

File tree

src/main/java/com/powsybl/openloadflow/sa/AbstractNetworkResult.java

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package com.powsybl.openloadflow.sa;
99

10+
import com.powsybl.iidm.network.*;
1011
import com.powsybl.openloadflow.network.*;
1112
import com.powsybl.openloadflow.network.impl.LfLegBranch;
1213
import com.powsybl.openloadflow.network.impl.LfStarBus;
@@ -35,6 +36,8 @@ public abstract class AbstractNetworkResult {
3536

3637
protected final LfNetwork network;
3738

39+
protected final Network iidmNetwork;
40+
3841
protected final StateMonitorIndex monitorIndex;
3942

4043
protected final StateMonitorIndex zeroImpedanceMonitorIndex;
@@ -58,10 +61,9 @@ public record StateMonitorIndexes(StateMonitorIndex monitorIndex, StateMonitorIn
5861

5962
protected final List<PhaseShifterResultsExtension.MovedPhaseShifterResult> movedPhaseShifterResults = new ArrayList<>();
6063

61-
62-
63-
protected AbstractNetworkResult(LfNetwork network, StateMonitorIndexes monitorIndexes, boolean createResultExtension, LoadFlowModel loadFlowModel, double dcPowerFactor) {
64+
protected AbstractNetworkResult(LfNetwork network, Network iidmNetwork, StateMonitorIndexes monitorIndexes, boolean createResultExtension, LoadFlowModel loadFlowModel, double dcPowerFactor) {
6465
this.network = Objects.requireNonNull(network);
66+
this.iidmNetwork = Objects.requireNonNull(iidmNetwork);
6567
this.monitorIndex = Objects.requireNonNull(monitorIndexes.monitorIndex);
6668
this.zeroImpedanceMonitorIndex = Objects.requireNonNull(monitorIndexes.zeroImpedanceMonitorIndex);
6769
this.createResultExtension = createResultExtension;
@@ -151,6 +153,44 @@ protected Map<String, LfBranch.LfBranchResults> storeResultsForZeroImpedanceBran
151153
return zeroImpedanceFlows;
152154
}
153155

156+
private Optional<PhaseTapChanger> extractPhaseTapChanger(LfBranch branch) {
157+
String originalId = branch.getMainOriginalId();
158+
LfBranch.BranchType branchType = branch.getBranchType();
159+
if (branchType == LfBranch.BranchType.TRANSFO_2) {
160+
TwoWindingsTransformer twt = iidmNetwork.getTwoWindingsTransformer(originalId);
161+
if (twt != null) {
162+
return Optional.ofNullable(twt.getPhaseTapChanger());
163+
}
164+
} else if (branchType == LfBranch.BranchType.TRANSFO_3_LEG_1
165+
|| branchType == LfBranch.BranchType.TRANSFO_3_LEG_2
166+
|| branchType == LfBranch.BranchType.TRANSFO_3_LEG_3) {
167+
ThreeWindingsTransformer t3wt = iidmNetwork.getThreeWindingsTransformer(originalId);
168+
if (t3wt != null) {
169+
Optional<ThreeSides> side = branch.getOriginalSide();
170+
if (side.isPresent()) {
171+
return Optional.ofNullable(t3wt.getLeg(side.get()).getPhaseTapChanger());
172+
}
173+
}
174+
}
175+
return Optional.empty();
176+
}
177+
178+
protected void storeInitialPhaseTapChangerInfo() {
179+
phaseTapChangerResults = network.getBranches().stream()
180+
.filter(b -> !b.isDisabled())
181+
.filter(LfBranch::hasPhaseControllerCapability)
182+
.map(b -> {
183+
var ptc = extractPhaseTapChanger(b);
184+
return ptc.map(p -> new PhaseTapChangerResult(p,
185+
b.getMainOriginalId(),
186+
b.getPiModel(),
187+
p.getTapPosition()));
188+
})
189+
.filter(Optional::isPresent)
190+
.map(Optional::get)
191+
.toList();
192+
}
193+
154194
protected void updateMovedPhaseShifters() {
155195
for (PhaseTapChangerResult ptcResult : phaseTapChangerResults) {
156196
int newTapPosition = Transformers.findTapPosition(ptcResult.getPhaseTapChanger(), Math.toDegrees(ptcResult.getPiModel().getA1()));
@@ -161,6 +201,10 @@ protected void updateMovedPhaseShifters() {
161201
}
162202
}
163203

204+
protected List<PhaseTapChangerResult> getPhaseTapChangerResults() {
205+
return phaseTapChangerResults;
206+
}
207+
164208
public List<PhaseShifterResultsExtension.MovedPhaseShifterResult> getMovedPhaseShifterResults() {
165209
return movedPhaseShifterResults;
166210
}

src/main/java/com/powsybl/openloadflow/sa/AbstractSecurityAnalysis.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ protected SecurityAnalysisResult runSimulations(LfNetwork lfNetwork, List<Propag
509509
LoadFlowModel loadFlowModel = securityAnalysisParameters.getLoadFlowParameters().isDc() ? LoadFlowModel.DC : LoadFlowModel.AC;
510510
List<StateMonitor> zeroImpedanceStateMonitors = extractZeroImpedanceStateMonitors(lfNetwork);
511511
this.zeroImpedanceMonitoredIndex = new StateMonitorIndex(zeroImpedanceStateMonitors);
512-
var preContingencyNetworkResult = new PreContingencyNetworkResult(lfNetwork, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension,
512+
var preContingencyNetworkResult = new PreContingencyNetworkResult(lfNetwork, this.network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension,
513513
loadFlowModel, securityAnalysisParameters.getLoadFlowParameters().getDcPowerFactor());
514514
List<OperatorStrategyResult> operatorStrategyResults = new ArrayList<>();
515515

@@ -681,7 +681,7 @@ protected PostContingencyResult runPostContingencySimulation(LfNetwork network,
681681
var postContingencyLimitViolationManager = new LimitViolationManager(preContingencyLimitViolationManager, limitReductions, securityAnalysisParameters.getIncreasedViolationsParameters());
682682

683683
LoadFlowModel loadFlowModel = securityAnalysisParameters.getLoadFlowParameters().isDc() ? LoadFlowModel.DC : LoadFlowModel.AC;
684-
var postContingencyNetworkResult = new PostContingencyNetworkResult(network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension, preContingencyNetworkResult, contingency, loadFlowModel, securityAnalysisParameters.getLoadFlowParameters().getDcPowerFactor());
684+
var postContingencyNetworkResult = new PostContingencyNetworkResult(network, this.network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension, preContingencyNetworkResult, contingency, loadFlowModel, securityAnalysisParameters.getLoadFlowParameters().getDcPowerFactor());
685685

686686
if (status.equals(PostContingencyComputationStatus.CONVERGED)) {
687687
// update network result
@@ -752,7 +752,7 @@ protected OperatorStrategyResult runActionSimulation(LfNetwork network, C contex
752752
PostContingencyComputationStatus status = postContingencyStatusFromLoadFlowResult(result);
753753
var postActionsViolationManager = new LimitViolationManager(preContingencyLimitViolationManager, limitReductions, securityAnalysisParameters.getIncreasedViolationsParameters());
754754
LoadFlowModel loadFlowModel = securityAnalysisParameters.getLoadFlowParameters().isDc() ? LoadFlowModel.DC : LoadFlowModel.AC;
755-
var postActionsNetworkResult = new PostContingencyNetworkResult(network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension,
755+
var postActionsNetworkResult = new PostContingencyNetworkResult(network, this.network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension,
756756
preContingencyNetworkResult, contingency, loadFlowModel, securityAnalysisParameters.getLoadFlowParameters().getDcPowerFactor());
757757

758758
if (status.equals(PostContingencyComputationStatus.CONVERGED)) {

src/main/java/com/powsybl/openloadflow/sa/PostContingencyNetworkResult.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@
1010
import com.powsybl.contingency.Contingency;
1111
import com.powsybl.contingency.ContingencyElement;
1212
import com.powsybl.contingency.ContingencyElementType;
13-
import com.powsybl.iidm.network.PhaseTapChanger;
14-
import com.powsybl.iidm.network.PhaseTapChangerHolder;
15-
import com.powsybl.openloadflow.network.*;
16-
import com.powsybl.openloadflow.network.impl.Transformers;
13+
import com.powsybl.iidm.network.Network;
14+
import com.powsybl.openloadflow.network.LfBranch;
15+
import com.powsybl.openloadflow.network.LfNetwork;
16+
import com.powsybl.openloadflow.network.LoadFlowModel;
1717
import com.powsybl.security.monitor.StateMonitor;
1818
import com.powsybl.security.results.BranchResult;
19-
import com.powsybl.security.results.PhaseShifterResultsExtension;
20-
import org.apache.commons.lang3.tuple.Pair;
2119

22-
import java.util.*;
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
import java.util.Map;
23+
import java.util.Objects;
2324
import java.util.function.Predicate;
24-
import java.util.stream.Collectors;
2525

2626
/**
2727
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
@@ -34,9 +34,9 @@ public class PostContingencyNetworkResult extends AbstractNetworkResult {
3434

3535
private final Contingency contingency;
3636

37-
public PostContingencyNetworkResult(LfNetwork network, StateMonitorIndexes monitorIndexes, boolean createResultExtension,
37+
public PostContingencyNetworkResult(LfNetwork network, Network iidmNetwork, StateMonitorIndexes monitorIndexes, boolean createResultExtension,
3838
PreContingencyNetworkResult preContingencyMonitorInfos, Contingency contingency, LoadFlowModel loadFlowModel, double dcPowerFactor) {
39-
super(network, monitorIndexes, createResultExtension, loadFlowModel, dcPowerFactor);
39+
super(network, iidmNetwork, monitorIndexes, createResultExtension, loadFlowModel, dcPowerFactor);
4040
this.preContingencyMonitorInfos = Objects.requireNonNull(preContingencyMonitorInfos);
4141
this.contingency = Objects.requireNonNull(contingency);
4242
}
@@ -83,6 +83,7 @@ public void update(Predicate<LfBranch> isBranchDisabled) {
8383
Map<String, LfBranch.LfBranchResults> zeroImpedanceFlows = storeResultsForZeroImpedanceBranches(zeroImpedanceMonitorIndex.getAllStateMonitor(), network);
8484
addResults(monitorIndex.getAllStateMonitor(), isBranchDisabled, zeroImpedanceFlows);
8585
}
86+
storeInitialPhaseTapChangerInfo();
8687
updateMovedPhaseShifters();
8788
}
8889

src/main/java/com/powsybl/openloadflow/sa/PreContingencyNetworkResult.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,12 @@
77
*/
88
package com.powsybl.openloadflow.sa;
99

10-
import com.powsybl.iidm.network.PhaseTapChangerHolder;
10+
import com.powsybl.iidm.network.Network;
1111
import com.powsybl.openloadflow.network.LfBranch;
1212
import com.powsybl.openloadflow.network.LfNetwork;
1313
import com.powsybl.openloadflow.network.LoadFlowModel;
14-
import com.powsybl.openloadflow.network.impl.Transformers;
15-
import com.powsybl.openloadflow.sa.extensions.PhaseTapChangerResult;
1614
import com.powsybl.security.monitor.StateMonitor;
1715
import com.powsybl.security.results.BranchResult;
18-
import com.powsybl.security.results.PhaseShifterResultsExtension;
1916

2017
import java.util.*;
2118
import java.util.function.Predicate;
@@ -27,8 +24,8 @@ public class PreContingencyNetworkResult extends AbstractNetworkResult {
2724

2825
private final Map<String, BranchResult> branchResults = new HashMap<>();
2926

30-
public PreContingencyNetworkResult(LfNetwork network, StateMonitorIndexes monitorIndexes, boolean createResultExtension, LoadFlowModel loadFlowModel, double dcPowerFactor) {
31-
super(network, monitorIndexes, createResultExtension, loadFlowModel, dcPowerFactor);
27+
public PreContingencyNetworkResult(LfNetwork network, Network iidmNetwork, StateMonitorIndexes monitorIndexes, boolean createResultExtension, LoadFlowModel loadFlowModel, double dcPowerFactor) {
28+
super(network, iidmNetwork, monitorIndexes, createResultExtension, loadFlowModel, dcPowerFactor);
3229
}
3330

3431
@Override
@@ -44,17 +41,6 @@ private void addResults(StateMonitor monitor, Predicate<LfBranch> isBranchDisabl
4441
}, isBranchDisabled, zeroImpedanceFlows);
4542
}
4643

47-
private void storeInitialPhaseTapChangerInfo() {
48-
phaseTapChangerResults = network.getBranches().stream()
49-
.filter(b -> b instanceof PhaseTapChangerHolder)
50-
.filter(b -> !b.isDisabled())
51-
.filter(b -> ((PhaseTapChangerHolder) b).hasPhaseTapChanger())
52-
.map(b -> new PhaseTapChangerResult(((PhaseTapChangerHolder) b).getPhaseTapChanger(),
53-
b.getMainOriginalId(),
54-
b.getPiModel(),
55-
((PhaseTapChangerHolder) b).getPhaseTapChanger().getTapPosition())).toList();
56-
}
57-
5844
@Override
5945
public void update() {
6046
update(LfBranch::isDisabled);

src/main/java/com/powsybl/openloadflow/sa/WoodburyDcSecurityAnalysis.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ private PostContingencyResult computePostContingencyResultFromPostContingencySta
204204
lfContingency.apply(loadFlowContext.getParameters().getBalanceType());
205205

206206
// update post contingency network result
207-
var postContingencyNetworkResult = new PostContingencyNetworkResult(lfNetwork, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), woodburyContext.createResultExtension,
207+
var postContingencyNetworkResult = new PostContingencyNetworkResult(lfNetwork, network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), woodburyContext.createResultExtension,
208208
preContingencyNetworkResult, contingency, LoadFlowModel.DC, woodburyContext.dcLoadFlowContext().getParameters().getEquationSystemCreationParameters().getDcPowerFactor());
209209
postContingencyNetworkResult.update(isBranchDisabledDueToContingency);
210210

@@ -250,7 +250,7 @@ private OperatorStrategyResult computeOperatorStrategyResultFromPostContingencyA
250250
LfActionUtils.applyListOfActions(operatorStrategyLfActions, lfNetwork, lfContingency, loadFlowContext.getParameters().getNetworkParameters());
251251

252252
// update network result
253-
var postActionsNetworkResult = new PostContingencyNetworkResult(lfNetwork, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), woodburyContext.createResultExtension,
253+
var postActionsNetworkResult = new PostContingencyNetworkResult(lfNetwork, network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), woodburyContext.createResultExtension,
254254
preContingencyNetworkResult, contingency, LoadFlowModel.DC, loadFlowContext.getParameters().getEquationSystemCreationParameters().getDcPowerFactor());
255255
postActionsNetworkResult.update(isBranchDisabledDueToContingency);
256256

@@ -403,7 +403,7 @@ protected SecurityAnalysisResult runSimulations(LfNetwork lfNetwork, List<Propag
403403
// update network result
404404
List<StateMonitor> zeroImpedanceStateMonitors = extractZeroImpedanceStateMonitors(lfNetwork);
405405
this.zeroImpedanceMonitoredIndex = new StateMonitorIndex(zeroImpedanceStateMonitors);
406-
var preContingencyNetworkResult = new PreContingencyNetworkResult(lfNetwork, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension, LoadFlowModel.DC, securityAnalysisParameters.getLoadFlowParameters().getDcPowerFactor());
406+
var preContingencyNetworkResult = new PreContingencyNetworkResult(lfNetwork, network, new AbstractNetworkResult.StateMonitorIndexes(monitorIndex, zeroImpedanceMonitoredIndex), createResultExtension, LoadFlowModel.DC, securityAnalysisParameters.getLoadFlowParameters().getDcPowerFactor());
407407
preContingencyNetworkResult.update();
408408

409409
// detect violations

src/test/java/com/powsybl/openloadflow/sa/OpenSecurityAnalysisTest.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5050,12 +5050,28 @@ void testZeroFlowTransfer(boolean dc) {
50505050
@Test
50515051
void testMovedPhaseShifterResults() {
50525052
Network network = PhaseControlFactory.createNetworkWithT2wt();
5053+
network.newLine().setId("L3")
5054+
.setConnectableBus1("B1")
5055+
.setBus1("B1")
5056+
.setConnectableBus2("B2")
5057+
.setBus2("B2")
5058+
.setR(4.0)
5059+
.setX(200.0)
5060+
.add();
5061+
TwoWindingsTransformer ps1 = network.getTwoWindingsTransformer("PS1");
5062+
ps1.getPhaseTapChanger()
5063+
.setRegulationMode(PhaseTapChanger.RegulationMode.ACTIVE_POWER_CONTROL)
5064+
.setTargetDeadband(1)
5065+
.setRegulating(true)
5066+
.setTapPosition(1)
5067+
.setRegulationTerminal(ps1.getTerminal1())
5068+
.setRegulationValue(83);
50535069
LoadFlowParameters loadFlowParameters = new LoadFlowParameters().setPhaseShifterRegulationOn(true);
5054-
TwoWindingsTransformer t2wt = network.getTwoWindingsTransformer("PS1");
5055-
PhaseTapChanger ptc = t2wt.getPhaseTapChanger();
50565070
List<Contingency> contingencies = List.of(Contingency.line("L1"));
50575071
SecurityAnalysisResult result = runSecurityAnalysis(network, contingencies, Collections.emptyList(), loadFlowParameters);
5058-
NetworkResult networkResult = result.getPostContingencyResults().getFirst().getNetworkResult();
5059-
Map<String, PhaseShifterResultsExtension.MovedPhaseShifterResult> movedPhaseShifters = result.getPostContingencyResults().getFirst().getExtension(PhaseShifterResultsExtension.class).getPhaseShifterResults();
5072+
PhaseShifterResultsExtension postExt = result.getPostContingencyResults().getFirst().getExtension(PhaseShifterResultsExtension.class);
5073+
assertNotNull(postExt);
5074+
Map<String, PhaseShifterResultsExtension.MovedPhaseShifterResult> movedPhaseShifters = postExt.getPhaseShifterResults();
5075+
assertTrue(!movedPhaseShifters.isEmpty());
50605076
}
50615077
}

0 commit comments

Comments
 (0)