Skip to content

Commit 79d1302

Browse files
committed
Add ReferenceVoltageVariationAdder
Signed-off-by: lisrte <[email protected]>
1 parent 5ee3f2c commit 79d1302

File tree

13 files changed

+107
-6
lines changed

13 files changed

+107
-6
lines changed

cpp/pypowsybl-cpp/bindings.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ void dynamicSimulationBindings(py::module_& m) {
193193
.value("DISCONNECT", EventMappingType::DISCONNECT)
194194
.value("NODE_FAULT", EventMappingType::NODE_FAULT)
195195
.value("ACTIVE_POWER_VARIATION", EventMappingType::ACTIVE_POWER_VARIATION)
196-
.value("REACTIVE_POWER_VARIATION", EventMappingType::REACTIVE_POWER_VARIATION);
196+
.value("REACTIVE_POWER_VARIATION", EventMappingType::REACTIVE_POWER_VARIATION)
197+
.value("REFERENCE_VOLTAGE_VARIATION", EventMappingType::REFERENCE_VOLTAGE_VARIATION);
197198

198199
py::enum_<OutputVariableType>(m, "OutputVariableType")
199200
.value("CURVE", OutputVariableType::CURVE)

cpp/pypowsybl-java/powsybl-api.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ typedef enum {
393393
NODE_FAULT,
394394
ACTIVE_POWER_VARIATION,
395395
REACTIVE_POWER_VARIATION,
396+
REFERENCE_VOLTAGE_VARIATION,
396397
} EventMappingType;
397398

398399
typedef enum {

docs/reference/dynamic.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ EventMapping
5353
EventMapping.add_disconnection
5454
EventMapping.add_active_power_variation
5555
EventMapping.add_reactive_power_variation
56+
EventMapping.add_reference_voltage_variation
5657
EventMapping.add_node_fault
5758

5859
OutputVariableMapping

java/pypowsybl/src/main/java/com/powsybl/dataframe/dynamic/adders/DynamicModelDataframeConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public final class DynamicModelDataframeConstants {
3232
public static final String DISCONNECT_ONLY = "disconnect_only";
3333
public static final String DELTA_P = "delta_p";
3434
public static final String DELTA_Q = "delta_q";
35+
public static final String DELTA_U = "delta_u";
3536
public static final String FAULT_TIME = "fault_time";
3637
public static final String X_PU = "x_pu";
3738
public static final String R_PU = "r_pu";

java/pypowsybl/src/main/java/com/powsybl/dataframe/dynamic/adders/EventMappingHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public final class EventMappingHandler {
2424
Map.entry(EventMappingType.DISCONNECT, new DisconnectAdder()),
2525
Map.entry(EventMappingType.NODE_FAULT, new NodeFaultAdder()),
2626
Map.entry(EventMappingType.ACTIVE_POWER_VARIATION, new ActivePowerVariationAdder()),
27-
Map.entry(EventMappingType.REACTIVE_POWER_VARIATION, new ReactivePowerVariationAdder())
27+
Map.entry(EventMappingType.REACTIVE_POWER_VARIATION, new ReactivePowerVariationAdder()),
28+
Map.entry(EventMappingType.REFERENCE_VOLTAGE_VARIATION, new ReferenceVoltageVariationAdder())
2829
);
2930

3031
public static void addElements(EventMappingType type, PythonEventModelsSupplier modelMapping, UpdatingDataframe dataframe) {

java/pypowsybl/src/main/java/com/powsybl/dataframe/dynamic/adders/NodeFaultAdder.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
import com.powsybl.commons.report.ReportNode;
1111
import com.powsybl.dataframe.SeriesMetadata;
1212
import com.powsybl.dataframe.dynamic.PersistentDoubleSeries;
13-
import com.powsybl.dataframe.dynamic.PersistentStringSeries;
1413
import com.powsybl.dataframe.update.DoubleSeries;
15-
import com.powsybl.dataframe.update.StringSeries;
1614
import com.powsybl.dataframe.update.UpdatingDataframe;
1715
import com.powsybl.dynawo.models.events.NodeFaultEventBuilder;
1816
import com.powsybl.iidm.network.Network;

java/pypowsybl/src/main/java/com/powsybl/dataframe/dynamic/adders/ReactivePowerVariationAdder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public List<SeriesMetadata> getMetadata() {
3737

3838
private static class ReactivePowerVariationSeries extends AbstractEventModelSeries<EventReactivePowerVariationBuilder> {
3939

40-
4140
private final DoubleSeries deltaQs;
4241

4342
ReactivePowerVariationSeries(UpdatingDataframe dataframe) {
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* Copyright (c) 2026, RTE (http://www.rte-france.com/)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
* SPDX-License-Identifier: MPL-2.0
7+
*/
8+
package com.powsybl.dataframe.dynamic.adders;
9+
10+
import com.powsybl.commons.report.ReportNode;
11+
import com.powsybl.dataframe.SeriesMetadata;
12+
import com.powsybl.dataframe.dynamic.PersistentDoubleSeries;
13+
import com.powsybl.dataframe.update.DoubleSeries;
14+
import com.powsybl.dataframe.update.UpdatingDataframe;
15+
import com.powsybl.dynawo.models.events.EventReferenceVoltageVariationBuilder;
16+
import com.powsybl.iidm.network.Network;
17+
18+
import java.util.List;
19+
20+
import static com.powsybl.dataframe.dynamic.adders.DynamicModelDataframeConstants.*;
21+
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
22+
23+
/**
24+
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
25+
*/
26+
public class ReferenceVoltageVariationAdder extends AbstractEventModelAdder {
27+
28+
protected static final List<SeriesMetadata> METADATA = List.of(
29+
SeriesMetadata.stringIndex(STATIC_ID),
30+
SeriesMetadata.doubles(START_TIME),
31+
SeriesMetadata.doubles(DELTA_U));
32+
33+
@Override
34+
public List<SeriesMetadata> getMetadata() {
35+
return METADATA;
36+
}
37+
38+
private static class ReferenceVoltageVariationSeries extends AbstractEventModelSeries<EventReferenceVoltageVariationBuilder> {
39+
40+
private final DoubleSeries deltaUs;
41+
42+
ReferenceVoltageVariationSeries(UpdatingDataframe dataframe) {
43+
super(dataframe);
44+
this.deltaUs = PersistentDoubleSeries.copyOf(dataframe, DELTA_U);
45+
}
46+
47+
@Override
48+
protected void applyOnBuilder(int row, EventReferenceVoltageVariationBuilder builder) {
49+
applyIfPresent(staticIds, row, builder::staticId);
50+
applyIfPresent(startTimes, row, builder::startTime);
51+
applyIfPresent(deltaUs, row, builder::deltaU);
52+
}
53+
54+
@Override
55+
protected EventReferenceVoltageVariationBuilder createBuilder(Network network, ReportNode reportNode) {
56+
return EventReferenceVoltageVariationBuilder.of(network, reportNode);
57+
}
58+
}
59+
60+
@Override
61+
protected EventModelSeries createEventModelSeries(UpdatingDataframe dataframe) {
62+
return new ReferenceVoltageVariationSeries(dataframe);
63+
}
64+
}

java/pypowsybl/src/main/java/com/powsybl/python/commons/PyPowsyblApiHeader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1226,7 +1226,8 @@ public enum EventMappingType {
12261226
DISCONNECT,
12271227
NODE_FAULT,
12281228
ACTIVE_POWER_VARIATION,
1229-
REACTIVE_POWER_VARIATION;
1229+
REACTIVE_POWER_VARIATION,
1230+
REFERENCE_VOLTAGE_VARIATION;
12301231

12311232
@CEnumValue
12321233
public native int getCValue();

java/pypowsybl/src/test/java/com/powsybl/dataframe/dynamic/adders/EventModelsAdderTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ static Stream<Arguments> eventProvider() {
7373
df.addSeries(STATIC_ID, false, new TestStringSeries("GEN"));
7474
df.addSeries(DELTA_Q, false, new TestDoubleSeries(1.4));
7575
}),
76+
Arguments.of(REFERENCE_VOLTAGE_VARIATION,
77+
(Consumer<DefaultUpdatingDataframe>) df -> {
78+
df.addSeries(STATIC_ID, false, new TestStringSeries("GEN"));
79+
df.addSeries(DELTA_U, false, new TestDoubleSeries(1.5));
80+
}),
7681
Arguments.of(NODE_FAULT,
7782
(Consumer<DefaultUpdatingDataframe>) df -> {
7883
df.addSeries(STATIC_ID, false, new TestStringSeries("NLOAD"));

0 commit comments

Comments
 (0)