1010import com .powsybl .iidm .network .Battery ;
1111import com .powsybl .iidm .network .extensions .ActivePowerControl ;
1212import com .powsybl .iidm .network .extensions .ActivePowerControlAdder ;
13+ import com .powsybl .iidm .network .extensions .BatteryShortCircuit ;
14+ import com .powsybl .iidm .network .extensions .BatteryShortCircuitAdder ;
1315import jakarta .validation .constraints .NotNull ;
1416import org .gridsuite .modification .dto .AttributeModification ;
1517import org .gridsuite .modification .dto .OperationType ;
1618import org .gridsuite .modification .utils .ModificationUtils ;
1719
1820import static org .gridsuite .modification .NetworkModificationException .Type .MODIFY_BATTERY_ERROR ;
1921import 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}
0 commit comments