Skip to content

Commit 8653eb2

Browse files
authored
allow to modify byfilter and by formula shortcircuit fields for batteries (#119)
Signed-off-by: Etienne LESOT <[email protected]>
1 parent 7d5b85e commit 8653eb2

File tree

2 files changed

+45
-10
lines changed

2 files changed

+45
-10
lines changed

src/main/java/org/gridsuite/modification/dto/byfilter/equipmentfield/BatteryField.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
import com.powsybl.iidm.network.Battery;
1111
import com.powsybl.iidm.network.extensions.ActivePowerControl;
1212
import com.powsybl.iidm.network.extensions.ActivePowerControlAdder;
13+
import com.powsybl.iidm.network.extensions.BatteryShortCircuit;
14+
import com.powsybl.iidm.network.extensions.BatteryShortCircuitAdder;
1315
import jakarta.validation.constraints.NotNull;
1416
import org.gridsuite.modification.dto.AttributeModification;
1517
import org.gridsuite.modification.dto.OperationType;
1618
import org.gridsuite.modification.utils.ModificationUtils;
1719

1820
import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_BATTERY_ERROR;
1921
import static org.gridsuite.modification.modifications.BatteryModification.*;
22+
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;
2023

2124
/**
2225
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
@@ -27,38 +30,42 @@ public enum BatteryField {
2730
MAXIMUM_ACTIVE_POWER,
2831
ACTIVE_POWER_SET_POINT,
2932
REACTIVE_POWER_SET_POINT,
30-
DROOP;
33+
DROOP,
34+
TRANSIENT_REACTANCE,
35+
STEP_UP_TRANSFORMER_REACTANCE;
3136

3237
public static String getReferenceValue(Battery battery, String batteryField) {
3338
ActivePowerControl<Battery> activePowerControl = battery.getExtension(ActivePowerControl.class);
39+
BatteryShortCircuit batteryShortCircuit = battery.getExtension(BatteryShortCircuit.class);
3440
BatteryField field = BatteryField.valueOf(batteryField);
3541
return switch (field) {
3642
case MINIMUM_ACTIVE_POWER -> String.valueOf(battery.getMinP());
3743
case MAXIMUM_ACTIVE_POWER -> String.valueOf(battery.getMaxP());
3844
case ACTIVE_POWER_SET_POINT -> String.valueOf(battery.getTargetP());
3945
case REACTIVE_POWER_SET_POINT -> String.valueOf(battery.getTargetQ());
4046
case DROOP -> activePowerControl != null ? String.valueOf(activePowerControl.getDroop()) : null;
47+
case TRANSIENT_REACTANCE -> batteryShortCircuit != null ? String.valueOf(batteryShortCircuit.getDirectTransX()) : null;
48+
case STEP_UP_TRANSFORMER_REACTANCE -> batteryShortCircuit != null ? String.valueOf(batteryShortCircuit.getStepUpTransformerX()) : null;
4149
};
4250
}
4351

4452
public static void setNewValue(Battery battery, String batteryField, @NotNull String newValue) {
4553
BatteryField field = BatteryField.valueOf(batteryField);
4654
String errorMessage = String.format(ERROR_MESSAGE, battery.getId());
47-
final AttributeModification<Double> attributeModification = new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET);
4855
switch (field) {
4956
case MINIMUM_ACTIVE_POWER ->
50-
modifyBatteryActiveLimitsAttributes(null, attributeModification, battery, null);
57+
modifyBatteryActiveLimitsAttributes(null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), battery, null);
5158
case MAXIMUM_ACTIVE_POWER ->
52-
modifyBatteryActiveLimitsAttributes(attributeModification, null, battery, null);
59+
modifyBatteryActiveLimitsAttributes(new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, battery, null);
5360
case ACTIVE_POWER_SET_POINT -> {
5461
ModificationUtils.getInstance().checkActivePowerZeroOrBetweenMinAndMaxActivePower(
55-
attributeModification, null, null, battery.getMinP(),
62+
new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, null, battery.getMinP(),
5663
battery.getMaxP(), battery.getTargetP(), MODIFY_BATTERY_ERROR, errorMessage
5764
);
58-
modifyBatterySetpointsAttributes(attributeModification, null, null, null, battery, null);
65+
modifyBatterySetpointsAttributes(new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, null, null, battery, null);
5966
}
6067
case REACTIVE_POWER_SET_POINT -> modifyBatterySetpointsAttributes(
61-
null, attributeModification, null, null, battery, null);
68+
null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, null, battery, null);
6269
case DROOP -> {
6370
Float droopValue = Float.parseFloat(newValue);
6471
ModificationUtils.checkIsPercentage(errorMessage, droopValue, MODIFY_BATTERY_ERROR, "Droop");
@@ -69,6 +76,12 @@ public static void setNewValue(Battery battery, String batteryField, @NotNull St
6976
new AttributeModification<>(droopValue, OperationType.SET), null,
7077
null, MODIFY_BATTERY_ERROR, errorMessage);
7178
}
79+
case TRANSIENT_REACTANCE -> ModificationUtils.getInstance().modifyShortCircuitExtension(new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
80+
null, battery.getExtension(BatteryShortCircuit.class),
81+
() -> battery.newExtension(BatteryShortCircuitAdder.class), null);
82+
case STEP_UP_TRANSFORMER_REACTANCE -> ModificationUtils.getInstance().modifyShortCircuitExtension(null,
83+
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET), battery.getExtension(BatteryShortCircuit.class),
84+
() -> battery.newExtension(BatteryShortCircuitAdder.class), null);
7285
}
7386
}
7487
}

src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.powsybl.iidm.network.IdentifiableType;
1010
import com.powsybl.iidm.network.extensions.ActivePowerControl;
1111
import com.powsybl.iidm.network.extensions.ActivePowerControlAdder;
12+
import com.powsybl.iidm.network.extensions.BatteryShortCircuit;
1213
import org.gridsuite.filter.utils.EquipmentType;
1314
import org.gridsuite.modification.dto.FilterEquipments;
1415
import org.gridsuite.modification.dto.IdentifiableAttributes;
@@ -23,8 +24,7 @@
2324
import java.util.UUID;
2425

2526
import static org.gridsuite.modification.utils.NetworkUtil.createBattery;
26-
import static org.junit.jupiter.api.Assertions.assertEquals;
27-
import static org.junit.jupiter.api.Assertions.assertNotNull;
27+
import static org.junit.jupiter.api.Assertions.*;
2828
import static org.mockito.ArgumentMatchers.any;
2929
import static org.mockito.Mockito.when;
3030

@@ -140,8 +140,20 @@ protected List<AssignmentInfos<?>> getAssignmentInfos() {
140140
.value(2.)
141141
.build();
142142

143+
DoubleAssignmentInfos assignmentInfos6 = DoubleAssignmentInfos.builder()
144+
.filters(List.of(filter4))
145+
.editedField(BatteryField.TRANSIENT_REACTANCE.name())
146+
.value(3.)
147+
.build();
148+
149+
DoubleAssignmentInfos assignmentInfos7 = DoubleAssignmentInfos.builder()
150+
.filters(List.of(filter4))
151+
.editedField(BatteryField.STEP_UP_TRANSFORMER_REACTANCE.name())
152+
.value(4.)
153+
.build();
154+
143155
List<AssignmentInfos<?>> infosList = super.getAssignmentInfos();
144-
infosList.addAll(List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3, assignmentInfos4, assignmentInfos5));
156+
infosList.addAll(List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3, assignmentInfos4, assignmentInfos5, assignmentInfos6, assignmentInfos7));
145157

146158
return infosList;
147159
}
@@ -167,6 +179,16 @@ protected void assertAfterNetworkModificationApplication() {
167179
assertEquals(2, activePowerControl5.getDroop(), 0);
168180

169181
assertEquals(30, getNetwork().getBattery(BATTERY_ID_6).getMinP(), 0);
182+
183+
assertNotNull(getNetwork().getBattery(BATTERY_ID_5).getExtension(BatteryShortCircuit.class));
184+
BatteryShortCircuit batteryShortCircuit5 = getNetwork().getBattery(BATTERY_ID_5).getExtension(BatteryShortCircuit.class);
185+
assertEquals(3, batteryShortCircuit5.getDirectTransX());
186+
assertEquals(4, batteryShortCircuit5.getStepUpTransformerX());
187+
188+
assertNotNull(getNetwork().getBattery(BATTERY_ID_1).getExtension(BatteryShortCircuit.class));
189+
BatteryShortCircuit batteryShortCircuit1 = getNetwork().getBattery(BATTERY_ID_5).getExtension(BatteryShortCircuit.class);
190+
assertEquals(3, batteryShortCircuit1.getDirectTransX());
191+
assertEquals(4, batteryShortCircuit1.getStepUpTransformerX());
170192
}
171193

172194
@Override

0 commit comments

Comments
 (0)