Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
dbb374a
add ac emulation action serializer / deserializer
RoxaneChen02 Nov 3, 2025
8ac568b
update json import export
RoxaneChen02 Nov 3, 2025
a7b0b1b
update crac 2.9
RoxaneChen02 Nov 3, 2025
f005a4d
add UT
RoxaneChen02 Nov 3, 2025
9bc0e3c
add AcEmulationDeactivationAction
RoxaneChen02 Nov 3, 2025
4435a4b
add newAcEmulationDeactivationAction method
RoxaneChen02 Nov 3, 2025
76b5993
remove action type DEACTIVATE
RoxaneChen02 Nov 3, 2025
38b9712
allow change of set point only if not in ac emulation
RoxaneChen02 Oct 9, 2025
e5bfa4c
hard set default to SearchTreeRao (#1473)
Godelaine Sep 29, 2025
94df6c6
Delete tests with HVDC line initially in AC and HVDC RA defined (#1475)
Godelaine Sep 29, 2025
ed72878
Remove Usage Methods (#1449)
bqth29 Sep 29, 2025
35d3648
pre filter remedial actions (#1478)
bqth29 Oct 2, 2025
28e3cec
use CRAC deserializer logger for usage methods warning (#1477)
bqth29 Oct 2, 2025
92e8822
Remove FlowCNECs' Nominal Voltage (#1452)
bqth29 Oct 6, 2025
ea72dc3
allow dc run with hvdc ac emulation (#1484)
RoxaneChen02 Oct 7, 2025
a1ac6bb
[FastRAO] Adapt tests for CI needs (#1482)
vbochetRTE Oct 8, 2025
143eba0
remove HVDC range action pointing to hvdc line in ac emulation from t…
RoxaneChen02 Oct 10, 2025
683cddf
create acEmulationAction
RoxaneChen02 Oct 13, 2025
cec6130
simplify ac emulation status check
RoxaneChen02 Oct 13, 2025
35416d2
filter out hvdc range action on hvdc line in AC emulation before MIP
RoxaneChen02 Oct 13, 2025
e8beae3
typo
RoxaneChen02 Oct 13, 2025
2c7bd05
add loadflowsensi param to search tree param (temp ?)
RoxaneChen02 Oct 13, 2025
46b44ea
load flow computation at root leaf
RoxaneChen02 Oct 13, 2025
5fe6b39
add network action associated with hvdc range action
RoxaneChen02 Oct 13, 2025
024d679
change the set point after applying a ac emulation deactivation
RoxaneChen02 Oct 13, 2025
dc43533
test
RoxaneChen02 Oct 16, 2025
bf1bef2
create hvdc network action for all hvdc line that has a range action …
RoxaneChen02 Oct 16, 2025
ed63ca0
remove com
RoxaneChen02 Oct 16, 2025
5f7ae89
MARMOT documentation page (#1450)
bqth29 Oct 9, 2025
7dafd45
idcc cleaned main (#1470)
RoxaneChen02 Oct 10, 2025
99695e4
Standardize java files template (#1458)
bqth29 Oct 13, 2025
e92426e
mvn validate
RoxaneChen02 Oct 16, 2025
e5acf34
add test
RoxaneChen02 Oct 16, 2025
a06f3d5
add set initial set point function
RoxaneChen02 Oct 16, 2025
55bb504
add todo
RoxaneChen02 Oct 16, 2025
9e37928
correct filter
RoxaneChen02 Oct 16, 2025
deca6c0
fix UT HvdcRangeActionImplTestA
RoxaneChen02 Oct 16, 2025
8a9e8c7
fix test
RoxaneChen02 Oct 17, 2025
10c847c
fix test
RoxaneChen02 Oct 17, 2025
f922375
handle error and do initial load flow only if necessary
RoxaneChen02 Oct 20, 2025
c875ede
update initial network
RoxaneChen02 Oct 20, 2025
ed23078
apply network before range action in fast rao
RoxaneChen02 Oct 20, 2025
f2b9a51
add and fix tests
RoxaneChen02 Oct 20, 2025
06d4e0d
computeHvdcAngleDroopActivePowerControlValue to IidmHvdcHelper
RoxaneChen02 Oct 20, 2025
15abe77
add UT
RoxaneChen02 Oct 20, 2025
d9be2d1
move computeHvdcAngleDroopActivePowerControlValue function
RoxaneChen02 Oct 20, 2025
497c827
add UT
RoxaneChen02 Oct 20, 2025
f109885
remove TODO
RoxaneChen02 Oct 20, 2025
90f99ce
add UT
RoxaneChen02 Oct 20, 2025
f394953
add comm
RoxaneChen02 Oct 21, 2025
a055176
add UT
RoxaneChen02 Oct 21, 2025
212b88f
add UT
RoxaneChen02 Oct 21, 2025
ca5df31
checkstyle
RoxaneChen02 Oct 21, 2025
2422dfe
Accelr changes (#1495)
phiedw Oct 16, 2025
ed8d6bb
add UT
RoxaneChen02 Oct 21, 2025
6cf274b
add UT
RoxaneChen02 Oct 21, 2025
8a8f79a
add UT
RoxaneChen02 Oct 21, 2025
0b6244e
checkstyle
RoxaneChen02 Oct 21, 2025
24c0366
reneme function
RoxaneChen02 Oct 21, 2025
830161e
add UT
RoxaneChen02 Oct 21, 2025
68bf946
fix checkstyle
RoxaneChen02 Oct 21, 2025
8b4d50b
complete ut
RoxaneChen02 Oct 21, 2025
d7c7305
checkstyle
RoxaneChen02 Oct 21, 2025
cbcdb2e
wip
RoxaneChen02 Oct 22, 2025
21e1b2f
Revert "wip"
RoxaneChen02 Oct 22, 2025
446bf9d
don't apply at once the ac emulation deactivation at the beginning of…
RoxaneChen02 Oct 22, 2025
a57af29
Prepare release 7.0.0 (#1499) (#1510)
bqth29 Oct 22, 2025
6d8bece
Bump powsybl-core to 7.0.1 (#1511)
bqth29 Oct 22, 2025
233617e
Bump to v7.0.0
RoxaneChen02 Oct 22, 2025
63827df
Bump to v7.1.0-SNAPSHOT
RoxaneChen02 Oct 22, 2025
1f8027b
fix javadoc compilation
RoxaneChen02 Oct 22, 2025
931f859
Bump to v7.0.0
RoxaneChen02 Oct 22, 2025
ff9d99f
Bump to v7.1.0-SNAPSHOT
RoxaneChen02 Oct 22, 2025
61f4d6a
clean up
RoxaneChen02 Oct 23, 2025
2aaae8f
update test after merge main
RoxaneChen02 Oct 23, 2025
378c7ca
update test after merge main
RoxaneChen02 Oct 23, 2025
5ee0a99
fix test
RoxaneChen02 Oct 23, 2025
9ffe7d9
don't apply auto but still register it as applied
RoxaneChen02 Oct 24, 2025
1a3be16
remove custom has impact
RoxaneChen02 Oct 24, 2025
b27c5e9
fix checkstyle
RoxaneChen02 Oct 24, 2025
a3304da
apply acEmulationDeactivation action only if range action is optimized
RoxaneChen02 Oct 29, 2025
55ef801
apply network before range action
RoxaneChen02 Oct 29, 2025
a425f3e
acEmulationSwitch to acEmulationDeactivation
RoxaneChen02 Oct 29, 2025
9623d9b
lint
RoxaneChen02 Oct 29, 2025
cd14c05
add ac emulation action serializer / deserializer
RoxaneChen02 Nov 3, 2025
a3c838d
update json import export
RoxaneChen02 Nov 3, 2025
87d6b24
update crac 2.9
RoxaneChen02 Nov 3, 2025
0b48b57
add UT
RoxaneChen02 Nov 3, 2025
582a503
add AcEmulationDeactivationAction
RoxaneChen02 Nov 3, 2025
6fe2eee
remove action type DEACTIVATE
RoxaneChen02 Nov 3, 2025
ae56e0b
Merge branch 'main' into feature/hvdc_apply_bug
RoxaneChen02 Nov 3, 2025
545a5ce
Merge branch 'feat/add_ac_emulation_deactivation_action' into feature…
RoxaneChen02 Nov 3, 2025
3eb321d
remove todo
RoxaneChen02 Nov 3, 2025
02de6af
filter in marmot
RoxaneChen02 Nov 3, 2025
4c2409f
update param
RoxaneChen02 Nov 3, 2025
00130e7
update network
RoxaneChen02 Nov 3, 2025
757c459
fix after review
RoxaneChen02 Nov 13, 2025
11f0757
validate
RoxaneChen02 Nov 13, 2025
0dfd924
throw an error if we try to change active setpoint in ac emulation mode
RoxaneChen02 Nov 17, 2025
fd3c5c8
computeFlowOnHvdcLine -> computeActivePowerSetpointOnHvdcLine
RoxaneChen02 Nov 17, 2025
e8ed190
fraction in smaller function + add doc string
RoxaneChen02 Nov 17, 2025
687aa3c
fix typo
RoxaneChen02 Nov 17, 2025
aa2af2b
use default loadflowparam if searchtree extension doesnt exist
RoxaneChen02 Nov 17, 2025
30ab2a0
add comment to explain why network actions have to be applied BEFORE …
RoxaneChen02 Nov 17, 2025
ab68554
rename copyWithFilteredAvailableRangeAction -> copyWithFilteredAvaila…
RoxaneChen02 Nov 17, 2025
0fae923
add comment in raoUtil
RoxaneChen02 Nov 18, 2025
2553c13
fix test after review
RoxaneChen02 Nov 18, 2025
6ec3750
put in common functions !
RoxaneChen02 Nov 18, 2025
5e9a188
make param optional
RoxaneChen02 Nov 18, 2025
00c3c9e
clean up function doc string
RoxaneChen02 Nov 19, 2025
9d5b25b
add UT
RoxaneChen02 Nov 19, 2025
fce8a81
validate
RoxaneChen02 Nov 19, 2025
973fbbe
temp rollback
RoxaneChen02 Nov 19, 2025
9edf718
Revert "throw an error if we try to change active setpoint in ac emul…
RoxaneChen02 Nov 19, 2025
f1d9ac9
fix !ut
RoxaneChen02 Nov 19, 2025
933ed00
fix !ut
RoxaneChen02 Nov 19, 2025
c8be24b
typo
RoxaneChen02 Nov 19, 2025
8980cba
make public
RoxaneChen02 Nov 19, 2025
cf3d66d
clean search Tree Param
RoxaneChen02 Nov 19, 2025
0c13600
validate
RoxaneChen02 Nov 19, 2025
f844c78
Revert "Revert "throw an error if we try to change active setpoint in…
RoxaneChen02 Nov 19, 2025
9311823
Revert "temp rollback"
RoxaneChen02 Nov 19, 2025
b99f962
filter out hvdc range action in AC emulation in search tree
RoxaneChen02 Nov 19, 2025
205e457
add setInitialSEtpoint in HvdcRangeAction
RoxaneChen02 Nov 23, 2025
95f3b77
validate
RoxaneChen02 Nov 23, 2025
933cae6
add UT
RoxaneChen02 Nov 23, 2025
494d3ea
remove unecessary space
RoxaneChen02 Nov 23, 2025
b817f17
ad comment
RoxaneChen02 Nov 23, 2025
df32b87
validate
RoxaneChen02 Nov 24, 2025
6a2a900
Merge branch 'main' into feature/hvdc_apply_bug
RoxaneChen02 Nov 24, 2025
49cb4f9
add UT for coverage
RoxaneChen02 Nov 24, 2025
ea3688c
Merge branch 'main' into feat/add_ac_emulation_deactivation_action
RoxaneChen02 Nov 24, 2025
22796b9
Merge branch 'feat/add_ac_emulation_deactivation_action' into feature…
RoxaneChen02 Nov 24, 2025
68ce220
change com
RoxaneChen02 Nov 24, 2025
dd44632
use assertTrue
RoxaneChen02 Nov 24, 2025
03938d4
AC emulation deactivation network action everywhere
RoxaneChen02 Nov 24, 2025
2b47b16
add UT
RoxaneChen02 Nov 24, 2025
f363715
validate
RoxaneChen02 Nov 24, 2025
b242183
add test for coverage
RoxaneChen02 Nov 24, 2025
67d55b3
rename cucumber
RoxaneChen02 Nov 24, 2025
e68d85a
Merge branch 'main' into feat/add_ac_emulation_deactivation_action
Godelaine Nov 24, 2025
cef1d8a
Merge branch 'main' into feat/add_ac_emulation_deactivation_action
Godelaine Nov 25, 2025
ff82793
fix review
RoxaneChen02 Nov 26, 2025
83fd420
Merge branch 'main' into feature/hvdc_apply_bug
RoxaneChen02 Nov 26, 2025
2365879
Merge branch 'feat/add_ac_emulation_deactivation_action' into feature…
RoxaneChen02 Nov 26, 2025
e29de33
mvn validate
RoxaneChen02 Nov 26, 2025
8ed6c93
merge main
Godelaine Nov 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.powsybl.action.*;
import com.powsybl.openrao.data.crac.api.RemedialAction;
import com.powsybl.iidm.network.Network;
import com.powsybl.openrao.data.crac.api.usagerule.UsageRule;
import org.apache.commons.lang3.NotImplementedException;

import java.util.Set;
Expand Down Expand Up @@ -95,8 +96,12 @@ static String getNetworkElementId(Action elementaryAction) {
return terminalsConnectionAction.getElementId();
} else if (elementaryAction instanceof SwitchAction switchAction) {
return switchAction.getSwitchId();
} else if (elementaryAction instanceof HvdcAction hvdcAction) {
return hvdcAction.getHvdcId();
} else {
throw new NotImplementedException();
}
}

void addUsageRule(UsageRule usageRule);
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ public interface HvdcRangeAction extends StandardRangeAction<HvdcRangeAction> {
NetworkElement getNetworkElement();

boolean isAngleDroopActivePowerControlEnabled(Network network);

void setInitialSetpoint(double initialSetpoint);
}
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@ public boolean canBeApplied(Network network) {
return false;
}

@Override
public void addUsageRule(UsageRule usageRule) {
// not used
}

@Override
public <E extends Extension<NetworkAction>> void addExtension(Class<? super E> aClass, E e) {
//not used
Expand All @@ -165,6 +170,7 @@ public <E extends Extension<NetworkAction>> boolean removeExtension(Class<E> aCl
public <E extends Extension<NetworkAction>> Collection<E> getExtensions() {
return null;
}

}

public static class NetworkElementImplTest implements NetworkElement {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import com.powsybl.action.HvdcActionBuilder;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.data.crac.api.NetworkElement;
import com.powsybl.openrao.data.crac.api.range.StandardRange;
import com.powsybl.openrao.data.crac.api.rangeaction.HvdcRangeAction;
Expand All @@ -24,8 +25,6 @@
import java.util.Map;
import java.util.Set;

import static com.powsybl.openrao.commons.logs.OpenRaoLoggerProvider.TECHNICAL_LOGS;

/**
* Elementary HVDC range remedial action.
*
Expand All @@ -36,7 +35,7 @@ public class HvdcRangeActionImpl extends AbstractRangeAction<HvdcRangeAction> im

private final NetworkElement networkElement;
private final List<StandardRange> ranges;
private final Double initialSetpoint;
private Double initialSetpoint;

HvdcRangeActionImpl(String id, String name, String operator, Set<UsageRule> usageRules, List<StandardRange> ranges,
Double initialSetpoint, NetworkElement networkElement, String groupId, Integer speed, Double activationCost, Map<VariationDirection, Double> variationCosts) {
Expand Down Expand Up @@ -78,24 +77,25 @@ public Double getInitialSetpoint() {

@Override
public void apply(Network network, double targetSetpoint) {
logDisableHvdcAngleDroopActivePowerControl(network);
HvdcActionBuilder actionBuilder = new HvdcActionBuilder()
.withId("")
.withHvdcId(networkElement.getId())
.withActivePowerSetpoint(Math.abs(targetSetpoint))
.withAcEmulationEnabled(false);
if (targetSetpoint < 0) {
actionBuilder.withConverterMode(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER);
// Possible only if the network element associated is NOT in ac emulation mode (ie. fixed active power setpoint operation only)
HvdcActionBuilder actionBuilder = null;
if (!isAngleDroopActivePowerControlEnabled(network)) {
actionBuilder = new HvdcActionBuilder()
.withId("")
.withHvdcId(networkElement.getId())
.withActivePowerSetpoint(Math.abs(targetSetpoint));
if (targetSetpoint < 0) {
actionBuilder.withConverterMode(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER);
} else {
actionBuilder.withConverterMode(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER);
}
actionBuilder.build().toModification().apply(network, true, ReportNode.NO_OP);
} else {
actionBuilder.withConverterMode(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER);
}
actionBuilder.build().toModification().apply(network, true, ReportNode.NO_OP);
}

public void logDisableHvdcAngleDroopActivePowerControl(Network network) {
if (isAngleDroopActivePowerControlEnabled(network)) {
HvdcLine hvdcLine = IidmHvdcHelper.getHvdcLine(network, networkElement.getId());
TECHNICAL_LOGS.debug("Disabling HvdcAngleDroopActivePowerControl on HVDC line {}", hvdcLine.getId());
throw new OpenRaoException(String.format(
"Unable to set an active power setpoint for HVDC line %s because it is operating in AC Emulation mode.",
networkElement.getId()
)
);
}
}

Expand Down Expand Up @@ -135,4 +135,9 @@ public int hashCode() {
hashCode += 31 * networkElement.hashCode();
return hashCode;
}

@Override
public void setInitialSetpoint(double initialSetpoint) {
this.initialSetpoint = initialSetpoint;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public class NetworkActionImpl extends AbstractRemedialAction<NetworkAction> imp
private final Set<Action> elementaryActions;
private final Set<NetworkElement> networkElements;

NetworkActionImpl(String id, String name, String operator, Set<UsageRule> usageRules,
Set<Action> elementaryNetworkActions, Integer speed, Double activationCost, Set<NetworkElement> networkElements) {
public NetworkActionImpl(String id, String name, String operator, Set<UsageRule> usageRules,
Set<Action> elementaryNetworkActions, Integer speed, Double activationCost, Set<NetworkElement> networkElements) {
super(id, name, operator, usageRules, speed, activationCost);
this.elementaryActions = new HashSet<>(elementaryNetworkActions);
this.networkElements = new HashSet<>(networkElements);
Expand Down Expand Up @@ -76,6 +76,11 @@ public boolean canBeApplied(Network network) {
});
}

@Override
public void addUsageRule(UsageRule usageRule) {
this.usageRules.add(usageRule);
}

@Override
public Set<NetworkElement> getNetworkElements() {
return this.networkElements;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.HvdcLine;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.extensions.HvdcAngleDroopActivePowerControl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

Expand All @@ -33,7 +32,6 @@ class HvdcRangeActionImplTest {
private Network network;
private Network networkWithAngleDroop;
private HvdcLine hvdcLine;
private HvdcLine hvdcLineWithAngleDroop;

@BeforeEach
public void setUp() {
Expand All @@ -51,37 +49,47 @@ public void setUp() {
.newOnInstantUsageRule().withInstant("preventive").add();

hvdcLine = network.getHvdcLine(networkElementId);
hvdcLineWithAngleDroop = networkWithAngleDroop.getHvdcLine(networkElementId);
hvdcLineWithAngleDroop.getExtension(HvdcAngleDroopActivePowerControl.class).setEnabled(true);
}

@Test
void getInitialSetpoint() {
HvdcRangeAction hvdcRa = hvdcRangeActionAdder.newRange().withMin(-5).withMax(10).add()
.add();
assertEquals(0, hvdcRa.getCurrentSetpoint(network), 1e-6);
assertEquals(0, hvdcRa.getCurrentSetpoint(networkWithAngleDroop), 1e-6);
}

@Test
void testSetInitialSetpoint() {
HvdcRangeAction hvdcRa = hvdcRangeActionAdder.newRange().withMin(-5).withMax(10).add()
.add();
hvdcRa.setInitialSetpoint(10.0);
assertEquals(10.0, hvdcRa.getInitialSetpoint(), 1e-6);
}

@Test
void applyPositiveSetpoint() {
HvdcRangeAction hvdcRa = hvdcRangeActionAdder.newRange().withMin(-5).withMax(10).add()
.add();
hvdcRa.apply(network, 5);
hvdcRa.apply(networkWithAngleDroop, 6);
assertEquals(5, hvdcRa.getCurrentSetpoint(network), 1e-6);
assertEquals(6, hvdcRa.getCurrentSetpoint(networkWithAngleDroop), 1e-6);
assertFalse(hvdcLineWithAngleDroop.getExtension(HvdcAngleDroopActivePowerControl.class).isEnabled());

// Not allowed to change HVDC line's active setpoint if the line is in AC emulation mode.
OpenRaoException exception = assertThrows(OpenRaoException.class, () -> hvdcRa.apply(networkWithAngleDroop, 6));
assertEquals("Unable to set an active power setpoint for HVDC line BBE2AA11 FFR3AA11 1 because it is operating in AC Emulation mode.", exception.getMessage());

}

@Test
void applyNegativeSetpoint() {
HvdcRangeAction hvdcRa = hvdcRangeActionAdder.newRange().withMin(-5).withMax(10).add()
.add();
hvdcRa.apply(network, -3);
hvdcRa.apply(networkWithAngleDroop, -4);
assertEquals(-3, hvdcRa.getCurrentSetpoint(network), 1e-6);
assertEquals(-4, hvdcRa.getCurrentSetpoint(networkWithAngleDroop), 1e-6);
assertFalse(hvdcLineWithAngleDroop.getExtension(HvdcAngleDroopActivePowerControl.class).isEnabled());

// Not allowed to change HVDC line's active setpoint if the line is in AC emulation mode.
OpenRaoException exception = assertThrows(OpenRaoException.class, () -> hvdcRa.apply(networkWithAngleDroop, -4));
assertEquals("Unable to set an active power setpoint for HVDC line BBE2AA11 FFR3AA11 1 because it is operating in AC Emulation mode.", exception.getMessage());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,17 @@ public static double getCurrentSetpoint(Network network, String networkElementId
return -getHvdcLine(network, networkElementId).getActivePowerSetpoint();
}
}

public static double computeActivePowerSetpointOnHvdcLine(HvdcLine hvdcLine) {
if (hvdcLine.getConvertersMode().equals(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER)) {
return hvdcLine.getConverterStation2().getTerminal().getP();
} else {
return hvdcLine.getConverterStation1().getTerminal().getP();
}
}

public static void setActivePowerSetpointOnHvdcLine(HvdcLine hvdcLine, double activePowerSetpoint) {
hvdcLine.setConvertersMode(activePowerSetpoint > 0 ? HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER : HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER);
hvdcLine.setActivePowerSetpoint(Math.abs(activePowerSetpoint));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@

package com.powsybl.openrao.data.crac.io.commons.iidm;

import com.powsybl.iidm.network.HvdcConverterStation;
import com.powsybl.iidm.network.HvdcLine;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.Terminal;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

Expand All @@ -32,4 +34,48 @@ void testAddWithInitialSetpointFromNetwork() {
when(hvdcLine.getConvertersMode()).thenReturn(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER);
assertEquals(-50, IidmHvdcHelper.getCurrentSetpoint(network, "hvdc"));
}

@Test
void computeActivePowerSetpointOnHvdcLine() {
// Mocks
HvdcLine hvdcLine = Mockito.mock(HvdcLine.class);
HvdcConverterStation station2 = Mockito.mock(HvdcConverterStation.class);
Terminal terminal2 = Mockito.mock(Terminal.class);

when(hvdcLine.getConvertersMode()).thenReturn(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER);
when(hvdcLine.getConverterStation2()).thenReturn(station2);
when(station2.getTerminal()).thenReturn(terminal2);
when(terminal2.getP()).thenReturn(123.45);

double result = IidmHvdcHelper.computeActivePowerSetpointOnHvdcLine(hvdcLine);

assertEquals(123.45, result, 1e-6);

// Mocks
HvdcConverterStation station1 = Mockito.mock(HvdcConverterStation.class);
Terminal terminal1 = Mockito.mock(Terminal.class);

when(hvdcLine.getConvertersMode()).thenReturn(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER);
when(hvdcLine.getConverterStation1()).thenReturn(station1);
when(station1.getTerminal()).thenReturn(terminal1);
when(terminal1.getP()).thenReturn(-55.0);

result = IidmHvdcHelper.computeActivePowerSetpointOnHvdcLine(hvdcLine);

assertEquals(-55.0, result, 1e-6);
}

@Test
void setActivePowerSetpointOnHvdcLine() {
Network network = Network.read("TestCase16NodesWithHvdc.xiidm", getClass().getResourceAsStream("/TestCase16NodesWithHvdc.xiidm"));
HvdcLine hvdcLine = network.getHvdcLine("BBE2AA11 FFR3AA11 1");
// Positive setpoint
IidmHvdcHelper.setActivePowerSetpointOnHvdcLine(hvdcLine, 60.0);
assertEquals(60.0, hvdcLine.getActivePowerSetpoint(), 60.0);
assertEquals(HvdcLine.ConvertersMode.SIDE_1_RECTIFIER_SIDE_2_INVERTER, hvdcLine.getConvertersMode());
// Negative setpoint
IidmHvdcHelper.setActivePowerSetpointOnHvdcLine(hvdcLine, -60.0);
assertEquals(60, hvdcLine.getActivePowerSetpoint());
assertEquals(HvdcLine.ConvertersMode.SIDE_1_INVERTER_SIDE_2_RECTIFIER, hvdcLine.getConvertersMode());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public static void deserialize(JsonParser jsonParser, String version, Crac crac,
}
}
double initialSetpoint = IidmHvdcHelper.getCurrentSetpoint(network, networkElementId);
// initial set point of HVDC range action pointing to a HVDC line in AC emulation will be updated after running an initial load flow before launching rao.
hvdcRangeActionAdder.withInitialSetpoint(initialSetpoint);
hvdcRangeActionAdder.add();
}
Expand Down
Loading