Skip to content

Commit eb2e146

Browse files
Quad modification of all OLGs (#81)
Signed-off-by: Mathieu DEHARBE <[email protected]>
1 parent a10c3cc commit eb2e146

File tree

9 files changed

+385
-252
lines changed

9 files changed

+385
-252
lines changed

src/main/java/org/gridsuite/modification/dto/BranchModificationInfos.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,14 @@ public class BranchModificationInfos extends BasicEquipmentModificationInfos {
3232
@Schema(description = "Series reactance")
3333
private AttributeModification<Double> x;
3434

35-
@Schema(description = "Current limits Side 1")
36-
private CurrentLimitsModificationInfos currentLimits1;
35+
@Schema(description = "Operational limit groups on side 1 and 2")
36+
private List<OperationalLimitsGroupModificationInfos> operationalLimitsGroups;
3737

38-
@Schema(description = "Current limits Side 2")
39-
private CurrentLimitsModificationInfos currentLimits2;
38+
@Schema(description = "Selected operational limits group on Side 1")
39+
private AttributeModification<String> selectedOperationalLimitsGroup1;
4040

41-
@Schema(description = "Operational limits group Side 1")
42-
private List<OperationalLimitsGroupModificationInfos> operationalLimitsGroup1;
43-
44-
@Schema(description = "Operational limits group Side 2")
45-
private List<OperationalLimitsGroupModificationInfos> operationalLimitsGroup2;
41+
@Schema(description = "Selected operational limits group on Side 2")
42+
private AttributeModification<String> selectedOperationalLimitsGroup2;
4643

4744
@Schema(description = "Voltage level id modification 1")
4845
private AttributeModification<String> voltageLevelId1;

src/main/java/org/gridsuite/modification/dto/OperationalLimitsGroupModificationInfos.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ public class OperationalLimitsGroupModificationInfos {
3636
@Schema(description = "temporary limits modification type")
3737
private TemporaryLimitModificationType temporaryLimitsModificationType;
3838

39-
@Schema(description = "limits set to define as current active one for provided side")
40-
private String selectedOperationalLimitsGroupId;
41-
42-
@Schema(description = "operation group side")
43-
private String side;
39+
@Schema(description = "application side")
40+
private OperationalLimitsGroupInfos.Applicability applicability;
4441
}

src/main/java/org/gridsuite/modification/dto/OperationalLimitsGroupModificationType.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
*/
1212

1313
public enum OperationalLimitsGroupModificationType {
14+
// Modification types for Tabular modifications :
1415
ADD,
1516
MODIFY,
1617
REPLACE,
18+
// Modification type for simple form modifications :
19+
MODIFY_OR_ADD, // if the OLG exists it is modified, if not it is created
1720
}

src/main/java/org/gridsuite/modification/modifications/AbstractBranchModification.java

Lines changed: 245 additions & 146 deletions
Large diffs are not rendered by default.

src/main/java/org/gridsuite/modification/modifications/LineCreation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ public void apply(Network network, ReportNode subReportNode) {
7878
if (!CollectionUtils.isEmpty(opLimitsGroupSide2)) {
7979
ModificationUtils.getInstance().setCurrentLimitsOnASide(opLimitsGroupSide2, line, TWO, limitsReporter);
8080
}
81-
// properties
8281
List<ReportNode> limitSetsOnSideReportNodes = new ArrayList<>();
8382
if (modificationInfos.getSelectedOperationalLimitsGroup1() != null) {
8483
if (!ModificationUtils.hasLimitSet(opLimitsGroupSide1, modificationInfos.getSelectedOperationalLimitsGroup1())) {
@@ -117,6 +116,8 @@ public void apply(Network network, ReportNode subReportNode) {
117116
ModificationUtils.getInstance().reportModifications(limitsReporter, limitSetsOnSideReportNodes,
118117
"network.modification.ActiveLimitSets");
119118
}
119+
120+
// properties
120121
PropertiesUtils.applyProperties(line, characteristicsReporter, modificationInfos.getProperties(), "network.modification.LineProperties");
121122
}
122123

src/main/resources/org/gridsuite/modification/reports.properties

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,13 @@ network.modification.lcc.creation = Lcc creation ${lccId}
174174
network.modification.lccCharacteristics = Characteristics
175175
network.modification.lccCreated = New lcc with id=${id} created
176176
network.modification.limitSetAdded = ${name} added
177-
network.modification.operationalLimitsGroupAdded = New operational limits group added named ${operationalLimitsGroupName} on side ${side}
178-
network.modification.operationalLimitsGroupReplaced = Operational limits group named ${operationalLimitsGroupName} has been replaced on side ${side}
179-
network.modification.operationalLimitsGroupModified = Operational limits group named ${operationalLimitsGroupName} has been modified on side ${side}
180-
network.modification.newSelectedOperationalLimitsGroup = Operational limits group named ${operationalLimitsGroupName} is now active on side ${side}
177+
network.modification.operationalLimitsGroupAdded = New operational limits group added named ${operationalLimitsGroupName} on ${side}
178+
network.modification.operationalLimitsGroupReplaced = Operational limits group named ${operationalLimitsGroupName} has been replaced on ${side}
179+
network.modification.operationalLimitsGroupModified = Operational limits group named ${operationalLimitsGroupName} has been modified on ${side}
181180
network.modification.limitSetSelectedOnSide1 = limit set selected on side 1 : ${selectedOperationalLimitsGroup1}
182181
network.modification.limitSetSelectedOnSide2 = limit set selected on side 2 : ${selectedOperationalLimitsGroup2}
182+
network.modification.noLimitSetSelectedOnSide1 = No limit set selected on side 1
183+
network.modification.noLimitSetSelectedOnSide2 = No limit set selected on side 2
183184
network.modification.limitSetAbsentOnSide1 = limit set '${selectedOperationalLimitsGroup}' on side 1 does not exist
184185
network.modification.limitSetAbsentOnSide2 = limit set '${selectedOperationalLimitsGroup}' on side 2 does not exist
185186
network.modification.limits = Limits

src/test/java/org/gridsuite/modification/modifications/LineModificationTest.java

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import com.fasterxml.jackson.core.type.TypeReference;
1010
import com.powsybl.iidm.network.Line;
11-
import com.powsybl.iidm.network.LoadingLimits.TemporaryLimit;
1211
import com.powsybl.iidm.network.Network;
1312
import com.powsybl.iidm.network.ThreeSides;
1413
import com.powsybl.iidm.network.extensions.ConnectablePosition;
@@ -70,24 +69,6 @@ protected ModificationInfos buildModification() {
7069
.connectionDirection2(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
7170
.connectionPosition1(new AttributeModification<>(1, OperationType.SET))
7271
.connectionPosition2(new AttributeModification<>(1, OperationType.SET))
73-
.currentLimits1(CurrentLimitsModificationInfos.builder()
74-
.permanentLimit(12.0)
75-
.temporaryLimits(List.of(CurrentTemporaryLimitModificationInfos.builder()
76-
.acceptableDuration(null)
77-
.name("name31")
78-
.value(null)
79-
.modificationType(TemporaryLimitModificationType.ADD)
80-
.build()))
81-
.build())
82-
.currentLimits2(CurrentLimitsModificationInfos.builder()
83-
.permanentLimit(22.0)
84-
.temporaryLimits(List.of(CurrentTemporaryLimitModificationInfos.builder()
85-
.acceptableDuration(32)
86-
.name("name32")
87-
.value(42.0)
88-
.modificationType(TemporaryLimitModificationType.ADD)
89-
.build()))
90-
.build())
9172
.properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build()))
9273
.p1MeasurementValue(new AttributeModification<>(MEASUREMENT_P_VALUE, OperationType.SET))
9374
.p1MeasurementValidity(new AttributeModification<>(MEASUREMENT_P_VALID, OperationType.SET))
@@ -97,6 +78,8 @@ protected ModificationInfos buildModification() {
9778
.q1MeasurementValidity(new AttributeModification<>(MEASUREMENT_Q_VALID, OperationType.SET))
9879
.q2MeasurementValue(new AttributeModification<>(MEASUREMENT_Q_VALUE, OperationType.SET))
9980
.q2MeasurementValidity(new AttributeModification<>(MEASUREMENT_Q_VALID, OperationType.SET))
81+
.selectedOperationalLimitsGroup1(new AttributeModification<>("invalid_opLG", OperationType.SET))
82+
.selectedOperationalLimitsGroup2(new AttributeModification<>("invalid_opLG", OperationType.SET))
10083
.build();
10184
}
10285

@@ -110,16 +93,6 @@ protected void assertAfterNetworkModificationApplication() {
11093
assertEquals(1.0, modifiedLine.getB1());
11194
assertEquals(2.0, modifiedLine.getG2());
11295
assertEquals(2.0, modifiedLine.getB2());
113-
assertEquals(12.0, modifiedLine.getNullableCurrentLimits1().getPermanentLimit());
114-
TemporaryLimit temporaryLimit = modifiedLine.getNullableCurrentLimits1().getTemporaryLimit(Integer.MAX_VALUE);
115-
assertEquals(Integer.MAX_VALUE, temporaryLimit.getAcceptableDuration());
116-
assertEquals("name31", temporaryLimit.getName());
117-
assertEquals(Double.MAX_VALUE, temporaryLimit.getValue());
118-
assertEquals(22.0, modifiedLine.getNullableCurrentLimits2().getPermanentLimit());
119-
temporaryLimit = modifiedLine.getNullableCurrentLimits2().getTemporaryLimit(32);
120-
assertEquals(32, temporaryLimit.getAcceptableDuration());
121-
assertEquals("name32", temporaryLimit.getName());
122-
assertEquals(42.0, temporaryLimit.getValue());
12396
assertEquals(PROPERTY_VALUE, modifiedLine.getProperty(PROPERTY_NAME));
12497
assertMeasurements(modifiedLine);
12598
}

src/test/java/org/gridsuite/modification/modifications/TwoWindingsTransformerModificationTest.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.*;
2525

2626
import static org.assertj.core.api.Assertions.assertThat;
27+
import static org.gridsuite.modification.dto.OperationalLimitsGroupModificationType.ADD;
2728
import static org.gridsuite.modification.modifications.TwoWindingsTransformerModification.processPhaseTapRegulation;
2829
import static org.gridsuite.modification.utils.NetworkUtil.createTwoWindingsTransformer;
2930
import static org.junit.jupiter.api.Assertions.*;
@@ -58,24 +59,6 @@ protected ModificationInfos buildModification() {
5859
.ratedU1(new AttributeModification<>(5., OperationType.SET))
5960
.ratedU2(new AttributeModification<>(6., OperationType.SET))
6061
.ratedS(new AttributeModification<>(7., OperationType.SET))
61-
.currentLimits1(CurrentLimitsModificationInfos.builder()
62-
.permanentLimit(12.0)
63-
.temporaryLimits(List.of(CurrentTemporaryLimitModificationInfos.builder()
64-
.acceptableDuration(null)
65-
.name("name31")
66-
.value(null)
67-
.modificationType(TemporaryLimitModificationType.ADD)
68-
.build()))
69-
.build())
70-
.currentLimits2(CurrentLimitsModificationInfos.builder()
71-
.permanentLimit(22.0)
72-
.temporaryLimits(List.of(CurrentTemporaryLimitModificationInfos.builder()
73-
.acceptableDuration(32)
74-
.name("name32")
75-
.value(42.0)
76-
.modificationType(TemporaryLimitModificationType.ADD)
77-
.build()))
78-
.build())
7962
.voltageLevelId1(new AttributeModification<>("v1", OperationType.SET))
8063
.voltageLevelId2(new AttributeModification<>("v2", OperationType.SET))
8164
.busOrBusbarSectionId1(new AttributeModification<>("1.1", OperationType.SET))
@@ -152,6 +135,28 @@ protected ModificationInfos buildModification() {
152135
))
153136
.build())
154137
.properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build()))
138+
.operationalLimitsGroups(List.of(
139+
OperationalLimitsGroupModificationInfos.builder()
140+
.id("ETE")
141+
.applicability(OperationalLimitsGroupInfos.Applicability.SIDE1)
142+
.modificationType(ADD)
143+
.currentLimits(CurrentLimitsModificationInfos.builder()
144+
.permanentLimit(800.0)
145+
.build()
146+
)
147+
.build(),
148+
OperationalLimitsGroupModificationInfos.builder()
149+
.id("ETE")
150+
.applicability(OperationalLimitsGroupInfos.Applicability.SIDE2)
151+
.modificationType(ADD)
152+
.currentLimits(CurrentLimitsModificationInfos.builder()
153+
.permanentLimit(800.0)
154+
.build()
155+
)
156+
.build()
157+
))
158+
.selectedOperationalLimitsGroup1(new AttributeModification<>("DEFAULT", OperationType.SET))
159+
.selectedOperationalLimitsGroup2(new AttributeModification<>("ETE", OperationType.SET))
155160
.build();
156161
}
157162

@@ -171,24 +176,22 @@ protected void assertAfterNetworkModificationApplication() {
171176
assertEquals(5.0, modifiedTwoWindingsTransformer.getRatedU1(), 0.1);
172177
assertEquals(6.0, modifiedTwoWindingsTransformer.getRatedU2(), 0.1);
173178
assertEquals(7.0, modifiedTwoWindingsTransformer.getRatedS(), 0.1);
174-
// limits
175-
assertNotNull(modifiedTwoWindingsTransformer.getNullableCurrentLimits1());
176-
assertEquals(12.0, modifiedTwoWindingsTransformer.getNullableCurrentLimits1().getPermanentLimit());
177-
LoadingLimits.TemporaryLimit temporaryLimit = modifiedTwoWindingsTransformer.getNullableCurrentLimits1().getTemporaryLimit(Integer.MAX_VALUE);
178-
assertEquals(Integer.MAX_VALUE, temporaryLimit.getAcceptableDuration());
179-
assertEquals("name31", temporaryLimit.getName());
180-
assertEquals(Double.MAX_VALUE, temporaryLimit.getValue());
181-
assertNotNull(modifiedTwoWindingsTransformer.getNullableCurrentLimits2());
182-
assertEquals(22.0, modifiedTwoWindingsTransformer.getNullableCurrentLimits2().getPermanentLimit());
183-
temporaryLimit = modifiedTwoWindingsTransformer.getNullableCurrentLimits2().getTemporaryLimit(32);
184-
assertEquals(32, temporaryLimit.getAcceptableDuration());
185-
assertEquals("name32", temporaryLimit.getName());
186-
assertEquals(42.0, temporaryLimit.getValue());
187-
assertEquals(PROPERTY_VALUE, getNetwork().getTwoWindingsTransformer("trf1").getProperty(PROPERTY_NAME));
179+
assertEquals(PROPERTY_VALUE, modifiedTwoWindingsTransformer.getProperty(PROPERTY_NAME));
180+
assertOLG(modifiedTwoWindingsTransformer);
188181
assertMeasurements(modifiedTwoWindingsTransformer);
189182
assertToBeEstimated(modifiedTwoWindingsTransformer);
190183
}
191184

185+
private static void assertOLG(TwoWindingsTransformer modifiedTwt) {
186+
assertTrue(modifiedTwt.getSelectedOperationalLimitsGroup1().isPresent());
187+
assertEquals("DEFAULT", modifiedTwt.getSelectedOperationalLimitsGroup1().get().getId());
188+
assertTrue(modifiedTwt.getSelectedOperationalLimitsGroup2().isPresent());
189+
assertEquals("ETE", modifiedTwt.getSelectedOperationalLimitsGroup2().get().getId());
190+
assertTrue(modifiedTwt.getOperationalLimitsGroup1("ETE").isPresent());
191+
assertTrue(modifiedTwt.getOperationalLimitsGroup1("ETE").get().getCurrentLimits().isPresent());
192+
assertEquals(800.0, modifiedTwt.getOperationalLimitsGroup1("ETE").get().getCurrentLimits().get().getPermanentLimit());
193+
}
194+
192195
private void assertMeasurements(TwoWindingsTransformer twt) {
193196
Measurements<?> measurements = (Measurements<?>) twt.getExtension(Measurements.class);
194197
assertNotNull(measurements);

0 commit comments

Comments
 (0)